TCP/IP:SCTP报文格式

Posted rtoax

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP/IP:SCTP报文格式相关的知识,希望对你有一定的参考价值。

目录

SCTP通用报文格式

SCTP ABORT报文格式

SCTP COOKIE ACK格式

SCTP COOKIE ECHO数据块格式

SCTP DATA数据块格式

SCTP ERROR数据块格式

SCTP HEARTBEAT数据块格式

SCTP HEARTBEAT ACK数据块格式

SCTP INIT数据块格式

SCTP INIT ACK数据块格式

SCTP SACK数据块格式

SCTP SHUTDOWN消息格式

SCTP SHUTDOWN ACK数据块格式

SCTP SHUTDOWN COMPLETE数据块格式


 

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

https://download.csdn.net/download/Rong_Toa/18930681

 

SCTP ABORT报文格式


中止(ABORT)数据块的格式

SCTP端点发送ABORT数据块来中止到对等端的偶联,ABORT数据块中可以包含原因参数用来通知接收ABORT数据块的一方中止该偶联的原因。DATA数据块不能同ABORT数据块捆绑在一个SCTP分组中。控制数据块(除INIT、INIT ACK和SHUTDOWN COMPLETE)均可以同ABORT进行捆绑在一个SCTP分组中,但这些控制块都应放在SCTP分组中的ABORT数据块之前,否则这些控制数据块将被接收方忽略。

如果一个端点收到了格式错误或与不存在的偶联相关的ABORT消息,则应当舍弃该消息。此外,在任何情况下,端点收到一个ABORT消息后,都不能通过发送ABORT消息作为响应。

图1 SCTP ABORT报文格式

 

  • Reserved:7比特,在发送方设置为全0,并在接收方忽略。
  • T (1bit):当发送方有一个TCB被破坏时则该T比特设置为0,如果发送方没有TCB,则把该比特设置为1。
  • Length (16bit无符号整数):设置为该数据块的长度,包括数据块头和所有包含的差错原因字段。

ABORT数据块还可以包含0个或多个差错原因参数

报文示例

SCTP ABORT报文示例

 

 

SCTP COOKIE ACK格式


COOKIE证实(COOKIE ACK)数据块的格式

这个数据块只在启动偶联时使用,它用来证实收到COOKIE EHCO数据块。这个数据块必须在该偶联上发送任何DATA或SACK数据块前发送,但这个数据块可以与一个或多个DATA或SACK数据块捆绑在一个SCTP分组中发送。COOKIE ACK数据块中没有其他参数。

图1 SCTP COOKIE ACK格式

COOKIE ACK数据块中只包含数据块标志(8bit),在发送方设置为全0,并在接收方忽略。

报文示例

SCTP COOKIE ACK报文示例

 

 

SCTP COOKIE ECHO数据块格式


状态COOKIE(COOKIE ECHO)数据块的格式

该数据块只在启动偶联时使用,它由偶联的发起者发送到对端点,用来完成启动过程。这个数据块必须在该偶联上发送的DATA数据块前发送,但可以同其他的DATA数据块捆绑到同一个SCTP分组中。

图1 SCTP COOKIE ECHO数据块格式
  • Chunk Flags(8bit):在发送方设置为全0,在接收方忽略。
  • Length:(16bit的无符号整数):设置为该数据块长度的字节数,包括4字节的数据块头和COOKIE的长度。
  • Cookie(可变长度):该字段必须包含从前一个INIT ACK数据块的状态COOKIE参数中收到的准确的COOKIE,使用COOKIE时应尽可能的小从而保证互操作性。

报文示例

SCTP COOKIE ECHO数据块格式示例

 

SCTP DATA数据块格式


净荷数据(DATA)数据块的格式

图1 SCTP DATA数据块格式
字段长度描述
Reserved5比特预留,应当设置为全0,在接收方忽略。
U1比特

U比特称为非顺序比特。如果该比特设置为1,则指示这是一个非顺序的DATA数据块,不需要给该数据块分配流顺序号码,所有接收方必须忽略流顺序号码。在重新组装完成后(如果需要),非顺序的数据块不需要尝试任何重新排序的过程,可以由接收方直接递交到高层;如果一个非顺序的用户消息被分段,则消息的每个分段中的U比特必须被设置为1。

B1比特B比特称为分段开始比特。如果该比特被设置,则指示这是用户消息的第一个分段。
E1比特

E比特称为分段结束比特。如果该比特被设置,则指示这是用户消息的最后一个分段。一个未分段的用户消息应当把所有的B和E比特设置为1。如果B和E比特都设置为0,则表明这是一个分段的用户消息的一个中间分段。当用户消息被分段到多个数据块中,接收方需要使用TSN对消息进行重组,这意味着给分段的用户消息的每个分段都必须要使用连续的TSN。

BE比特的取值含义如下:

  • B=1, E=0:用户消息的第1个分片
  • B=0, E=0:用户消息的中间分片
  • B=0, E=1:用户消息的最后一个分片
  • B=1, E=1:未分片的消息
Length16比特无符号整数该字段用来指示DATA数据块从类型字段开始到用户数据字段结束之间的字节数,但不包含任何填充字节,如果DATA数据块的用户数据字段为0,则长度字段设为16。
TSN32比特无符号整数该值表示该数据块的TSN,TSN的有效值从0~2 -1。TSN的值达到4294967295后将回转到0。
Stream Identifier S16比特无符号整数该字段用来识别用户数据属于的流。
Stream Sequence Number n16比特无符号整数该值用来表示所在流中的用户数据的顺序号码。该字段的有效值为0~65535。当一个用户消息被SCTP分段后,则必须在消息的每个分段中都带有相同的流顺序号码。
Payload Protocol Identifier32比特无符号整数

该值表示一个应用(或上层协议)特定的协议标识符。这个值由高层协议传递到SCTP并发送到对等层。这个标识符不由SCTP使用,但却可以由特定的网络实体或对等的应用来识别在DATA数据块中携带的信息类型。甚至在每个分段的DATA数据块中也应包含该字段(以确保对网络中间的代理可用)。0表示高层未对该协议净荷规定应用标识符。其中“M2UA”协议净荷使用编码2;“M3UA”协议净荷使用编码3;“SUA”协议净荷使用编码4;“M2PA”协议净荷使用的编码待定。

User Data变长用来携带用户数据净荷。该字段必须被填充为4字节的整数情,发送方填充的字节数应不超过3个字节,接收方忽略所有的填充字节。

报文示例

SCTP DATA数据块格式

 

SCTP ERROR数据块格式


操作差错(ERROR)数据块的格式

SCTP端点发送该数据块向其对端点通知一些特定的差错情况。该数据块中可以包含一个或多个差错原因。一般操作差错不一定被看作是致命的,致命差错情况的报告一般使用ABORT数据块。

图1 SCTP ERROR数据块的格式
  • 数据块标志位(8bit):在发送方设置为全0,并在接收方忽略。
  • 可变长度(16bit无符号整数):设置为该数据块的字节数,包括数据块头和所有包含的差错原因字段的长度。
  • 差错原因:可变长度的参数。
图2 SCTP ERROR 差错参数格式
  • 原因编码 (16bit无符号整数):

    定义了被报告的差错情况的类型。

    原因编码描述
    1无效的流标识符
    2丢失必备参数
    3过期的Cookie差错
    4资源耗尽
    5无法解析的地址
    6不识别的数据块类型
    7无效的必备参数
    8不识别的参数
    9无用户数据
    10关闭阶段收到COOKIE
    11使用新的地址重新启动偶联
  • 原因长度(16bit无符号整数):设置为该参数的字节数,包括原因编码、原因长度和原因特定的信息字段。
  • 原因特定的信息:可变长度,该字段用来携带差错的详细情况。
原因编码含义字段格式
1无效的流标识符

差错原因无效的流识别符用来指示端点收到了一个关于不存在的流的DATA数据块。

  • 流识别符:(16bit无符号整数):包含了接收购差错的DATA数据块的流标识符。
  • 备用字段(16bit):由发送方设为全0,在接收方忽略。
2丢失必备参数

丢失必备参数差错原因用来指示一个或多个必备的参数在收到的INIT或INIT ACK数据块中丢失。

  • 丢失的参数个数(32bit无符号整数):该字段用来指示丢失的参数个数。
  • 丢失的参数类型(16bit无符号整数):每个字段都应包含丢失的必备参数号。
3过期的Cookie差错

过期的COOKIE差错原因参数用来指示收到的有效的State Cookie已经过期了。

  • 过期测量(32bit无符号整数):该字段包含了当前时间和State Cookie过期时的时间差值(用毫秒表示)。该差错原因的发送方可以通过在该字段中包含一个非0的值来报告State Cookie过期了多长时间。如果发送方不希望提供这个信息,则该字段设置为0。

4资源耗尽

资源耗尽差错原因用来指示发送方的资源已经耗尽,通常情况下该查错原因与ABORT数据块一起发送。

5不可解析的地址

U不可解析的地址用来指示发送方不能解析特定的地址参数(即发送方不支持该类地址类型),通常情况下该查错原因与ABORT数据块一起发送。

  • 不可解析的地址:可变长度,不可解析的地址字段中包括不能解析的完整的地址参数或主机名参数(类型、长度和地址值)。
6不识别的数据块类型

如果接收方不理解数据块且数据块类型比特中的高位比特设为1,则把不识别的数据块类型错误返回给数据块的产生者

  • 不识别的数据块(可变长度):该字段包含SCTP分组中不识别数据块的数据块类型、数据块标志和数据块长度。
7无效的必备参数

当一个必备参数被设置成无效值时,则向INIT或INITACK的生成者返回无效的必备参数差错。

8不识别的参数

如果接收方不能识别INIT ACK数据块中一个或多个任选参数,则向INIT ACK数据块的产生者返回不识别的参数的差错原因。

  • 不识别的参数:可变长度,该参数字段包含了从INIT ACK数据块中复制的完整的不识别的参数。当COOKIE ECHO数据块的发送者希望报告不识别的参数时,这个参数通常是包含在ERROR数据块中与COOKIE ECHO数据块捆绑在一起发送作为对INIT ACK的响应。
9无用户数据

如果收到的DATA数据块中未包含用户数据,则把这个差错原因返回给DATA数据块的产生者。

  • TSN的值(32bit无符号整数):该字段包含接收到的这个没有用户数据的DATA数据块的TSN。这个原因值通常是在ABORT数据块中返回的。
10关闭期间收到Cookie

当端点处于SHUTDOWN-ACK-SENT状态时,又收到COOKIE ECHO时则发送该差错原因。返回这个差错原因的ERROR数据块通常与重发的SHUTDOWN ACK数据块捆绑在一起发送。

11使用新地址重新启动偶联

当在现存的偶联上收到了COOKIE ECHO数据块,而COOKIE ECHO数据块又向该偶联中增加了先前没有的地址,此时使用该错误原因,并把新增加的地址作为差错信息在该参数中传送,这个差错原因通常都在ABORT中发送,用来拒绝COOKIE ECHO数据块。

 

SCTP HEARTBEAT数据块格式


HeartBeat请求(HEARTBEAT)数据块的格式

SCTP端点通过向对端点发送这个数据块用来检测定义在该偶联上到特定目的地传送地址的可达性。

参数字段包含HEARTBEAT信息,它是一个可变长度的非透明数据结构,其信息通常只需要发送方明白即可。

图1 SCTP HEARTBEAT数据块格式
  • Chunk Flags (8bit):在发送方设置为全0,并在接收方忽略。
  • HEARTBEAT Length(16bit):设置为数据块长度的字节数,包括数据块头和HEARTBEAT信息字段。
  • HEABTBEAT Information TLV:当该HEARTBEAT数据块发送到目的地传送地址时,发送方特定的HEARTBEAT信息字段通常包括关于发送方当前的时间信息。

报文示例

SCTP HEARTBEAT数据块格式

 

SCTP HEARTBEAT ACK数据块格式


HeartBeat证实(HEARTBEAT ACK)数据块的格式

SCTP端点在收到对端点发来的HEARTBEAT数据块后,则发送该数据块作为响应。HeartBeat证实总是向包含HEARTBEAT数据块的IP数据报中的起源IP地址发送,来作为对该HEARTBEAT数据块的响应。

图1 SCTP HEARTBEAT ACK数据块格式
  • 数据块标志(8bit):在发送方设置为全0,并在接收方忽略。
  • HEARTBEAT长度(16bit):设置为数据块长度的字节数,包括数据块头和HEARTBEAT信息字段。
  • HEABTBEAT信息:可变长度,该字段的内容应当把HEARTBEAT请求数据块中的HEARTBEAT信息参数作为回送的响应,该参数字段包含一个可变长度的非透明的数据结构。

报文示例

SCTP HEARTBEAT ACK数据块格式

 

SCTP INIT数据块格式


Initiation (INIT)数据块格式

该数据块用来启动两个SCTP端点间的一个偶联,其格式如下:

图1 SCTP INIT数据块格式

 

字段长度描述
启动标签32比特无符号整数INIT的接收方(响应端)记录启动标签参数的值。这个值必须被放置到INIT的接收方发送的与该偶联相关的每个SCTP分组中的验证标签字段中。启动标签允许除0以外的的任何值。如果在收到的INIT数据块中的启动标签为0,则接收方必须作为错误处理,并且发送ABORT数据块中止该偶联。
A通告的接收方窗口信用(a_rwnd)32比特无符号整数表示指定的缓冲区的容量,用字节数表示,为INIT发送方为偶联预留的窗口大小。在偶联存活期间,这个缓冲区的容量不应减少(即不应把该偶联的专用缓冲区取走),但端点可以在发送的SACK数据块中修改a_rwnd的值。
输出流数量16比特无符号整数用来定义发送INIT数据块的一方希望在该偶联中创建的输出流的数量。该值不允许为0,接收方收到该参数为0的INIT数据块后应中止该偶联。
输入流数量16比特无符号整数定义了发送这个INIT块的一方允许对端在该偶联中所创建的流的数量。该值不允许为0,接收方收到该参数为0的INIT数据块后应中止该偶联。
初始的TSN32比特无符号整数定义发送方将使用的初始的TSN,该值可以设置为启动标签字段的值。
任选/可变长参数可变长度
  • IPv4地址参数(5)

    IPv4地址(32bit无符号整数):包含发送方端点的IPv4地址,采用二进制编码。

  • IPv6地址参数(6)

    IPv6地址(128bit的无符号整数):包含发送方端点的IPv6地址,采用二进制编码。发送方不必把IPv4地址映射到IPv6地址中,可以直接在IPv4地址参数中使用IPv4地址。

  • 防止Cookie过期参数(9)

    INIT的发送方应使用这个参数来建议INIT的接收方提供较长存活跨度的状态CooKIE。

    建议的COOKIE存活跨度增量(32bit的无符号整数),该参数用来向接收方指示发送方希望接收方为其缺省的COOKIE的存活跨度增加的毫秒数。

    由于失效的cookie操作差错原因,前一次尝试与对等端建立偶联失败后,又重新尝试偶联建立时,这个任选参数应能由发送方添加到INIT数据块中。接收方出于安全的考虑可以选择忽略建议的COOKIE存活跨度增量。

  • 主机名地址(11)

    INIT发送方使用这个参数把其主机名(在其IP地址的位置中)传递到对等层。这个对等层负责解析这个主机名,用这个参数可以使偶联工作通过NAT box进行工作。

    主机名:可变长度,该字段包含了按照RFC1123规定的“主机名句法”定义的主机名,主机名地址的解析不在本标准中规定,该参数中至少有一个非空的中止符包含在主机名字符串中,并且应包含长度。

  • 支持的地址类型(12)

    INIT的发送方使用该参数列出其所支持的全部地址类型。

    地址类型(16bit无符号整数):该参数使用对应的地址类型的类型值(例如:IPv4=5,IPv6=6,主机名=11)。

报文示例

SCTP INIT数据块格式

 

SCTP INIT ACK数据块格式


Format of Initiation Acknowledgement (INIT ACK)

INIT ACK数据块用来确认SCTP偶联的启动。

INIT ACK的参数部分与INIT数据块的参数部分相同,它额外还使用两个的可变长度的参数即:状态COOKIE(STATE COOKIE)和未识别的参数。

图1 SCTP INIT ACK数据块格式

INIT ACK数据块应包含以下参数:

  • 必备参数:

    • 启动标签;
    • 通告的接收方窗口信用;
    • 输入流数量;
    • 输出流数量;
    • 初始TSN。
  • 可变长参数:

    • STATECOOKIE 类型值=7 必备
    • IPv4地址 类型值=5 任选
    • IPv6地址 类型值=6 任选
    • 未识别的参数 类型值=9 任选
    • ECN能力预留 类型值=32768(0x8000) 任选
    • 主机名地址 类型值=11 任选
字段长度描述
启动标签(Initiate Tag)32比特无符号整数INIT ACK的接收方记录启动标签参数的值,并把该值放到INITACK接收方需要在相应的偶联上发送的每个SCTP分组中的验证标签中。启动标签不允许为0。如果收到的INIT ACK数据块中的启动标签为0,则接收方当作错误来处理并通过发送ABORT来关闭偶联。
通告的接收方窗口信用值Advertised Receiver Window Credit (a_rwnd)32比特无符号整数这个值表示指定的缓冲区的容量,用字节数表示,是INIT ACK发送方为偶联预留的窗口,在偶联存活期间,这个缓冲区的容量不应减少(即不应把该偶联的专用缓冲区取走)。
输出流数量Number of Outbound Streams (OS)16比特无符号整数定义发送INIT ACK数据块的一方希望在该偶联中创建的输出流的数量。该值不允许为0,接收方收到该参数为0的INIT ACK数据块后应中止该偶联并舍弃TCB。
输入流数量Number of Inbound Streams (MIS)16比特无符号整数定义发送INIT ACK数据块的一方允许对端点在该偶联中所创建的流的最大数量。该值不允许为0,接收方收到该参数为0的INIT ACK数据块后应中止该偶联并舍弃该TCB。
Initial TSN(I-TSN)32比特无符号整数定义发送方将使用的初始的TSN,该值可以设置为启动标签字段的值。
Optional/Variable-length Parameters变长
  • State Cookie:该参数类型为7,为可变长度参数,该参数长度取决于COOKIE的长度,该参数值的取值必须包含由INIT ACK发送方创建该偶联所需的所有状态和参数信息,连同消息授权码。

  • 不识别的参数:该参数类型为8,可变长度参数。该参数内容是INIT数据块中包含的一个不识别的参数,该参数用来返回给INIT数据块的产生者一个指示,这个参数值字段包含了从INIT数据块中复制过来的不识别参数的完整的参数类型、长度和参数值。

报文示例

SCTP INIT ACK数据块格式

 

SCTP SACK数据块格式


选择证实(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 Flags8比特设为全0并由接收方忽略。
Cumulative TSN Ack32比特无符号整数该参数包含了在收到TSN序列的间隔前的最后一个TSN值。
Advertised Receiver Window Credit (a_rwnd)32比特无符号整数该字段指示修改了SACK的发送方的接收缓冲容量的字节数。
Number of Gap Ack Blocks16比特无符号整数用来指示SACK数据块中包含的间隔证实块的数目。
Number of Duplicate TSNs16比特该字段包含了该端点收到的重复的TSN的数目。每个重复的TSN都列在间隔证实块列表后。
Gap Ack Block变长这个字段中包含了间隔证实块,根据间隔证实块数量字段给出的值,间隔证实块重复若干次。所有TSN大于或等于累积TSN证实+间隔证实块开始的DATA数据块,或者是小于或等于每个间隔证实块的累积TSN证实+间隔证实块结束的DATA数据块都被看作是被正确地接收了。
Gap Ack Block Start16比特无符号整数该字段用来指示这个间隔整数块的起始TSN偏移,为了计算实际的TSN号码必须要用累积TSN证实加上偏移号码。计算出的TSN标识用来识别第一个在这个间隔证实块中被收到的TSN。
Gap Ack Block End16比特无符号整数用来指示这个间隔证实块的结束TSN偏移,为了计算实际的TSN需要把累积TSN证实加上这个偏移号码。这个计算出的TSN用来识别在这个间隔证实块中最后收到的DATA数据块。
Duplicate TSN32比特无符号整数用来指示一个在上一个SACK发送后收到的TSN重复的个数。每次一个接收者收到一个重复的TSN(在发送SACK前),则把这个TSN加到重复的TSN列表中。每发送一次SACK后则把统计重复TSN的计数器重新清0。

报文示例

SCTP SACK数据块格式

 

SCTP SHUTDOWN消息格式


报文格式

图1 SCTP SHUTDOWN消息格式
  • Chunk Flags: 块标识,8比特。
  • Length: 16 比特(无符号整数),标识参数的长度,值为8。
  • Cumulative TSN Ack: 32 比特(无符号整数),包含在任何间隔之前接收的最后一个TNS。

报文示例

SCTP SHUTDOWN消息格式

 

SCTP SHUTDOWN ACK数据块格式


关闭证实(SHUTDOWN ACK)数据块的格式

在完成了关闭程序后必须使用该数据块来确认收到的SHUTDOWN数据块。

图1 SCTP SHUTDOWN ACK数据块格式

数据块标志位(8bit):在发送方设置为全0,并在接收方忽略。SHUTDOWN ACK中不再包含其他参数。

报文示例

SCTP SHUTDOWN ACK数据块格式

 

SCTP SHUTDOWN COMPLETE数据块格式


关闭完成(SHUTDOWN COMPLETE)数据块的格式

该数据块在完成关闭程序后用来确认收到SHUTOOWN ACK数据块。SHUTDOWN COMPLETE数据块中不包含其他参数。

图1 SCTP SHUTDOWN COMPLETE数据块格式
  • Reserved:保留位。7比特,在发送方设为全0,在接收方忽略。

  • T:1比特。当发送方有一个TCB被破坏时则该T比特设置为0;如果发送方没有TCB,则把该比特设置为1。

报文示例

SCTP SHUTDOWN COMPLETE数据块格式

 

以上是关于TCP/IP:SCTP报文格式的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP报文格式

TCP/IP报文 三次握手 四次挥手

TCP/IP 数据包报文格式(IP包TCP报头UDP报头)(转)

Linux 网络协议栈开发基础篇(十三)——TCP/IP协议各报文头格式

Linux 网络协议栈开发基础篇(十三)——TCP/IP协议各报文头格式

TCP协议-报文格式