DNS(Domain Name System)는 사람이 읽을 수 있는 도메인 이름을 컴퓨터가 사용하는 IP 주소로 변환하는 인터넷의 전화번호부입니다.
컴퓨터는 IP 주소로 통신하지만, 사람은 숫자보다 이름을 더 쉽게 기억합니다. DNS가 없다면 웹사이트에 접속할 때마다 172.217.175.46 같은 숫자를 입력해야 합니다.
. (루트)
├── com
│ ├── google.com
│ └── github.com
├── net
├── org
└── kr
└── co.kr
DNS 계층의 최상위로, TLD 서버의 위치를 알고 있습니다. 전 세계 13개 클러스터로 운영됩니다.
.com, .net, .org, .kr 등 도메인의 최상위 확장자를 관리하는 서버입니다.
특정 도메인의 IP 주소를 최종적으로 알고 있는 서버입니다.
브라우저에서 google.com을 입력했을 때의 흐름입니다.
1. 브라우저 캐시 확인
2. 운영체제 캐시 및 hosts 파일 확인
3. 로컬 DNS 리졸버 조회 (ISP 제공)
4. 루트 DNS 서버에 .com TLD 서버 위치 요청
5. .com TLD 서버에 google.com 권한 서버 위치 요청
6. google.com 권한 서버에 IP 주소 요청
7. IP 주소 반환 및 캐싱
| 레코드 | 역할 |
|---|---|
| A | 도메인 → IPv4 주소 |
| AAAA | 도메인 → IPv6 주소 |
| CNAME | 도메인 → 다른 도메인 |
| MX | 이메일 서버 주소 |
| NS | 권한 DNS 서버 주소 |
| TXT | 도메인 소유 인증, SPF 등 텍스트 정보 |
TTL 동안은 DNS 서버에 재조회하지 않고 캐시를 사용합니다. TTL이 길면 조회 속도가 빠르지만, IP 변경 시 반영이 늦어집니다.
DNS 조회는 기본적으로 UDP 포트 53을 사용합니다. 요청과 응답이 각각 작은 패킷 하나로 처리되어 TCP 연결 수립 비용 없이 빠르게 처리됩니다. 응답 크기가 512바이트를 초과하거나 DNSSEC 사용 시에는 TCP를 사용합니다.