计算机网络:Framing
组帧(framing)指的是将比特封装为帧的过程。
如何确定哪些比特组成了一帧?
Byte-Oriented Protocols
Sentinel-based Approaches
BISYNC 的帧格式:
BISYNC 使用特殊字符(sentinel characters)来指示帧的起始和结束。帧的开始由 SYN (synchronization) 字符标识,数据部分被包含在 STX (start of text) 和 ETX (end of text) 两个字符之间。
为了解决 ETX 字符可能会被包含在该帧的数据部分中的问题,BISYNC 采用了 character stuffing 的方法:在主体中的 ETX 字符前放置转义字符(DLE, data-link-escape)。
帧格式的最后还包含了 CRC (cyclic redundancy check),这是用于检测传输错误的。
PPP 的帧格式:
和 BISYNC 类似,也使用了 sentinels 和 character stuffing。其中 Flag 为 01111110,Payload 的大小是可变的,但是默认为 1500 字节。
PPP 中的 byte stuffing:发送端将 7E 变为 7D5E,7D 变为 7D5D。接收端删除 7D,并将其后的 5E 变为 7E,5D 变为 7D。
Byte-Counting Approach
DDCMP 的帧格式:
COUNT 中指定了主体包含了多少字节。如果 COUNT 部分被污染了,那么就会造成 framing error。
Bit-Oriented Protocols
HDLC 的帧格式:
HDLC 使用比特序列 01111110 来标识帧的起始和结束,并使用了 bit stuffing 的方法来辨别它们的位置:发送端在每五个连续的 1 后面插入一个 0,接收端删去五个连续的 1 后面的 0。
Clock-Based Framing
SONET STS-1 的帧格式:
接收端通过判断哪一部分在每 9 * 90 = 810 个字节中重复出现来确定 Overhead 的位置并进行同步,从而得到正确的帧。
SONET 实际上比较复杂,这里就不展开了。
SONET | Optical carrier | Line rate (Mbps) |
---|---|---|
STS-1 | OC-1 | 51.84 |
STS-3 | OC-3 | 155.52 |
STS-12 | OC-12 | 622.08 |
STS-48 | OC-48 | 2488.32 |
STS-192 | OC-192 | 9953.28 |