SCTP INIT报文
SCTP Initiation (INIT)数据块用来启动两个SCTP端点间的一个偶联。
一、SCTP INIT数据块格式
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 = 1 | Chunk Flags | Chunk Length |
+---------------+---------------+-------------------------------+
| Initiate Tag |
+---------------------------------------------------------------+
| Advertised Receiver Window Credit (a_rwnd) |
+-------------------------------+-------------------------------+
| Number of Outbound Streams | Number of Inbound Streams |
+-------------------------------+-------------------------------+
| Initial TSN |
+---------------------------------------------------------------+
| |
| Optional/Variable-Length Parameters |
| |
+---------------------------------------------------------------+
二、SCTP INIT数据块格式解释
字段 | 长度 | 描述 |
---|---|---|
Source Port Number | 16比特 | 源端口号,识别SCTP发送端点的SCTP端口号。接收方可以使用源端口号、源IP地址、目的端口号和目的IP地址标识该SCTP分组所属的偶联。 |
Destination Port Number | 16比特 | 目的端口号,为目的端点的SCTP端口号。接收主机可以使用目的端口号将SCTP分组复用到正确的端点或应用中。 |
Verification Tag | 32比特 |
验证标签是偶联建立时,本端端点为这个偶联生成一个随机标识。偶联建立过程中,双方会交换这个TAG,到了数据传递时,发送端必须在公共分组头中带上对端的这个TAG,以备校验。 包含INIT数据块的分组中验证标签必须为0。 |
Checksum | 32比特 | SCTP通过对用户数据使用ADLER-32算法,计算出一个32位的校验码,带在数据报中,在接收端进行同样的运算,通过检查校验码是否相等来验证用户数据是否遭到破坏。 |
Type | 8比特 | Type=1:启动(INIT)数据块。 |
Chunk Flags | 8比特 | 块标记,在传送过程中会被置0,接收端点忽视块标记。 |
Chunk Length | 16比特 | 块长度用来表示包括块类型、块标记、块长度和块值在内的字节数,长度使用二进制表示。 |
Initiate Tag | 32比特 | 启动标签。INIT的接收方(响应端)记录启动标签参数的值。这个值必须被放置到INIT的接收方发送的与该偶联相关的每个SCTP分组中的验证标签字段中。启动标签允许除0以外的的任何值。如果在收到的INIT数据块中的启动标签为0,则接收方必须作为错误处理,并且发送ABORT数据块中止该偶联。 |
Advertised Receiver Window Credit (a_rwnd) | 32比特 | 通告的接收方窗口信用,表示指定的缓冲区的容量,用字节数表示,为INIT发送方为偶联预留的窗口大小。在偶联存活期间,这个缓冲区的容量不应减少(即不应把该偶联的专用缓冲区取走),但端点可以在发送的SACK数据块中修改a_rwnd的值。 |
Number of Outbound Streams | 16比特 | 输出流数量,用来定义发送INIT数据块的一方希望在该偶联中创建的输出流的数量。该值不允许为0,接收方收到该参数为0的INIT数据块后应中止该偶联。 |
Number of Inbound Streams | 16比特 | 输入流数量,定义了发送这个INIT块的一方允许对端在该偶联中所创建的流的数量。该值不允许为0,接收方收到该参数为0的INIT数据块后应中止该偶联。 |
Initial TSN | 32比特 | 初始的TSN,定义发送方将使用的初始的TSN,该值可以设置为启动标签字段的值。 |
Optional/Variable-Length Parameters | 可变 | 任选/可变长参数。 |
三、SCTP INIT可变长参数格式
类型值 | 任选/可变长参数 | 格式说明 |
---|---|---|
5 | IPv4地址参数 |
0 15 16 31 +------------+--------------+ | Type = 5 | Length = 8 | +------------+--------------+ | IPv4 Address | +---------------------------+ IPv4 Address:IPv4地址(32比特无符号整数),包含发送方端点的IPv4地址,采用二进制编码。 |
6 | IPv6地址参数 |
0 15 16 31 +------------+--------------+ | Type = 6 | Length = 20 | +------------+--------------+ | IPv6 Address | +---------------------------+ IPv6 Address:IPv6地址(128位的无符号整数),包含发送方端点的IPv6地址,采用二进制编码。发送方不必把IPv4地址映射到IPv6地址中,可以直接在IPv4地址参数中使用IPv4地址。 |
9 | 防止Cookie过期参数 |
INIT的发送方应使用这个参数来建议INIT的接收方提供较长存活跨度的状态CooKIE。 0 15 16 31 +--------------------+------------------------+ | Type = 9 | Length = 8 | +--------------------+------------------------+ | Suggested Cookie Life-span Increment(msec.) | +---------------------------------------------+ Suggested Cookie Life-span Increment:建议的COOKIE存活跨度增量(32bit的无符号整数),该参数用来向接收方指示发送方希望接收方为其缺省的COOKIE的存活跨度增加的毫秒数。 由于失效的cookie操作差错原因,前一次尝试与对等端建立偶联失败后,又重新尝试偶联建立时,这个任选参数应能由发送方添加到INIT数据块中。接收方出于安全的考虑可以选择忽略建议的COOKIE存活跨度增量。 |
11 | 主机名地址 |
INIT发送方使用这个参数把其主机名(在其IP地址的位置中)传递到对等层。这个对等层负责解析这个主机名,用这个参数可以使偶联工作通过NAT box进行工作。 0 15 16 31 +------------+--------------+ | Type = 11 | Length | +------------+--------------+ | Host Name | +---------------------------+ Host Name:主机名,可变长度,该字段包含了按照RFC1123规定的“主机名句法”定义的主机名,主机名地址的解析不在本标准中规定,该参数中至少有一个非空的中止符包含在主机名字符串中,并且应包含长度。 |
12 | 支持的地址类型 |
INIT的发送方使用该参数列出其所支持的全部地址类型。 0 15 16 31 +----------------+----------------+ | Type = 12 | Length | +----------------+----------------+ | Address Type#1 | Address Type#2 | +----------------+----------------+ | .... | +---------------------------------+ Address Type:地址类型(16比特无符号整数):该参数使用对应的地址类型的类型值(例如:IPv4=5,IPv6=6,主机名=11)。 |
32768 (0x8000) | - | 预留给ECN能力。 |
四、SCTP INIT消息报文示例
Frame 1: 78 bytes on wire (624 bits), 78 bytes captured (624 bits)
Encapsulation type: Ethernet (1)
Arrival Time: Aug 18, 2011 16:09:25.807798000
[Time shift for this packet: 0.000000000 seconds]
Epoch Time: 1313654965.807798000 seconds
[Time delta from previous captured frame: 0.000000000 seconds]
[Time delta from previous displayed frame: 0.000000000 seconds]
[Time since reference or first frame: 0.000000000 seconds]
Frame Number: 1
Frame Length: 78 bytes (624 bits)
Capture Length: 78 bytes (624 bits)
[Frame is marked: False]
[Frame is ignored: False]
[Protocols in frame: eth:ethertype:ip:sctp]
Ethernet II, Src: 00:0f:e2:d5:c5:29 (00:0f:e2:d5:c5:29), Dst: 00:0f:e2:2f:d7:18 (00:0f:e2:2f:d7:18)
Destination: 00:0f:e2:2f:d7:18 (00:0f:e2:2f:d7:18)
Address: 00:0f:e2:2f:d7:18 (00:0f:e2:2f:d7:18)
.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
Source: 00:0f:e2:d5:c5:29 (00:0f:e2:d5:c5:29)
Address: 00:0f:e2:d5:c5:29 (00:0f:e2:d5:c5:29)
.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
.... ...0 .... .... .... .... = IG bit: Individual address (unicast)
Type: IP (0x0800)
Frame check sequence: 0x0226fd78 [correct]
[FCS Good: True]
[FCS Bad: False]
Internet Protocol Version 4, Src: 10.21.112.2 (10.21.112.2), Dst: 10.168.168.9 (10.168.168.9)
Version: 4
Header Length: 20 bytes
Differentiated Services Field: 0xe0 (DSCP 0x38: Class Selector 7; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))
1110 00.. = Differentiated Services Codepoint: Class Selector 7 (0x38)
.... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)
Total Length: 60
Identification: 0xc72e (50990)
Flags: 0x00
0... .... = Reserved bit: Not set
.0.. .... = Don't fragment: Not set
..0. .... = More fragments: Not set
Fragment offset: 0
Time to live: 63
Protocol: SCTP (132)
Header checksum: 0x2e66 [validation disabled]
[Good: False]
[Bad: False]
Source: 10.21.112.2 (10.21.112.2)
Destination: 10.168.168.9 (10.168.168.9)
[Source GeoIP: Unknown]
[Destination GeoIP: Unknown]
Stream Control Transmission Protocol, Src Port: 3876 (3876), Dst Port: diameter (3868)
Source port: 3876
Destination port: 3868
Verification tag: 0x00000000
[Assocation index: 0]
Checksum: 0xc5c2a020 (not verified)
INIT chunk (Outbound streams: 16, inbound streams: 16)
Chunk type: INIT (1)
0... .... = Bit: Stop processing of the packet
.0.. .... = Bit: Do not report
Chunk flags: 0x00
Chunk length: 28
Initiate tag: 0x0bbf238b
Advertised receiver window credit (a_rwnd): 486500
Number of outbound streams: 16
Number of inbound streams: 16
Initial TSN: 0
IPv4 address parameter (Address: 10.21.112.2)
Parameter type: IPv4 address (0x0005)
0... .... .... .... = Bit: Stop processing of chunk
.0.. .... .... .... = Bit: Do not report
Parameter length: 8
IP Version 4 address: 10.21.112.2 (10.21.112.2)
发表评论