帧头
和帧尾
使之成为帧
在帧头和帧尾中包含有重要的控制信息
数据链路层将上层交付下来的协议数据单元封装成帧后,通过物理层将构成帧的各比特转换成电信号发送到传输媒体
那么接收方的数据链路层如何从物理层交付的比特流中提取出一个个的帧?
帧头和帧尾的作用之一就是 帧 定 界 \color{red}帧定界 帧定界
例如:
帧定界
假设发送方发送的是 PPP
帧,比特流中红色部分是帧定界标志。那么接收方的数据链路层就可以依据帧定界标志从物理层交付的比特流中提取出一个个的帧
例如,以太网版本 2
的 MAC
帧格式
那么,接收方又是如何从物理层交付的比特流中提取出一个个的以太网帧呢?
实际上,以太网的数据链路层封装好 MAC
帧后,将其交付给物理层。
物理层会在 MAC
帧前面添加
8
8
8 字节的前导码
,然后再将比特流转换成电信号发送
前导码
中的前
7
7
7 各字节为前同步码
使接收方的时钟同步
前导码
之后的
1
1
1 字节为帧开始定界符
MAC
帧。另外,以太网还规定了帧间间隔时间为 96 96 96 比特时间。
因此,MAC
帧并不需要帧结束定界符
透明传输
例如:这是发送方数据链路层收到其上层交付的协议数据单元,给其添加帧头和帧尾使其成为帧。
帧定界标志也就是一个特定数值
若在上层交付的协议数据单元中,敲好也包含了这个特定数值,接收方还能正确接收该帧么?
接收方在收到第一个帧定界标志时,认为这是帧的开始,这并没有错误。
当接收方在收到第二个帧定界标志时,会误认为帧结束了。
若数据链路层不采取其他措施来避免接收方对帧是否结束的误判,就不能成为透明传输
不能包含帧定界符
很显然,这样的数据链路层没有什么使用价值。
实际上,各种数据链路层协议,一定会想办法来解决这个何题。
例如:
转移字符
第一个帧定界符
,认为这是帧的开始转移字符
时就知道,其后面的
1
1
1字节内容虽然与帧定界符相同,但他是数据不是定界符。若在上层交付给数据链路层的协议数据单元中,既包含了帧定界符
,又包含了转移字符
,该如何处理?
方法仍然是在发送帧之前对帧的数据部分进行扫描,每出现一个帧定界符或转义字符,就会在其前面添加一个转移字符
刚刚说明的是面向字节的物理链路。
面向字节的物理链路使用字节填充(或称字符填充)的方法实现透明传输。
面向比特的物理链路使用比特填充的方法实现透明传输
例如:某个点对点协议的帧。这里仅处理帧定界标志,未给出其他控制字段。而帧的数据部分,出现了两个帧定界标志,而实际上是数据。
在发送时候,可以采用零比特填充法,每
5
5
5 个连续
的比特
1
1
1 后面就插入
1
1
1 个比特
0
0
0。这样就确保了帧定界在整个帧中的唯一性。也就可以实现透明传输
接收方从物理层中交付的比特流中提取帧时,将帧的数据部分中的每 5 5 5 个连续的比特后面的那个比特 0 0 0 剔除即可。
解析:
高级数据链路控制协议 HDLC
采用帧头和帧尾中的标志字段作为帧定界符,其值为
01111110
01111110
01111110;
HDLC
为了实现“透明传输”,采用 “零比特填充法” (每
5
5
5 个连续
1
1
1 后面插入一个比特
0
0
0 );
答案 A
为了提高帧的传输效率,应当使 帧 的 数 据 部 分 的 长 度 尽 可 能 大 些 \color{red}帧的数据部分的长度尽可能大些 帧的数据部分的长度尽可能大些。
仅从数据链路层来看,帧的数据部分才是真正要传输的数据。
帧头
和帧尾
是为了实现数据链路层功能而额外添加的。
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限
MTU
(Maximum Transfer Unit)。