DNS는 무엇이고 어떻게 동작할까?
도메인 네임 & 네임 서버
--
네트워크에서는 특정 호스트를 가리키기 위해 IP 주소를 사용한다.
하지만 목적지 주소를 IP로만 사용하기에는 모든 호스트의 IP 주소를 기억해야 하며, 호스트의 IP 주소는 언제든 변경될 수 있듯이 많은 번거로움이 존재한다.
그래서 일반적으로는 특정 호스트를 IP 주소로 가리키지 않고 "도메인 네임(Domain Name)"을 많이 사용한다.
도메인 네임 (Domain Name)은
호스트의 IP 주소와 대응하는 문자열 형태의 주소다.
- www.naver.com
- www.google.com
"IP 주소"와 "도메인 네임"의 관계는
전화번호부에 "전화번호"와 "이름"의 관계와 비슷하다.
정석대로라면 특정 전화번호를 입력하여 통화를 해야 하지만
수많은 사람의 전화번호를 외우기에는 어려움이 있어 해당 이름을 검색하여 바로 통화를 할 수 있다.
여기서 "전화번호부"는 이름과 전화번호를 쌍으로 저장하여 목록으로 모아 관리하는데
IP와 도메인 네임도 쌍으로 저장하여 목록으로 관리하는 것이 "네임 서버(Name Server)"라고 부른다.
그리고 도메인 네임을 관리하는 네임 서버를 "DNS(Domain Name System) 서버"라고 부른다.
네임 서버와 DNS 서버의 차이점
네임 서버 (Name Server)
- 특정 도메인 이름에 대해 IP 주소를 제공하는 서버
즉, 특정 도메인 이름을 입력하면 해당 도메인에 대한 IP 주소를 찾아주는 역할
DNS 서버 (DNS Server)
- 도메인 이름을 IP 주소로 변환하는 모든 과정을 처리하는 서버
정리하면
네임 서버는 DNS 서버의 한 유형으로,
모든 네임 서버는 DNS 서버라고 부를 수 있지만,
모든 DNS 서버는 네임 서버라고 부를 수 없다.
비유하면
DNS 서버 = 인터넷상의 전화번호부 전체
네임 서버 = 특정 지역에 대한 전화번호부를 관리하는 담당자
반대로 IP 주소를 통해 도메인 네임을 알아내는 것도 가능
도메인은 점(.)을 기준으로 계층적으로 분류한다.
최상단에는 "루트 도메인 (Root Domain)",
그다음 단계는 "최상위 도메인 (TLD, Top-Level Domain)",
그다음부터는 2단계, 3단계 ... 도메인으로 분류된다.
여기서 "루트 도메인"부터 마지막 도메인까지 전부 표기된 도메인 네임을
"전체 주소 도메인 네임 (FQDN, Fully-Qualified Domain Name)"이라고 부른다.
일반적으로 도메인을 사용할 때 www.google.com 처럼 "루트 도메인"을 사용하지 않아서
최상위 도메인이 도메인 네임의 마지막이라고 생각하지만
실제로는 루트 도메인도 도메인 네임의 일부이기 때문에 루트 도메인이 마지막이다.
다만 루트 도메인은 생략이 가능하기 때문에 위와 같은 생각을 할 수 있던 것이다.
DNS (Domain Name System)는
인터넷 도메인 네임을 IP 주소로 변환하는 시스템으로
웹사이트에서 도메인 네임을 입력하면 컴퓨터는 DNS를 통해 IP 주소로 변환하여
웹 서버와 통신할 수 있게 해 준다.
--
계층적 네임 서버
--
도메인 네임은 계층적(루트, 최상단, 2단계, ...)인 형태를 띠는데,
이러한 도메인 네임을 효율적으로 관리하기 위해서 "네임 서버" 또한 계층적인 형태를 띤다.
그리고 "네임 서버"는 여러 개가 존재하며, 전 세계적으로 분포해 있다.
(계층적이고, 분산된 도메인 네임에 대한 관리 체계를 "DNS"라고 부른다.)
IP 주소를 모르는 상태에서 도메인 네임에 대응하는 IP 주소를 알아내는 과정을 "리졸빙(Resolving)"이라고 한다.
리졸빙 과정에서 다양한 "네임 서버"들이 사용된다.
그중에서 가장 중요한 역할을 담당하는 4가지 네임 서버들이 있다.
- 로컬 네임 서버
- 루트 네임 서버
- TLD(최상위 도메인) 네임 서버
- 책임 네임 서버
로컬 네임 서버
클라이언트와 맞닿아 있는 네임 서버로,
사용자의 컴퓨터나 네트워크에서 초기 DNS 요청을 처리하는 서버다.
즉, 클라이언트가 도메인 네임을 통해 해당 IP 주소를 알아내고자 할 때 가장 먼저 찾게 되는 네임 서버다.
클라이언트가 로컬 네임 서버를 찾기 위해 해당 로컬 네임 서버의 주소를 알아야 하는데
일반적으로 ISP에서 할당해 준다.
다만 ISP에서 할당해 주는 로컬 네임 서버 주소가 아닌 "공개 DNS 서버"를 이용할 수도 있다.
과정
- 사용자가 특정 웹사이트에 접속하기 위해 클라이언트(브라우저)에 도메인 네임을 입력
- 입력한 도메인 네임의 IP 주소를 알아내기 위해 우선 "로컬 네임 서버"로 요청(쿼리)을 보낸다.
- 로컬 네임 서버가 해당 IP 주소를 알고 있다면 바로 클라이언트에게 해당 IP 주소를 알려주고 종료
- 만약 로컬 네임 서버가 해당 IP 주소를 모른다면, 상위 네임 서버(ex 루트 네임 서버)로 전달(질의)한다.
루트 네임 서버
DNS 계층 구조의 최상위에 위치하는 네임 서버로,
TLD 네임서버의 위치 정보를 제공하는 서버다.
즉, 실제 도메인 네임의 IP 주소를 제공하지 않고, 다음 단계의 네임 서버로 경로를 안내한다.
루트 네임 서버는
인터넷 전체에 총 13개의 루트 네임 서버 세트가 분산되어 운영된다.
과정
- 로컬 네임 서버로부터 도메인 네임을 전달(질의) 받으면 TLD 네임 서버의 주소를 반환한다.
TLD 네임 서버
TLD (ex .com, .net, .kr, .jp 등)를 관리하는 네임 서버로,
요청(질의) 받은 도메인 네임에 대한 TLD의 하위 도메인 네임을 관리하는 네임 서버의 주소를 제공한다.
과정
- 로컬 네임 서버로부터 도메인 네임을 전달(질의) 받으면 해당 도메인과 관련된 책임 네임 서버의 주소를 반환한다.
책임 네임 서버
특정 도메인 영역을 관리하는 네임 서버로,
자신이 관리하는 도메인 영역의 요청(질의)에 대해서는 다른 네임 서버에 넘기지 않고 바로 응답할 수 있는 서버다.
즉, 로컬 네임 서버가 마지막으로 요청(질의)하는 네임 서버로
해당 도메인 네임과 관련된 최종 IP 주소를 제공하는 서버다.
도메인 네임을 "리졸빙"하는 과정
즉, IP 주소를 알아내는 과정에는 크게 2가지가 존재한다.
- 재귀적 질의
- 반복적 질의
재귀적 질의 (Recursive Query)
클라이언트가 "로컬 네임 서버"로 도메인 네임을 질의하면,
"로컬 네임 서버"는 "루트 네임 서버"로 질의를 넘기고,
"루트 네임 서버"는 "TLD 네임 서버"로 질의를 넘기고,
"TLD 네임 서버"는 "책임 네임 서버"로 질의를 넘기는 과정을 반복하며
최종 응답 결과를 다시 역순으로 전달하는 방식이다.
반복적 질의 (Iterative Query)
클라이언트가 "로컬 네임 서버"로 도메인 네임을 질의하면,
"로컬 네임 서버"는 "루트 네임 서버"로 질의하여 다음으로 질의할 네임 서버(TLD 네임 서버)의 주소를 응답받고,
"로컬 네임 서버"는 "TLD 네임 서버"로 질의하여 다음으로 질의할 네임 서버(책임 네임 서버)의 주소를 응답받고,
"로컬 네임 서버"는 "책임 네임 서버"로 질의하여 최종 응답 결과를 받아 클라이언트에게 전달한다.
위와 같은 과정은 8개의 단계를 거쳐야 하기 때문에
시간이 오래 걸리고 네트워크상의 메시지 수가 지나치게 늘어날 수 있다.
즉, 전 세계 모든 호스트가 도메인 네임을 리졸빙을 하면 "루트 네임 서버에 과부하가 생길 것이다.
이를 해결하기 위해 "DNS 캐시"를 활용한다.
DNS 캐시는
네임 서버들이 기존에 응답했던 결과들은 임시로 특정 시간(TTL) 동안만 저장하는 것으로,
추후 동일한 질의가 오면 바로 결과를 응답하여 더 짧은 시간 안에 원하는 IP 주소를 얻을 수 있게 된다.
--
'CS > 네트워크' 카테고리의 다른 글
[응용 계층] HTTP 헤더 (0) | 2024.11.24 |
---|---|
[응용 계층] HTTP (0) | 2024.11.24 |
[전송 계층] TCP의 오류, 흐름, 혼잡 제어 (0) | 2024.11.22 |
[전송 계층] TCP와 UDP (0) | 2024.11.21 |
[전송 계층] 전송 계층 (0) | 2024.11.20 |