[네트워크/Network] 인터넷은 어떻게 URL 주소의 서버를 찾아갈까? - DNS의 동작 원리
kindof
·2021. 9. 10. 12:18
💡 0. 문제
"내가 나인지 증명할 수 있는 방법은 무엇일까요?
가장 쉽게 떠올릴 수 있는 방법은 자신의 주민등록번호를 가지고 이야기하는 것입니다.
하지만 우리는 일상생활에서 자신을 표현할 때 "안녕하세요 저는 960918-1******" 입니다." 라고 표현하지는 않습니다. 복잡하기 때문이죠. 대신에 우리는 "안녕하세요, 저는 조성현입니다"라고 자신의 이름을 가지고 소개를 합니다.
인터넷도 마찬가지입니다. www.naver.com, www.google.com처럼 호스트 네임(Host name)을 통해 자신을 표현합니다. 하지만 우리 사회와는 다르게 문제가 하나 생깁니다. 그것은 바로,
"네트워크 통신에서는 IP Address를 통해 인터넷의 위치에 대한 정보를 얻는데, 호스트 네임에는 IP Address 정보가 없다."
는 것입니다. 바로 이 때 필요한 내용이 DNS(Domain Name System)이고, 오늘은 DNS의 동작 원리에 대해 공부해보려고 합니다.
🤔 1. DNS는 어떻게 동작하는가?
DNS는 호스트 네임을 IP 주소로 변환해주는 역할을 합니다.
우선 기본적으로 모든 단말(PC)은 DNS 서버의 IP 주소가 설정되어 있어야 합니다(내 PC도 어디선가는 식별이 되어야겠죠).
그리고 PC는 DHCP 프로토콜로 IP 주소를 할당받으면서 DNS 서버 IP 주소를 DHCP Option을 통해 함께 받습니다. 이를 Local DNS라고 합니다.
자. 그러면 이제 구체적으로 우리가 인터넷 검색창에 어떤 URL을 입력했을 때 어떻게 해당 서버를 찾아가는지 살펴보겠습니다.
1) 예를 들어, PC 브라우저에서 www.naver.com을 입력했다고 해봅시다. 그러면 PC는 방금 말씀드린 Local DNS에 "www.naver.com"이라는 호스트 네임에 대한 IP주소를 알고 있어?"라고 물어봅니다.
2) 이 때 Local DNS에는 "www.naver.com에 대한 IP 주소"가 있을 수도 없을 수도 있습니다. DNS는 캐싱 기능을 제공하기 때문인데요. DNS 서버는 자신이 요청받았던 호스트 네임의 IP주소를 일정 기간동안 저장해놓고 있습니다. 계속해서 요청받는 호스트네임은 기억해두면 좋겠죠? 따라서, 만약 캐시에 호스트네임에 대한 IP 정보가 있다면 Local DNS가 바로 PC에 IP 주소를 주고 끝나게 됩니다.
하지만 Local DNS에 "www.naver.com"에 대한 IP 주소가 없을 수도 있습니다.
3) Local DNS는 이제 "www.naver.com에 대한 IP 주소"를 찾아내기 위해 다른 DNS 서버들과 통신(DNS 메시지)을 시작합니다. 먼저 Root DNS 서버에게 "너 혹시 www.naver.com에 대한 IP 주소 아니?"라고 물어봅니다. 이를 위해 각 Local DNS 서버에는 Root DNS 서버의 정보 (IP 주소)가 미리 설정되어 있어야 합니다.
* 여기서 "Root DNS"라 함은 아주 거대한 DNS 서버입니다. 이 Root DNS 서버는 전세계에 13대가 구축되어 있는데요. 미국에 10대, 일본/네덜란드/노르웨이에 각 1대씩 있고 우리나라의 경우 Root DNS 서버에 대한 미러 서버를 3대 운용하고 있다고 합니다.
4) Root DNS 서버는 "www.naver.com의 IP 주소"를 모릅니다. 그래서 Local DNS 서버에게 "난 www.naver.com에 대한 IP 주소 몰라. 나 말고 내가 알려주는 다른 DNS 서버에게 물어봐~"라고 응답을 합니다. 여기서부터 DNS 서버가 아래 그림과 같이 트리 구조로 존재한다고 이해하면 편할 것 같습니다.
5) 이제 Local DNS 서버는 "com 도메인을 관리하는 DNS 서버"에게 다시 "너 혹시 www.naver.com에 대한 IP 주소 아니?"라고 물어봅니다.
6) 역시 "com 도메인을 관리하는 DNS 서버"에도 해당 정보가 없습니다. 그래서 이 DNS 서버는 Local DNS 서버에게 "난 www.naver.com에 대한 IP 주소 몰라. 나 말고 내가 알려주는 다른 DNS 서버에게 물어봐~"라고 응답을 합니다. 이 다른 DNS 서버는 "naver.com 도메인"을 관리하는 DNS 서버입니다.
7) 이제 Local DNS 서버는 "naver.com 도메인을 관리하는 DNS 서버"에게 다시 "너 혹시 www.naver.com에 대한 IP 주소 있니?"라고 물어봅니다.
8) "naver.com 도메인을 관리하는 DNS 서버"에는 "www.naver.com 호스트네임에 대한 IP 주소"가 있습니다. 그래서 Local DNS 서버에게 "응! www.naver.com에 대한 IP 주소는 222.122.195.6이야~"라고 응답을 해 줍니다.
9) 이를 수신한 Local DNS는 www.naver.com에 대한 IP 주소를 캐싱을 하고(이후 다른 넘이 물어보면 바로 응답을 줄 수 있도록) 그 IP 주소 정보를 단말(PC)에 전달해 줍니다.
📚 2. 정리
위에서 설명한 9단계를 읽다보면 재귀적이라는 느낌을 받습니다. 마치 이진트리에서 자식 노드가 어디에 위치해있는지를 찾는 과정과 비슷하다고 느꼈습니다.
그리고 실제로 지금 소개한 내용을 재귀적 질의(Recursive query)라고 합니다. 한편, 재귀적 질의에 더해 반복적 질의(iterative query) 개념도 존재합니다.
우리가 .com .kr .edu 등의 DNS 서버로 질의를 요구하는 것은 자신을 대신해서 필요한 매핑을 얻도록 하는 것이기 때문에 재귀적 질의의 성격을 띠고, 서로 다른 세 개의 질의는 모든 응답이 .com .kr .edu에 직접 보내지므로 반복적 질의라고 이해하면 됩니다.
지금까지 URL을 입력하면(Hostname과 조금은 다른 개념이지만) 어떻게 해당 서버의 IP 주소를 찾아오는지 DNS의 동작원리를 통해 살펴봤습니다. 재귀적인 그림을 머릿속에 들고 다니면 기억하기 쉬울 것 같습니다.
참고 자료: https://www.netmanias.com/ko/post/blog/5353/dns/dns-basic-operation
'CS > Network' 카테고리의 다른 글
[네트워크/Network] 웹 캐시(Web Cache; 프록시 서버)를 통한 응답 속도 향상 원리 이해하기 (0) | 2021.09.29 |
---|---|
[네트워크/Network] TCP는 어떻게 신뢰적인 데이터 전달을 할까? (0) | 2021.09.13 |
[네트워크/Network] 네트워크의 기본: OSI 계층 구조와 캡슐화 (1) | 2021.09.08 |
[네트워크/Network] TCP 연결 관리와 2, 3, 4 Way Handshaking(핸드쉐이킹)에 대해 (0) | 2021.09.08 |
[네트워크/Network] http와 https는 뭐가 다른거야?(feat. SSL, TLS) (0) | 2021.09.06 |