设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 1842|回复: 1
收起左侧

[分享] SCTP通用报文格式

[复制链接]
 成长值: 62830
发表于 2017-11-22 11:03:56 | 显示全部楼层 |阅读模式
网络协议报文格式大全
http://bbs.hh010.com/thread-531884-1-1.html
(出处: 鸿鹄论坛)


SCTP通用报文格式
SCTP ( Stream Control Transmission Protocol ),即流媒体控制传输协议,是一种可靠的基于无连接数据包网络如IP网络之上传输协议。他被设计用来在IP网络上传输PSTN在窄带信令消息,同时也能支持宽带信令消息的传输。
SCTP可以看作OSI层次结构中的传输层,它的上层作为SCTP用户应用,下层为分组网络IP层。
图1 SCTP所处的协议栈结构

                               
登录/注册后可看大图

SCTP报文格式
一个SCTP分组含了一个公共的分组头(Common Header)和若干数据块(Chunk),每个数据块中既可以包含控制信息,也可以包含用户数据。
除了INIT、INIT ACK和SHUTDOWN COMPLETE数据块外,其他类型的多个数据块可以捆绑在一个SCTP分组中,以满足对MTU大小的要求。当然,这些数据块也可以不与其他数据块捆绑在一个分组中。如果一个用户消息不能放在一个SCTP分组中,这个消息可以被分成若干个数据块。
图2 SCTP报文格式

                               
登录/注册后可看大图



字段长度描述
Source Port Number16比特的无符号整数源端口号,识别SCTP发送端点的SCTP端口号。接收方可以使用源端口号、源IP地址、目的端口号和目的IP地址标识该SCTP分组所属的偶联。
Destination Port Number16比特的无符号整数目的端口号,为目的端点的SCTP端口号。接收主机可以使用目的端口号将SCTP分组复用到正确的端点或应用中。
Verification Tag32比特的无符号整数
验证标签是偶联建立时,本端端点为这个偶联生成一个随机标识。偶联建立过程中,双方会交换这个TAG,到了数据传递时,发送端必须在公共分组头中带上对端的这个TAG,以备校验。
  • 包含INIT数据块的分组中验证标签必须为0。
  • 在包含SHUTDOWN-COMPLETE数据块且设置了T比特的分组中,验证标签必须要从包含 SHUTDOWN-ACK数据块的分组中复制。
  • 在包含ABORT数据块的分组中,验证标签必须要从触发这个ABORT发送的分组中复制。
Checksum32比特的无符号整数SCTP通过对用户数据使用ADLER-32算法,计算出一个32位的校验码,带在数据报中,在接收端进行同样的运算,通过检查校验码是否相等来验证用户数据是否遭到破坏。
Chunk Type8比特的无符号整数块类型定义在块值(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 Flags8比特的无符号整数块标志位用法由块类型决定。除非被置为其他值,块标记在传送过程中会被置0而且接收端点会忽视块标记。
Chunk Length16比特的无符号整数块长度用来表示包括块类型、块标记、块长度和块值在内的字节数,长度使用二进制表示。
Chunk Value变长
块值字段是在该数据块中真正传送的信息,内容由数据块类型决定。块值的长度为不定长。


SCTP报文交互流程图3 Association建立流程

                               
登录/注册后可看大图

图4 Association关闭流程(Ungraceful)

                               
登录/注册后可看大图

图5 Association关闭流程(Graceful)

                               
登录/注册后可看大图

图6 数据包的发送和确认流程

                               
登录/注册后可看大图


参考标准
标准描述
RFC 2960Stream Control Transmission Protocol





您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2024-12-26 15:31 , Processed in 0.055877 second(s), 10 queries , Redis On.  

  Powered by Discuz!

  © 2001-2024 HH010.COM

快速回复 返回顶部 返回列表