第一次握手丢失
如果要模拟第一次握手的丢失,可以尝试客户端在进行TCP连接发送之前就先关闭服务端的网络,然后客户端通过curl
发送数据包给服务器。但是因为此时服务器已经关闭连接没有回复ACK
以及FIN
完成第二次握手,这样通过tcpdump抓取数据包传输的数据包就可以看出如果网络第一次数据包丢失会发生的事情了。
下面开始模拟
实验场境如下
首先先开启客户端的抓包程序
sudo tcpdump -i ens33 tcp and host 192.168.234.136 and port 80 -w tcp_sys_timeout.pcap
通过上述命令,这条命令是用于在网络接口ens33
上进行抓包操作,只捕获与IP地址为192.168.234.136
且端口号为80
的TCP
通信数据包,并将捕获到的数据保存到名为tcp_sys_timeout.pcap
的文件中。
具体的网络接口以及IP
怎么查看请看上一篇博客的描述
然后使用
sudo nmcli network off
关闭服务器的网络,紧接着就要在客户端发送curl
连接请求
(这一步骤必须要快速进行不然就会出现找不到IP地址的问题)
sudo curl http://192.168.234.136
过一段时间之后就会没有到主机的路由器,就说明客户端超时重传结束,断开连接
然后ctrl+c
结束tcpdump
抓包就能获取TCP
的交互过程了
之后使用Wireshark
打开Linux
下抓的包就如下图所示
我们都知道,http
是通过tcp
传输的,所以,最开始的三个包就是三次握手建立连接的数据包。
重传了三个数据包就断开了连接,而且不难算出,第一次传输是在1s的时刻,第二次传输是在3s左右,第三次是7s
他们的间隔是1、2、4,是成指数增长的,当超过最大的传输次数客户端就会显示断开连接