Page 313 - Web性能权威指南
P. 313
于,SCTP 是在“较低层”实现同样的功能,从而可以支持任意应用数据的有效传
输及多路复用。
SCTP 分组由公共首部及一或多个控制字段或数据块组成。首部 12 字节,用于标识
来源和目标端口、针对当前 SCTP 关联随机生成的验证标签,以及整个分组的校验
和。首部后面是一或多个控制字段或数据块,图 18-15 中所示的数据报只包含一个
数据块。
• 所有数据块的类型都是 0×0。
• U(unordered)位表示数据块是不是乱序数据块。
• B 和 E 位用于表示分成多个数据块的消息的起止位置:B=1,E=0 表示消息的开
始位置;B=0,E=0 表示中间位置;B=0,E=1 表示末尾位置;B=1,E=1 表示没
有分段的消息。
• 长度表示数据块的大小,包括首部(比如, 16 字节的块首部,加上净荷数据的大小)。
• TSN(传输序号)是一个 32 位数,SCTP 内部使用它确认收到分组及检测重复的
分组。
• 流标识符表示当前数据块所属的流。
• 流序号是一个自动递增的消息编号,表示关联的流;分段消息的流序号相同。
• PPID(净荷协议标识符)是一个自定义字段,由应用填写,用于沟通与传输的块
相关的其他元数据。
DataChannel 使用 SCTP 首部的 PPID 字段标记传输的数据类型:0×51 表
示 UTF-8,0×52 表示二进制应用净荷。
一下子说了这么多,可能不太好记。再重复一遍,这次我们在前面提到的 WebRTC
和 DataChannel API 要求的背景下讨论。
• SCTP 首部包含一些冗余字段:SCTP 信道建立在 UDP 之上,后者已经指定了来
源和目标端口(参见图 3-2)。
• SCTP 利用首部中的 B、E 和 TSN 字段辅助处理消息分段:可以标识每个块的位
置(开始、中间、末尾),TSN 值用于表示中间块的次序。
• SCTP 支持流的多路复用:每个流都有一个唯一的流标识符,用于关联当前数据
块与活动的那个流。
• SCTP 为每条应用消息指定一个独特的序号,利用该序号可以实现有序交付的语
义。可选地,如果设置了 U 位(乱序交付),SCTP 可以继续使用这个序号来处
理消息分段,但消息可以乱序交付。
WebRTC | 303