我正在开发一个http服务器。现在我想做一些统计,具体来说,我想知道客户端关闭了多少个tcp连接,以及我的服务器关闭了多少个。
我在我的http服务器上关闭了保持活动功能,所以正常情况是我的服务器发送第一个FIN数据包而客户端发送第二个数据包,这意味着我的服务器正常关闭连接。如果它们的顺序相反,则表示关闭异常,我关心。
这是一个问题,如何通过tcpdump告诉第二个FIN数据包?由于它们都设置在FIN和ACK标志位中。
提前致谢并祝新年快乐!
答案 0 :(得分:2)
我正在通过ssh
将连接隧道连接到我的网络服务器,该网络服务器正在侦听5000 / tcp。我运行了tcpdump
会话,即使您忽略了时间戳,仍然可以清楚从TCP源端口号发送了什么。
05:42:06.344592 IP localhost.5000 > localhost.37924: Flags [F.], seq 243,
ack 419, win 529, options [nop,nop,TS val 120830308 ecr 120830308], length 0
05:42:06.381872 IP localhost.37924 > localhost.5000: Flags [.], ack 244,
win 513, options [nop,nop,TS val 120830318 ecr 120830308], length 0
05:42:06.382504 IP localhost.37924 > localhost.5000: Flags [F.], seq 419,
ack 244, win 513, options [nop,nop,TS val 120830318 ecr 120830308], length 0
05:42:06.382535 IP localhost.5000 > localhost.37924: Flags [.], ack 420,
win 529, options [nop,nop,TS val 120830318 ecr 120830318], length 0
在05:42:06.344592
,我的网络服务器从客户端确认字节并设置FIN
标志。我知道它是网络服务器,因为源端口是5000.在现实世界中,它更容易,你的源IP地址就让它消失了。
在05:42:06.382504
,客户端向服务器的FIN
发送了ACK。同样,我们知道因为源端口不是5000。