DNS란 무엇인가?

DNS란?

Domain Name Server로, 도메인에 대응하는 IP주소를 반환해주는 하나의 서버다.

우리가 흔히 사용하는 www.naver.com에서 “naver”가 도메인에 해당한다. 이러한 도메인 주소를 호스트명과 합친 것을 FQDN이라 하는데, 이 FQDN(이하 도메인)을 DNS 서버에 질의하면, DNS서버가 해당 도메인에 대응하는 IP주소를 반환해주는 것이다. 이렇게 DNS로부터 응답 받은 IP주소를 통해 우리는 서버에 요청을 송신할 수 있다.

도메인? 호스트?

근데 도메인과 호스트의 차이점은 뭘까?

도메인과 호스트의 차이

  • 도메인 : 특정 네트워크에 접근하기 위한 주소이자 이름이다.
  • 호스트 : 네트워크 내에서 특정 장치(디바이스)에 접근하기 위해 필요한 이름이다.

우리는 도메인명을 통해 특정 네트워크 그룹에 찾아갈 수 있고, 네트워크 내에서 호스트명을 통해 종착점의 주소로 접근할 수 있는 것이다. 이를 위의 사진에 비유해 설명하자면, 우리는 우편물(서버 요청)을 보낼 때 상대방의 주소를 정확하게 적어서 보낸다. 그리고 해당 주소에 대응하는 우체국(도메인명)으로 나의 우편물이 들어가고, 우체국에서 내가 작성한 최종 도착지 주소(호스트명)로 우편물을 전달해준다. 이러한 일련의 과정들이 네트워크 내에서도 비슷하게 일어나고 있는 것이다! (참고로 comic.naver.com에서의 comic 또한 도메인명이다)


DNS는 어떻게 동작할까?

뭐 이제 도메인과 IP의 관계, 그리고 의미에 대해서는 이해한 것 같다.
그럼 우리가 브라우저 상단에 도메인을 입력한 뒤, 엔터를 눌렀을 때 도메인이 어떻게 IP로 변환되는 것일까?

우선, 아주 개괄적인 DNS로의 질의 방식 + 호스팅 서버로의 데이터 요청 과정은 이하와 같다.

굉장히…. B급 감성이지만.. 그래도 전체적인 프로세스는 위와 같다고 할 수 있다. 브라우저에서 도메인을 DNS로 보내고, DNS에서 해당 도메인에 알맞는 IP주소를 반환해준다. 그리고 그 응답 받은 IP주소로 요청을 보내는 것이다!

물론.. 이건 굉장히 축약된 프로세스이고, 그 안에서 DNS가 도메인 네임을 IP주소로 반환 해주는 과정은 좀 더 복잡하다.

DNS 서버는 하나가 아니다!

DNS 서버가 하나라면 위의 간단한 방식으로 모든 IP주소 반환이 이루어질 수 있겠지만 현실은 그렇지 않다…

당연히 다양한 DNS 서버가 존재하고, 이러한 DNS 간의 유기적 연결과 질의를 통해 우리는 최종적으로 IP주소를 알아낼 수 있는 것이다. 아래 표와 그림을 통해 각 DNS 서버의 종류와 전체적인 흐름을 익혀보도록 하자.

이름 설명
로컬 DNS 가장 먼저 질의를 하는 DNS 서버다. 주로 통신사 또는 브라우저, 퍼블릭 서버가 있다.
루트 DNS (Root) 국제인터넷주소관리기구(ICANN)에서 관리하는 국제적 서버다. 루트 DNS에서 TLD DNS 서버 IP를 반환해준다.
TLD DNS (Top-Level-Domain) 책임 DNS 서버의 주소를 저장 해두고 질의가 오면 연결해준다.
Authoritative DNS (책임 DNS) 실제 IP주소들이 저장되어 있는 서버다. 우리가 자주 사용하는 가비아가 이 책임 DNS에 속한다고 볼 수 있다.

자.. 이제 그럼 위의 그림과 표를 통해 하나 하나 짚고 넘어가보자.


  1. 우선, 브라우저는 로컬 DNS에 질의를 보낸다.
    • 캐시에 해당 도메인에 대응되는 IP주소가 저장돼있으면 바로 응답을 보내준다 (Yes)
    • 캐시에 대응되는 IP가 없으면 Root DNS로 질의를 연결해 보내준다. (NO)
  2. Root DNS가 도메인에 붙은 탑레벨 도메인(.com, .net, .kr 등)을 통해 그에 대응하는 TLD DNS 서버 IP주소를 알려준다.
  3. TLD DNS에서 해당 도메인 (naver.com)에 해당하는 책임 DNS 서버의 주소를 알려준다.
  4. 최종적으로 책임 DNS에서 도메인에 대응되는 IP주소를 받아낸다.
  5. 이렇게 응답 받은 IP를 통해 브라우저는 호스팅 서버에 요청을 정확히 보내는 것이다.

여기서 가장 핵심적인 것은 로컬 DNS에서 효율성을 위해 이전에 응답 받았던 도메인의 IP를 일정기간 저장해둔다는 것이다. 이를 통해 우리는 굳이 예전에 방문한적 있던 도메인의 IP주소에 대해서는 루트 → TLD → 책임DNS로의 여정을 반복하지 않아도 되는 효율성을 실현할 수 있다. (로컬 DNS는 책임 DNS로부터 받은 응답을 캐싱한다는 것이 골자…!!)

즉, 크게 나눴을 때 DNS 프로세스는 두 개로 나뉠 수 있다.

  1. 로컬 DNS에 해당 도메인이 캐싱되어 있으면 바로 응답 받음
  2. 로컬 DNS에 캐싱된 게 없으면 Root → TLD → 책임DNS로의 여정을 떠남

여기까지가 DNS로부터 IP주소를 반환 받는 과정의 거의 전부라고 할 수 있다..!


정리 및 요약

DNS란 호스트와 도메인의 조합인 FQDN을 브라우저로부터 전달 받아, 해당 도메인에 대응하는 IP주소를 반환해주는 서버다. 이러한 DNS에는 여러 종류가 존재한다. 우선, 로컬 DNS는 통신사 또는 브라우저 등에서 관리하는 서버로 우리의 요청이 가장 먼저 전달되는 서버다. 이 로컬 DNS는 IP주소들을 캐싱해두는데, 도메인에 대응되는 캐싱된 IP가 없다면 루트 DNS로 재질의를 한다. 루트 DNS는 .com과 같은 탑레벨 도메인을 관장하는 TLD DNS로의 연결을 담당해주고, TLD DNS는 해당 도메인에 해당하는 최종 책임 DNS로의 연결을 담당한다. 그렇게 최종적으로 책임 DNS가 질의 받은 도메인에 대응하는 IP 주소를 반환해주는 것이다. 그리고 그렇게 반환 받은 도메인과 IP 주소를 로컬 DNS는 캐싱한다. 그렇게 반환 받은 IP주소를 통해 호스팅 서버로 요청이 전달된다.


참조 자료

DNS란 뭐고, 네임서버란 뭔지 개념정리

DNS(도메인네임,호스트네임 등등)


Author

Hoonjoo

Posted on

2022-03-19

Updated on

2022-03-19

Licensed under

Comments