您的位置:首页 > 其它

链路层基本问题 : 封装成帧、差错检测、流量控制

2017-10-01 20:22 309 查看

一、封装成帧

1、MAC帧



类型字段 (2个字节):

用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。

数据字段 (46-1500):

正式名称是MAC客户数据字段最小长度64 字节-18字节的首部和尾部 = 数据字段的最小长度。

FCS字段 (4 字节):

当数据字段的长度小于 46 字节时,应在数据字段的后面加入整数字节的填充字段,以保证以太网的MAC帧长不小于64 字节。

在帧的前面插入的 8 字节中的第一个字段共 7 个字节,是前同步码,用来迅速实现 MAC帧的比特同步。第二个字段是帧开始定界符,表示后面的信息就是MAC帧

2、封装成帧

1)、封装成帧(framing):就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。

2)、接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。

3)、分组交换的一个重要概念:就是所有在因特网上传送的数据都是以分组(即IP数据报)为传送单位。

4)、网络层的IP数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,就构成了一个完整的帧。

帧长等于数据部分长度加上帧首部和帧尾部的长度,而首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。

5)、首部和尾部还包含许多必要的控制信息,在发送帧时,是从帧首部开始发送。各种数据链路层协议都要对帧首部和帧尾部的格式有明确的规定。为了提高帧的传输效率,应当使帧的数据部分长度尽可能大于首部和尾部的长度。但是,每一种链路层协议都规定了帧的数据部分的长度上限——最大传送单元MTU(Maximum Transfer Unit)。



注:

 当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符。

 控制字符SOH(Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT(End Of Transmission)表示帧的结束。他们的十六进制编码分别是01(二进制是00000001)和04(二进制是00000100)。

 



发送错误:

 当数据在传输中出现差错时,帧定界符的作用更加明显。假定发送端在尚未发完一个帧时突然出现故障,中断了发送。但随后很快又恢复正常,于是重新从头开始发送刚才未发送完的帧。由于使用了帧定界符,在接收端就知道前面收到的数据时个不完整的帧(只有首部SOH,没有传输结束符EOT),必须丢弃。而后面收到的数据有明显的帧定界符(SOH和EOT),因此这是一个完整的帧,应当收下。

二、透明传输

透明:某一个实际存在的事物看起来却好像不存在一样。对于数据链路层传输数据,表示无论什么样的比特组合都能通过这个数据链路层,因此数据链路层相对于这些数据来说就是透明的。

1、界定差错

  由于帧的开始和结束的标记是专门指明的控制字符,因此,所传输的数据中的任何8比特的组合一定不允许和用作帧界定符的控制字符的比特编码一样,否则就会出现帧界定错误。

  当传送的帧是用文本文件组成的帧时,其数据部分显然不会出现像SOH和EOT这样的帧界定符,可见不管从键盘上输入什么字符都可以放在这样的帧中传输,这样的传输就叫做透明传输。

  但当数据部分是非ASCII码的文本文件时,情况就不同了。如果某个数据的某个字节的二进制代码出现和SOH、EOT这种控制字符,数据链路层就会误认为“找到帧的边界”,收下部分帧,丢弃剩下的部分数据。

  



2、解决办法

  为了解决透明传输问题,就必须使数据中的SOH和EOT不被解释为界定符。

  发送端的数据链路层在数据中出现控制符”SOH”和”EOT”的前面插入一个转义字符”ESC”(其十六进制编码是1B)。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)或字符填充(character stuffing)。如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个。

  



三、差错检测

  现实的通信链路不会是理想的。这就是说,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1.这就是比特差错。

  在一段时间内,传输错误的比特占所传输比特总数的比率为误码率BER。为了保证传输的可靠性,目前在数据链路层广泛使用了循环冗余检验CRC,详情见我的另一篇博客。

CRC循环冗余检验

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息