选择证实(SACK)数据块的格式这个数据块通过使用DATA数据块中的TSN用来向对等的端点确认接收到的DATA数据块,并通知对等的端点在收到的DATA数据块中的间隔。所谓间隔就是指收到的DATA数据块的TSN不连续的情况。
SACK必须包含累积的TSN证实和通告的接收方窗口信用(a_rwnd)参数。
累积的TSN证实参数的值是指收到的TSN顺序断开前的最后一个TSN号码,下一个TSN则是在发送SACK的端点尚未收到的TSN值。所以这个参数确认已经收到了小于或等于该值的所有TSN。
SACK中可以包含0个或多个间隔证实块,每个间隔证实块确认了在一个不连续TSN后所收到的TSN序列,所有通过间隔证实块确认的TSN值都应比累积TSN证实的值大。
图1 SCTP SACK数据块格式
字段 | 长度 | 描述 |
数据块标志位Chunk Flags | 8比特 | 设为全0并由接收方忽略。 |
Cumulative TSN Ack | 32比特无符号整数 | 该参数包含了在收到TSN序列的间隔前的最后一个TSN值。 |
Advertised Receiver Window Credit (a_rwnd) | 32比特无符号整数 | 该字段指示修改了SACK的发送方的接收缓冲容量的字节数。 |
Number of Gap Ack Blocks | 16比特无符号整数 | 用来指示SACK数据块中包含的间隔证实块的数目。 |
Number of Duplicate TSNs | 16比特 | 该字段包含了该端点收到的重复的TSN的数目。每个重复的TSN都列在间隔证实块列表后。 |
Gap Ack Block | 变长 | 这个字段中包含了间隔证实块,根据间隔证实块数量字段给出的值,间隔证实块重复若干次。所有TSN大于或等于累积TSN证实+间隔证实块开始的DATA数据块,或者是小于或等于每个间隔证实块的累积TSN证实+间隔证实块结束的DATA数据块都被看作是被正确地接收了。 |
Gap Ack Block Start | 16比特无符号整数 | 该字段用来指示这个间隔整数块的起始TSN偏移,为了计算实际的TSN号码必须要用累积TSN证实加上偏移号码。计算出的TSN标识用来识别第一个在这个间隔证实块中被收到的TSN。 |
Gap Ack Block End | 16比特无符号整数 | 用来指示这个间隔证实块的结束TSN偏移,为了计算实际的TSN需要把累积TSN证实加上这个偏移号码。这个计算出的TSN用来识别在这个间隔证实块中最后收到的DATA数据块。 |
Duplicate TSN | 32比特无符号整数 | 用来指示一个在上一个SACK发送后收到的TSN重复的个数。每次一个接收者收到一个重复的TSN(在发送SACK前),则把这个TSN加到重复的TSN列表中。每发送一次SACK后则把统计重复TSN的计数器重新清0。 |
报文示例
参考标准
标准 | 描述 |
RFC 2960 | Stream Control Transmission Protocol |