龙空技术网

「笔记」计算机网络数据链路层-封装成帧

Bing呢 120

前言:

而今大家对“封装成帧的两种方法”大体比较着重,姐妹们都想要剖析一些“封装成帧的两种方法”的相关知识。那么小编也在网上搜集了一些关于“封装成帧的两种方法””的相关资讯,希望看官们能喜欢,小伙伴们一起来学习一下吧!

封装成帧是指数据链路层给上层交付的协议数据单元添加帧头帧尾使之成为帧。

在帧头帧尾中包含重要而控制信息,如下图以太网V2的MAC帧格式(最大长度为518字节)

中间的数据载荷是上层(网络层)交付下来的数据协议单元,前面6、6、2字节分别包含目的地址、源地址、类型,这是帧头,后面的4字节是FCS (帧校验序列(帧尾))

下图是PPP帧的格式

发送方的数据链路层,将上层(网络层)交付下来的协议单元封装成帧后,在通过物理层将构成帧的各比特转换成电信号发送到传输媒体(如网线)。

那么,接收方的数据链路层如何从物理层交付的比特流中提取出一个个帧?例如,010101001010101001010010010100101001这一串比特流是一个帧吗?

帧头帧尾的作用之一就是帧定界。例如上图PPP帧的格式,在其帧头和帧尾中,分别有一个一字节的标志字段,其作用就是帧定界。假设发送方发送的是PPP帧,其中的01111110就是帧定界标志,接收方的数据链路层就可以依据帧定界标志,从物理层交付的比特流中提取出一个个的帧。

当然,并不是每一种数据链路层协议的帧都包含帧定界标志。例如上面的以太网V2的MAC帧格式,他的帧头帧尾没有包含帧定界标志,那么接收方数据链路层如何从物理层交付的比特流提取出帧?实际上,以太网的数据链路层封装好MAC帧后,交给物理层,物理层会在MAC帧前面加上8字节的前导码,然后再将比特流转换成电信号发送。

前导码中的前七个字节为前同步码,作用是使接收方的时钟同步。之后的一字节为帧开始定界符,表明其后面紧跟着的就是MAC帧。

另外,以太网还规定了帧间间隔为96比特的发送时间。因此,MAC帧并不需要帧结束定界符。同时,这个帧间间隔还有其他作用。

透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。例如,数据链路层给上层交付的数据单元加一个帧头帧尾,其中一个字节flag用来做帧定界符,如果,上层交付的数据单元就包含了一个flag,接收方数据链路层接受到帧后,发现有三个flag帧定界符,接收方如何区分帧开始帧结束?

例如,在发送帧之前,对帧的数据部分进行扫描,每扫描出一个帧定界flag,就在其前面插入一个转义字符ESC(转义字符后面的字节是数据)。

这样,接收方在接收到后,遇到第一个帧界定符,认为这是帧的开始,遇到转义字符ESC时,就会知道接下来一个字节虽然和帧定界符相同,但他是数据,而不是定界符。从而剔除转义字符,并将后面的字节当数据继续提取。

那么,我们再考虑一种情况,上次交付的数据单元,既包含了帧定界符一样的字节,有包含了转义字一样的字节,该如何处理呢?

一样的操作,在帧发送之前,对帧的数据部分进行扫描,每扫描出一个帧定界flag或者转义符ESC,就在其前面插入一个转义字符ESC(转义字符后面的字节是数据)。转义字符是一种特殊控制字节,长度为1字节,十进制值为27,而并不是ESC这三个字符。

上面介绍的都是面向字节的物理链路层使用字节填充(字符填充)的方法实现透明传输。

面向比特的数据链路层使用比特填充的方法可实现透明传输。

例如这段比特流,数据部分存在两个帧定界标志01111110,在发送前,可以采用0比特填充法,对数据部分进行扫描,每五个连续的1后面就插入一个0,这样就实现了帧界定符的唯一性,也就实现了透明传输。接收方的数据链路层在帧的数据部分中每5个连续1后面的比特0剔除即可。

为了提高帧的传输效率,应当使帧的数据部分尽可能大,帧的数据部分长度应该远大于帧头帧尾的长度,这样才能提高帧的传输效率,毕竟数据部分才是真正要传输的东西,帧头帧尾只是为了实现数据链路层的控制功能。

本文为笔者自学过程中整理的笔记,如有错误之处,欢迎指正,谢谢![来看我][来看我][爱慕]

上一篇:「笔记」计算机网络体系结构数据链路层概述

下一篇:「笔记」计算机网络数据链路层之差错检测

标签: #封装成帧的两种方法 #封装成帧的两种方法是 #封装成帧的两种方法是哪两种 #封装成帧的两种方法有哪些 #封装成帧是什么含义