DNS, 네임서버
- DNS는 Domain Name System의 약자로 도메인 이름과 IP 주소를 변환하는 역할을 하는 시스템이다.
- DNS가 필요한 이유는 무엇일까? 사용자가 복잡한 IP 주소를 기억하는 것은 어렵기 때문이다. 따라서 사용자가 도메인 이름을 입력하면, DNS를 통해 그에 해당하는 IP 주소를 알아오는 것이다.
- 네임서버는 도메인 이름과 그에 상응하는 IP 주소 간의 매핑 정보를 저장하고 관리하는 서버이다.
계층 구조
그런데 만약 DNS를 운영하는 네임서버가 1개라면? 모든 트래픽이 하나의 서버로 몰려 IP 주소 반환 과정이 느릴 것이고, 이 서버가 다운되면 전세계 사람들이 이용하지 못하게 될 것이다. 따라서 DNS를 운영하는 네임서버는 여러 개로 구성되고, 이 서버들은 계층적인 구조로 되어 있다.
- 루트 서버: 계층 최상위에 위치하며, 모든 DNS 쿼리의 출발점이다. 사용자가 입력한 도메인을 관리하는 네임 서버의 IP 주소를 알려준다. (전 세계에 13개의 루트 서버가 있다.)
- 최상위 수준(TLD) 서버: .com, .net, .edu, .org와 같은 TLD를 가진 주소를 해석한다.
- 책임(Authoritative) 서버: 실제로 도메인 이름의 IP 주소를 매핑해서 가지고 있는 서버로, DNS 쿼리의 최종 단계에서 실제로 답을 주는 서버이다.
DNS 서버가 관리하는 DNS 레코드
각 레코드는 name, value, type, TTL 4개의 필드로 구성된다. 그리고 이때 type은 A, NS, CNAME, MX 등이 있다.
- NS(Name Server): 해당 도메인 이름을 관리하는 네임서버의 도메인 이름을 알려준다.
- name: 도메인 이름(ex, .edu)
- value: 해당 도메인을 관리하는 네임서버의 도메인 이름 (ex, dns.edu)
- A
- name: 호스트 이름 (ex, dns.edu)
- value: IP 주소 (ex, 2.2.2.2)
- CNAME: Canonical Name의 약자로 도메인 이름을 또 다른 도메인 이름으로 매핑 시키는 형태의 DNS 레코드 타입이다.
로컬 DNS 서버(Recursive DNS 서버)
- 로컬 DNS 서버는 주로 조직, 회사, ISP 네트워크에서 DNS 질의를 처리하기 위해 설정된 DNS 서버이다.
- 도메인 이름의 IP 주소를 찾기 위해 여러 DNS 서버에게 질의를 수행하고, 최종적으로 해당 IP 주소를 반환한다.
- 클라이언트는 DNS 쿼리를 직접 루트 서버에게 보내는게 아니라, 로컬 DNS 서버에게 보낸다. 즉, 로컬 DNS 서버는 일종의 프록시 역할을 한다.
- 로컬 DNS 서버는 질의 결과를 캐싱해둔다(이때 유효기간인 TTL을 설정해둠). 따라서 먼저 캐싱된 값이 있는지 확인하고, 없으면 루트 서버를 시작으로 질의한다.
- 로컬 DNS 서버가 루트 서버를 시작으로 질의할 때는 재귀적 질의가 이뤄진다. 즉, 루트 서버가 TLD 서버의 IP 주소를 반환하면, 로컬 DNS 서버는 TLD 서버에게 질의하고, TLD 서버가 책임 서버의 IP 주소를 반환하면, 로컬 DNS 서버는 책임 서버에게 질의한다.
DNS 질의 과정
사용자가 www.naver.com을 입력했다고 가정하자.
- 먼저 로컬 DNS 서버에게 질의한다.
- 로컬 DNS 서버는 캐싱된 값이 있는지 확인하고, 캐싱된 값이 있으면 바로 반환한다.
- 캐싱된 값이 없으면, 루트 서버에게 www.naver.com의 IP 주소를 질의한다. 루트 서버가 갖는 레코드는 다음과 같다. 루트 서버는 .com을 다루는 TLD 서버의 IP 주소(2.2.2.2)를 반환한다.
name | value | type | TTL |
.com | dns.com | NS | ... |
dns.com | 2.2.2.2 |
- 로컬 DNS 서버는 2.2.2.2에 접속하여 www.naver.com의 IP 주소를 질의한다. TLD 서버가 갖는 레코드는 다음과 같다. TLD 서버는 naver.com을 다루는 책임 서버의 IP 주소(5.5.5.5)를 반환한다.
name | value | type | TTL |
.naver.com | dns.naver.com | NS | |
dns.naver.com | 5.5.5.5 | A |
- 로컬 DNS 서버는 5.5.5.5에 접속하여 www.naver.com의 IP 주소를 질의한다. 책임 서버가 갖는 레코드는 다음과 같다. 책임 서버는 www.naver.com의 IP 주소(5.5.5.6)를 반환한다.
name | value | type | TTL |
www.naver.com | 5.5.5.6 | A | |
aaa.naver.com | 5.5.5.7 | A | |
bbb.naver.com | 5.5.5.8 | A |
UDP
DNS도 HTTP와 같이 어플리케이션 계층의 프로토콜이다. 그러나 TCP를 사용하는 HTTP와 달리 DNS는 UDP를 사용한다.
그렇다면 UDP를 사용하는 이유는 무엇일까?
- UDP는 빠르지만 데이터 유실 가능성이 있다.
- DNS 통신에서는 데이터 유실 확률이 적다. 도메인 이름과 IP 주소를 갖는 데이터는 그 크기가 작기 때문에 유실 확률이 적고, 유실되더라도 그 데미지가 적다. (반면, HTTP 통신에서의 데이터는 그 크기가 크다.)
- DNS는 결국 HTTP 통신을 위한 준비 과정이다. 따라서 굳이 매번 연결을 맺으며 통신하는 비용을 들일 필요가 없고, 빠른 통신이 좋다.
Reference
- KOCW, 한양대학교, 이석복, 컴퓨터네트워크
- https://velog.io/@zinukk/9kpyzbdt
- https://hwan-shell.tistory.com/320
'CS > Network' 카테고리의 다른 글
전송 계층: UDP, TCP (1) | 2024.03.26 |
---|---|
소켓(Socket) (0) | 2024.03.26 |
애플리케이션 계층: HTTP (0) | 2024.03.26 |
PDU, SDU (0) | 2023.12.09 |
네트워크의 형태(PAN, LAN, MAN, WAN), ISP (0) | 2023.11.27 |