← 返回 计算机网络原理

计算机网络原理

第六章 第1节-第2节

第 6 章:数据链路层与局域网

一、链路层解决什么问题?

网络层负责的是:

源主机目的主机\text{源主机}\to \text{目的主机}

也就是端到端地把 IP 数据报送到目的地。

但是实际转发时,是一跳一跳走的:

主机A路由器1路由器2主机B\text{主机}A\to \text{路由器}1\to \text{路由器}2\to \text{主机}B

链路层负责的是:在相邻两个节点之间,把 IP 数据报送过去。

所以链路层关心的是:

当前节点下一跳节点\text{当前节点}\to \text{下一跳节点}

二、几个基本概念

第六章 第1节-第2节 配图 1

1. 节点 node

链路层中的节点包括:

主机;

路由器;

交换机;

AP。

链路就是相邻节点之间的通信通道。

可以是:

有线链路;

无线链路;

局域网;

点到点链路。

3. 帧 frame

链路层的 PDU 叫帧。

网络层给链路层的是:

IP数据报IP\text{数据报}

链路层会把它封装成:

帧头+IP数据报+帧尾\text{帧头}+IP\text{数据报}+\text{帧尾}

所以: $IP\text{数据报}⊂\text{链路层帧}$

第六章 第1节-第2节 配图 2

三、链路层和网络层的关系

可以这样理解:

网络层决定“最终去哪里”,链路层决定“这一跳怎么走”。

比如 Host1 要发给 Host5:

网络层看到:

IP1IP5IP1\to IP5

但是链路层第一跳可能是:

MAC1默认网关MACMAC1\to \text{默认网关}MAC

到了路由器之后,路由器重新封装新的帧,下一跳 MAC 又变了。

所以核心规律:

IP 地址通常端到端不变,MAC 地址逐跳变化。

四、链路层提供的服务

第六章 第1节-第2节 配图 3

1. 成帧 framing

把 IP 数据报封装成链路层帧。

比如:

=目的MAC+MAC+类型+IP数据报+FCS\text{帧}=\text{目的}MAC+\text{源}MAC+\text{类型}+IP\text{数据报}+FCS

如果多台主机共享同一个信道,就要决定:

谁什么时候可以发?

这就是 MAC 协议要解决的问题。

3. 差错检测

链路传输中可能有比特错误,所以要检测。

常见方法:

奇偶校验;

互联网校验和;

CRC。

4. 差错纠正

有些编码不仅能检测错误,还能纠正错误。

比如二维奇偶校验可以纠正单比特错误。

5. 可靠传输

链路层也可以实现可靠传输。

有线链路误码率低,一般不太需要。

无线链路误码率高,经常需要链路层重传。

6. 流量控制

控制发送方速度,避免接收方来不及收。

7. 半双工 / 全双工

半双工:双方都能发,但不能同时发。

全双工:双方可以同时发送和接收。

现代交换式以太网基本是全双工。

五、链路层在哪里实现?

链路层主要实现在:

网卡 NIC,Network Interface Card。

比如:

电脑的以太网网卡;

WiFi 网卡;

路由器接口卡;

交换机接口芯片。

发送方网卡做:

IP数据报封装成帧发出比特流IP\text{数据报}\to \text{封装成帧}\to \text{发出比特流}

接收方网卡做:

接收比特流检查帧提取IP数据报\text{接收比特流}\to \text{检查帧}\to \text{提取}IP\text{数据报}
第六章 第1节-第2节 配图 4

六、链路层差错检测

1. 奇偶校验

第六章 第1节-第2节 配图 5

单比特奇偶校验

在数据后面加一个校验位,使得 1 的个数满足奇偶规则。

偶校验:让 1 的总数为偶数。

缺点是:能检测奇数个错误,但检测不了偶数个错误。

二维奇偶校验

把数据排成矩阵。

对每一行、每一列都加校验位。

好处:可以定位并纠正单比特错误。

2. 互联网校验和

主要用于运输层 UDP/TCP。

大致做法:

把数据分成 16 bit;

反码加法求和;

取反得到校验和;

接收方重新计算检查。

3. CRC 循环冗余校验

CRC 是链路层最重要的检错方法之一。

给定:

数据 $D$ ;

生成多项式 $G$ ,长度为 $r+1$ 位;

CRC 校验码 $R$ ,长度为 $r$ 位。

发送方要让:

D2r+RD⋅{2}^{r}+R

能够被 $G$ 整除。

所以:

R=remainder(D2rG)R=remainder(\frac{D⋅{2}^{r}}{G})

模 2 除法里:

加法=异或减法=异或\text{加法}=\text{异或}\text{减法}=\text{异或}

接收方拿收到的整体除以 $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

第六章 第1节-第2节 配图 6

时分多路访问。

把时间切成时隙,每个节点固定使用某些时隙。

优点:不碰撞。

缺点:某节点没数据时,它的时隙浪费。

2. FDMA

第六章 第1节-第2节 配图 7

频分多路访问。

把频带切成多个小频段,每个节点占一个频段。

优点:不碰撞。

缺点:某节点没数据时,它的频带浪费。

九、随机访问 MAC

1. 时隙 ALOHA

第六章 第1节-第2节 配图 9第六章 第1节-第2节 配图 9

特点:

时间分成等长时隙;

一个时隙传一个帧;

节点只能在时隙开始发送;

多个节点同一时隙发送就碰撞;

碰撞后以概率 $p$ 重传。

效率最大约:

1e37\frac{1}{e}\approx 37%

2. 纯 ALOHA

不分时隙。

节点有帧就立即发送。

优点:简单,不需要同步。

缺点:碰撞窗口更大。

最大效率约:

12e18.5\frac{1}{2e}\approx 18.5%

3. CSMA

CSMA:

CarrierSenseMultipleAccessCarrierSenseMultipleAccess

中文:载波侦听多路访问。

核心思想:发之前先听信道。

如果信道空闲:发送。

如果信道忙:等待。

但是 CSMA 仍可能碰撞,因为存在传播延迟。

4. CSMA/CD

CSMA/CD:

CarrierSenseMultipleAccesswithCollisionDetectionCarrierSenseMultipleAccesswithCollisionDetection

中文:带碰撞检测的载波侦听多路访问。

核心思想:边发边听,一旦发现碰撞就停止。

流程:

监听信道;

空闲则发送;

发送过程中检测碰撞;

碰撞则停止发送;

发送 jam 信号;

二进制指数退避;

重传。

第六章 第1节-第2节 配图 10

5. 二进制指数退避

第 $m$ 次碰撞后,随机选:

K0122m1K\in {0|1|2|⋯|{2}^{m}-1}

等待:

K×512K\times 512

比特时间。

碰撞越多,退避范围越大。

十、LAN 编址:MAC 地址

在局域网里,链路层真正用的是:

MAC地址MAC\text{地址}

不是 IP 地址。

MAC 地址通常是 48 bit,比如:

1A:2B:3C:4D:5E:6F1A:2B:3C:4D:5E:6F

IP 地址是网络层地址,MAC 地址是链路层地址。

IP 地址和 MAC 地址的区别

对比 | IP 地址 | MAC 地址 所属层次 | 网络层 | 链路层 作用 | 标识网络中的逻辑位置 | 标识网卡/接口 范围 | 端到端 | 一跳内 是否变化 | 路由过程中通常不变 | 每一跳都会变 例子 | 192.168.1.5 | AA:BB:CC:DD:EE:FF

IP 管全程,MAC 管一跳。

十一、ARP 协议

ARP:

AddressResolutionProtocolAddressResolutionProtocol

中文:地址解析协议。

它解决的问题是:已知下一跳 IP 地址,怎么得到下一跳 MAC 地址?

也就是:

IP地址MAC地址IP\text{地址}\to MAC\text{地址}

1. ARP 为什么需要?

链路层发帧时必须知道目的 MAC。

但是上层通常只知道目的 IP。

所以要有 ARP 来查:

下一跳IP下一跳MAC\text{下一跳}IP⇒\text{下一跳}MAC

注意,是下一跳 IP,不是一定是最终目的 IP。

2. ARP 只能在同一个 LAN 内工作

ARP 请求是二层广播。

广播 MAC 是:

FF:FF:FF:FF:FF:FFFF:FF:FF:FF:FF:FF

交换机会转发广播。

但是路由器不会转发二层广播。

所以:ARP 只能在同一个广播域 / 同一个局域网内生效。

3. ARP 缓存

主机和路由器都会维护 ARP cache。

里面存:

IP地址MAC地址IP\text{地址}↔MAC\text{地址}

例如:

IP | MAC IP3 | MAC3 IP6 | MAC6

如果缓存中有,就不用再发 ARP。

如果没有,才发 ARP 请求。

十二、ARP 场景 1:同一 LAN 内通信

比如:

Host1Host3Host1\to Host3

Host1 先判断:

IP1IP3是否在同一个子网IP1\text{和}IP3\text{是否在同一个子网}

如果在同一个子网,就直接交付。

但是 Host1 只知道 IP3,不知道 MAC3。

于是发 ARP 请求:谁是 IP3?请告诉 IP1。

ARP 请求用广播帧发送:

目的MAC=FF:FF:FF:FF:FF:FF\text{目的}MAC=FF:FF:FF:FF:FF:FF

LAN 内所有主机都会收到。

只有 Host3 发现:我就是 IP3。

然后 Host3 单播回复:

IP3MAC3IP3\to MAC3

Host1 收到后更新 ARP cache,然后发送真正的数据帧:

MAC=MAC1目的MAC=MAC3\text{源}MAC=MAC1\text{目的}MAC=MAC3

而 IP 数据报里面仍然是:

IP=IP1目的IP=IP3\text{源}IP=IP1\text{目的}IP=IP3

所以同一 LAN 内通信:

IP1IP3IP1\to IP3

对应链路层:

MAC1MAC3MAC1\to MAC3

十三、ARP 场景 2:跨 LAN 通信

比如:

Host1Host5Host1\to Host5

Host1 判断:

IP5不在自己的子网IP5\text{不在自己的子网}

所以它不能直接 ARP:

IP5MAC5IP5\to MAC5

因为 Host5 不在当前广播域,ARP 广播过不去。

这时候 Host1 要先把数据交给默认网关。

假设默认网关接口是:

IP6/MAC6IP6/MAC6

那么 Host1 要 ARP 的是:

IP6MAC6IP6\to MAC6

也就是查默认网关的 MAC。

第一跳封装

Host1 发给 Host5 时:

IP 数据报:

IP=IP1目的IP=IP5\text{源}IP=IP1\text{目的}IP=IP5

链路层帧:

MAC=MAC1目的MAC=MAC6\text{源}MAC=MAC1\text{目的}MAC=MAC6

目的 IP 是最终目的主机 IP5,但目的 MAC 是默认网关 MAC6。

路由器转发时

路由器收到帧后:

看目的 MAC 是自己;

拆掉链路层帧头;

取出 IP 数据报;

查路由表;

找下一跳;

重新封装新的链路层帧。

如果下一跳是另一个路由器接口 MAC8,那么新的帧可能是:

MAC=MAC7目的MAC=MAC8\text{源}MAC=MAC7\text{目的}MAC=MAC8

但是 IP 数据报仍然是:

IP1IP5IP1\to IP5

十四、ARP 与路由的关系

ARP 不负责选路。

ARP 只负责:

下一跳IP下一跳MAC\text{下一跳}IP\to \text{下一跳}MAC

路由表负责:

目的IP下一跳IP/出接口\text{目的}IP\to \text{下一跳}IP/\text{出接口}

所以发送流程是:

查路由表得到下一跳IPARP得到下一跳MAC封装链路层帧\text{查路由表}\to \text{得到下一跳}IP\to ARP\text{得到下一跳}MAC\to \text{封装链路层帧}

十五、交换机、路由器、ARP 的关系

交换机

交换机工作在链路层。

它会转发广播帧。

所以 ARP request 会在同一个 LAN 内扩散。

路由器

路由器工作在网络层。

它不会转发二层广播。

所以 ARP request 不会跨路由器。

结果

每一个 LAN 都是一个广播域。

每个广播域内部可以用 ARP。

不同广播域之间必须通过路由器转发。

十六、以太网和编码

1. Manchester 编码

第六章 第1节-第2节 配图 11

用于 10BaseT。

特点:每个 bit 中间都有一次跳变。

好处:接收方可以根据跳变同步时钟。

缺点:10Mbps 数据需要 20MHz 信号带宽,效率约 50%。

2. 4B/5B 编码

第六章 第1节-第2节 配图 12

用于 100BaseT。

思想:每 4 bit 数据编码成 5 bit。

比如:

0000111100001010010000\to 111100001\to 01001

目的:避免太长连续 0 或连续 1,便于时钟恢复。

效率:

45=80\frac{4}{5}=80%

比 Manchester 更高。

十七、总结

网络层已经决定了:

这个IP数据报最终要去哪里\text{这个}IP\text{数据报最终要去哪里}

但是链路层要解决的是:

这一跳怎么把它发过去\text{这一跳怎么把它发过去}

要发过去,就要封装成帧。

帧里面要有 MAC 地址。

如果不知道下一跳 MAC,就用 ARP 查。

如果链路有误码,就用差错检测,比如 CRC。

如果多个节点共享信道,就用 MAC 协议决定谁发,比如 ALOHA、CSMA、CSMA/CD。

所以第六章主线是:

一跳传输成帧MAC地址ARPMAC差错检测多路访问控制\text{一跳传输}\to \text{成帧}\to MAC\text{地址}\to ARP\text{找}MAC\to \text{差错检测}\to \text{多路访问控制}

链路层负责相邻节点之间的帧传输。

IP 和 MAC

ARP

但更准确是:

下一跳IP下一跳MAC\text{下一跳}IP\to \text{下一跳}MAC

同一 LAN

Host1 发 Host3:

ARP(IP3)=MAC3ARP(IP3)=MAC3

帧:

MAC1MAC3MAC1\to MAC3

IP 包:

IP1IP3IP1\to IP3

不同 LAN

Host1 发 Host5:

ARP(默认网关IP6)=MAC6ARP(\text{默认网关}IP6)=MAC6

第一跳帧:

MAC1MAC6MAC1\to MAC6

IP 包:

IP1IP5IP1\to IP5

路由器转发

每过一个路由器:

拆旧帧查路由表ARP下一跳封装新帧\text{拆旧帧}\to \text{查路由表}\to ARP\text{下一跳}\to \text{封装新帧}

IP 管终点,MAC 管下一跳,ARP 负责把下一跳 IP 解析成下一跳 MAC。