본문 바로가기

카테고리 없음

DNS 패킷 읽기 Part 2: Question·Answer·Authority·Additional 섹션

today keys : dns, question,answer, authority, additional, resource record, ttl, referral, glube, nxdomain, section


1. 한눈에 보기 — dig 결과 하나로 보는 네 섹션

DNS 메시지는 헤더 뒤에 네 섹션이 이어집니다. Question은 고유한 형식을 쓰고, 나머지 Answer·Authority·Additional은 모두 같은 리소스 레코드(RR) 형식을 씁니다. 세 섹션의 차이는 형식이 아니라 담는 레코드의 역할입니다.

아래는 BIND 개발사인 ISC의 권한 서버 ns1.isc.org에 isc.org의 A 레코드를 비재귀(+norec)로 물은 결과입니다. 여기서는 출력의 어느 부분이 어떤 섹션인지만 먼저 확인합니다.

$ dig @ns1.isc.org isc.org A +norec

; <<>> DiG 9.18.39-0ubuntu0.24.04.5-Ubuntu <<>> @ns1.isc.org isc.org A +norec
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58496          ← [헤더]
;; flags: qr aa; QUERY: 1, ANSWER: 4, AUTHORITY: 5, ADDITIONAL: 7  ← [헤더] COUNT 4개

;; OPT PSEUDOSECTION:                                               ← [Additional] OPT
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 30c394c65b8941dc010000006abae8fb5df2fc4b4d317390 (good)
;; QUESTION SECTION:                                                ← [Question]
;isc.org.                       IN      A

;; ANSWER SECTION:                                                  ← [Answer]
isc.org.                300     IN      A       151.101.195.42
isc.org.                300     IN      A       151.101.67.42
isc.org.                300     IN      A       151.101.3.42
isc.org.                300     IN      A       151.101.131.42

;; AUTHORITY SECTION:                                               ← [Authority]
isc.org.                7200    IN      NS      ns1.isc.org.
isc.org.                7200    IN      NS      ns3.isc.org.
isc.org.                7200    IN      NS      nsp.dnsnode.net.
isc.org.                7200    IN      NS      ns.isc.afilias-nst.info.
isc.org.                7200    IN      NS      ns2.isc.org.

;; ADDITIONAL SECTION:                                              ← [Additional]
ns1.isc.org.            7200    IN      A       149.20.2.26
ns2.isc.org.            7200    IN      A       199.6.1.52
ns3.isc.org.            7200    IN      A       51.75.79.143
ns1.isc.org.            7200    IN      AAAA    2001:500:6b:2::26
ns2.isc.org.            7200    IN      AAAA    2001:500:60:d::52
ns3.isc.org.            7200    IN      AAAA    2001:41d0:701:1100::2c92

;; Query time: 148 msec
;; SERVER: 149.20.2.26#53(ns1.isc.org) (UDP)
;; WHEN: Tue Sep 29 07:23:56 KST 2026
;; MSG SIZE  rcvd: 380
섹션 dig 출력 위치 내용
Question QUESTION SECTION 무엇을 물었는가
Answer ANSWER SECTION 질문에 대한 답
Authority AUTHORITY SECTION 이 이름에 대한 권한 정보
Additional ADDITIONAL SECTION, OPT PSEUDOSECTION 앞 섹션에 나온 이름의 주소, 확장 정보(OPT)

4개의 섹션을 하나씩 살펴봅니다.

 

2. Question 섹션

1장의 예시에서 QUESTION SECTION 아래의 한 줄이 Question 섹션입니다. 패킷 안에서는 다음 세 필드로 구성됩니다.

필드 크기 내용
QNAME 가변 질의 이름
QTYPE 16비트 요청하는 레코드 타입 (A, AAAA, NS 등)
QCLASS 16비트 거의 항상 1 (IN, Internet)

dig로 보는 Question 섹션

;; QUESTION SECTION:
;isc.org.                       IN      A
  • 줄 맨 앞의 ;는 dig가 "이 줄은 레코드가 아니다"라는 뜻으로 붙인 주석 표시입니다. Question에는 TTL도 RDATA도 없기 때문입니다.
  • 이름 끝의 .이 라벨 형식의 마지막 0, 즉 루트입니다.
  • IN이 QCLASS, A가 QTYPE입니다.
  • 응답 메시지는 이 Question을 그대로 복사해서 돌려줍니다. 그래서 응답만 캡처해도 무엇을 물었는지 알 수 있습니다.

 

3. Answer 섹션

Answer 섹션은 질문에 대한 답 레코드를 담습니다. Answer·Authority·Additional은 모두 같은 리소스 레코드(RR) 형식을 쓰므로, 이 장에서 RR 형식을 먼저 정리하고 Answer를 읽는 법을 봅니다. 여기서 익힌 형식은 4장과 5장에서도 그대로 쓰입니다.

3.1 리소스 레코드(RR) 형식

1장 예시의 ANSWER, AUTHORITY, ADDITIONAL 섹션에 있는 각 줄이 리소스 레코드입니다. 패킷 안에서는 모두 아래 형식입니다.

필드 크기 내용
NAME 가변 레코드 이름
TYPE 16비트 레코드 타입
CLASS 16비트 1 (IN)
TTL 32비트 캐시 가능 시간(초)
RDLENGTH 16비트 RDATA 길이
RDATA 가변 실제 값 (IP 주소, NS 이름, SOA 필드 등)

 

dig 출력 한 줄과 RR 필드의 대응

isc.org.                300     IN      A       151.101.195.42
└ NAME ┘                └TTL┘   └CLASS┘ └TYPE┘ └─── RDATA ───┘

dig는 NAME, TTL, CLASS, TYPE, RDATA 순서로 출력합니다. 실제 패킷 안의 순서(NAME, TYPE, CLASS, TTL, RDLENGTH, RDATA)와는 다르다는 점만 기억해 두면 됩니다. RDLENGTH는 dig 출력에 나타나지 않습니다.

같은 형식에 RDATA만 달라집니다. 1장 예시에서 Answer의 A 레코드는 RDATA가 IP 주소이고, Authority의 NS 레코드는 RDATA가 네임서버 이름입니다. RDATA에 무엇이 들어가는지는 TYPE이 정합니다.

자주 보는 타입 코드

Type 값 용도 Type 값 용도
A 1 IPv4 주소 SRV 33 서비스 위치
NS 2 네임서버 OPT 41 EDNS 가상 레코드
CNAME 5 별칭 DS 43 DNSSEC 위임 서명자
SOA 6 존 권한 정보 RRSIG 46 DNSSEC 서명
PTR 12 역방향 DNSKEY 48 DNSSEC 공개키
MX 15 메일 서버 NSEC3 50 DNSSEC 부재 증명
TXT 16 텍스트 HTTPS 65 HTTPS 서비스 바인딩
AAAA 28 IPv6 주소 AXFR 252 존 전송 (QTYPE 전용)

 

3.2 Answer 섹션 읽기

Answer에 요청한 레코드가 들어 있고, 권한 서버가 aa로 답했다면 정상 답입니다. 1장의 결과가 바로 이 경우입니다.

$ dig @ns1.isc.org isc.org A +norec

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58496
;; flags: qr aa; QUERY: 1, ANSWER: 4, AUTHORITY: 5, ADDITIONAL: 7

;; ANSWER SECTION:
isc.org.                300     IN      A       151.101.195.42
isc.org.                300     IN      A       151.101.67.42
isc.org.                300     IN      A       151.101.3.42
isc.org.                300     IN      A       151.101.131.42
  • Answer의 레코드 이름은 질문한 이름과 같습니다. 물은 이름(isc.org)에 대한 답이기 때문입니다. 질문한 이름이 별칭(CNAME)이라면 Answer에 CNAME과 그 대상의 레코드가 함께 옵니다.
  • A 레코드 4개는 하나의 묶음입니다. 이름·타입·클래스가 같은 레코드 묶음을 RRset이라고 하며, 답은 항상 RRset 단위로 옵니다. 서버가 순서를 돌려 가며 주는 경우가 많아서 RRset 안의 순서에는 의미를 두지 않습니다.
  • flags의 aa와 status NOERROR가 권한 서버의 정상 답임을 보여 줍니다. 같은 질의를 리졸버에 하면 flags가 qr rd ra로 바뀌고 aa가 사라집니다. 답은 같지만 리졸버는 권한 서버가 아니기 때문입니다.

 

4. Authority 섹션

Authority 섹션은 이 이름에 대한 권한 정보를 담습니다. 들어가는 레코드는 크게 두 종류입니다.

NS는 "이 존의 권한자가 누구인가"를, SOA는 "이 존에는 그런 데이터가 없다"는 근거를 알려 줍니다.

응답 Authority 내용 본 포스팅 관련 위치
정상 답 존의 NS (생략될 수 있음) 4.1
Referral 하위 존의 NS 4.2
NXDOMAIN SOA 4.3
NODATA SOA 4.4

네 경우 모두 isc.org 질의로 확인합니다. 모두 +norec(RD=0)로 직접 질의한 결과입니다.

본 포스팅 관련 위치 누구에게 무엇을
4.1 isc.org의 권한 서버 (ns1.isc.org) isc.org A
4.2 상위 존 .org의 서버 isc.org A
4.3 isc.org의 권한 서버 없는 이름 (zigi.isc.org) A
4.4 isc.org의 권한 서버 있는 이름, 없는 타입 (isc.org PTR)

 

4.1 정상 답의 Authority — 존의 NS

1장 결과의 Authority 섹션입니다.

;; AUTHORITY SECTION:
isc.org.                7200    IN      NS      ns1.isc.org.
isc.org.                7200    IN      NS      ns3.isc.org.
isc.org.                7200    IN      NS      nsp.dnsnode.net.
isc.org.                7200    IN      NS      ns.isc.afilias-nst.info.
isc.org.                7200    IN      NS      ns2.isc.org.
  • 답(Answer)과 함께 "이 존의 권한 서버는 이 다섯 대"라는 정보를 준 것입니다. aa 응답에 담긴 NS이므로 isc.org 존이 직접 선언한 원본입니다.
  • 레코드 이름은 존 이름(isc.org.)입니다. 여기서는 질문한 이름이 존의 꼭대기(apex)라서 Answer와 이름이 같지만, www.isc.org를 물었다면 Answer는 www.isc.org., Authority는 여전히 isc.org.가 됩니다.
  • 정상 답에서 Authority는 없어도 되는 부가 정보입니다. 서버 설정(minimal responses)에 따라 비어 있을 수 있고, 그래도 정상 답인 것은 같습니다.

 

4.2 Referral — 하위 존의 NS

같은 질문을 isc.org의 권한 서버가 아니라 상위 존 .org의 서버에 합니다.

$ dig org NS +short
d0.org.afilias-nst.org.
b0.org.afilias-nst.org.
...

$ dig @d0.org.afilias-nst.org isc.org A +norec

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58155
;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 5, ADDITIONAL: 7

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;isc.org.                       IN      A

;; AUTHORITY SECTION:
isc.org.                3600    IN      NS      nsp.dnsnode.net.
isc.org.                3600    IN      NS      ns1.isc.org.
isc.org.                3600    IN      NS      ns2.isc.org.
isc.org.                3600    IN      NS      ns3.isc.org.
isc.org.                3600    IN      NS      ns.isc.afilias-nst.info.

;; ADDITIONAL SECTION:
ns1.isc.org.            3600    IN      A       149.20.2.26
ns2.isc.org.            3600    IN      A       199.6.1.52
ns3.isc.org.            3600    IN      A       51.75.79.143
ns1.isc.org.            3600    IN      AAAA    2001:500:6b:2::26
ns2.isc.org.            3600    IN      AAAA    2001:500:60:d::52
ns3.isc.org.            3600    IN      AAAA    2001:41d0:701:1100::2c92

;; SERVER: 199.19.57.1#53(d0.org.afilias-nst.org) (UDP)
;; MSG SIZE  rcvd: 288
  • flags에 aa가 없고, status는 NOERROR인데 ANSWER가 0개입니다. .org 서버는 isc.org의 A 레코드를 모르므로 "isc.org는 이 서버들에게 물어보라"고 안내한 것입니다. 이것이 referral입니다.
  • Authority의 NS 5개가 안내의 핵심입니다. 레코드 이름이 질문한 이름을 담당하는 하위 존(isc.org)이고, 값이 그 존의 네임서버입니다.
  • 4.1과 목록은 같지만 의미가 다릅니다. 4.1의 NS는 isc.org 권한 서버가 직접 준 원본이고, 여기의 NS는 .org가 위임을 위해 보관하는 사본입니다.
  • Additional에 함께 온 NS의 주소(glue)는 5.1에서 다룹니다.

 

 

4.3 NXDOMAIN — 이름이 없다는 근거, SOA

isc.org의 권한 서버에 존재하지 않는 이름을 물어봅니다.

$ dig @ns1.isc.org zigi.isc.org A +norec

;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 35515
;; flags: qr aa; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;zigi.isc.org.                  IN      A

;; AUTHORITY SECTION:
isc.org.                3600    IN      SOA     ns-int.isc.org. hostmaster.isc.org. 2026092802 7200 3600 24796800 3600

;; MSG SIZE  rcvd: 123
  • status가 NXDOMAIN이고 flags에 aa가 있습니다. isc.org 존의 권한 서버가 "그런 이름은 없다"고 확정한 답입니다.
  • AUTHORITY의 SOA는 "없다"는 답의 근거이자, 리졸버가 이 부정 응답을 얼마나 캐시할지의 기준입니다. 캐시 시간은 SOA 레코드의 TTL과 SOA의 마지막 필드(MINIMUM) 중 작은 값입니다(RFC 2308). 여기서는 둘 다 3600이므로 1시간입니다.

4.4 NODATA — 타입이 없다는 근거, SOA

이번에는 존재하는 이름(isc.org)에 없는 타입(PTR)을 물어봅니다.

$ dig @ns1.isc.org isc.org PTR +norec

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46409
;; flags: qr aa; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;isc.org.                       IN      PTR

;; AUTHORITY SECTION:
isc.org.                3600    IN      SOA     ns-int.isc.org. hostmaster.isc.org. 2026092802 7200 3600 24796800 3600

;; MSG SIZE  rcvd: 118
  • status가 NOERROR이고 ANSWER가 0개입니다. 여기까지는 referral과 같습니다.
  • 차이는 두 가지입니다. flags에 aa가 있고, AUTHORITY에 NS가 아니라 SOA가 있습니다. "이름은 있지만 그 타입의 레코드가 없다"는 뜻입니다.
  • 4.3의 NXDOMAIN과 비교하면 status 값만 다르고 섹션 구성은 같습니다.

 

 

5. Additional 섹션

Additional 섹션은 받는 쪽이 다음 단계에서 필요로 할 부가 정보를 담습니다. 들어가는 것은 크게 두 가지입니다. 하나는 앞 섹션에 나온 이름의 주소이고, 다른 하나는 레코드가 아닌 확장 정보인 OPT입니다.

5.1 앞 섹션에 나온 이름의 주소 — 부가 주소와 glue

1장(정상 답)과 4.2(referral)의 Additional을 나란히 보면 같은 모양입니다.

# 1장 : isc.org 권한 서버의 정상 답
;; ADDITIONAL SECTION:
ns1.isc.org.            7200    IN      A       149.20.2.26
ns2.isc.org.            7200    IN      A       199.6.1.52
ns3.isc.org.            7200    IN      A       51.75.79.143
ns1.isc.org.            7200    IN      AAAA    2001:500:6b:2::26
ns2.isc.org.            7200    IN      AAAA    2001:500:60:d::52
ns3.isc.org.            7200    IN      AAAA    2001:41d0:701:1100::2c92

# 4.2 : .org 서버의 referral
;; ADDITIONAL SECTION:
ns1.isc.org.            3600    IN      A       149.20.2.26
...                                             (같은 6개)
  • 두 응답 모두 Authority에 나온 NS의 주소를 Additional에 실었습니다. 받는 쪽이 NS 이름만 받고 주소를 다시 조회하지 않아도 되게 하려는 것입니다.
  • referral에서 이 주소를 특별히 glue라고 부릅니다. 상위 존이 하위 존의 NS 주소를 대신 보관해 두었다가 위임 안내에 붙여 주는 것입니다. 리졸버는 glue 덕분에 곧바로 다음 서버에 질의할 수 있습니다.
  • 두 응답 모두 NS 5개 중 3개의 주소만 있습니다. 서버는 자기 관할(bailiwick) 안에 있는 이름의 주소만 실을 수 있기 때문입니다. ns1~ns3.isc.org는 isc.org 안(따라서 .org 안)의 이름이지만, nsp.dnsnode.net(.net)과 ns.isc.afilias-nst.info(.info)는 다른 도메인이라 주소를 줄 권한이 없습니다.
  • 주소가 오지 않은 NS에 물으려면 리졸버가 그 주소부터 따로 조회해야 합니다. NS가 모두 이런 경우라면 조회 단계가 크게 늘어납니다. 이 영향은 lame delegation 글에서 실측으로 다룹니다.
  • 헤더의 ADDITIONAL 개수에는 이 주소들 외에 OPT 레코드 하나가 더 포함됩니다. 두 응답 모두 주소 6개 + OPT 1개 = 7입니다.

 

5.2 OPT — EDNS 확장 정보

요즘 DNS 덤프를 보면 질의 패킷인데도 Additional이 1개로 찍혀 있고, Wireshark Info 열 끝에는 OPT가 붙어 있습니다. 이것은 실제 레코드가 아니라 EDNS(0)의 OPT 가상 레코드입니다.

 

왜 필요한가

원래 DNS 헤더는 12바이트 고정이라 새 기능을 넣을 자리가 없습니다. RCODE는 4비트뿐이고, UDP 응답은 512바이트로 제한되어 있었습니다. 헤더를 늘리면 기존 구현과 호환이 깨지므로, Additional 섹션에 특수한 레코드를 하나 얹어 확장 정보를 나르는 방식을 택했습니다. 이해하지 못하는 구현은 무시하면 되므로 호환성이 유지됩니다.

OPT 레코드의 필드 재해석

OPT는 RR 형식을 빌려 쓰되, 각 필드를 다른 의미로 씁니다.

RR 필드 OPT에서의 의미
NAME 항상 루트 (Wireshark에서 <Root>)
TYPE 41 (OPT)
CLASS UDP 수신 가능 크기
TTL 상위 8비트 확장 RCODE (헤더의 4비트와 합쳐 12비트)
TTL 다음 8비트 EDNS 버전 (현재 0)
TTL 나머지 16비트 플래그. 최상위 비트가 DO
RDATA 옵션 목록 (코드, 길이, 값)

 

주요 역할

  • UDP 크기 협상: 보낸 쪽이 받을 수 있는 UDP 크기를 알립니다. 이 값 덕분에 512바이트가 넘는 응답도 TCP 재질의 없이 받을 수 있습니다. 구현마다 기본값이 다릅니다. dig와 최근 BIND는 1232(2020년 DNS Flag Day 권고값, IP 단편화 회피 목적), Windows DNS는 4000입니다.
  • DO 비트 (DNSSEC OK): "DNSSEC 레코드(RRSIG, NSEC/NSEC3 등)도 함께 보내 달라"는 요청입니다. 같은 질의라도 DO 값에 따라 응답 크기가 크게 달라집니다.
  • 확장 RCODE: 16 이상의 응답 코드를 표현합니다.
  •  

자주 보는 EDNS 옵션

옵션 코드 용도
NSID 3 응답한 서버의 식별자 (애니캐스트 서버 구분)
ECS (Client Subnet) 8 클라이언트 서브넷 정보 전달 (CDN 최적화)
COOKIE 10 출발지 위조 방지용 토큰 (dig 기본 사용)
Padding 12 암호화 전송 시 길이 은닉
EDE (Extended DNS Error) 15 SERVFAIL 등의 상세 원인 전달

 

dig로 보는 OPT

dig는 OPT 레코드를 일반 섹션이 아니라 OPT PSEUDOSECTION으로 따로 보여 줍니다.

1장과 같은 질의에 +dnssec을 붙여 DO=1로 물어보면 응답이 이렇게 달라집니다.

$ dig @ns1.isc.org isc.org A +norec +dnssec

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13449
;; flags: qr aa; QUERY: 1, ANSWER: 5, AUTHORITY: 6, ADDITIONAL: 13

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 1232
; COOKIE: 68f2a8baff294fc4010000006abaf1e51bb3c40582781744 (good)

;; ANSWER SECTION:
isc.org.        300   IN  A      151.101.131.42
...                              (A 레코드 4개)
isc.org.        300   IN  RRSIG  A 13 2 300 20261007083945 20260923082238 27566 isc.org. OXvaMtH9...

;; AUTHORITY SECTION:
isc.org.        7200  IN  NS     ns2.isc.org.
...                              (NS 5개)
isc.org.        7200  IN  RRSIG  NS 13 2 7200 20261008165013 20260924163245 27566 isc.org. kROmm8Uc...

;; ADDITIONAL SECTION:
ns1.isc.org.    7200  IN  A      149.20.2.26
...                              (A·AAAA 6개)
ns1.isc.org.    7200  IN  RRSIG  A 13 3 7200 20261009020228 20260925012508 27566 isc.org. Dy6gNRf2...
...                              (RRSIG 6개)

;; MSG SIZE  rcvd: 1204
항목 DO=0 DO=1 (+dnssec)
OPT flags 없음 do
ANSWER 4 (A) 5 (A 4 + RRSIG 1)
AUTHORITY 5 (NS) 6 (NS 5 + RRSIG 1)
ADDITIONAL 7 (주소 6 + OPT) 13 (주소 6 + RRSIG 6 + OPT)
응답 크기 380바이트 1204바이트
  • flags: do : DO 비트가 켜져 있으므로 서버가 RRSIG(서명)를 함께 보냈습니다. RRSIG는 레코드마다가 아니라 RRset마다 하나입니다. 그래서 A 레코드 4개에 서명 1개, NS 5개에 서명 1개가 붙었습니다. Additional은 ns1~ns3의 A와 AAAA가 각각 별도의 RRset이라 서명이 6개입니다.
  • 응답 크기가 380에서 1204바이트로 약 3배가 되었습니다. 권장 UDP 크기 1232바이트에 거의 닿은 크기입니다. NS가 더 많거나 서명이 더 긴 알고리즘이었다면 한도를 넘어 TC=1이 되고 TCP로 다시 물어야 했을 것입니다. 같은 질의의 응답 크기가 다르다면 DO 비트부터 확인해야 하는 이유입니다.
  • udp: 1232 : 서버가 알린 UDP 수신 크기입니다.

 

 

6. 정리 — 네 섹션으로 응답 유형 구분하기

지금까지 본 네 가지 응답을 섹션 구성으로 모으면 다음과 같습니다.

응답 유형 AA RCODE Answer Authority Additional
정상 답 (권한 서버) 1 NOERROR 요청한 레코드 존의 NS (생략 가능) NS의 주소 (생략 가능)
Referral (위임 안내) 0 NOERROR 없음 하위 존의 NS glue (NS 주소)
NXDOMAIN (이름 없음) 1 NXDOMAIN 없음 SOA -
NODATA (이름은 있으나 타입 없음) 1 NOERROR 없음 SOA -
  • NOERROR인데 Answer가 0개라면 referral이거나 NODATA입니다.
    Authority에 NS가 있으면 referral, SOA가 있으면 NODATA입니다.
  • 위 표는 권한 서버에 직접 물었을 때 기준입니다. 리졸버가 같은 결과를 전달할 때는 AA=0, RA=1이 됩니다.
  • Additional에는 이 표의 내용과 별개로 EDNS를 쓰면 OPT 레코드가 하나 더 붙습니다.

 

네 가지 유형을 한 번에 구분하는 법

flags에 aa가 있는가?
 ├─ 없음 → ANSWER 0 + AUTHORITY에 NS  → Referral
 │         (리졸버의 응답이라면 rd ra가 있고, 결과 유형은 status와 섹션으로 판단)
 └─ 있음 → status와 섹션 확인
           ├─ NOERROR  + ANSWER 있음       → 정상 답
           ├─ NOERROR  + ANSWER 0 + SOA    → NODATA
           └─ NXDOMAIN + ANSWER 0 + SOA    → NXDOMAIN

 

참고 자료