【计算机网络结构中数据链路层的三个基本问题】
作者:互联网
在准本复试知识时候,看到有一个关于计算机网络中数据链路层的三个基本问题
1、封装成帧
封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
确定帧的界限首部和尾部的一个重要作用就是进行帧定界。
- 接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
- 分组交换的一个重要概念:就是所有在因特网上传送的数据都是以分组(即IP数据报)为传送单位。
- 网络层的IP数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,就构成了一个完整的帧。
- 帧长等于数据部分长度加上帧首部和帧尾部的长度,而首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。
- 首部和尾部还包含许多必要的控制信息,在发送帧时,是从帧首部开始发送。
- 各种数据链路层协议都要对帧首部和帧尾部的格式有明确的规定。
- 为了提高帧的传输效率,应当使帧的数据部分长度尽可能大于首部和尾部的长度。但是,每一种链路层协议都规定了帧的数据部分的长度上限——最大传送单元MTU(Maximum Transfer Unit)。
当数据在传输中出现差错时,帧定界符的作用更加明显。假定发送端在尚未发完一个帧时突然出现故障,中断了发送。但随后很快又恢复正常,于是重新从头开始发送刚才未发送完的帧。
2、透明传输
由于帧的开始和结束的标记是使用专门指明的控制字符,因此,所传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。
2.1用字节填充法解决透明传输的问题发送端的数据链路层在数据中出现控制字符“SOH"或“EOT”的前面插入一个转义字符“ESC"(其十六进制编码是1B)。
字节填充(bytestuffing)或字符填充(characterstuffing):接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
如果转义字符也出现数据当中,那么应在转义字符前插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
当传送的帧是用文本文件组成的帧时(文本文件中的字都是从键盘上输入的),其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。
2.2用零比特填充法解决透明传输的问题
① 解决 数据中出现 01111110 0111111001111110 数据的情况 , 实现透明传输 ;
② 发送端 : 扫描发送数据 , 发现有连续的 5 个 1,就在后面加上一个 0 ; 这样 帧数据 永远不会出现 6 个 1 的数据 ;
③ 接收端 : 扫描接收数据 , 发现有连续的 5 个 1 , 就将后面的 0 删除 ; 对应 发送端的操作 ;
这样在比特流中可以传输任意比特组合 , 不会引起 数据帧 边界判定错误的问题 , 实现了透明传输 ;
3、差错控制
1.传输过程中可能会产生比特差错: 1可能会变成0而0也可能变成1。
2.在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(BitErrorRate)。
3.误码率与信噪比有很大的关系。
4.为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
法一:循环冗余检验(CRC)的检错技术。
方法在我之前一个文章里:
学习循环冗余CRC校验
法二:在数据后面添加上的冗余码称为帧检验序列FCS(FrameCheckSequence)。
参考链接
标签:尾部,首部,计算机网络,传输,转义字符,三个,数据,链路层 来源: https://blog.csdn.net/ice_masters/article/details/123582348