三、数据链路层
三个基本问题:封装成帧、透明传输、差错控制
封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
透明传输:首部和尾部的一个重要作用就是进行帧定界。此外还包括必要的控制信息。
当数据部分是非 ASCII 码的文本文件时,如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,数据链路层就会错误地“找到帧的边界”
差错检测:为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
透明传输的解决方式:字节填充 (byte stuffing) 或字符填充 (character stuffing)。
发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是 1B)。
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
差错控制:在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。
(1) 若得出的余数 R = 0,则判定这个帧没有差错,就接受 (accept)。
(2) 若余数 R ≠ 0,则判定这个帧有差错,就丢弃。
循环冗余校验码的计算:https://blog.csdn.net/DTRblank/article/details/123526216
仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受 (accept)。
单纯使用 CRC 差错检测技术不能实现“无差错传输”或“可靠传输”。
PS:“无比特差错”与“无传输差错”是不同的概念。
比特差错:帧内部比特位出现错误,可以通过帧的FCS(方法:CRC检验)序列保证无比特差错
传输差错:帧丢失、帧重复、帧失序
无差错传输:要做到“无差错传输”(即发送什么就收到什么)就必须再加上帧编号、确认和重传机制。
无差错接受:凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错。
本章介绍的数据链路层协议都不是可靠传输的协议。
3.1 以太网帧
最常用的 MAC 帧是以太网 V2 的格式。
⑴.以太网 V2 的 MAC 帧格式
⑴无效的 MAC 帧
数据字段的长度与长度字段的值不一致;
帧的长度不是整数个字节;
用收到的帧检验序列 FCS 查出有差错;
数据字段的长度不在 46 ~ 1500 字节之间。
有效的 MAC 帧长度为 64 ~ 1518 字节之间。
对于检查出的无效 MAC 帧就简单地丢弃。以太网不负责重传丢弃的帧。
⑵IEEE 802.3 MAC 帧格式
与以太网 V2 MAC 帧格式相似,区别在于:
IEEE 802.3 规定的 MAC 帧的第三个字段是“长度 / 类型”。
①当这个字段值大于 0x0600 时(相当于十进制的 1536),就表示“类型”。这样的帧和以太网 V2 MAC 帧完全一样。
②当这个字段值小于 0x0600 时才表示“长度”。
当“长度/类型”字段值小于 0x0600 时,数据字段必须装入上面的逻辑链路控制 LLC 子层的 LLC 帧。
现在市场上流行的都是以太网 V2 的 MAC 帧,但大家也常常把它称为 IEEE 802.3 标准的 MAC 帧。
⑶.帧间最小间隔
标签:传输,转义字符,差错,MAC,数据,以太网,链路层 From: https://www.cnblogs.com/tenyuan/p/16589826.html帧间最小间隔为 9.6 ms,相当于 96 bit 的发送时间。
一个站在检测到总线开始空闲后,还要等待 9.6 ms 才能再次发送数据。
这样做是为了使刚刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备。