数据链路层解决两个相邻结点(主机或路由器)的数据通信服务,数据单位是数据帧
链路层服务
封装成帧
将网络层传递下来的 IP 数据报(分组)加上首部和尾部,封装成数据帧。
加入首部和尾部的原因之一是保证帧同步。物理层的数据传输单位是比特流,为了清楚多少比特能构成一个数据帧,可以用首尾标识,首部即为数据帧的开始,尾部即为数据帧的结束,以此来得到一个完整的数据帧。
由于数据帧使用首部和尾部进行定界,如果帧的数据部分包含和首部或尾部相同的内容,会导致帧的首部或尾部被误判。为了解决这个问题,如果数据部分和首部或尾部相同,在数据部分的前边插入转义字符。在接收端进行处理后可以还原出原始数据。
链路接入
在数据链路层中,主机和路由器称为结点,连接相邻结点的通信信道称为链路。如果链路被很多结点共享,需要解决链路接入问题,保证数据的正确传输。
流量控制
协调相邻结点的发送速率和接收速率
差错检验
使用循环冗余检验 CRC ,不保证百分百检验出错误。
通信机制
- 全双工通信:可以双向同时传输
- 半双工通信:可以双向交替传输
链路分类
- 点对点链路
- 广播链路:链路可以共享
MAC 地址
MAC 地址也称局域网地址, MAC 地址用于在网络中唯一标识一个网卡。一个网络设备可以有多个网卡,每个网卡都拥有 MAC 地址。
MAC
对于 Internet 网路使用共享广播链路,如果两个结点同时进行传输,势必造成冲突。为了解决这种问题,需要引入一种协议,保证同时传输不会出问题,多路访问控制协议 MAC 就是为了解决这个问题。
MAC 分类
- 信道划分 MAC 协议:多路复用技术
- 随机访问 MAC 协议:信道不划分,允许存在冲突;如果发生冲突采用冲突恢复机制
- 轮转 MAC 协议
随机访问 MAC 协议
当结点要发送分组时,利用信道全部带宽发送数据,并且允许冲突。
CSMA 协议
发送帧之前监听信道,信道空闲发送完整帧,信道忙推迟发送,但是可能仍然存在冲突。
CSMA 协议在数据帧发送之前监听信道,在数据传输过程中不会检测。当 $t_0$ 时刻,B 发现信道空闲开始发送数据。由于数据传播需要时间,在 $t_1$ 时刻还未到达 D,所以 D 监听信道空闲也会发送信号,此时会发生数据冲突。
CSMA/CD 协议
CSMA/CD 协议边发送数据边检测冲突,如果发现冲突可以及时停止发送数据以减少链路资源的浪费。CSMA/CD 协议的冲突检测可以总结为“边发边听,不发不听”
为了保证 CSMA/CD 协议能够检测出冲突,需要保证如下公式:
轮转 MAC 协议
- 信道划分 MAC 协议
- 当网络负载重时,共享信道效率高
- 当网路负载轻时,共享信道效率低
- 随机访问 MAC 协议
- 当网络负载重时,共享信道效率低
- 当网路负载轻时,共享信道效率高
轮转访问协议综合前两者的优点!
- 轮询:类似于多路 IO 复用
- 令牌传递
PPP
互联网用户通常需要连接到某个 ISP 之后才能接入到互联网,PPP 协议是用户计算机和 ISP 进行通信时所使用的数据链路层协议
局域网
局域网是一种典型的广播信道,目前以太网占据着有线局域网的市场。可以按照网络拓扑结构对局域网进行分类:
以太网是一种星型拓扑结构局域网。现在以太网使用交换机进行连接,交换机是一种链路层设备,它不会发生碰撞,能根据 MAC 地址进行存储转发。交换机具有自学习能力,学习的是交换表的内容,交换表中存储着 MAC 地址到接口的映射。
如图,交换机有 4 个接口,主机 A 向主机 B 发送数据帧时,交换机把主机 A 到接口 1 的映射写入交换表中。为了发送数据帧到 B,先查交换表,此时没有主机 B 的表项,那么主机 A 就发送广播帧,主机 C 和主机 D 会丢弃该帧,主机 B 回应该帧向主机 A 发送数据包时,交换机查找交换表得到主机 A 映射的接口为 1,就发送数据帧到接口 1,同时交换机添加主机 B 到接口 2 的映射