dig의 DNS 쿼리 이해: dig가 Z 필드에 0이 아닌 값을 설정합니까?

dig의 DNS 쿼리 이해: dig가 Z 필드에 0이 아닌 값을 설정합니까?

전송되는 DNS 쿼리를 다시 확인했을 때 digRFC 상태에 이상한 점이 있음을 발견했습니다. DNS 프로토콜의 다양한 변형에 대해서는 모르지만 RFC 1035에서

Z: 향후 사용을 위해 예약되어 있습니다. 모든 쿼리와 응답에서 0이어야 합니다.

이는 디버그 모드의 Eclipse IDE에서 내보낸 수신된 DNS 쿼리의 메모리 내 스냅샷입니다.

00000000   F5 F4 01 20  00 01 00 00  00 00 00 01  03 77 77 77  06 67 6F 6F  67 6C 65 03  63 6F 6D 00  00 01 00 01  00 00 29 10  00 00 00 00  ... .........www.google.com.......).....
00000028   00 00 0C 00  0A 00 08 1F  0A 12 91 67  67 B0 B9                                                                                   ...........gg..

해당 비트를 DNS 필드에 매핑(RFC 1035에서)

F5F4-> DNS 트랜잭션 ID.

01-> QR, 연산코드, AA, TC, RD

20-> 00100000 => RA-> 0, Z-> 010

Z예 또는 아니오 0입니다! digDNS 변형이 존재하는 경우 다른 DNS 변형이 사용됩니까? 아니면 문제로 간주되어야 합니까 dig?

답변1

DNS는 다양한 변형으로 존재하지 않지만 이 주제에 대한 RFC 1035는 RFC2535 "DNS 보안 확장"에 의해 개정되었습니다.

섹션 6.1에서는 메시지 형식을 보여줍니다.


                                           1  1  1  1  1  1
             0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
            +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
            |                      ID                       |
            +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
            |QR|   Opcode  |AA|TC|RD|RA| Z|AD|CD|   RCODE   |
            +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
            |                    QDCOUNT                    |
            +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
            |                    ANCOUNT                    |
            +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
            |                    NSCOUNT                    |
            +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
            |                    ARCOUNT                    |
            +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

보시다시피 기존 3자리 Z 필드가 이제 Z, AD, CD로 구분됩니다.

따라서 0x20=는 0b00100000다음과 같이 분할됩니다.

  • RA = 0: 이 메시지에 응답하는 서버는 재귀를 수행할 수 없습니다.
  • Z = 0: 예상대로 0이어야 합니다.
  • AD = 1: "응답의 답변 및 권한 부분에 포함된 모든 데이터는 해당 서버의 정책에 따라 서버에서 인증되었습니다."
  • CD = 0:check가 비활성화되지 않았습니다(응답이 아닌 쿼리에서 "쿼리를 보내는 파서가 보류 중인(인증되지 않은) 데이터를 허용할 수 있습니다."로 정의됨을 의미합니다.)
  • RCODE = 0: 오류 없음

DNS 사양은 복잡하고 종종 모호하며 많은 문서에 분산되어 있습니다. 이 최근 작업은 길을 찾는 데 도움이 될 수 있습니다. https://powerdns.org/hello-dns/

관련 정보