SCTP ERROR报文格式
SCTP端点发送该数据块向其对端点通知一些特定的差错情况。该数据块中可以包含一个或多个差错原因。一般操作差错不一定被看作是致命的,致命差错情况的报告一般使用ABORT数据块。
一、SCTP ERROR数据块的格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+ ---
| Source Port Number | Destination Port Number | ^
+-------------------------------+-------------------------------+ |
| Verification Tag | Common Header
+---------------------------------------------------------------+ |
| Checksum | V
+---------------+---------------+-------------------------------+ ---
| Type = 9 | Chunk Flags | Length |
+---------------+---------------+-------------------------------+
| one or more Error Causes |
+ +
| ... ... |
+---------------------------------------------------------------+
二、SCTP ERROR数据块的格式解释
字段 | 长度 | 描述 |
---|---|---|
Source Port Number | 16比特 | 源端口号,识别SCTP发送端点的SCTP端口号。接收方可以使用源端口号、源IP地址、目的端口号和目的IP地址标识该SCTP分组所属的偶联。 |
Destination Port Number | 16比特 | 目的端口号,为目的端点的SCTP端口号。接收主机可以使用目的端口号将SCTP分组复用到正确的端点或应用中。 |
Verification Tag | 32比特 | 验证标签是偶联建立时,本端端点为这个偶联生成一个随机标识。偶联建立过程中,双方会交换这个TAG,到了数据传递时,发送端必须在公共分组头中带上对端的这个TAG,以备校验。 |
Checksum | 32比特 | SCTP通过对用户数据使用ADLER-32算法,计算出一个32位的校验码,带在数据报中,在接收端进行同样的运算,通过检查校验码是否相等来验证用户数据是否遭到破坏。 |
Type | 8比特 | Type = 9:操作差错(ERROR) |
Chunk Flags | 8比特 | 块标志位,在发送方设置为全0,并在接收方忽略。 |
Length | 16比特 | 块长度,设置为该数据块的字节数,包括数据块头和所有包含的差错原因字段的长度。 |
one or more Error Causes | 变长 | 差错原因,可变长度的参数。格式如下: 0 15 16 31 +--------------+----------------+ | Cause Code | Cause Length | +--------------+----------------+ / Cause-specific Information / \ \ +-------------------------------+
|
三、 SCTPERROR差错原因编码对应的含义及字段格式
原因编码 | 含义 | 字段格式 |
---|---|---|
1 | 无效的流标识符 |
差错原因无效的流识别符用来指示端点收到了一个关于不存在的流的DATA数据块。 0 15 16 31 +-------------------+--------------------+ | Cause Code = 1 | Cause Length = 8 | +-------------------+--------------------+ | Stream Identifier | Reserved | +-------------------+--------------------+
|
2 | 丢失必备参数 |
丢失必备参数差错原因用来指示一个或多个必备的参数在收到的INIT或INIT ACK数据块中丢失。 +-------------------------+-------------------------+ | Cause Code=2 | Cause Length=8+N*2 | +-------------------------+-------------------------+ | Number of missing params=N | +-------------------------+-------------------------+ | Missing Param Type #1 | Missing Param Type #2 | +-------------------------+-------------------------+ | Missing Param Type #N-1 | Missing Param Type #N | +-------------------------+-------------------------+
|
3 | 过期的Cookie差错 |
过期的COOKIE差错原因参数用来指示收到的有效的State Cookie已经过期了。 0 15 16 31 +-------------------+--------------------+ | Cause Code = 3 | Cause Length = 8 | +-------------------+--------------------+ | Measure of Staleness (usec.) | +----------------------------------------+ Measure of Staleness:过期测量(32比特无符号整数),该字段包含了当前时间和State Cookie过期时的时间差值(用毫秒表示)。该差错原因的发送方可以通过在该字段中包含一个非0的值来报告State Cookie过期了多长时间。如果发送方不希望提供这个信息,则该字段设置为0。 |
4 | 资源耗尽 |
资源耗尽差错原因用来指示发送方的资源已经耗尽,通常情况下该查错原因与ABORT数据块一起发送。 0 15 16 31 +-------------------+--------------------+ | Cause Code = 4 | Cause Length = 4 | +-------------------+--------------------+ |
5 | 不可解析的地址 |
不可解析的地址用来指示发送方不能解析特定的地址参数(即发送方不支持该类地址类型),通常情况下该查错原因与ABORT数据块一起发送。 0 15 16 31 +-------------------+--------------------+ | Cause Code = 5 | Cause Length | +-------------------+--------------------+ | Unresolvable Address | +----------------------------------------+ Unresolvable Address:不可解析的地址,可变长度,不可解析的地址字段中包括不能解析的完整的地址参数或主机名参数(类型、长度和地址值)。 |
6 | 不识别的数据块类型 |
如果接收方不理解数据块且数据块类型比特中的高位比特设为1,则把不识别的数据块类型错误返回给数据块的产生者 0 15 16 31 +-------------------+--------------------+ | Cause Code = 6 | Cause Length | +-------------------+--------------------+ | Unrecognized Chunk | +----------------------------------------+ Unrecognized Chunk:不识别的数据块(可变长度),该字段包含SCTP分组中不识别数据块的数据块类型、数据块标志和数据块长度。 |
7 | 无效的必备参数 |
当一个必备参数被设置成无效值时,则向INIT或INITACK的生成者返回无效的必备参数差错。 0 15 16 31 +-------------------+--------------------+ | Cause Code = 7 | Cause Length = 4 | +-------------------+--------------------+ |
8 | 不识别的参数 |
如果接收方不能识别INIT ACK数据块中一个或多个任选参数,则向INIT ACK数据块的产生者返回不识别的参数的差错原因。 0 15 16 31 +-------------------+--------------------+ | Cause Code = 8 | Cause Length | +-------------------+--------------------+ | Unrecognized Parameters | +----------------------------------------+ Unrecognized Parameters:不识别的参数,可变长度,该参数字段包含了从INIT ACK数据块中复制的完整的不识别的参数。当COOKIE ECHO数据块的发送者希望报告不识别的参数时,这个参数通常是包含在ERROR数据块中与COOKIE ECHO数据块捆绑在一起发送作为对INIT ACK的响应。 |
9 | 无用户数据 |
如果收到的DATA数据块中未包含用户数据,则把这个差错原因返回给DATA数据块的产生者。 0 15 16 31 +-------------------+--------------------+ | Cause Code = 9 | Cause Length = 8 | +-------------------+--------------------+ | TSN value | +----------------------------------------+
|
10 | 关闭期间收到Cookie |
当端点处于SHUTDOWN-ACK-SENT状态时,又收到COOKIE ECHO时则发送该差错原因。返回这个差错原因的ERROR数据块通常与重发的SHUTDOWN ACK数据块捆绑在一起发送。 0 15 16 31 +-------------------+--------------------+ | Cause Code = 10 | Cause Length = 4 | +-------------------+--------------------+ |
11 | 使用新地址重新启动偶联 |
当在现存的偶联上收到了COOKIE ECHO数据块,而COOKIE ECHO数据块又向该偶联中增加了先前没有的地址,此时使用该错误原因,并把新增加的地址作为差错信息在该参数中传送,这个差错原因通常都在ABORT中发送,用来拒绝COOKIE ECHO数据块。 0 15 16 31 +-------------------+--------------------+ | Cause Code = 11 | Cause Length = 8 | +-------------------+--------------------+ | New address (TLV) | +----------------------------------------+ |
发表评论