我正在阅读" unix网络编程:插座API",并且它提到SCTP不需要时间_任状态,因为TCP由于使用验证标签而需要的是TCP所做的。为什么这样?我了解为什么验证标签使用重复的数据包解决问题,因为接收器可以确定数据包是否是当前SCTP关联的一部分,但是肯定的是,最终的SCTP关闭完整数据包可能会丢失,就像TCP中的最终ACK CAN一样丢失,因此执行主动关闭的同伴仍然必须维护某种状态才能处理此事件,就像TCP一样。
在这种情况下无需维护状态信息。RFC 4960定义了一种未知(蓝色)数据包的默认处理。
假设您的协会中有两个方面:侧面A和侧B。V1/V2是这些侧面使用的验证标签。侧面关闭。
`
A B
Shutdown(v1)
-------------------->
Shutdown_ack(v2)
<--------------------
Shutdown_complete(v1)
-------------------->
`
旁边a发送关闭完成后,它处理了该协会使用的所有资源。就疑虑而言,协会消失了。
如果由于某些原因关闭了完成块,则B Side B将在T2计时器(RFC 4960期限)到期后重新传输ACK块。
当侧a接收此重新启动的关闭ACK块时,它将无法确定其所属的关联,因为该关联已经关闭。因此,侧面A将把这个数据包视为"蓝色"。RFC 4960第8.4章描述了如何从蓝色数据包中处理,子弹#5描述了如何处理" Out of Blue"关闭ACK。
在这种情况下,A将完成关闭的回复。但是,携带关闭完整块的数据包将与原始包装略有不同。新数据包将将T-BIT设置为1,并包含所谓的反射验证标签(这只是包含关闭ACK的数据包的验证标签)。 A B Shutdown(v1) --------------------> Shutdown_ack(v2) <-------------------- Shutdown_complete(v1) -------LOST-------- Shutdown_ack(v2) <-------------------- Shutdown_complete(v2), t-bit=1 -------------------->
side B知道如何处理T-BIT设置为1的数据包并完成处理。
据您所知,一旦发送关闭后,A面A不会保留任何状态信息。如果此关联属于此关联,则将它们视为"蓝色"。