封装成帧
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
帧头和帧尾中包含有重要的控制信息。
帧头和帧尾的作用之一就是帧定界。

例如上图中,以太网的版本2的MAC格式,有上层交付下来的协议数据单元、帧头和帧尾。还有点对点协议PPP的帧的格式,也有上层交付下来的协议数据单元、帧头和帧尾。
发送方的数据链路层将上层交付下来的协议数据单元封装成帧后,还有通过物理层,将构成帧的各比特转换成电信号发送到传输媒体。那么,接收方的数据链路层,如何从物理层交付的比特中提取出一个个的帧呢?

实际上,帧头和帧尾的作用之一就是帧定界。例如,这是PPP帧的格式,在其帧头和帧尾中,各包含有一个长度为1的字节的标志字段,其作用就是帧定界。假设发送方发送的是PPP帧,比特流中红色部分是帧定界标志,那么接收方的数据链路层就可以依据帧定界标志,从物理层交付的比特流中提取出一个个的帧。

需要说明的是,并不是每一种数据链路层协议的帧都包含有帧定界标志。例如,这是以太网版本2的MAC格式。那么,接收方又是如何从物理层交付的比特流中提取出一个个的以太网帧呢?

实际上,以太网的数据链路层封装好MAC帧后,将其交付给物理层,物理层会在MAC帧前面添加8字节的前导码,然后再将比特流转换成电信号发送。前导码中的前7个字节为前同步码,作用是使接收方的时钟同步,之后的1个字节为帧开始定界符,表明其后面紧跟着的就是MAC帧。

另外,以太网还规定了帧间间隔时间为96比特的发送时间。因此,MAC帧并不需要帧结束定界符。需要说明的是,帧间间隔还有其他作用,我们在后面的章节中再进行介绍。
透明传输
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像不存在一样。
面向字节的物理链路使用字节填充(或称字符填充)的方法来实现透明传输。
对于面向比特的物理链路使用比特填充的方法实现透明传输。

面向字节填充
我们来举例说明,发送方数据链路层收到其上层交付的协议数据单元,给其添加帧头和帧尾,使其成为帧。如果在上层交付的协议数据单元中,恰好也包含了这个特定数值,接收方还能正确接收该帧吗?
回答是否定的,接收方在收到第一个帧定界标志时,认为这是帧的开始,这并没有错误,当接收方再次接收到帧定界标志时,会误以为帧结束了。如果数据链路层不采取其他措施,来避免接收方对帧是否结束的误判,就不能称为透明传输。也就是说,数据链路层对上层交付的协议数据单元有限制,其内容不能包含帧定界符。很显然,这样的数据链路层没有什么使用价值。

实际上,各种数据链路层协议,一定会想办法来解决这个问题,例如,在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符,就在其前面插入一个转义字符,接收方数据链路层在物理层交付的比特流中提取帧,遇到转义字符时就知道其后面的1字节内容虽然与帧定界符相同,但它是数据而不是定界符,剔除转义字符后将其后面的内容作为数据继续提取。(如果出现转义字符时也同样的在转义字符前加上转义字符)
面向比特填充

在发送前,可以采用零比特填充法,对数据部分进行扫描,每5个连续的比特后面就插入1个比特0。跟面向字节一样,接收方会剔除其中的比特0。





