文章目录
封装成帧
封装成帧是指数据链路层给上层交付下来的协议数据单元PDU添加一个首部和一个尾部,使之成为帧。
- 帧的首部和尾部中包含有一些 重要的控制信息。
- 帧首部和尾部的作用之一就是帧定界。
接收方的数据链路层如何从物理层交付上来的比特流中提取出一个个的帧???
???
为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度。
考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(Maximum Transfer Unit,MTU)。例如,以太网的MTU为1500个字节。
透明传输
透明传输是指数据链路层对上层交付下来的协议数据单元PDU没有任何限制,就好像数据链路层不存在一样。
反例 下图就演示了接收方不能正常收到桢信息的案例. 不满足透明传输.
措施:
发送方在把桢交给物理层之前, 对桢的数据载荷进行扫描, 每出现一个桢定界符, 就在其前面插入一个转义字符. 接收方的数据链路层在物理层交付的比特流中提取帧时, 遇到转义字符就知道了其后面是数据而不是帧定界符.
上面的措施似乎不错呢, 解决了透明传输的问题. 那么此时如果数据载荷本身中既包含帧定界符又包含转义字符, 阁下又该如何应对呢?
-
面向字节的物理链路使用字节填充的方法实现透明传输。
-
面向比特的物理链路使用比特填充的方法实现透明传输。
注意上面的两种方法并不是所有的协议采用的方法, 还有其他的 这里就不介绍了.
发送方的数据链路层将数据发送给物理层前先对数据载荷进行扫描, 发现连续5个比特1, 就在其后填充一个比特0. 经过如此一番填充操作就可以保证其数据载荷不会包含帧定界符了.
接收方的数据链路层在把数据载荷向上交付给网络层前, 对数据载荷进行扫描, 当发现5个连续的比特1时, 就把其后面的一个比特0删除掉, 就还原出原始数据的数据载荷.
习题
【2013年 题37】HDLC协议对0111110001111110组帧后对应的比特串为( )。
A. 011111000011111010
B. 011111000111110101111110
C. 01111100011111010
D. 011111000111111001111101
【练习】在某个数据链路层协议中使用下列字符编码:
A:01000111
B:11100011
ESC:11100000
FLAG:01111110
其中,FLAG作为帧定界符,ESC作为转义字符。
假设帧的数据载荷为4个字符A、B、ESC以及FLAG,请分别使用字符填充法和零比特填充法将其封装成帧。
解析
【2013年 题37】
高级数据链路控制协议HDLC采用帧首部和帧尾部中的标志字段作为帧定界符,其值为01111110。
HDLC为了实现"透明传输",采用"零比特填充法",即每五个连续比特1后面插入一个比特0。
练习题: