DNS
개념
- DNS(Domain Name System)은 도메인 이름에 연결된, IP 주소를 비롯한 여러 종류의 정보를 분산된 데이터 베이스 형태로 저장하고, 질의(Query)를 통해 이를 조회하는 시스템
- 대표적인 기능은 Domain Name ↔ IP (실무에서 마주치는 대부분의 기능이 이것이다)
- 하지만 DNS가 저장할 수 있는 정보는 IP주소에 한정되지 않음. (도메인 이름에 연결된 메일 서버 주소, 별칭 등 여러 종류의 정보를 저장할 수 있으며 종류는 Type으로 구분) → "이름을 IP로 바꾸는 변환기"보다 "이름에 연결된 정보를 조회하는 시스템"이 정확한 이해
DNS Record Type
도메인 이름에 연결된 정보(Resource Record)는 Type 별로 나뉘어 저장되며, 질의(Query) 시에 Type을 함께 지정해 원하는 Resource Record로 조회한다
| 타입 | 의미 |
|---|
| A | 도메인 → IPv4 주소 |
| AAAA | 도메인 → IPv6 주소 |
| NS | 해당 zone을 담당하는 Name Server |
| MX | 메일 서버 정보 |
| TXT | 텍스트 형태의 정보 |
필요한 이유
- IP주소를 사람이 기억하기 어려움
- 사람이 쓰는 도메인 이름(www.naver.com)과 네트워크가 쓰는 주소(IP)를 분리하고 이들을 이어주는 체계가 필요 → DNS
포트와 전송 프로토콜: UDP 53, 그리고 TCP를 쓰는 경우
- 기본적으로 UDP 53을 사용하나, UDP로 처리되기 어려운 큰 메세지는 TCP 53을 사용
-
Zone Transfer(존 전송)시에도, 네임서버 간 존 데이터 전체를 복제할 때. 크기가 크고 신뢰성이
필요해 항상 TCP 53을 사용함
(53번 포트는 DNS 서버가 DNS 요청을 받기 위해 사용하는 서버 측 목적지 포트)
- DNS 가 UDP를 사용하는 이유
- DNS의 기본 질의는 굉장히 단순함
- TCP는 연결 설정 과정이 필요하나, UDP는 바로 패킷을 보낼 수 있음
- 따라서 DNS Query에 대해서 UDP가 권장되며 이는 더 낮은 오버헤드와 나은 성능이 나오기 때문
DNS 특징
- 계층적 구조: Domain Name 은 트리에서의 경로다
www.naver.com.은 root(.) → com → naver → www로 내려가는 경로를 뒤에서부터 쓴 것이고,
점으로 나뉜 각 부분(label)이 한 단계다
- 이 구조 덕분에 이름 공간을 구역별로 나눠 분산 관리할 수 있다 (개념 섹션의 "분산 DB"가 이것)
- 분산 관리: 전 세계 도메인 정보를 한 곳에 두지 않고, 트리를 구역 단위로 잘라
각 네임서버가 자기 구역만 책임진다 (이 구역 단위를 zone이라 부른다)
- 단일 서버의 과부하를 피하고 각 도메인의 관리 권한을 소유자에게 위임할 수 있다
- 캐싱: 한 번 조회한 결과를 정해진 시간(TTL) 동안 저장해 두고 재사용한다
- 조회가 빨라지고 상위 서버 부하가 줄어든다. 대신 캐시에 잘못된 값이 들어가면
그 시간 동안 계속 잘못된 곳으로 안내한다 (→ 캐시 포이즈닝, 포트·전송 섹션의 보안 관점과 연결)