连接设置时,有:
客户端------ SYN ----->服务器
客户端<--- ACK/SYN ----服务器----①
客户端------确认----->服务器
终止时,有:
客户端------ FIN ----->服务器
客户端<----- ACK ------服务器----②
客户端<----- FIN ------服务器----③
客户端------确认----->服务器
我的问题是为什么②和③不能设置在同一个包中,如①在一个包中设置的ACK和SYN?
tou*_*one 14
在google之后,我认识到四方实际上是两对双向握手.
如果终止是一个真正的四向动作,则2和3确实可以在同一个包中设置为1.
但这是一个两阶段的工作:第一阶段(即第一次双向握手)是:
客户端------ FIN ----->服务器
客户端<----- ACK ------服务器
此时客户端已处于FIN_WAIT_2状态,等待来自服务器的FIN.作为双向和全双工协议,目前一个方向已经崩溃,客户端必须等待另一个"半双工"终止.
当来自服务器的FIN被发送到客户端时,客户端响应ACK以终止连接.
总结一下,2和3不能合并成一个包,因为它们属于不同的状态.
祝我英语不好.大声笑.
参考:
http://www.tcpipguide.com/free/t_TCPConnectionTermination-2.htm
http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentProcessTheThreeWayHandsh-3.htm
http://www.tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm
Was*_*son 14
我认为当然 2 和 3 可以在技术上合并,但不够灵活,因为不是原子的。
第一个 FIN1 C 到 S 表示且仅表示:我将关闭我的通信方式。到 C 的第一个 ACK1 S 表示对 FIN1 的响应。好的,我知道您的频道已断开连接,但对于我的 S(服务器)方式连接,我还不确定。也许我的接收缓冲区还没有完全处理好。我需要的时间不确定。因此2和3不适合合并。只有服务器有权决定何时可以断开其连接方式。
小智 -2