链路层的封装成帧和透明传输基本问题
链路层的封装成帧和透明传输基本问题
封装成帧
网络层向下传递的数据再添加上首部和尾部就成为了一个完整的帧。其中的首部和尾部是用来进行帧定界的。其中的数据部分应当尽可能大一点,但是由于差错控制等许多因素,我们应当限制数据部分的长度。实现帧定界有许多方法,其中比较容易的一种方法是以太网中使用的方法——在帧与帧之间加上时间间隔。另一种常用的方法是在各帧的起始处(终点处)加上帧开始标志(帧结束标志),这两个标志可相同可不相同。
这样就会出现一个问题?你想一想会是什么问题呢?
是不是数据部分可能出现和帧开始标志或帧结束标志相同的数据?这样就可能会出现误判到帧开始处和帧结束处。
为了解决这个问题,我们使用字节填充(字符填充)或比特填充的方式。
透明传输
字节填充(字符填充)
就是在数据中出现的帧开始标志和帧结束标志前加上一个转义字符。这样接收端就不会把数据中的和帧开始标志或帧结束标志相同的数据识别为帧开始标志或帧结束标志。而如果数据中有转义字符的话,就在转义字符前加上转义字符。
比特填充
PPP 协议采用的就是比特填充,它的开销更小。它是在数据中出现 5 个连续的 1 时就立刻填充一个 0,因为它用“01111110”来表示帧定界标志,而 5 个 1 后面加 0 就会避免出现 6 个连续的 1。当接收端遇到 5 个连续的 1 就将后面的 0 删除,来还原原来的比特流。
明天我们继续。关注博主不迷路~
版权声明: 本文为 InfoQ 作者【Regan Yue】的原创文章。
原文链接:【http://xie.infoq.cn/article/80e6e33fd7891b36773399626】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论