실제 네트워크 상의 논리적 주소를 식별하기 위해서는 IP 를 사용해야 하지만, IP 를 직접 다루는 것은 실수할 여지가 많기 때문에 도메인 주소와 IP 주소를 매핑하고, 도메인 주소를 통해 목적지를 식별할 수 있도록 함으로서 사용편의성이 증가하게 됩니다.
또한, 해당 서버의 IP 가 변경되었을 경우 클라이언트에서는 이를 식별해야 하는데, 이 과정 또한 추가적인 비용이 들기 때문에 도메인을 사용하여 서버측에서는 IP 를 변경하여도 클라이언트에서는 도메인 주소를 그대로 사용할 수 있습니다.
DNS 서버
도메인 주소를 살펴보면 www.naver.com / www.google.com 등의 . 을 기준으로 연결된 형태를 띄고 있습니다. 이를 체계적으로 관리하기 위해 DNS 서버는 . 을 기준으로 계층별로 분리되어 있습니다.
기본적으로 상위 계층의 DNS 서버는 하위 계층의 DNS 서버의 IP 주소를 저장하고 있어, 특정 도메인 주소의 IP 를 찾기 위해 상위 계층 -> 하위 계층 를 반복해서 탐색하게 됩니다.
출처 - https://better-together.tistory.com/128
루트 DNS 서버
최상위 계층의 DNS 서버입니다. 루트 DNS 서버의 IP 주소는 모든 계층의 DNS 서버에 저장되어 있기 때문에, 특정 계층의 DNS 서버가 자신이 알지 못하는 도메인 주소를 요청받은 경우, 루트 DNS 서버로 요청을 보내게 됩니다.
로컬 DNS 서버
클라이언트와 계층화된 DNS 서버들간 중계 역할을 하며, 실질적으로 로컬 DNS 에서 재귀적으로 DNS 서버들과의 요청-응답을 통해 실제 IP 주소를 얻은 후, 클라이언트로 반환하게 됩니다.
내부에 최근에 요청했던 도메인 주소를 캐싱하고 있어, 이력이 있는 경우 바로 클라이언트로 반환하게 됩니다.
동작 과정
1. 클라이언트
PC 내부에 www.google.com 도메인 주소가 캐싱되어 있다면 바로 IP 주소를 사용하고, 없다면 로컬 DNS 서버로 요청합니다.
2. 로컬 DNS 서버
로컬 DNS 서버 내부에 www.google.com 도메인 주소가 캐싱되어 있다면 바로 IP 주소를 사용하고, 없다면 루트 DNS 서버로 요청합니다.
3. 루트 DNS 서버
요청을 받은 루트 DNS 서버는 www.google.com 도메인에 대한 IP 주소가 존재하는지 확인합니다. 하지만 루트 DNS 서버에 존재하지 않으므로, 대신 .com 을 식별하고, 하위 DNS 서버 중 .com DNS 서버의 IP 주소를 넘겨줍니다.
4. 로컬 DNS 서버
응답을 받은 로컬 DNS 서버는 응답을 받은 TLD 도메인 서버인 .com 서버에 요청을 보냅니다.
5. .com DNS 서버
요청을 받은 .com DNS 서버는 www.google.com 도메인에 대한 IP 주소가 존재하는지 확인합니다. 하지만 .com DNS 서버에 존재하지 않으므로, 대신 google 을 식별하고, 하위 DNS 서버 중 google.com DNS 서버의 IP 주소를 넘겨줍니다.
6. 로컬 DNS 서버
응답을 받은 로컬 DNS 서버는 응답을 받은 google.com 서버에 요청을 보냅니다.
7. google.com DNS 서버
요청을 받은 google.com DNS 서버는 www.google.com 도메인에 대한 IP 주소가 존재하는지 확인합니다. 하지만 google.com DNS 서버에 존재하지 않으므로, 대신 www 을 식별하고, 하위 DNS 서버 중 www.google.com DNS 서버의 IP 주소를 넘겨줍니다.
8. 로컬 DNS 서버
응답을 받은 로컬 DNS 서버는 응답을 받은 www.google.com 서버에 요청을 보냅니다.
9. www.google.com DNS 서버
요청을 받은 www.google.com DNS 서버는 www.google.com 도메인에 대한 IP 주소가 존재하는지 확인합니다. 해당 DNS 서버에 존재하므로 IP 주소를 반환합니다.
10. 로컬 DNS 서버
응답을 받은 로컬 DNS 서버는 최종 IP 주소를 획득했으므로 클라이언트에 IP 주소를 넘겨줍니다.