Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 为什么SCTP不需要时间等待状态?_Sockets_Tcp_Sctp_Time Wait - Fatal编程技术网

Sockets 为什么SCTP不需要时间等待状态?

Sockets 为什么SCTP不需要时间等待状态?,sockets,tcp,sctp,time-wait,Sockets,Tcp,Sctp,Time Wait,我正在阅读“UNIX网络编程:Sockets API”,其中提到,由于使用了验证标记,SCTP不像TCP那样需要时间等待状态。为什么会这样?我理解为什么验证标签会解决重复数据包的问题,因为接收方可以确定数据包是否属于当前SCTP关联的一部分,但最终SCTP关闭-完成数据包肯定会丢失,就像TCP中的最终ACK可能丢失一样,因此,执行主动关闭的对等方仍然必须保持某种状态,才能像处理TCP一样处理此事件。在这种情况下,不需要维护状态信息。为未知(意外)数据包定义一种默认处理 比方说,您的关联中有两个方

我正在阅读“UNIX网络编程:Sockets API”,其中提到,由于使用了验证标记,SCTP不像TCP那样需要时间等待状态。为什么会这样?我理解为什么验证标签会解决重复数据包的问题,因为接收方可以确定数据包是否属于当前SCTP关联的一部分,但最终SCTP关闭-完成数据包肯定会丢失,就像TCP中的最终ACK可能丢失一样,因此,执行主动关闭的对等方仍然必须保持某种状态,才能像处理TCP一样处理此事件。

在这种情况下,不需要维护状态信息。为未知(意外)数据包定义一种默认处理

比方说,您的关联中有两个方面:A方和B方。v1/v2是这些方面使用的验证标签。 A侧启动停机

`
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