Tcp 三次握手与四次挥手

原文地址:http://www.cnblogs.com/Jessy/p/3535612.htmlhtml

深刻理解TCP链接的释放: 服务器

因为TCP链接是全双工的,所以每一个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的链接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP链接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另外一方执行被动关闭。
TCP协议的链接是全双工链接,一个TCP链接存在双向的读写通道。 
简单说来是 “先关读,后关写”,一共须要四个阶段。以客户机发起关闭链接为例:
1.服务器读通道关闭
2.客户机写通道关闭
3.客户机读通道关闭
4.服务器写通道关闭
关闭行为是在发起方数据发送完毕以后,给对方发出一个FIN(finish)数据段。直到接收到对方发送的FIN,且对方收到了接收确认ACK以后,双方的数据通讯彻底结束,过程当中每次接收都须要返回确认数据段ACK。
详细过程:
    第一阶段   客户机发送完数据以后,向服务器发送一个FIN数据段,序列号为i
    1.服务器收到FIN(i)后,返回确认段ACK,序列号为i+1关闭服务器读通道
    2.客户机收到ACK(i+1)后,关闭客户机写通道
   (此时,客户机仍能经过读通道读取服务器的数据,服务器仍能经过写通道写数据)
    第二阶段 服务器发送完数据以后,向客户机发送一个FIN数据段,序列号为j;
    3.客户机收到FIN(j)后,返回确认段ACK,序列号为j+1关闭客户机读通道
    4.服务器收到ACK(j+1)后,关闭服务器写通道
这是标准的TCP关闭两个阶段,服务器和客户机均可以发起关闭,彻底对称。
FIN标识是经过发送最后一块数据时设置的,标准的例子中,服务器还在发送数据,因此要等到发送完的时候,设置FIN(此时可称为TCP链接处于半关闭状态,由于数据仍可从被动关闭一方向主动关闭方传送)。若是在服务器收到FIN(i)时,已经没有数据须要发送,能够在返回ACK(i+1)的时候就设置FIN(j)标识,这样就至关于能够合并第二步和第三步。
.net

 

https://blog.csdn.net/ctrl_qun/article/details/52518479htm

相关文章
相关标签/搜索