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
   308   309   310   311   312   313   314   315   316   317   318