Sockets 为什么SCTP不需要时间等待状态?
我正在阅读“UNIX网络编程:Sockets API”,其中提到,由于使用了验证标记,SCTP不像TCP那样需要时间等待状态。为什么会这样?我理解为什么验证标签会解决重复数据包的问题,因为接收方可以确定数据包是否属于当前SCTP关联的一部分,但最终SCTP关闭-完成数据包肯定会丢失,就像TCP中的最终ACK可能丢失一样,因此,执行主动关闭的对等方仍然必须保持某种状态,才能像处理TCP一样处理此事件。在这种情况下,不需要维护状态信息。为未知(意外)数据包定义一种默认处理 比方说,您的关联中有两个方面:A方和B方。v1/v2是这些方面使用的验证标签。 A侧启动停机Sockets 为什么SCTP不需要时间等待状态?,sockets,tcp,sctp,time-wait,Sockets,Tcp,Sctp,Time Wait,我正在阅读“UNIX网络编程:Sockets API”,其中提到,由于使用了验证标记,SCTP不像TCP那样需要时间等待状态。为什么会这样?我理解为什么验证标签会解决重复数据包的问题,因为接收方可以确定数据包是否属于当前SCTP关联的一部分,但最终SCTP关闭-完成数据包肯定会丢失,就像TCP中的最终ACK可能丢失一样,因此,执行主动关闭的对等方仍然必须保持某种状态,才能像处理TCP一样处理此事件。在这种情况下,不需要维护状态信息。为未知(意外)数据包定义一种默认处理 比方说,您的关联中有两个方
`
A B
Shutdown(v1)
-------------------->
Shutdown_ack(v2)
<--------------------
Shutdown_complete(v1)
-------------------->
`
`
A B
关机(v1)
-------------------->
关机确认(v2)
`
当A方发送SHUTDOWN COMPLETE时,它将释放此关联使用的所有资源。就A方而言,该协会已不复存在
如果由于某些原因,关机完整数据块丢失,B侧将在t2定时器(RFC 4960期限)到期后重新传输关机确认数据块
当A方接收到这个重新传输的SHUTDOWN ACK块时,它将无法确定它属于哪个关联,因为该关联已经关闭。因此,A方会将此数据包视为“出乎意料”。描述如何处理突发数据包,项目符号#5描述如何处理“突发”关机确认
在这种情况下,A方将在关机完成后回复。然而,携带SHUTDOWN完整块的数据包将与原始数据包略有不同。新数据包的t位设置为1,并包含所谓的反射验证标签(这只是包含SHUTDOWN ACK的数据包中的验证标签)。
A B
关机(v1)
-------------------->
关机确认(v2)
TIME_WAIT保护未来的数据包,而不是ACK丢失;如果客户机执行活动关闭,且其最终TCP ACK由于任何原因未发送到服务器,则服务器将重新发送其FIN(因为TCP是可靠的协议),因此客户机需要维护状态信息,以允许其重新发送其最终ACK