네트워크

[네트워크] 도메인 입력 시 발생하는 일에 관하여 (2편-DNS 조회)

닉네임추천좀.. 2024. 7. 29. 18:43

 

 

이전글에서 설명했듯이 hosts파일이 없고, 캐시도 없을 경우, DNS 조회 단계로 넘어가게 된다. 

DNS는 인터넷 상에서 도메인 이름(예 naver.com)을 IP 주소로 변환하는 시스템이다. 

일단 우리가 접속할려고 하는 웹사이트의 소스를 가진 서버와 내 컴퓨터가 연결이 되어야 소스를 긁어오든 말든 할 수 있다.

그런 의미에서 필자는 DNS 조회 단계가 클라이언트와 서버간의 통신을 위한 전초단계라고 이해했다. 

 

DNS 조회만 해도 꽤 여러 단계가 있는데 왜 굳이 귀찮게 또 여기저기 다른 DNS 서버들을 순회해야하나 싶을 수 있다.

그런데 그러지 않을려면 KT, SKT 같은 회사가 전세계에 존재하는 모든 도메인과 IP 주소의 매핑데이터를 가지고 있어야 한다...

더군다나 새로운 도메인이 추가되거나, 기존 도메인의 IP 주소가 변경되는 일은 정말 수시로 발생할텐데 이를 하나의 조직에서 관리하는 것은 불가능하다. 그렇기에 책임과 부하를 분산하고, 보다 효율적으로 시스템을 운용하기 위해 계층적인 시스템을 갖는데, 여기서부터 크게 루트 DNS 서버, TLD DNS 서버, 도메인 이름 서버로 나뉜다.

 

1. DNS 리졸버 시작

일단 DNS 리졸버는 도메인 이름을 IP 주소로 변환하는 요청을 처리하며, 이 과정에서 여러 DNS 서버와 통신하여 최종 IP 주소를 얻어와 클라이언트에게 전달하는 역할을 수행한다. 

여기서 DNS 리졸버는 대충 우리가 쓰는 통신사의 DNS 서버라고 이해하면 편하다.

필자는 KT 인터넷을 쓰는데, KT가 여기저기 길 물어보며 삽질해서 내가 접속하려고 하는 사이트의 IP주소를 GET해오는 것이다.

 

그리고 KT같은 ISP의 DNS 리졸버는 보통 자주 요청되는 도메인에 대한 정보를 캐싱하여 저장한다고 한다.

그렇다는 것은 이미 캐시된 도메인에 대해 질의가 들어올 경우, 추가적인 외부 DNS 서버와의 통신 없이 바로 클라이언트에게 해당 정보를 반환할 수도 있다는 것이다.

 

2. 루트 DNS 서버 질의

자, 이제 DNS 리졸버가 출발했다면, 가장 첫번째로 방문할 집은 루트 DNS 서버이다.

그럼 이제 루트 DNS 서버가 뭐하는 서버일까 싶은데 이 녀석은 TLD(최상위 도메인) DNS 서버에 대한 IP 주소를 관리하는 서버이다.

여기서 최상위 도메인이란 사이트 뒤에 붙는 ".com", ".net", ".org" 등과 같은 도메인을 의미한다. 

예를 들어, .com으로 끝나는 사이트에 접속하려고 한다면 .com이라는 TLD DNS 서버의 위치를 퉤 뱉어주고, 리졸버는 그걸 받아서 TLD 서버로 여정을 이어나가는 것이다. 

 

3. TLD 서버 질의

리졸버는 루트 서버로부터 받은 정보를 바탕으로 TLD 서버에 접근하여 우리가 접속하려는 사이트에 해당하는 도메인의 네임 서버 정보를 요청한다. 여기서 도메인 네임서버란 특정 조직이 소유한 도메인 이름과 해당 도메인 이름에 매핑된 IP 주소들을 관리하는 서버라고 할 수 있다. 예를 들어, 네이버 네임서버는 네이버가 운영중인 사이트들의 소스를 가지고 있는 서버의 IP주소들을 매핑데이터의 형태로 관리하는 서버인것이다. 

 

4. 도메인 네임 서버 질의

이제 리졸버가 목적지에 도착했다.

이 단계에서 이전 TLD 서버가 제공한 정보를 바탕으로 도메인 네임 서버에 접속하여 실제 IP 주소를 요청한다. 

네이버같은 대기업들은 자체적인 네임 서버를 갖추고 있는 경우가 많다고 하며, 반대로 소규모의 조직들은 이러한 운영을 AWS같은 클라우드 호스팅 서비스 업체에 위탁하는 경우가 많다고 한다. 

 

5. IP 주소 반환

네임 서버가 최종적으로 도메인의 IP 주소(웹 서버의 위치)를 리졸버에게 반환했다면, 리졸버는 이를 사용자의 브라우저에 전달한다. 그리고 비로소 우리는 반환된 IP 주소를 통해 접속하고자 하는 웹 페이지에 접속할 수 있게 된다. 

 

 

정리

  1. 사용자가 웹 브라우저에 "www.naver.com"을 입력한다.
  2. 브라우저가 DNS 리졸버에게 "www.naver.com"의 IP 주소 좀 갔고 오렴~ 부탁한다.
  3. DNS 리졸버는 이 요청에 응답하기 위해 루트 .com, .org 등 TLD(최상위 도메인) 네임서버의 위치 정보를 가지고 있는 '루트 네임 서버'에 www.naver.com 어디있냐고 물어본다. 
  4. 루트 네임 서버는 .com으로 끝나는 사이트이니 .com(TLD) 네임서버의 위치를 알려준다. 
  5. 해당되는 TLD 네임서버는 naver.com 도메인을 관리하는 네임서버, 즉 네이버의 네임서버 위치를 DNS 리졸버에 알려준다.
  6. 이전 정보를 바탕으로 DNS 리졸버는 네이버의 네임서버에 들어와 www.naver.com의 IP주소를 요청한다.
  7. 네이버의 네임서버는 www.naver.com 도메인에 해당하는 소스코드를 가지고 있는 서버의 IP 주소를 리졸버에게 알려준다. 
  8. 리졸버는 신나서 이를 브라우저에게 알린다.
  9. 브라우저가 이 정보를 바탕으로 www.naver.com 웹 서버에 접속하고, 웹 페이지를 로드한다.