上节,我们在https://blog.csdn.net/weixin_42122417/article/details/99706602讲述了TCP连接的三次握手和四次挥手的相关步骤。这一节我们继续讨论下关于TCP连接所引发的相关问题的思考。
一、TCP半关闭状态:示意图如下
此图为TCP半关闭状态的示意图。虽然TCP支持半关闭操作,但是他并不常见。而应用程序只需要调用API中提供的shutdown()函数来代替基本的close()函数,就能实现上述操作。而大多数的应用程序仍然会调用close()方法,实现同时关闭一条连接上的两个传输的方向。
流程解释:
首先发送的两个报文段和TCP正常关闭的流程完全相同。由于接收到半关闭的一方仍能发送数据,并且在实际应用中,半关闭状态下的程序可以发送任意数据量的信息。当接收到半关闭的一方完成数据发送后,它将会发送一个FIN来关闭本方的连接。同时向发起半关闭状态的应用程序发出一个文件尾指示。当第二个FIN被确认后,整个连接被完全关闭。
二、同时打开
在同时打开中交换的报文段。与正常的连接建立的过程相比,需要增加一个报文段。数据包的SYN位将直到接受到一个ACK数据包为止。
三、同时关闭