计算机网络原理
第六章 第1节-第2节
第 6 章:数据链路层与局域网
一、链路层解决什么问题?
网络层负责的是:
也就是端到端地把 IP 数据报送到目的地。
但是实际转发时,是一跳一跳走的:
链路层负责的是:在相邻两个节点之间,把 IP 数据报送过去。
所以链路层关心的是:
二、几个基本概念

1. 节点 node
链路层中的节点包括:
主机;
路由器;
交换机;
AP。
2. 链路 link
链路就是相邻节点之间的通信通道。
可以是:
有线链路;
无线链路;
局域网;
点到点链路。
3. 帧 frame
链路层的 PDU 叫帧。
网络层给链路层的是:
链路层会把它封装成:
所以: $IP\text{数据报}⊂\text{链路层帧}$

三、链路层和网络层的关系
可以这样理解:
网络层决定“最终去哪里”,链路层决定“这一跳怎么走”。
比如 Host1 要发给 Host5:
网络层看到:
但是链路层第一跳可能是:
到了路由器之后,路由器重新封装新的帧,下一跳 MAC 又变了。
所以核心规律:
IP 地址通常端到端不变,MAC 地址逐跳变化。
四、链路层提供的服务

1. 成帧 framing
把 IP 数据报封装成链路层帧。
比如:
2. 链路接入 link access
如果多台主机共享同一个信道,就要决定:
谁什么时候可以发?
这就是 MAC 协议要解决的问题。
3. 差错检测
链路传输中可能有比特错误,所以要检测。
常见方法:
奇偶校验;
互联网校验和;
CRC。
4. 差错纠正
有些编码不仅能检测错误,还能纠正错误。
比如二维奇偶校验可以纠正单比特错误。
5. 可靠传输
链路层也可以实现可靠传输。
有线链路误码率低,一般不太需要。
无线链路误码率高,经常需要链路层重传。
6. 流量控制
控制发送方速度,避免接收方来不及收。
7. 半双工 / 全双工
半双工:双方都能发,但不能同时发。
全双工:双方可以同时发送和接收。
现代交换式以太网基本是全双工。
五、链路层在哪里实现?
链路层主要实现在:
网卡 NIC,Network Interface Card。
比如:
电脑的以太网网卡;
WiFi 网卡;
路由器接口卡;
交换机接口芯片。
发送方网卡做:
接收方网卡做:

六、链路层差错检测
1. 奇偶校验

单比特奇偶校验
在数据后面加一个校验位,使得 1 的个数满足奇偶规则。
偶校验:让 1 的总数为偶数。
缺点是:能检测奇数个错误,但检测不了偶数个错误。
二维奇偶校验
把数据排成矩阵。
对每一行、每一列都加校验位。
好处:可以定位并纠正单比特错误。
2. 互联网校验和
主要用于运输层 UDP/TCP。
大致做法:
把数据分成 16 bit;
反码加法求和;
取反得到校验和;
接收方重新计算检查。
3. CRC 循环冗余校验
CRC 是链路层最重要的检错方法之一。
给定:
数据 $D$ ;
生成多项式 $G$ ,长度为 $r+1$ 位;
CRC 校验码 $R$ ,长度为 $r$ 位。
发送方要让:
能够被 $G$ 整除。
所以:
模 2 除法里:
接收方拿收到的整体除以 $G$ 。
余数为 0:认为没有检测到错误。
余数不为 0:检测到错误,丢弃。
七、多路访问协议 MAC
有些链路是点到点链路,比如两个路由器之间的专线。
有些链路是广播共享链路,比如:
WiFi;
老式总线以太网;
卫星网络;
蜂窝网络。
共享信道中多个节点可能同时发,就会产生碰撞。
所以需要 MAC 协议决定:谁什么时候可以发送?
1. 理想 MAC 协议
假设信道速率是 $R$ 。
理想情况:
只有一个节点发送时,它可以独占 $R$ ;
有 $M$ 个节点发送时,每个平均得到 $R/M$ ;
完全分布式;
简单。
2. MAC 协议分类
类型 | 思想 | 代表 信道划分 | 把信道切成固定资源 | TDMA、FDMA 随机访问 | 有数据就尝试发,冲突后恢复 | ALOHA、CSMA、CSMA/CD、CSMA/CA 轮流访问 | 节点轮流获得发送权 | 轮询、令牌传递
八、信道划分 MAC
1. TDMA

时分多路访问。
把时间切成时隙,每个节点固定使用某些时隙。
优点:不碰撞。
缺点:某节点没数据时,它的时隙浪费。
2. FDMA

频分多路访问。
把频带切成多个小频段,每个节点占一个频段。
优点:不碰撞。
缺点:某节点没数据时,它的频带浪费。
九、随机访问 MAC
1. 时隙 ALOHA


特点:
时间分成等长时隙;
一个时隙传一个帧;
节点只能在时隙开始发送;
多个节点同一时隙发送就碰撞;
碰撞后以概率 $p$ 重传。
效率最大约:
2. 纯 ALOHA
不分时隙。
节点有帧就立即发送。
优点:简单,不需要同步。
缺点:碰撞窗口更大。
最大效率约:
3. CSMA
CSMA:
中文:载波侦听多路访问。
核心思想:发之前先听信道。
如果信道空闲:发送。
如果信道忙:等待。
但是 CSMA 仍可能碰撞,因为存在传播延迟。
4. CSMA/CD
CSMA/CD:
中文:带碰撞检测的载波侦听多路访问。
核心思想:边发边听,一旦发现碰撞就停止。
流程:
监听信道;
空闲则发送;
发送过程中检测碰撞;
碰撞则停止发送;
发送 jam 信号;
二进制指数退避;
重传。

5. 二进制指数退避
第 $m$ 次碰撞后,随机选:
等待:
比特时间。
碰撞越多,退避范围越大。
十、LAN 编址:MAC 地址
在局域网里,链路层真正用的是:
不是 IP 地址。
MAC 地址通常是 48 bit,比如:
IP 地址是网络层地址,MAC 地址是链路层地址。
IP 地址和 MAC 地址的区别
对比 | IP 地址 | MAC 地址 所属层次 | 网络层 | 链路层 作用 | 标识网络中的逻辑位置 | 标识网卡/接口 范围 | 端到端 | 一跳内 是否变化 | 路由过程中通常不变 | 每一跳都会变 例子 | 192.168.1.5 | AA:BB:CC:DD:EE:FF
IP 管全程,MAC 管一跳。
十一、ARP 协议
ARP:
中文:地址解析协议。
它解决的问题是:已知下一跳 IP 地址,怎么得到下一跳 MAC 地址?
也就是:
1. ARP 为什么需要?
链路层发帧时必须知道目的 MAC。
但是上层通常只知道目的 IP。
所以要有 ARP 来查:
注意,是下一跳 IP,不是一定是最终目的 IP。
2. ARP 只能在同一个 LAN 内工作
ARP 请求是二层广播。
广播 MAC 是:
交换机会转发广播。
但是路由器不会转发二层广播。
所以:ARP 只能在同一个广播域 / 同一个局域网内生效。
3. ARP 缓存
主机和路由器都会维护 ARP cache。
里面存:
例如:
IP | MAC IP3 | MAC3 IP6 | MAC6
如果缓存中有,就不用再发 ARP。
如果没有,才发 ARP 请求。
十二、ARP 场景 1:同一 LAN 内通信
比如:
Host1 先判断:
如果在同一个子网,就直接交付。
但是 Host1 只知道 IP3,不知道 MAC3。
于是发 ARP 请求:谁是 IP3?请告诉 IP1。
ARP 请求用广播帧发送:
LAN 内所有主机都会收到。
只有 Host3 发现:我就是 IP3。
然后 Host3 单播回复:
Host1 收到后更新 ARP cache,然后发送真正的数据帧:
而 IP 数据报里面仍然是:
所以同一 LAN 内通信:
对应链路层:
十三、ARP 场景 2:跨 LAN 通信
比如:
Host1 判断:
所以它不能直接 ARP:
因为 Host5 不在当前广播域,ARP 广播过不去。
这时候 Host1 要先把数据交给默认网关。
假设默认网关接口是:
那么 Host1 要 ARP 的是:
也就是查默认网关的 MAC。
第一跳封装
Host1 发给 Host5 时:
IP 数据报:
链路层帧:
目的 IP 是最终目的主机 IP5,但目的 MAC 是默认网关 MAC6。
路由器转发时
路由器收到帧后:
看目的 MAC 是自己;
拆掉链路层帧头;
取出 IP 数据报;
查路由表;
找下一跳;
重新封装新的链路层帧。
如果下一跳是另一个路由器接口 MAC8,那么新的帧可能是:
但是 IP 数据报仍然是:
十四、ARP 与路由的关系
ARP 不负责选路。
ARP 只负责:
路由表负责:
所以发送流程是:
十五、交换机、路由器、ARP 的关系
交换机
交换机工作在链路层。
它会转发广播帧。
所以 ARP request 会在同一个 LAN 内扩散。
路由器
路由器工作在网络层。
它不会转发二层广播。
所以 ARP request 不会跨路由器。
结果
每一个 LAN 都是一个广播域。
每个广播域内部可以用 ARP。
不同广播域之间必须通过路由器转发。
十六、以太网和编码
1. Manchester 编码

用于 10BaseT。
特点:每个 bit 中间都有一次跳变。
好处:接收方可以根据跳变同步时钟。
缺点:10Mbps 数据需要 20MHz 信号带宽,效率约 50%。
2. 4B/5B 编码

用于 100BaseT。
思想:每 4 bit 数据编码成 5 bit。
比如:
目的:避免太长连续 0 或连续 1,便于时钟恢复。
效率:
比 Manchester 更高。
十七、总结
网络层已经决定了:
但是链路层要解决的是:
要发过去,就要封装成帧。
帧里面要有 MAC 地址。
如果不知道下一跳 MAC,就用 ARP 查。
如果链路有误码,就用差错检测,比如 CRC。
如果多个节点共享信道,就用 MAC 协议决定谁发,比如 ALOHA、CSMA、CSMA/CD。
所以第六章主线是:
链路层负责相邻节点之间的帧传输。
IP 和 MAC
ARP
但更准确是:
同一 LAN
Host1 发 Host3:
帧:
IP 包:
不同 LAN
Host1 发 Host5:
第一跳帧:
IP 包:
路由器转发
每过一个路由器:
IP 管终点,MAC 管下一跳,ARP 负责把下一跳 IP 解析成下一跳 MAC。
