成帧目的
为了使接收方的数据链路层更容易的将物理层传来的原始比特流进行拆分,拆分为发送方的帧。
应当做到:接收方容易发现新帧的开始,同时使用尽可能少的信道带宽。
成帧方法
字节计数法
利用头部的一个字段来标识该帧中的字符数。
问题:只要有一个头部错误,接收方就会失去同步。因此很少使用。
字节填充的标志字节法
让每一帧用某种特殊的字节作为开始和结束的标志。两个连续的FLAG代表一帧结束,下一帧开始。
如果真正的数据中不小心包含了这个特殊字节,那发送方输出的就会在它前面添加一个转义字节,表示这不是我们要看的标志字节。接收方数据链路层会自动剔除这个转义字节。
上图的字节填充方案是为PPP协议(Point-to-Point Protocol)所使用的。
比特填充的标志比特法
事实上,帧的划分不一定要按照以8bit为单位的字节,可以是比特级的划分。以一个特殊的比特模式来标志每个帧的开始和结束。利用01111110或0x7E标记。
当发送方发送的数据中出5个连续的1,就要在输出的比特流中自动填入一个0(类似于上面的转义操作)。接收方会自动剔除这个0。
这种方法被HDLC(高级数据链路控制)协议所使用。
物理层编码违禁法
上面两种方法的缺点,显然是会增加帧的长度。
我们可以聪明的利用物理层的特点来避免转义位的使用。比特编码成信号通常包括一些帮助接收器同步的冗余比特,这些冗余代表一些信号不会出现在常规数据中。我们可以利用这些保留的信号来指示帧的开始和结束,也不再需要填充数据。
许多数据链路层协议综合使用了这些方法。
下一节,我们将介绍数据链路层的差错控制。