0 本节主要内容
问题描述
解决思路
1 问题描述
数据链路层主要面临四个问题:
- 封装成帧;
- 透明传输;
- 差错检测;
- 实现相邻节点之间的可靠通信。
1.1 子问题1:封装成帧
怎么知道数据从哪里开始?到哪里结束?
生活中类似的例子:文件有表示文件开头的标识,还有标识文件结尾的标识。
1.2 子问题2:透明传输
这个问题是子问题1带来的,由于要解决子问题1,会引入一些特殊字符,在实际传输的数据中,如果出现了这些特殊字符又怎么办?
1.3 子问题3:差错检测
如何知道数据在传输过程中出现了错误?
1.4 子问题4:实现相邻节点之间的可靠通信
这个问题又存在若干个子问题:
- 如果采用广播信道,如何避免冲突?(集线器工作方式)
- 如果采用交换方式,如何进行自学习和转发?(交换器工作方式)
2 解决思路
2.1 封装成帧:解决子问题1
封装成帧 (framing):在一段数据的前后分别添加首部和尾部,构成一个帧。
首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。
控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始。
控制字符 EOT (End Of Transmission) 放在一帧的末尾,表示帧的结束。
2.2 透明传输:解决子问题2
问题:如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,数据链路层就会错误地"找到帧的边界",导致错误。
用"字节填充"或"字符填充"法解决透明传输的问题:
2.3 CRC:解决子问题3
问题:在传输过程中可能会产生比特差错, 1 → 0 1 \rightarrow 0 1→0, 0 → 1 0 \rightarrow 1 0→1。
在发送端,先把数据划分为组。假定每组 k k k 个比特。 CRC 运算在每组 M M M 后面再添加供差错检测用的 n n n 位冗余码,然后构成一个帧发送出去。一共发送 ( k + n ) (k + n) (k+n) 位。
CRC 冗余码的计算:
CRC 冗余码的计算举例:
2.4 CSMA/CD:解决子问题4-1
问题:多个站点同时发送时,会产生发送碰撞或冲突,导致发送失败。
A 需要单程传播时延的 2 倍的时间,才能检测到与 B 的发送产生了冲突。
CSMA/CD 协议工作流程:
碰撞后重传的时机:采用截断二进制指数退避 (truncated binary exponential backoff) 确定。
发生碰撞的站停止发送数据后,要退避一个随机时间后再发送数据。
- 基本退避时间 = 2 τ 2 \tau 2τ
- 从整数集合 { 0 , 1 , ... , ( 2 k − 1 ) } \{0, 1, \dots , (2k - 1)\} {0,1,...,(2k−1)}中随机地取出一个数,记为 r r r。
重传所需的时延 = r × 基本退避时间 r \times 基本退避时间 r×基本退避时间。 - 参数 k = min { 重传次数 , 10 } k = \min\{重传次数, 10\} k=min{重传次数,10}
- 当重传达 16 次仍不能成功时即丢弃该帧,并向高层报告。
举例:
- 第 1 次冲突重传时:
k = 1 k = 1 k=1, r r r 为 { 0 , 1 } \{0,1\} {0,1} 集合中的任何一个数。 - 第 2 次冲突重传时:
k = 2 k = 2 k=2, r r r 为 { 0 , 1 , 2 , 3 } \{0,1,2,3\} {0,1,2,3} 集合中的任何一个数。 - 第 3 次冲突重传时:
k = 3 k = 3 k=3, r r r 为 { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 } \{0,1,2,3,4,5,6,7\} {0,1,2,3,4,5,6,7} 集合中的任何一个数。
若连续多次发生冲突,表明可能有较多的站参与争用信道。
上述退避算法可使重传需要推迟的平均时间随重传次数而增大(称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。
2.5 交换机工作原理:解决子问题4-2
问题:碰撞域(collision domain)又称为冲突域,指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或冲突的那部分网络。碰撞域越大,发生碰撞的概率越高。
2.5.1 用交换机取代集线器
集线器:
- N N N 个用户共享集线器提供的带宽 B B B。
- 平均每个用户仅占有 B / N B/N B/N 的带宽。
以太网交换机的每个接口都是一个碰撞域:
以太网交换机的优点:每个用户独享带宽,增加了总容量。
- 交换机为每个端口提供带宽 B B B。
- N N N 个用户,每个用户独占带宽 B B B。
- 交换机总容量达 B × N B × N B×N 。
2.5.2 以太网交换机的工作原理:自学习(源地址)、转发(目的地址)
A 先向 B 发送一帧。该帧从接口 1 进入到交换机。
- 交换机收到帧后,先查找交换表。没有查到应从哪个接口转发这个帧给 B。
- 交换机把这个帧的源地址 A 和接口 1 写入交换表中。
- 交换机向除接口 1 以外的所有的接口广播这个帧。
交换机自学习和转发帧的步骤归纳:
2.5.3 自学习和转发总结
自学习:通过收到的数据包的源地址进行学习
- 如果表中无,在表中添加MAC地址、接口号、有效时间;
- 如果表中有,更新表中的信息。
转发:通过收到的数据包的目的地址进行转发
- 如果表中无,进行广播(帧进入的接口除外);
- 如果表中有且和帧进入的接口不同,向指定接口转发;
- 如果表中有且和帧进入的接口相同,则丢弃
- 如果收到的是广播帧,进行广播(帧进入的接口除外)。