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

时间:2011-01-13 08:02:33

标签: tcp client-server

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

问候

3 个答案:

答案 0 :(得分:12)

当该方的应用程序请求关闭连接时,将发送

FIN。这不一定是在从另一方收到FIN之后立即发生的 - 一方可能发送FIN,另一方可以在发送自己之前发送更多数据FIN

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

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

答案 1 :(得分:1)

这取决于应用层协议。 - 来自http://www.tcpipguide.com/free/t_TCPConnectionTermination-2.htm

  

通常是TCP连接   使用特殊程序终止   每一方独立关闭的地方   它的链接结束。通常   从其中一个应用程序开始   处理向其TCP层发送信号   不再需要会话。   该设备发送FIN消息   告诉其他设备它想要的   结束连接,这是   确认。当响应   设备准备就绪,它也发送FIN   这是公认的;等了一会儿   ACK的时间段   收到,会议结束。

在实践中, 通常应该是客户端,但没有理由说它必须如此。

答案 2 :(得分:1)

在谷歌搜索“TCP State Diagram”。这是一个很好的初学者链接:http://www.jxos.org/Projects/TCP/tcpstate.html