DNS 이름 해석과 서비스 운영
재귀·반복 질의, 레코드, 캐시와 존 전송을 연결합니다.
1. DNS의 이름 공간과 역할
DNS는 이름에 대응하는 주소·메일 서버·권한 서버 등의 정보를 찾는 분산·계층형 시스템이다. www.example.com.은 오른쪽부터 루트, com, example.com, www.example.com으로 (새 창) 읽는다. 루트까지 포함한 완전한 이름이 FQDN이다.
도메인은 논리적 하위 트리, 존(Zone)은 한 권한 관리 단위다. dev.example.com을 따로 위임하면 example.com 도메인에는 포함되지만 example.com 존이 그 하위의 실제 데이터를 모두 관리하지는 않는다.
| 역할 | 기능 |
|---|---|
| Stub Resolver | 단말에서 설정된 해석기에 질의하는 DNS 클라이언트 |
| Recursive Resolver | 사용자 대신 최종 답을 찾고 캐시하는 재귀 해석기 |
| Authoritative Server | 담당 존의 원본 데이터에 대해 권한 있는 응답을 제공 |
2. 재귀 요청과 반복 해석
캐시에 답이 없는 경우의 대표 흐름이다.
- 단말이 재귀 해석기에 최종 결과를 요청한다.
- 재귀 해석기가 루트 서버에 질의하여 TLD 서버 정보를 얻는다.
- TLD 서버에서 해당 도메인의 권한 서버 정보를 얻는다.
- 권한 서버에서 최종 레코드를 받아 단말에 응답하고 캐시한다.
재귀는 요청을 받은 서버가 최종 결과를 대신 찾는 방식이다. 반복은 질의한 쪽이 다음 서버 안내를 따라 다시 질의하는 방식이다. 재귀 해석기가 내부적으로 반복 질의를 사용할 수 있으므로 서로 배타적인 전체 시스템 분류가 아니다.
루트가 모든 웹 호스트의 IP를 보관하는 것은 아니다. 또한 루트 서버의 A부터 M까지 13개 식별자와 실제 물리 서버 수를 혼동하지 않는다.
3. 주요 자원 레코드
NAME TTL CLASS TYPE RDATA
www.example.com. 300 IN A 192.0.2.10
TTL은 캐시 유효시간의 상한을 초 단위로 나타낸다. TYPE에 따라 실제 데이터인 RDATA의 형식이 달라진다.
| 레코드 | 역할 |
|---|---|
| A / AAAA | 이름에 대응하는 IPv4 / IPv6 주소 |
| NS | 존의 권한 네임서버 이름 |
| CNAME | 다른 정식 이름을 가리키는 별칭 |
| MX | 메일 수신 서버 이름과 우선순위, 작은 값 우선 |
| PTR | 주소에서 이름을 찾는 역방향 조회 |
| SOA | 존 관리 정보, Serial·Refresh·Retry·Expire 등 |
| TXT | 텍스트 정보, SPF·DMARC 등의 정책에도 사용 |
| SRV | 특정 서비스의 대상 호스트·포트 등 |
CNAME·NS·MX의 대상은 IP 주소 그 자체와 구분한다. IPv4로 질의를 전송해도 AAAA를 조회할 수 있다. 질의 전송의 IP 버전과 조회하는 레코드 종류는 별개다.
IPv4 역방향 조회는 주소의 옥텟을 뒤집어 in-addr.arpa 아래에서 PTR을 찾는다. 예를 들어 192.0.2.10은 10.2.0.192.in-addr.arpa.를 조회한다. IPv6는 ip6.arpa를 사용한다. PTR이 있다는 사실만으로 호스트의 신원이 인증되지는 않는다.
4. 캐시와 응답 상태
TTL이 남은 응답은 재사용할 수 있으므로 매번 루트부터 조회하지 않는다. 권한 서버가 주소를 바꿔도 다른 해석기에 예전 값이 남을 수 있어 사용자가 잠시 다른 결과를 볼 수 있다.
존재하지 않는 결과도 네거티브 캐시에 보관할 수 있다.
| 결과 | 의미 |
|---|---|
| NXDOMAIN | 이름 자체가 존재하지 않음 |
| NODATA | 이름은 존재하지만 요청한 종류의 레코드가 없음 |
| SERVFAIL | 해석·검증 등을 완료하지 못함 |
| Timeout | 응답을 받지 못함, 경로·서버 상태 확인 필요 |
NODATA는 독립적인 DNS 응답 코드가 아니라 데이터 부재를 나타내는 상황이다. NOERROR인데 요청한 레코드가 없을 수도 있다. SERVFAIL을 NXDOMAIN과 같은 뜻으로 외우지 않는다.
5. 전송 방식과 존 동기화
일반 DNS는 UDP와 TCP 53번을 모두 사용한다. UDP가 흔하지만 큰 응답이나 운영 조건 등에 따라 TCP를 사용할 수 있다. TCP를 존 전송 전용으로 단정하지 않는다.
| 구성·기능 | 의미 |
|---|---|
| Primary | 존 데이터 원본을 관리 |
| Secondary | 존 데이터를 전송받아 권한 응답을 제공 |
| AXFR | TCP를 사용하는 전체 존 전송 |
| IXFR | 변경분 중심의 존 전송 |
| SOA Serial | 존 변경·동기화 판단에 사용하는 버전 값 |
Secondary는 단순 캐시 서버와 다르다. 존 전송은 정상적인 동기화 기능이지만 아무 외부 사용자에게나 전체 정보를 제공하지 않도록 제한한다. 관련 방어는 DNS 공격과 DNSSEC·접근 통제에서 다룬다.
6. 기본 조회와 장애 판단
dig example.com A
dig example.com MX
dig example.com SOA
nslookup example.com
위 코드는 기본 조회 구문 예다. 이름으로만 접속이 실패하면 먼저 DNS 응답을 확인한다. 오래된 주소면 캐시·TTL, Secondary만 다른 답이면 존 동기화, SERVFAIL이면 상위 응답·DNSSEC 검증 등을 확인한다. 하나의 상태 코드만으로 원인을 확정하지 않는다.
개념 확인 문제
문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.
01재귀 해석기는 항상 다른 서버에 재귀 질의만 보내는가?
아니다. 단말의 재귀 요청을 받아 내부적으로 루트·TLD·권한 서버에 반복 질의하여 최종 답을 찾을 수 있다. 캐시가 있으면 재사용한다.
02NXDOMAIN과 NODATA는 어떻게 다른가?
NXDOMAIN은 이름 자체의 부재다. NODATA는 이름은 있지만 요청한 종류의 데이터가 없는 상황으로, 별도의 DNS 응답 코드 이름이 아니다.