通过抓包分析TCP协议的连接与断开
TCP的连接与断开
TCP连接“三次握手”
TCP是提供可靠的面向连接的服务,也正是“可靠”,所以在进行通信前,要进行TCP建立连接,即“三次握手”。

第一次“握手”:
客户端向服务端发送一段报文,包含标记位SYN,表示我要请求连接,值为1,序号seq随机生成。
第二次“握手”:
服务器端接收到之后,停止监听,并返回一段TCP报文,其中包括标记位SYN和ACK,将值置为1,表示确认客户端请求的报文seq有效,并且继续随机生成一个seq序列号,返回一个确认号ack为x+1。
第三次“握手”:
客户端收到服务器端请求确认后,返回一段TCP报文,其中包括标记位ACK,值为1,表示确认收到服务器的信号,返回一个序列号seq,表示确认收到服务器端确认号ack,并且将其作为值,确认号ack表示收到服务端的seq,并将值加1作为自己的值。
服务器端收到报文后,开始进行数据传输。
抓包

第一次握手

第二次握手

第三次握手

TCP断开连接“四次挥手”
TCP是提供可靠的面向连接的服务,也正是“可靠”,未防止断开连接时还有数据在传输,可能导致的数据丢失,所以在断开连接时,连接的双方都确认后,释放该连接。

第一次“挥手”:
客户端向服务端发送一段报文,包含标记位FIN,值为1,表示我要释放连接,序号seq随机生成。
第二次“挥手”:
服务段向客户端发送一段报文,包含标记位ACK,值为1,ack为上一段报文的序列号加1,表示收到客户端的seq,确认客户端的释放连接请求序列号seq有效,seq随机生成。此时为半连接状态,即服务端可以向客户端发送数据。
第三次“挥手”:
服务端向客户端发送一段报文,包含标记位FIN,ACK,值为1,表示服务端将释放连接,不再发送数据,,ack、seq和第二次“挥手”时相同。
第四次“挥手”:
客户段向服务端发送一段报文,包含标记位ACK,值为1,seq序列号为上一段报文的ack确认号,ack为上一段报文的seq +1,表示客户端对上一段报文序号为y的确认,此时,双方断开连接。释放连接。
在本次抓包实验中,发现TCP四次“挥手”阶段时,第二、三次“挥手”合并在一起,因为在本次实验中,服务端可能已没有数据要发送,所以合并在一起发送。
抓包

第一次挥手

第二、三次挥手

第四次挥手

本文来自博客园,作者:whitehe,转载请注明原文链接:https://www.cnblogs.com/whitehe/p/18578413

浙公网安备 33010602011771号