tcpdump -i any tcp -X port 9000
-i any # 监听任意接口(网卡)
tcp #监听 tcp 协议
-X #打印包内容(可以列出十六进制 (hex) 以及 ASCII 的封包內容)
port 9000 #监听9000端口
flags:
Flags are some combination of S (SYN), F(FIN), P (PUSH), R (RST), U (URG),
W (ECN CWR), E (ECN-Echo) or `.‘ (ACK), or `none‘ if no flags are set.
[S] SYN表示建立连接,
[F] FIN表示关闭连接,
[.] ACK表示响应或确认,
[P] PSH表示有 DATA数据传输,
[R] RST表示连接重置。
上图是抓取了 nginx 向php-fpm 发起的 fastcgi(基于 tcp)协议请求的三次握手的过程:
1.nginx 向php-fpm 发起了“S”请求
2.php-fpm 向客户端(nginx)确认“.” 并回复“S”
3.nginx 向服务端确认连接 “.” ,至此三次握手已经完成
4.客户端(nginx)开始向服务端发送数据 “P”
- 08:09:24.563473 时间带有精确到微妙
- 172.17.0.1.43222 > 868be****.9000 表示通信的流向,43222是客户端,9000是服务器端
- [S] 表示这是一个SYN请求
- [.] 表示这是一个ACK确认包,(client)SYN->(server)SYN->(client)ACK 就是3次握手过程
- [P] 表示这个是一个数据推送,可以是从服务器端向客户端推送,也可以从客户端向服务器端推
- [F] 表示这是一个FIN包,是关闭连接操作,client/server都有可能发起
- [R] 表示这是一个RST包,与F包作用相同,但RST表示连接关闭时,仍然有数据未被处理。可以理解为是强制切断连接
- win 342是指滑动窗口大小
- length 0指数据包的大小(不含消息头)
- 下面的16进制数据是包内容(包括消息头)