DNS는 무엇이고, 어떻게 동작할까?

DNS는 무엇이고, 어떻게 동작할까?

IP와 도메인을 상호 변환해주는 시스템


DNS(Domain Name System)


DNS는 Domain Name Server가 아니고 Domain Name System이다.


DNS는 사람이 쉽게 알아볼 수 있는 문자를 서버의 주소(IP)로 상호 변환해주는 시스템이다.

이 DNS가 없던 옛날에는 구글에 접속하기 위해 google.com을 입력하는것이 아닌, 142.250.196.110같은 IP를 입력해야 했었다고 한다.

참고로 DNS 통신의 well known port는 53이고, TCP/UDP 방식으로 동작한다.


image

📜 IANA - well known ports


용어


  • Local DNS
    • 기지국의 DNS 서버이다.
    • 컴퓨터가 LAN을 통해 인터넷에 연결되면, 인터넷을 사용할 수 있게 IP를 할당해주는 통신사(KT, SK, LG)들의 DNS 서버를 말한다.
    • 이사가면 인터넷 연결을 위해 어디에 전화를 걸게되는지 생각해보자


  • Root DNS
    • Local DNS의 상위 DNS 서버이며, 최상위 DNS 서버이다.
    • 전 세계의 주요 도시에 존재하며, 트리 구조로 하위에 많은 DNS 서버들을 알고 있다.
    • 📜 root.server.org 를 참고해보자.


  • 최상위 도메인(Top-Level Domain, TLD)


흐름



image

위 이미지는 AWS에서 제공하는 DNS에 대한 개요이다.

이미지를 요약하자면 다음과 같다. (접속은 google.com에 접속한다고 가정한다)


  1. 클라이언트가 브라우저의 주소창에 google.com을 입력한다
  2. 클라이언트 컴퓨터의 hosts 파일에서 google.com의 IP 주소 정보가 있는지 확인한다
    • 윈도우: C:\Windows\System32\drivers\etc\hosts
    • 리눅스: /etc/hosts
  3. hosts 파일에 IP 주소 정보가 없다면 PC의 DNS 캐시를 확인한다
  4. DNS 캐시에도 IP 주소 정보가 없다면 Local DNS에 google.com의 IP 주소에 대해 질의(Query)한다.
  5. Local DNS는 자신의 DNS 캐시에서 IP 주소 정보를 찾고, 없다면 Root DNS에 질의한다.
  6. Root DNS는 자신이 google.com의 IP 주소 정보를 갖고있지 않다면, TLD(Top-Level Domain) DNS 서버의 주소를 알려준다
    • 여기서 google.com이니 TLD는 .com이 된다. 즉, gTLD
  7. Local DNS는 다시 com DNS에 google.com의 IP 주소 정보를 질의한다
  8. com DNS에서 google.com의 IP 주소인 142.250.196.110을 응답해준다
  9. Local DNS는 클라이언트에 142.250.196.110를 응답해주고, 이 IP 주소를 자신도 캐싱한다
  10. 클라이언트는 Local DNS에게 받은 14.250.196.110을 캐싱하고, 이후 위 주소로 다시 요청을 이어나간다


URL을 뜯어보면 DNS 관점에서 다음과 같이 나눌 수 있는데, 다음과 같다. (HTTP 관점과는 약간 다름)


image


위 흐름에서도 알 수 있듯이, Local DNS에서 Root DNS로 질의하면, Root DNS에서 모든걸 알아서 찾아주는 것이 아니고, Root DNS는 Local DNS에 TLD DNS의 정보를 알려주게 된다.

그럼 Local DNS는 TLD DNS에게 다시 물어보며 DNS 트리구조를 타고 내려간다.

모든 노드를 탐색할때까지 이 과정이 반복되기에 이것을 Recursive Query라고 부른다.


image

출처 - 구글 이미지 검색


캐싱


위 과정들을 보면 최초에 DNS 캐시를 먼저 조회하고, 마지막에도 찾은 정보를 DNS 캐시에 캐싱한다.

이는 생각해보면 아주 당연한 일인데, google.com의 IP 주소를 찾기 위해 얼마나 복잡하고 많은 질의가 이루어졌는가?

브라우저에 google.com을 입력 할 때마다 위의 과정을 모두 반복하면 이는 매우 비효율적이며, DNS 서버들은 전국, 전세계단위의 요청을 받기 때문에 DNS 서버들에 과부하가 갈 수 밖에 없다.

또한 도메인과 IP는 생각보다 그렇게 자주 변경되지 않기 때문에, 캐싱했을 때의 기대 효율이 높을 수 밖에 없다.



© 2022. All rights reserved.