DNS — 브라우저에 입력한 URL로부터 IP를 가져오는 과정
해당 글을 통해 브라우저에서 URL을 입력했을 때 어떻게 DNS를 통해 IP를 가져오는지, 그 과정을 정리하려 합니다.
브라우저에 URL을 입력하면 URL에 포함된 도메인으로 부터 IP 주소를 알아야 합니다. 브라우저가 OS에 패킷 전송을 의뢰할 때는 URL이 아니라 IP 주소를 전달해야 하기 때문인데, IP 주소를 알아내기 위해 브라우저는 가장 가까운 DNS 서버에게 IP를 조회합니다.
DNS 서버는 자신이 관리하는 도메인명<->IP 주소 대응표를 조사하여 정보가 있을 경우 IP 주소를 응답합니다.
헌데 만약 DNS가 해당 정보를 가지고 있지 않다면 어떻게 동작할까요?
인터넷에는 엄청난 수의 서버가 있으므로 모든 도메인의 IP를 한 대의 DNS 서버에 등록하는 것을 불가능합니다. 따라서 문의한 도메인이 DNS 서버에 등록되지 않은 경우도 발생합니다.
이 때는 다수의 DNS 서버가 서로 연계해서 어디에 정보가 등록 되었는지 찾는 구조로 동작하게 됩니다.
이 연계하는 부분을 추가적으로 알아 보겠습니다. 핵심은 상위 DNS 서버에 하위 DNS 서버의 IP가 등록되어 있다는 점입니다.
예를 들어 com 도메인을 관리하는 DNS 서버는 naver.com 도메인을 관리하는 DNS 서버의 주소를 알고 있고 naver.com 도메인을 관리하는 DNS 서버는 blog.naver.com 이라는 도메인을 담당하는 DNS 서버의 IP 주소를 알고 있습니다. 즉, 상위의 DNS 서버는 하위의 DNS 서버의 IP 주소를 알고 있기 때문에 , 상위 DNS 서버만 알면 하위 DNS를 타고 들어가 IP를 확인할 수 있습니다.
위 설명만 보면 com, kr을 관리하는 DNS 서버가 최상위 DNS 처럼 보이지만, 사실 com, kr 상위에 루트 DNS가 존재합니다. 이 루트 DNS 서버에 com, kr 도메인을 관리하는 DNS 서버를 등록하게 됩니다. 이렇게 루트 DNS로부터 하위 DNS를 거치며 IP를 찾게 됩니다.
그림으로 보는 DNS 연계
문화인이 되고 싶은 저는 오랫만에 news.co.kr에 접속합니다. 브라우저 내부적으로 가장 가까운 DNS에게 news.co.kr 에 해당하는 IP를 문의합니다.
가장 가까운 DNS는 IP를 모릅니다. 따라서 루트 DNS에게 문의합니다.
루트 DNS 덕분에 kr을 관리하는 DNS를 알게 된 가장 가까운 DNS 서버는 kr 도메인을 관리하는 DNS 서버에게 문의합니다.
이런 과정을 거쳐 결국 news.co.kr의 IP 주소를 알고 있는 DNS와 통신하게 되고 브라우저에 IP를 전달하게 됩니다.
한 가지 설명이 빠졌는데 가장 가까운 DNS가 IP를 모를 때 루트 DNS 에게 물어봐야 합니다. 이를 위해 인터넷에 존재하는 모든 DNS 서버에는 루트 DNS 서버가 등록되어 있습니다.