tcpdump语法:
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。
-vv 输出详细的报文信息。
-i 指定监听的网络接口。
-n 不把网络地址转换成名字。
-nn 不进行端口名称的转换。
-S 将tcp的序列号以绝对值形式输出,而不是相对值。
TCP:
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.
其中,对于我们日常的分析有用的就是前面的五个字段。
它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。
一、服务器端(192.168.14.13)安装nginx,开启80端口监听,同时在服务器端执行tcpdump工具
[root@localhost html]# ss -ntlp |grep 80
LISTEN 0 128 *:80 *:* users:(("nginx",pid=6167,fd=6),("nginx",pid=6166,fd=6),("nginx",pid=6165,fd=6),("nginx",pid=6164,fd=6),("nginx",pid=6163,fd=6))
LISTEN 0 128 :::80 :::* users:(("nginx",pid=6167,fd=7),("nginx",pid=6166,fd=7),("nginx",pid=6165,fd=7),("nginx",pid=6164,fd=7),("nginx",pid=6163,fd=7))
[root@localhost html]# tcpdump -i ens32 port 80 -n -nn -S
二、客户端访问nginx的80端口
[root@localhost ~]# curl http://192.168.14.13
WEB SERVER
三、服务器端访问记录
[root@localhost html]# tcpdump -i ens32 port 80 -n -nn -S
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens32, link-type EN10MB (Ethernet), capture size 262144 bytes
02:32:47.561144 IP 192.168.14.27.55980 > 192.168.14.13.80: Flags [S], seq 4025842404, win 29200, options [mss 1460,sackOK,TS val 17840596 ecr 0,nop,wscale 7], length 0
02:32:47.561262 IP 192.168.14.13.80 > 192.168.14.27.55980: Flags [S.], seq 3005208540, ack 4025842405, win 28960, options [mss 1460,sackOK,TS val 11035968 ecr 17840596,nop,wscale 7], length 0
02:32:47.561615 IP 192.168.14.27.55980 > 192.168.14.13.80: Flags [.], ack 3005208541, win 229, options [nop,nop,TS val 17840597 ecr 11035968], length 0
02:32:47.561823 IP 192.168.14.27.55980 > 192.168.14.13.80: Flags [P.], seq 4025842405:4025842482, ack 3005208541, win 229, options [nop,nop,TS val 17840597 ecr 11035968], length 77: HTTP: GET / HTTP/1.1
02:32:47.561839 IP 192.168.14.13.80 > 192.168.14.27.55980: Flags [.], ack 4025842482, win 227, options [nop,nop,TS val 11035969 ecr 17840597], length 0
02:32:47.562322 IP 192.168.14.13.80 > 192.168.14.27.55980: Flags [P.], seq 3005208541:3005208787, ack 4025842482, win 227, options [nop,nop,TS val 11035970 ecr 17840597], length 246: HTTP: HTTP/1.1 200 OK
02:32:47.562749 IP 192.168.14.27.55980 > 192.168.14.13.80: Flags [.], ack 3005208787, win 237, options [nop,nop,TS val 17840598 ecr 11035970], length 0
02:32:47.563151 IP 192.168.14.27.55980 > 192.168.14.13.80: Flags [F.], seq 4025842482, ack 3005208787, win 237, options [nop,nop,TS val 17840598 ecr 11035970], length 0
02:32:47.563845 IP 192.168.14.13.80 > 192.168.14.27.55980: Flags [F.], seq 3005208787, ack 4025842483, win 227, options [nop,nop,TS val 11035971 ecr 17840598], length 0
02:32:47.564286 IP 192.168.14.27.55980 > 192.168.14.13.80: Flags [.], ack 3005208788, win 237, options [nop,nop,TS val 17840599 ecr 11035971], length 0
四、三次握手分析(seq相对本地进行累加计算,本地ack等于对端seq+1)
02:32:47.561144 IP 192.168.14.27.55980 > 192.168.14.13.80: Flags [S], seq 4025842404, win 29200, options [mss 1460,sackOK,TS val 17840596 ecr 0,nop,wscale 7], length 0
02:32:47.561262 IP 192.168.14.13.80 > 192.168.14.27.55980: Flags [S.], seq 3005208540, ack 4025842405, win 28960, options [mss 1460,sackOK,TS val 11035968 ecr 17840596,nop,wscale 7], length 0
02:32:47.561615 IP 192.168.14.27.55980 > 192.168.14.13.80: Flags [.], ack 3005208541, win 229, options [nop,nop,TS val 17840597 ecr 11035968], length 0
下面结合上图和下面三次握手示意图,解释握手细节:
第一行显示客户端192.168.14.27先发送一个seq 4025842404给服务端,对应下面三次握手示意图中的SYN seq=x
第二行显示服务端192.168.14.13确认第一行的请求:seq 4025842404, ack的值为第一行的seq值+1,即(ack 4025842405),同时发送一个请求序列号seq 3005208540。对应下图三次握手中的(SYN seq=y, ACK x+1)
第三行显示客户端192.168.14.27确认服务端的请求序号(第二行中的seq 4025842405),ack的值为第二行的seq值+1,即(ack 3005208541)对应下图tcp三路握手中的 (ACK y+1)
五、数据传输
02:32:47.561823 IP 192.168.14.27.55980 > 192.168.14.13.80: Flags [P.], seq 4025842405:4025842482, ack 3005208541, win 229, options [nop,nop,TS val 17840597 ecr 11035968], length 77: HTTP: GET / HTTP/1.1
02:32:47.561839 IP 192.168.14.13.80 > 192.168.14.27.55980: Flags [.], ack 4025842482, win 227, options [nop,nop,TS val 11035969 ecr 17840597], length 0
02:32:47.562322 IP 192.168.14.13.80 > 192.168.14.27.55980: Flags [P.], seq 3005208541:3005208787, ack 4025842482, win 227, options [nop,nop,TS val 11035970 ecr 17840597], length 246: HTTP: HTTP/1.1 200 OK
02:32:47.562749 IP 192.168.14.27.55980 > 192.168.14.13.80: Flags [.], ack 3005208787, win 237, options [nop,nop,TS val 17840598 ecr 11035970], length 0
第一行表示三次握手成功之后,客户端向服务器发送HTTP:GET请求,序号为4025842405:4025842482,seq=x+1(即,4025842404+1)
第二行表示服务器收到请求之后给客户端发送了一个ack的确认信息
第三行表示服务器发送HTTP状态200给客户端,序号为3005208541:3005208787,seq=y+1(即,3005208540+1)
第四行表示客户端收到信息后给服务器发送了一个ACK的回复信息
六、四次断开分析(seq相对本地进行累加计算,本地ack等于对端seq+1)
02:32:47.563151 IP 192.168.14.27.55980 > 192.168.14.13.80: Flags [F.], seq 4025842482, ack 3005208787, win 237, options [nop,nop,TS val 17840598 ecr 11035970], length 0
02:32:47.563845 IP 192.168.14.13.80 > 192.168.14.27.55980: Flags [F.], seq 3005208787, ack 4025842483, win 227, options [nop,nop,TS val 11035971 ecr 17840598], length 0
02:32:47.564286 IP 192.168.14.27.55980 > 192.168.14.13.80: Flags [.], ack 3005208788, win 237, options [nop,nop,TS val 17840599 ecr 11035971], length 0
第一行表示客户端192.168.14.27主动发送一个FIN给服务器192.168.14.13,对应下图的FIN seq 4025842482
第二行表示服务器192.168.14.13确认了客户端4025842482,seq+1(即,ack 4025842483);另外发送一个FIN seq 3005208787
第三行表示客户端确认了服务器的FIN 3005208787,seq+1(即,3005208788)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/95286.html