Django/네트워크

DNS의 기본 개념 이해 part.1 (DNS의 기본 개념과 구성 요소)

치킨맛코드 2022. 3. 12. 14:47

보통 컴퓨터를 키고 인터넷을 접속할때 우리는 http(s)에 "8.8.8.8" 이라는 IP를 입력하는것이 아닌, www.google.com  이라는 도메인을 입력해서 접속하곤한다. 그런데 조금 곰곰히 생각해 보면 PC는 "www.google.com"이라는 자연어를 이해할 수 없는데 어떻게 원하는 주소를 찾아줄까 라는 고민이 들 수 있을 것이다. 인터넷에서는 이런 도메인 주소가 있는 서버와 통신을 하기 위해 pc에 설정된 "DNS server"와 "DNS 메세지"를 교환하여 해당 ip를 확인하고, 사용자의 요구에 따라 원하는 정보를 획득해 온다. 우리가 단순히 도메인 주소를 입력하고 엔터를 하게되면 pc는 아래의 과정을 거치게 된다는 의미이다.

DNS의 이동 흐름

1. 유저가 pc에서 도매인 주소를(www.google.com) 입력 후 엔터를 누른다.

2. pc는 local DNS server에 이 도메인과 관련된 정보를 요구한다.

3. local DNS server은 Root DNS server에 DNS Query(2의 질문)를 전달한다.

4. Root DNS server의 응답으로 comDNS과 ip(위치)를 알려준다.

5. 이 응답을 가지고 local DNS server가 com DNS에 다시 문의(2)를 한다.

6. com DNS는 문의와 관련된 도메인 서버(google.com를 직접적으로 관리하는) ip를 알려준다.

7. local DNS는 google.com DNS의 서버에 다시 문의한다.

8. google.com DNS서버에서 문의에 대한 답을 준다(8.8.8.8이라는 ip주소를 알려줌)

9. local DNS는 이 결과를 바탕으로 사용자에게 출력해 준다.

 

정말 복잡하지 않은가? 이런 통신을 위해 도메인 이름과 ip주소 정보를 관리하고 매핑해 주는 분산 데이터베이스 시스템을 DNS라고 한다.

 

이런 dns에는 3가지의 구성요소를 가지고 있다.

이름  
Domain Name Space 분산 네이밍 시스템이다. dns가 저장/ 관리하는 계층구조다.
최상위에 root dns서버가 있고, 하위에 노드가 연속적으로 이어져있는(마치 디렉토리와 유사한-트리구조) 계층구조다. 
Name Server 자연어는 pc가 이해하지 못하기 때문에 이것을 pc가 통신할때 사용하는 ip주소로 변환을 해 줘야한다. 이때 도메인 네임 스페이스의 트리구조 정보가 필요하며, 이 정보를 가진 서버를 의미한다.

또한 리졸버로부터 요청받은 이름에 대한 정보를 다시 전달하는 역할도 하고 있다. 도메인을 관리하는 주 서버인 primary,메인서버가 고장날 경우 대신해 주며, 주기적으로 primary에서 데이터를 받아 정보를 갱신하는 secondary로 나누어서 구분할 수 있다.
Resolver DNS 클라이언트의 요청을 name server로 전달하고, 여기로부터 정보(도메인 이름, ip)를 받아 클라이언트에게 제공한다.
다수의 네임서버에 요청하는것이 아닌 하나의 네임서버에 dns요청을 전달하고, 해당 서버에 정보가 없으면 다른 서버에 요구하는 방식으로 운영된다. 그렇기에 수많은 네임 서버에 접근하게 되며, 도메인의 ip 정보를 조회할 수 있어야 한다.