SCTP实体收到SHUTDOWN块后的数据发送及ACK规则问询
SCTP SHUTDOWN 相关疑问解答
咱们一个个来拆解你的问题,都是SCTP关闭流程里的核心关键点:
1. SCTP实体在收到SHUTDOWN块后,是否仍可发送数据?
答案是:不能再发送新的用户数据,但可以发送控制类报文(比如ACK、SHUTDOWN ACK这类)。
当一个SCTP实体收到SHUTDOWN块时,意味着对端已经明确表示“我没有更多用户数据要发给你了”,此时本端必须停止向对端发送任何新的用户数据。不过,对于已经在发送队列里的、还没发完的用户数据,你可以继续发送直到全部发完并得到确认——毕竟这些是之前就已经准备好的,不是收到SHUTDOWN后新产生的。另外,控制报文(比如用来确认剩余数据的ACK,或者最终的SHUTDOWN ACK)是完全允许发送的,这是关闭流程里必要的步骤。
2. 服务器收到客户端的SHUTDOWN消息后,是否允许回发数据?ACK消息能否继续收发,还是服务器必须立即回复SHUTDOWN ACK?
分两部分说清楚:
- 关于回发用户数据:服务器收到SHUTDOWN后,不能再主动发送新的用户数据,但如果还有已经在发送队列中等待发送的用户数据,是可以继续发送并等待确认的。等所有未确认的用户数据都处理完毕(要么收到ACK,要么超时重传完成),再进入下一步的关闭响应。
- 关于ACK和SHUTDOWN ACK:ACK消息完全可以继续收发——因为服务器需要确认客户端之前发来的所有数据,客户端也需要确认服务器最后发的剩余数据。而不需要立即回复SHUTDOWN ACK,服务器得先把自己这边的剩余用户数据处理完(发完+确认),再发送SHUTDOWN ACK来响应客户端的SHUTDOWN请求。如果立即回复,可能会导致服务器这边还有未发送的数据无法正常传递,违背了SCTP可靠传输的设计。
内容的提问来源于stack exchange,提问作者mwstudingi
相关产品推荐
相关产品推荐

