我正在学习SCTP协议,我无法理解这一点。
服务器收到客户端的SHUTDOWN消息后,是否允许发回数据? 那么ACK消息呢,它们仍然可以发送/接收,还是服务器必须立即响应SHUTDOWN ACK?
感谢您的帮助!
答案 0 :(得分:1)
SHUTDOWN chunk只是远程方希望关闭关联的指示。本地方仍然可以传输先前从上层接收的数据。事实上,当地方必须提供从上层收到的所有东西,但尚未交付到远端。
根据RFC 4960, chapter 9.2:
收到SHUTDOWN后,对等端点
进入SHUTDOWN-RECEIVED状态,
停止接受来自其SCTP用户的新数据,
通过检查块的累积TSN Ack字段来验证, 所有出色的DATA数据块都已被收到 SHUTDOWN发件人。
...
如果仍有未完成的DATA块,则SHUTDOWN 接收方必须继续遵循正常的数据传输程序 在第6节中定义,直到所有未完成的DATA块为止 承认;但是,SHUTDOWN接收器不得接受新数据 来自其SCTP用户。
一旦所有传出数据成功传递到远程端,就可以发送SHUTDOWN_ACK:
如果SHUTDOWN的接收器没有更多未完成的DATA块, SHUTDOWN接收器必须发送SHUTDOWN ACK并开始T2- 自己关机定时器,进入SHUTDOWN-ACK-SENT状态。如果 定时器到期,端点必须重新发送SHUTDOWN ACK。
这同样适用于SACK块。本地方仍然可以收到确认未完成数据的SACK。但是本地端不应该向远程端发送任何新的SACK块,因为只有在远程端成功传递所有传出数据后才会发送SHUTDOWN块。
希望这有帮助。