使用tcpdump 观察DNS IP TCP通信过程

使用tcp查看DNS通信过程

(base) root@ubuntu:~# sudo tcpdump -i -X  ens33 -nt -s 5000 port domain
tcpdump: -X: No such device exists
(SIOCGIFHWADDR: No such device)
(base) root@ubuntu:~# sudo tcpdump -i ens33 -nt -s 5000 port domain
IP 192.168.0.107.46401 > 192.168.0.1.53: 1876+ [1au] A? www.baidu.com. (42)
IP 192.168.0.1.53 > 192.168.0.107.46401: 1876 3/0/1 CNAME www.a.shifen.com., A 180.101.49.12, A 180.101.49.11 (104)

命令行
使用port domain 来过滤数据包,表示只抓取使用domain服务的数据包
数据内容有两条
第一条是查询报文 源 > 目的
数值1876是DNS报文的标识,也出现在应答中。“+”表示启用递归查询,“A?”表示采用A类型查询方式 www.baidu.com查询中的域名 (42)DNS报文的长度
第二条是反馈DNS报文 3/0/1 表示报文中有三个应答资源记录,0个授权资源记录,1个额外信息记录。CNAME www.a.shifen.com., A 180.101.49.12, A 180.101.49.11 代表三个应答资源记录。CNAME 表示紧随其后的是机器别名,A紧随其后的是IP地址;104应答报文长度。

再开一个终端

(base) root@ubuntu:~# host -t A www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 180.101.49.11
www.a.shifen.com has address 180.101.49.12

host
参数
-t 告诉DNS协议使用哪种查询类型,A类型 通过机器的域名获得其IP地址
输出
1)www.baidu.com 是 www.a.shifen.com.的别名
2)两个IP地址

IP地址解析

(base) root@ubuntu:~# telnet 127.0.0.1
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Ubuntu 18.04.6 LTS
ubuntu login: 

再开一个终端

(base) root@ubuntu:~# tcpdump -ntx -i lo
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
IP 127.0.0.1.34552 > 127.0.0.1.23: Flags [S], seq 1745940003, win 65495, options [mss 65495,sackOK,TS val 210102712 ecr 0,nop,wscale 7], length 0
	0x0000:  4510 003c b6a2 4000 4006 8607 7f00 0001
	0x0010:  7f00 0001 86f8 0017 6810 ee23 0000 0000
	0x0020:  a002 ffd7 fe30 0000 0204 ffd7 0402 080a
	0x0030:  0c85 e9b8 0000 0000 0103 0307

telnet使用的端口号是23,而客户端使用的临时端口号34552

分析IP头部信息

十六进制 十进制 IP头部信息
0x4 4 IP版本号
0x5 5 头部长度为5个32位(20字节)
0x10 TOS选项中最小延时服务开启
0x3c 60 数据总长度
0xb6a2 数据包标识
0x4 禁止分片标识
0x000 分片偏移
0x40 64 TTL被设置为64
0x06 协议字段为6,表示上层协议是TCP协议
0x8607 IP头部校验和
0x7f00 0001 源端IP地址 127.0.0.1
0x7f00 0001 目的端IP地址 127.0.0.1

TCP头分析

十六进制 十进制 IP头部信息
0x86f8 34552 源端口号
0x0017 23 目的口号
0x6810ee23 34552 序号
0x00000000 0 确认号
0xa 10 TCP头部长度为10个32位(40字节)
0x002 设置SYNC标志
0xffd7 接收通告窗口大小
0xfe30 头部校验和
0x0000 没有设置URG标识
0x0204 最大报文段长度选项的kind值和length值
0xffd7 65495 最大报文段长度
0x0402 允许SACK选项
0x080a 时间戳的kind值和length值
0x0c85e9b8 210102712 时间戳
0x0000 0000 0 回显应答时间戳
0x01 空操作选项
0x0303 窗口扩大因子的Kind值和length值
0x07 7 窗口扩大因子为7

IP分片

以太网的MTU是1500字节,因此携带的数据包最多1480(TP头部占用20)

用IP数据报封装1481长度的ICMP报文,需要分片。
1)除最后一个分片其他分片都将设置MF标识
2)ICMP头部只有一份
使用tcpdump 观察DNS IP TCP通信过程_第1张图片
电脑1

root@ubuntu:~# ping 192.168.0.107 -s 1473
PING 192.168.0.107 (192.168.0.107) 1473(1501) bytes of data.
1481 bytes from 192.168.0.107: icmp_seq=1 ttl=64 time=0.244 ms
1481 bytes from 192.168.0.107: icmp_seq=2 ttl=64 time=0.170 ms

电脑2

root@ubuntu:~# tcpdump -ntv -i ens33 icmp
IP (tos 0x0, ttl 64, id 23248, offset 0, flags [+], proto ICMP (1), length 1500)
    192.168.0.103 > 192.168.0.107: ICMP echo request, id 2708, seq 1048, length 1480
IP (tos 0x0, ttl 64, id 23248, offset 1480, flags [none], proto ICMP (1), length 21)
    192.168.0.103 > 192.168.0.107: ip-proto-1

第一个分片 偏移 0 MF被设置1 所以flags[+] 长度1500
第二个分片 偏移1480 没有分片 所以flags[none] 长度21

TCP连接建立数据通信关闭过程

使用tcpdump 观察DNS IP TCP通信过程_第2张图片

你可能感兴趣的:(linux网络编程,tcpdump,tcp/ip)