DNS 协议

Posted August 22, 2022 by monitor1379

前言

DNS 报文格式参考 RFC 1035 里的 4.1. Format 一章。

DNS 网络传输参考 RFC 1035 里的 4.2. Transport 一章。

DNS 报文格式

我们先来将 DNS 查询的请求报文和响应报文重定向到文件中,通过查看其 16 进制来剖析其报文格式。

先监听本地随意一个端口(这里使用1053)将 dig 命令发出的 DNS 查询请求报文输出到文件中:

> nc -u -l 1053 > request_packet.txt

在另一个 termianl 里执行:

> dig +retry=0 -p 1053 @127.0.0.1 +noedns google.com

然后使用 request_packet.txt 文件中的内容,向 8.8.8.8 发起 DNS 查询,并将响应报文输出到文件中:

> nc -u 8.8.8.8 53 < request_packet.txt > response_packet.txt

查看内容:

> hexdump -C request_packet.txt
00000000  55 9b 01 20 00 01 00 00  00 00 00 00 06 67 6f 6f  |U.. .........goo|
00000010  67 6c 65 03 63 6f 6d 00  00 01 00 01              |gle.com.....|
0000001c

> hexdump -C response_packet.txt
00000000  55 9b 81 80 00 01 00 01  00 00 00 00 06 67 6f 6f  |U............goo|
00000010  67 6c 65 03 63 6f 6d 00  00 01 00 01 c0 0c 00 01  |gle.com.....�...|
00000020  00 01 00 00 05 0e 00 04  8e fa 48 ae              |.........�H�|
0000002c

DNS 网络传输

参考: https://draveness.me/whys-the-design-dns-udp-tcp/