A Deep Dive into how the DNS Protocol Works
Updated: Oct 19, 2026
pkg search tcpdump
pkg install tcpdump-4.99.6
pkg search socat
pkg install socat-1.8.1.3
dig -4 @127.0.0.1 -t soa google.com
dig -4 +trace -t soa google.com
man dig
man tcpdump
man socat
Query in HEX
2f 36 01 00 00 01 00 00 00 00 00 00 06 67 6f 6f 67 6c 65 03 63 6f 6d 00 00 06 00 01
Header
ID | 2f 36 | |00101111 00110110| 12086
OPFLAGS | 01 00 | | 0| 0000 | 0| 0| 1| 0|000| 0000|
|QR|OPCODE|AA|TC|RD|RA| Z |RCODE|
QCOUNT | 00 01 | |00000000 00000001|
ACOUNT | 00 00 | |00000000 00000000|
NSCOUNT | 00 00 | |00000000 00000000|
ARCOUNT | 00 00 | |00000000 00000000|
Question Section
QNAME | 06 67 6f 6f 67 6c 65 03 63 6f 6d 00 |
| 6 g o o g l e 3 c o m 0 |
QTYPE | 00 06 | |00000000 00000110| | SOA
QCLASS | 00 01 | |00000000 00000001| | IN
Operational Codes (OPCODE) 4 bits
0000 Standard query
0001 Inverse query(Deprecated)
0010 Status
0100 Notify
0101 Update
Response Codes (RCODE) Orignially 4 bits (Extended Response codes bled in to Z(padding) bits)
0000 NoError No Error
0001 FormErr Format Error
0010 ServFail Server Failure
0011 NXDomain Non-Existent Domain
0100 NotImp Not Implemented
0101 Refused Query Refused
0110 YXDomain Name Exists when it should not
0111 YXRRSet RR Set Exists when it should not
1000 NXRRSet RR Set that should exist does not
1001 NotAuth Server Not Authoritative for zone
1010 NotZone Name not contained in zone
Extended response codes
1 0000 BADSIG TSIG Signature Failure
1 0001 BADKEY Key not recognized
1 0010 BADTIME Signature out of time window
1 0011 BADMODE Bad TKEY Mode
1 0100 BADNAME Duplicate key name
1 0101 BADALG Algorithm not supported
Common Query Types in Hex
A (Address Record (IPv4)) - 00 01
NS (Name Server Record) - 00 02
CNAME (Canonical Name Record)- 00 05
SOA (Start Of Authority Record)- 00 06
PTR (Pointer Record) - 00 0c
MX (Mail eXchange Record) - 00 0f
TXT (Text Record) - 00 10
AAAA (IPv6 Address Record) - 00 1c
SRV (Service Record) - 00 21
HINFO (Host Information Record) - 00 0d
RP (Responsible Party Record) - 00 11
LOC (Location Record) - 00 1d
APL (Address Prefix List Record) - 00 2a
SVCB (Service Binding Record)- 00 40
HTTPS (Service Binding Record for HTTP) - 00 41
SPF (Sender Policy Framework Record (Obsolete use TXT)) - 00 63
AXFR (Zone Transfer All) - 00 fc
IXFR (Zone Transfer Incremental) - 00 fb
CAA (Certificate Authority Authorization Record) - 01 01
echo -n "2f360100000100000000000006676f6f676c6503636f6d0000060001" | xxd -r -p | base64
LzYBAAABAAAAAAAABmdvb2dsZQNjb20AAAYAAQ==
echo -n "LzYBAAABAAAAAAAABmdvb2dsZQNjb20AAAYAAQ==" | base64 --decode | socat -x - UDP:127.0.0.1:53 | hexdump -e '1/1 " %02X"'
dig @127.0.0.1 +qid=12086 -t soa google.com
tcpdump -nn -i ena0 udp port 53 -w dns1.pcap
tcpdump -nn -r dns1.pcap
| Hex | Binary | Char | Description |
|---|---|---|---|
| 00 | 00000000 | NUL | Null |
| 01 | 00000001 | SOH | Start of Heading |
| 02 | 00000010 | STX | Start of Text |
| 03 | 00000011 | ETX | End of Text |
| 04 | 00000100 | EOT | End of Transmission |
| 05 | 00000101 | ENQ | Enquiry |
| 06 | 00000110 | ACK | Acknowledge |
| 07 | 00000111 | BEL | Bell |
| 08 | 00001000 | BS | Backspace |
| 09 | 00001001 | HT | Horizontal Tab |
| 0A | 00001010 | LF | NL Line Feed, New Line |
| 0B | 00001011 | VT | Vertical Tab |
| 0C | 00001100 | FF | NP Form Feed, New Page |
| 0D | 00001101 | CR | Carriage Return |
| 0E | 00001110 | SO | Shift Out |
| 0F | 00001111 | SI | Shift In |
| 10 | 00010000 | DLE | Data Link Escape |
| 11 | 00010001 | DC1 | Device Control 1 |
| 12 | 00010010 | DC2 | Device Control 2 |
| 13 | 00010011 | DC3 | Device Control 3 |
| 14 | 00010100 | DC4 | Device Control 4 |
| 15 | 00010101 | NAK | Negative Acknowledge |
| 16 | 00010110 | SYN | Synchronous Idle |
| 17 | 00010111 | ETB | End of Transmission Block |
| 18 | 00011000 | CAN | Cancel |
| 19 | 00011001 | EM | End of Medium |
| 1A | 00011010 | SUB | Substitute |
| 1B | 00011011 | ESC | Escape |
| 1C | 00011100 | FS | File Separator |
| 1D | 00011101 | GS | Group Separator |
| 1E | 00011110 | RS | Record Separator |
| 1F | 00011111 | US | Unit Separator |
| 20 | 00100000 | (Space) | Space |
| 21 | 00100001 | ! | Exclamation Mark |
| 22 | 00100010 | " | Double Quote |
| 23 | 00100011 | # | Hash or Number |
| 24 | 00100100 | $ | Dollar Sign |
| 25 | 00101001 | % | Percent |
| 26 | 00100110 | & | Ampersand |
| 27 | 00100111 | ' | Single Quote |
| 28 | 00101000 | ( | Left Parenthesis |
| 29 | 00101001 | ) | Right Parenthesis |
| 2A | 00101010 | * | Asterisk |
| 2B | 00101011 | + | Plus |
| 2C | 00101100 | , | Comma |
| 2D | 00101101 | - | Hyphen |
| 2E | 00101110 | . | Period |
| 2F | 00101111 | / | Slash |
| 30 | 00110000 | 0 | Digit 0 |
| 31 | 00110001 | 1 | Digit 1 |
| 32 | 00110010 | 2 | Digit 2 |
| 33 | 00110011 | 3 | Digit 3 |
| 34 | 00110100 | 4 | Digit 4 |
| 35 | 00110101 | 5 | Digit 5 |
| 36 | 00110110 | 6 | Digit 6 |
| 37 | 00110111 | 7 | Digit 7 |
| 38 | 00111000 | 8 | Digit 8 |
| 39 | 00111001 | 9 | Digit 9 |
| 3A | 00111010 | : | Colon |
| 3B | 00111011 | ; | Semicolon |
| 3C | 00111100 | < | Less Than |
| 3D | 00111101 | = | Equals |
| 3E | 00111110 | > | Greater Than |
| 3F | 00111111 | ? | Question Mark |
| 40 | 01000000 | @ | At Sign |
| 41 | 01000001 | A | Uppercase A |
| 42 | 01000010 | B | Uppercase B |
| 43 | 01000011 | C | Uppercase C |
| 44 | 01000100 | D | Uppercase D |
| 45 | 01000101 | E | Uppercase E |
| 46 | 01000110 | F | Uppercase F |
| 47 | 01000111 | G | Uppercase G |
| 48 | 01001000 | H | Uppercase H |
| 49 | 01001001 | I | Uppercase I |
| 4A | 01001010 | J | Uppercase J |
| 4B | 01001011 | K | Uppercase K |
| 4C | 01001100 | L | Uppercase L |
| 4D | 01001101 | M | Uppercase M |
| 4E | 01001110 | N | Uppercase N |
| 4F | 01001111 | O | Uppercase O |
| 50 | 01010000 | P | Uppercase P |
| 51 | 01010001 | Q | Uppercase Q |
| 52 | 01010010 | R | Uppercase R |
| 53 | 01010011 | S | Uppercase S |
| 54 | 01010100 | T | Uppercase T |
| 55 | 01010101 | U | Uppercase U |
| 56 | 01010110 | V | Uppercase V |
| 57 | 01010111 | W | Uppercase W |
| 58 | 01011000 | X | Uppercase X |
| 59 | 01011001 | Y | Uppercase Y |
| 5A | 01011010 | Z | Uppercase Z |
| 5B | 01011011 | [ | Left Square Bracket |
| 5C | 01011100 | \ | Backslash |
| 5D | 01011101 | ] | Right Square Bracket |
| 5E | 01011110 | ^ | Caret |
| 5F | 01011111 | _ | Underscore |
| 60 | 01100000 | ` | Backtick/Grave Accent |
| 61 | 01100001 | a | Lowercase a |
| 62 | 01100010 | b | Lowercase b |
| 63 | 01100011 | c | Lowercase c |
| 64 | 01100100 | d | Lowercase d |
| 65 | 01100101 | e | Lowercase e |
| 66 | 01100110 | f | Lowercase f |
| 67 | 01100111 | g | Lowercase g |
| 68 | 01101000 | h | Lowercase h |
| 69 | 01101001 | i | Lowercase i |
| 6A | 01101010 | j | Lowercase j |
| 6B | 01101011 | k | Lowercase k |
| 6C | 01101100 | l | Lowercase l |
| 6D | 01101101 | m | Lowercase m |
| 6E | 01101110 | n | Lowercase n |
| 6F | 01101111 | o | Lowercase o |
| 70 | 01110000 | p | Lowercase p |
| 71 | 01110001 | q | Lowercase q |
| 72 | 01110010 | r | Lowercase r |
| 73 | 01110011 | s | Lowercase s |
| 74 | 01110100 | t | Lowercase t |
| 75 | 01110101 | u | Lowercase u |
| 76 | 01110110 | v | Lowercase v |
| 77 | 01110111 | w | Lowercase w |
| 78 | 01111000 | x | Lowercase x |
| 79 | 01111001 | y | Lowercase y |
| 7A | 01111010 | z | Lowercase z |
| 7B | 01111011 | { | Left Curly Brace |
| 7C | 01111100 | | | Pipe/Vertical Bar |
| 7D | 01111101 | } | Right Curly Brace |
| 7E | 01111110 | ~ | Tilde |
| 7F | 01111111 | DEL | Delete |