谁应该首先设置TCP FIN标志。服务器,当完成发送数据或客户端,收到完整数据?
问候
答案 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