谁首先在客户端 - 服务器连接中设置tcp FIN标志

Bor*_*ade 3 tcp client-server

谁应该首先设置TCP FIN标志.服务器,当完成发送数据或客户端,收到完整数据?

问候

caf*_*caf 12

FIN当该方的应用程序请求关闭连接时发送.这不一定是在FIN从另一方接收到之后立即发生的- 一方可以发送一个FIN,然后另一方可以在发送自己之前发送更多数据FIN.

一旦TCP连接启动,它就完全对称 - 任何一方都不能区分为"服务器"或"客户端".这意味着任何一方都可以发送第一个FIN.由于主机在发送之后不能再在连接上发送数据FIN,因此通常是首先知道它没有更多数据要发送的那一方.

设计网络协议有一个很好的实际原因,以便客户端首先关闭连接 - "第一个关闭"最终处于TIME_WAIT状态,最长段寿命的两倍,即几分钟.这占用了几分钟的少量资源 - 但如果这发生在服务器端,服务器每秒处理数百个连接,那么这些TIME_WAIT套接字将很快加起来.最好在客户中分配这种负担.

  • @entropy:不,它没有.无论如何,您可以随时查阅包含TCP状态图的任何参考,以确定它是第一个进入"TIME_WAIT"的闭门器.第二个接近通过`CLOSE_WAIT`和`LAST_ACK`. (2认同)