TCP连接一旦建立,服务器端和客户端就成为了对等关系,任何一方都可以发出关闭握手请求,甚至可以同时发出关闭握手请求。TCP的连接建立需要3次握手,而正常关闭则需要4次握手。

       1、主动关闭的一方A调用close(),SendQ不再接收send()写入信息,在SendQ队列的最后,向被动关闭的一方发送TCP的IP数据报作为关闭握手的请求。这个数据报中包含着标志FIN,也包含着此刻的字节序号m。

       2、B接收到第一次关闭握手请求后马上返回一个数据报作为回应。因为B接收到了FIN作为关闭连接的一个字节的数据,所以返回的字节序号是m+1。当A接收到B的这个回应,也即是第二次握手以后,表明确认在A到B的方向上不再有数据传送,A即转入所谓半关闭状态,等待B的关闭请求。而B收到FIN会导致recv()返回零,让应用层知道A到B的连接已经断开。

       3、B方通知了应用层后也就进入等待关闭的状态。当B开始进入关闭流程,也会由B向A发送一个FIN,同时包含着B到A通讯方向上此刻的字节序号n。

       4、A接收到B的这个FIN之后,也会将序号n+1反馈给B,自此,表明B到A的方向上不再有数据传送,TCP连接正式成功关闭。

       以上只是对TCP连接关闭的简单描述,事实上,除了使用close()关闭,还可以使用shutdown(),这样在“半关闭”状态下还可以对TCP做其他的利用,具体内容就请大家自己查阅相关资料了。

       最后,送上本人对于TCP连接的理解——“双向的单行道”——分别建立连接,也分别断开连接。

TCP/UDP网络编程入门教程之十六:TCP原理——TCP连接的关闭

除非特别注明,鸡啄米文章均为原创
转载请标明本文地址:http://www.jizhuomi.com/software/451.html
2015年10月30日
作者:鸡啄米 分类:软件开发 浏览: 评论:0