阅读《Linux高性能服务器编程》随笔——DNS通信过程
- 使用tcpdump命令,监听网络端口,观察经过网络端口的报文
此时表示正在监听ppp0端口。
sudo tcpdump -i ppp0 -nt -s 500 port domain
各参数的含义:
-i 指网络监听端口 -n 指定将每个监听到数据包中的域名转换成IP地址后显示,不把网络地址转换成名字; -s 后面接一个整数,表示从一个包中截取的字节数。0表示包不截断,抓完整的数据包。默认的话 tcpdump 只显示部分数据包,默认68字节。 port 关键字,后面接端口,domain 是端口53的代指。
- 在另一个终端,运行host命令来查询www.baidu.com对应的ip地址
表示www.baidu.com是www.a.shifen.com的别名,并且该机器名对应两个IP地址
host -t A www.baidu.com
-t<类型>:指定查询的域名信息类型;
- 在第一个终端里,即可显示抓包信息
这两个数据是以IP开始,后面的内容描述的就是IP数据报的内容。内容依次是“ 源IP地址.端口号 ”;> 表示数据传输的方向,前者为源端口,后者为目的端口;目的IP地址.端口号 。
- 前面两个数据包是电脑主机向DNS服务器(DNS服务器的地址,可以在/etc/resolv.conf中查看)发送的DNS查询报文,后面两个是服务器反馈的DNS应答报文
- 第一个数据报中,15777是DNS查询报文的标识符,因此DNS应答报文中也包含15777, +号表示递归查询,“A?”表示使用A类型的查询方式,末尾括号中的31表示报文长度,以字节为单位。
- 第二个数据报中,“3/5/5”表示该报文中包含3个应答资源记录,4个授权资源记录,5个额外信息记录,CNAME表示该机器的别名,A随后的是IP地址,末位是报文长度。
|