程序员

TCP四次挥手简介

2017-10-23  本文已影响371人  Jiar_

TCP四次挥手简介

原文地址:https://blog.jiar.vip/2017/08/24/TCP%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B%E7%AE%80%E4%BB%8B
简书地址:http://www.jianshu.com/p/a57a40163d4b
您可以通过保留原文地址或者简书地址的方式进行转载。

阅读前提示:因为有部分知识会涉及到作者的另一篇博文《TCP三次握手简介》中的内容,建议先跳转阅读,传送门在这里

TCP四次挥手(原创图片)

TCP首部简介

TCP四次挥手同样也涉及到TCP首部的一些知识,先前在《TCP三次握手简介》中介绍过TCP头部的内容了,这里就不列举所有了,挥手主要涉及到ACKFIN这两个标志比特位

TCP首部(图片来自网络)

TCP四次挥手过程

其实以下这张图片就能说明TCP四次挥手的过程以及握手两端状态的变化。

TCP四次挥手(原创图片)

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当A发出FIN报文段时,只是表示A已经没有数据要发送了,A告诉B,它的数据已经全部发送完毕了;但是,这个时候A还是可以接受来自B的数据;当B返回ACK报文段时,表示B已经知道A没有数据发送了,但是B还是可以发送数据到A的;当B也发送了FIN报文段时,这个时候就表示B也没有数据要发送了,B就会告诉A自己也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

挥手过程

状态变化

为什么 TIME_WAIT 状态要等待 2MSL 之后才关闭连接

为什么要四次挥手

我在《TCP三次握手简介》得出过这样一个结论:三次握手的本质是:将“四次握手”中的第二次、第三次握手合为一次,因为“四次握手”中的第二次、第三次握手都是由B向A传递报文,而且这两次发送报文的目的允许这两次报文合并为一次。那么,TCP四次挥手中的第二次、第三次挥手,能否也能合为一次呢?

答案是否定的。将TCP四次挥手中的第二次、第三次挥手,合为一次。也就是将CLOSE_WAIT状态的停留时间变为0。然而,B之所以存在CLOSE_WAIT状态,是因为B可能还存在着需要发送给A但是未发送的数据,如果存在着这些数据,那么这个状态的时间,就是用来发送这些数据的,所以,TCP四次挥手中的第二次、第三次挥手无法合并为一次。所以,也就无法实现“TCP三次挥手”。

实践(抓包分析)

接下来我们通过网络抓包的方式来了解TCP的三次握手。我这里使用的抓包软件是Wireshark

选中每次一的挥手数据包,点击下方的Transmission Control Protocol(TCP),即可显示每次TCP握手的详情。在详情中,我们展开Flags,可以看到比特标志位是否有被设置的情况。
我们能发现,实践中的TCP状态情况,跟上面提到的理论是一致的。

参考

感谢下列作者的分享

结束语

以上便是我这次关于TCP四次挥手方面的分享,同时也感谢我在文章中提到的博文的博主的分享。如果您在阅读本文时发现有错误或不恰当之处,欢迎在评论中指出。

欢迎关注我的个人微信订阅号,我将不定期分享开发方面的干货。

Jiar's 微信订阅号
上一篇 下一篇

猜你喜欢

热点阅读