使用 WireShark 分析 TCP/IP 三次握手 和 四次
Wireshark 抓包注意事项
为了演示一个TCP三次握手建立连接的过程,我们通过 Chrome 访问一个网页。
已知 HTTP 协议就是建立在TCP链接上的
比如访问以下的网址:
通过 Cmd 的 ping 命令获取这个网站对应的IP地址 154.8.131.165

确定 这个IP 有一个非常重要的好处,就是我们只需要
电脑 -> 网站 的数据包
网站->电脑 的数据包
所以,可以使用Wireshark的显示过滤规则,只显示我们需要的数据,不然你一定看着满屏幕的数据抓狂的。
过滤规则如下:
ip.addr == 154.8.131.165
截图

分析TCP握手包
概览

通过图片,可以看到先进行了 TCP 三次传输 然后才开始传输
第一次,客户端发送 SYN 报文到服务器

标志是SYN,seq=0
第二次 ,服务器接收到 客户端的SYN 报文,回复 SYN + ACK 报文

标志是SYN, ACK,seq=0, Ack = 接收到的Seq + 1 = 1
第三次 ,客户端接收到服务端的 SYN+ACK 报文后,回复 ACK报文

标志是ACK,seq=0,Ack = 接收到的Seq + 1 =1
只有第一个包没有确认位,其他包都有确认位。
TCP 四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
(2)服务器B收到这个FIN,它发回一个ACK。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
抓包截图
