SCTP ( Stream Control Transmission Protocol ),即流媒体控制传输协议,是一种可靠的基于无连接数据包网络如IP网络之上传输协议。他被设计用来在IP网络上传输PSTN在窄带信令消息,同时也能支持宽带信令消息的传输。
除了INIT、INIT ACK和SHUTDOWN COMPLETE数据块外,其他类型的多个数据块可以捆绑在一个SCTP分组中,以满足对MTU大小的要求。当然,这些数据块也可以不与其他数据块捆绑在一个分组中。如果一个用户消息不能放在一个SCTP分组中,这个消息可以被分成若干个数据块。
字段 | 长度 | 描述 |
Source Port Number | 16比特的无符号整数 | 源端口号,识别SCTP发送端点的SCTP端口号。接收方可以使用源端口号、源IP地址、目的端口号和目的IP地址标识该SCTP分组所属的偶联。 |
Destination Port Number | 16比特的无符号整数 | 目的端口号,为目的端点的SCTP端口号。接收主机可以使用目的端口号将SCTP分组复用到正确的端点或应用中。 |
Verification Tag | 32比特的无符号整数 | 验证标签是偶联建立时,本端端点为这个偶联生成一个随机标识。偶联建立过程中,双方会交换这个TAG,到了数据传递时,发送端必须在公共分组头中带上对端的这个TAG,以备校验。 - 包含INIT数据块的分组中验证标签必须为0。
- 在包含SHUTDOWN-COMPLETE数据块且设置了T比特的分组中,验证标签必须要从包含 SHUTDOWN-ACK数据块的分组中复制。
- 在包含ABORT数据块的分组中,验证标签必须要从触发这个ABORT发送的分组中复制。
|
Checksum | 32比特的无符号整数 | SCTP通过对用户数据使用ADLER-32算法,计算出一个32位的校验码,带在数据报中,在接收端进行同样的运算,通过检查校验码是否相等来验证用户数据是否遭到破坏。 |
Chunk Type | 8比特的无符号整数 | 块类型定义在块值(Chunk Value)中消息所属的类型。包括:INIT、INIT ACK、SACK、ABORT、ERROR、SHUTDOWN、COOKIE ACK等13种数据块类型。 该参数的取值范围为0~254,255留作今后的扩展。 数据块类型字段的编码分配如下: - 0:净荷数据(DATA)
- 1:启动(INIT)
- 2:启动证实 (INIT ACK)
- 3:选择证实 (SACK)
- 4:Heartbeat请求(HEARTBEAT)
- 5:Heartbeat证实(HEARTBEAT ACK)
- 6:中止 (ABORT)
- 7:关闭(SHUTDOWN)
- 8:关闭证实(SHUTDOWN ACK)
- 9:操作差错(ERROR)
- 10:状态Cookie(COOKIE ECHO)
- 11:Cookie证实(COOKIE ACK)
- 12:为明确拥塞通知响应(ECNE)预留
- 13:为降低拥塞窗口(CWR)预留
- 14:关闭完成(SHUTDOWN COMPLETE)
- 15~62:IETF预留
- 63:IETF定义的数据块扩展
- 64~126:IETF预留
- 127:IETF定义的数据块扩展
- 128~190:IETF预留
- 191:IETF定义的数据块扩展
- 192~254:IETF预留
- 255:IETF定义的数据块扩展
Chunk type的高两位bit指示了收端不认识对应的chunk type的处理原则: - 00:停止处理数据报并丢弃,不再处理报中的其他Chunk。
- 01:与00相同处理外,还要在ERROR或INIT ACK中上报,原因为不认识的参数类型。
- 10:忽略该Chunk ,继续处理数据报中的其他Chunk。
- 11:同10相同处理外,还要在ERROR中上报,原因为不认识的Chunk类型。
|
Chunk Flags | 8比特的无符号整数 | 块标志位用法由块类型决定。除非被置为其他值,块标记在传送过程中会被置0而且接收端点会忽视块标记。 |
Chunk Length | 16比特的无符号整数 | 块长度用来表示包括块类型、块标记、块长度和块值在内的字节数,长度使用二进制表示。 |
Chunk Value | 变长 | 块值字段是在该数据块中真正传送的信息,内容由数据块类型决定。块值的长度为不定长。 |