TCP四次挥手-wireshark分析

和前面的三次连接一样,这一次我们来看一下TCP四次挥手的过程,当然了,也可能会失望,因为我捕捉到的只有三次挥手,而不是四次挥手。我们这里规定IP地址为219.223.247.181是Client端,而183.232.250.255是Server端,下面就用Client端和Server端来解释四次挥手的过程

一、wireshark分析

三次挥手
TCP四次挥手-wireshark分析
第一次挥手
从下面图片我们可以看到,Client首先发起了断开连接请求,从哪里可以看出这是一个断开连接请求呢?从Flags中的Fin=1标志这是Client已经没有数据要发送了,这个时候就会发送一个请求关闭连接的信息给Server端,同样,这里包含Sequence num = 451、Acknowledgement num =48475;Sequence num表示这一次发送数据的起始序号,而Acknowledgement number=48475 表示Client已经收到了Server端发送的48475之前的所有的数据,期待下一次Server发送的Sequence num = 48475;还有一个就是Acknowledgement = 1表示这是一个应答数据,Acknowledgement 和Fin一起发送就是这个数据报是一个确认和请求关闭连接,具有两重功能。
TCP四次挥手-wireshark分析
第二次和第三次挥手
这是Server端发送的数据,按照常理这一次应该是Server端发送一个确认数据给Client端(也就是Flags中的Fin = 0,而Acknowledgement=1);但是这里不按常理出牌,直接将Fin=1和Acknowledgement=1,一起合并发过来了。可能是因为上面的TCP Keep-Alive功能造成的?那我们先看一下Server端发送的信息都有些啥?Sequence num = 48475和我们第一次握手分析的结果相同,表示这是Client需要Server发送的Sequence num。Acknowledgement num=4052表示Server接受到了Client发送的Sequence num=4051的数据,期待Client下一次发送的Sequence num = 4052。那么到这里客户端就关闭了。而Server端关闭还需要Client进行一次确认。
TCP四次挥手-wireshark分析
第四次挥手
从这里我们可以看到Fin=0,而Acknowledgement = 1;表示这只是单纯的一个确认数据,表示Client接收到Server关闭连接的请求。我们看一下Sequence num = 4052和上面分析的结论一致。而Acknowledgement num=48476表示Client收到了Server端发送的Sequence num=48476之前的所有的数据。到这里四次挥手就结束了。
TCP四次挥手-wireshark分析

二、四次挥手

2.1、四次挥手流程
  • 第一次挥手:Client发送Fin + Acknowledgement 给Server端,表示自己要断开连接,这个时候Client端已经没有数据要发送了。
  • 第二次挥手:Server接收到Client发送的断开请求连接,那么这个时候Server需要发送一个Acknowledgement=1用于确定客户请求断开的信息成功接收了;有时候这个过程也会和第三次握手进行合并,就像上面展示的一样。
  • 第三次挥手:Server如果所有的数据已经接收完毕,这个时候就会发送一个Fin=1,而Acknowledgement=0用于表示Server端已经没有数据要发送了,需要关闭连接。
  • 第四次挥手:Client端需要发送一个Acknowledgement = 1表示这个Client接收到了Server的关闭请求信息,这样一来双方的就都关闭了
2.2、为什么需要四次挥手

因为TCP的半连接的特性决定的,TCP是一个全双工通信机制的协议,只有双方都关闭的时候才表示这个连接断开了。??