3.2 封装成帧
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾,使之成为帧。
帧定界
并不是每一种数据链路层协议的帧都包含有帧定界标志。例如,下图是以太网版本2的MAC格式,在其帧头和帧尾中并没有包含帧定界标志。那么接收方又是如何从物理层交付的比特流中提取出一个个的以太网帧呢?
实际上,以太网的数据链路层封装好MAC帧后将其交付给物理层,物理层会在MAC帧前面添加8字节的前导码,然后再将比特流转换成电信号发送,前导码中的前7个字节为前同步码,作用是使接收方的时钟同步。之后的1字节为帧开始定界符,表明其后面紧跟着的就是MAC帧。
另外以太网还规定了帧间间隔时间为96比特的发送时间,因此MAC帧并不需要帧结束定界符。
透明传输
透明传输是指数据链路层对上层交付的传输数据并没有任何限制,就好像数据链路层不存在一样。
面向字节的透明传输
思考: 如果在上层交付的协议数据单元中,恰好也包含了这个特定数值,接收方还能正确接收该帧吗?
回答是否定的。接收方在收到第一个帧定界标志时,认为是帧的开始,这并没有错误。当接收方再次接收到帧定界标志时,会误认为真结束了。如果数据链路层不采取其他措施来避免接收方对帧是否结束的误判,就不能成为透明传输,也就是说数据链路层对上层交付的协议数据单元有限制,其内容不能包含帧定界符。很显然,这样的数据链路层没有什么使用价值。
实际上,各种数据链路层协议一定会想办法来解决这个问题。例如,在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符,就在其前面插入一个转义字符。
接收方数据链路层在物理层交付的比特流中提取帧,遇到第一个帧定界符时,认为这是帧的开始,当遇到转义字符时就知道其后面的一字节内容虽然与帧定界符相同,但它是数据而不是帧定界符。剔除转义字符后,将其后面的内容作为数据继续提取,对于转义字符也是相同的处理。当再次提取到帧定界符时,表明这是帧的结束。
思考: 在上层交付给数据链路层的协议数据单元中,既包含了帧定界符,又包含了转义字符,应该怎么处理呢?
方法仍然是在发送帧之前对帧的数据部分进行扫描,每出现一个帧定界符或转义字符,就在其前面插入一个转义字符。需要说明的是转义字符是一种特殊的控制字符,其长度为1个字节,十进制值为27,而并不是E、S以及C这三个字符。
面向比特的透明传输 ex:
例题: