我正在阅读《UNIX网络编程:套接字API》,其中提到SCTP不像TCP那样需要TIME_WAIT状态,这是由于它使用验证标签的原因。为什么会这样呢?我理解验证标签可以解决重复包的问题,因为接收方可以确定一个包是否属于当前SCTP关联,但是SCTP的最终SHUTDOWN-COMPLETE数据包也可能会丢失,就像TCP的最终ACK一样可能会丢失。所以执行主动关闭的对等方仍然需要维护某种状态来处理这个事件,就像TCP一样。
`
A B
Shutdown(v1)
-------------------->
Shutdown_ack(v2)
<--------------------
Shutdown_complete(v1)
-------------------->
`
A B Shutdown(v1) --------------------> Shutdown_ack(v2) <-------------------- Shutdown_complete(v1) -------LOST-------- Shutdown_ack(v2) <-------------------- Shutdown_complete(v2), t-bit=1 -------------------->
B端知道如何处理t位设置为1并处理“SHUTDOWN COMPLETE”的数据包。