计算机网络第六讲复习博客:链路层与局域网

计算机网络第六讲复习博客:链路层与局域网

课程主题:The Link Layer and LANs

关键词:链路层、帧、差错检测、海明码、CRC、多路访问、ALOHA、CSMA/CD、MAC 地址、ARP、以太网、交换机、VLAN、MPLS、数据中心网络

适合用途:期末复习、博客发布、作业回顾、快速查漏补缺


目录

  • [0. 第六讲一句话总览](#0. 第六讲一句话总览)
  • [1. 链路层到底管什么?](#1. 链路层到底管什么?)
  • [2. 成帧:为什么要把比特流切成帧?](#2. 成帧:为什么要把比特流切成帧?)
  • [3. 差错控制:传输中 bit 错了怎么办?](#3. 差错控制:传输中 bit 错了怎么办?)
  • [4. 海明距离:检错和纠错能力的核心](#4. 海明距离:检错和纠错能力的核心)
  • [5. 海明码:如何定位 1 位错误?](#5. 海明码:如何定位 1 位错误?)
  • [6. 奇偶校验、二维奇偶校验与 CRC](#6. 奇偶校验、二维奇偶校验与 CRC)
  • [7. 多路访问:多人共用信道时谁先发?](#7. 多路访问:多人共用信道时谁先发?)
  • [8. 信道划分:TDMA 与 FDMA](#8. 信道划分:TDMA 与 FDMA)
  • [9. 随机访问:ALOHA、时隙 ALOHA、CSMA](#9. 随机访问:ALOHA、时隙 ALOHA、CSMA)
  • [10. CSMA/CD:经典以太网的碰撞检测](#10. CSMA/CD:经典以太网的碰撞检测)
  • [11. 轮流访问:Polling 与 Token Passing](#11. 轮流访问:Polling 与 Token Passing)
  • [12. MAC 地址:局域网里的硬件地址](#12. MAC 地址:局域网里的硬件地址)
  • [13. IP 地址和 MAC 地址的区别](#13. IP 地址和 MAC 地址的区别)
  • [14. ARP:知道 IP,怎么找到 MAC?](#14. ARP:知道 IP,怎么找到 MAC?)
  • [15. 以太网 Ethernet](#15. 以太网 Ethernet)
  • [16. 交换机和路由器的区别](#16. 交换机和路由器的区别)
  • [17. VLAN:一个物理交换机切成多个逻辑局域网](#17. VLAN:一个物理交换机切成多个逻辑局域网)
  • [18. EVPN/VXLAN:把二层网络拉长](#18. EVPN/VXLAN:把二层网络拉长)
  • [19. MPLS:用标签转发](#19. MPLS:用标签转发)
  • [20. 数据中心网络](#20. 数据中心网络)
  • [21. 一次 Web 请求如何串起第六讲?](#21. 一次 Web 请求如何串起第六讲?)
  • [22. 作业重点回顾](#22. 作业重点回顾)
  • [23. 小测题与答案](#23. 小测题与答案)
  • [24. 常见 QA](#24. 常见 QA)
  • [25. 拓展理解](#25. 拓展理解)
  • [26. 期末复习抓手](#26. 期末复习抓手)
  • [27. 最后总结](#27. 最后总结)

0. 第六讲一句话总览

第六讲讲的是:

当网络层已经决定"下一跳是谁"之后,链路层如何把 IP 数据报封装成帧,并在当前这一段链路上把它送到相邻节点。

网络层关心的是:

text 复制代码
这个 IP 数据报最终要去哪?下一跳往哪个方向走?

链路层关心的是:

text 复制代码
在当前这一小段物理链路上,怎么从一个网卡送到另一个网卡?

比如你访问一个网站,数据可能经过:

text 复制代码
你的电脑 → 家里路由器 → 运营商设备 → 骨干网路由器 → 服务器

每一个箭头都是一段 link。链路层只负责其中的一跳。

整章主线可以压成:

text 复制代码
IP 数据报
  ↓
封装成链路层帧 Frame
  ↓
检测/纠正传输错误
  ↓
如果多人共享信道,要决定谁先发
  ↓
在局域网中用 MAC 地址和 ARP 找到下一跳
  ↓
交换机根据 MAC 地址转发帧
  ↓
用 VLAN、MPLS、数据中心网络把链路层思想扩展到更大规模

1. 链路层到底管什么?

1.1 三个基本概念

概念 英文 人话解释
节点 node 主机、路由器、交换机等网络设备
链路 link 相邻节点之间的通信通道,可以是有线、无线、局域网等
frame 链路层的数据单位,用来封装网络层 datagram

网络层的数据单位通常叫 datagram,数据报 ;链路层的数据单位叫 frame,帧

链路层会把 IP 数据报装进帧里:

text 复制代码
[链路层头部 | IP 数据报 | 链路层尾部]

链路层头部一般包含源 MAC 地址、目的 MAC 地址、类型字段等;链路层尾部常常包含 CRC 校验码。


1.2 链路层的主要服务

链路层主要提供这些功能:

  1. 成帧 framing:把连续比特流划分成一帧一帧。
  2. 链路访问 link access:如果多台设备共享一个信道,决定谁可以发。
  3. 差错检测 error detection:发现传输中 bit 是否出错。
  4. 差错纠正 error correction:在某些情况下定位并修正错误 bit。
  5. 相邻节点可靠传输 reliable delivery:在高误码链路上可能会做局部重传。
  6. 流量控制 flow control:避免发送方把接收方压垮。
  7. 半双工/全双工:决定双方是否可以同时发送。

注意,链路层的很多功能由 NIC,Network Interface Card,网卡 实现。网卡不只是"插网线的东西",它里面会做帧封装、MAC 地址处理、CRC 检查等很多链路层工作。


2. 成帧:为什么要把比特流切成帧?

物理层看到的是一串连续比特:

text 复制代码
010101101010111000101010...

接收方必须知道:

text 复制代码
一帧从哪里开始?
一帧到哪里结束?
哪一段数据该交给上层?

这就是 framing,成帧


2.1 字节计数法 Byte Count

最朴素的方法是在帧头写一个长度字段:

text 复制代码
[长度字段 | 数据内容]

比如长度字段写着 100,接收方就读后面 100 字节。

问题是:

如果长度字段本身传错了,后面所有帧的边界可能都会跟着乱掉。

所以字节计数法简单,但抗差错能力不强。


2.2 字节填充 Byte Stuffing

规定一个特殊字节作为帧边界,例如:

text 复制代码
FLAG = 01111110 = 0x7E

一帧长这样:

text 复制代码
FLAG | Payload | FLAG

问题是:如果 Payload 里本来就有 FLAG 怎么办?

解决方法是加转义字节 ESC

text 复制代码
Payload 中出现 FLAG → 发送 ESC FLAG
Payload 中出现 ESC  → 发送 ESC ESC

接收方看到 ESC,就知道后面的字节是普通数据,不是控制符。

这和编程语言里的字符串转义很像:想在字符串中表示引号,就写 \"


2.3 比特填充 Bit Stuffing

比特填充用特殊比特模式作为帧边界:

text 复制代码
01111110

发送方规则:

数据部分中只要出现连续 5 个 1,就自动插入一个 0。

接收方规则:

收到连续 5 个 1 后,如果下一位是 0,就删除这个 0。

例如发送方看到:

text 复制代码
11111

就变成:

text 复制代码
111110

这样就避免数据内容被误认为帧结束标志。


2.4 物理层编码违例 Physical Layer Coding Violations

有些物理层编码中,某些信号模式在正常数据中不会出现。于是可以把这些"不可能出现"的信号作为帧边界。

比如某些编码要求正常信号周期中间必须有跳变,那么持续高电平或持续低电平就可以作为违例码,用来标记帧边界。


3. 差错控制:传输中 bit 错了怎么办?

链路上会出错,尤其是无线链路、长距离链路、噪声较强的链路。

常见错误包括:

错误类型 含义
单比特错误 只有 1 个 bit 翻转
突发错误 一段连续区域内多个 bit 出错
丢失帧 整个帧没到达
损坏帧 帧到了,但里面有 bit 错了

处理错误有两种思路:

text 复制代码
检错:知道它错了,但不一定知道怎么改。
纠错:不仅知道它错了,还知道哪一位错了,并把它改回来。

4. 海明距离:检错和纠错能力的核心

4.1 什么是海明距离?

两个码字之间不同 bit 的个数,叫 Hamming distance,海明距离

例如:

text 复制代码
0000000000
0000011111

后 5 位不同,所以海明距离是 5。


4.2 为什么检测 s 个错误需要距离 s+1?

如果两个合法码字之间的最小距离是 d d d,那么最多能检测 d − 1 d-1 d−1 个 bit 错误。

原因是:只要错误还没有把一个合法码字变成另一个合法码字,接收方就能发现"这个码字不合法"。

所以若想检测出 s s s 个 bit 错误,需要:

d ≥ s + 1 d \ge s+1 d≥s+1

人话版:

合法码字之间要隔得足够远。只要错误还没跨到另一个合法码字,接收方就能发现不对劲。


4.3 为什么纠正 t 个错误需要距离 2t+1?

纠错比检错更难。

检错只需要判断"不对";纠错要判断"原来应该是谁"。

如果要纠正 t t t 个错误,每个合法码字周围半径为 t t t 的错误范围不能重叠。因此两个合法码字之间至少要有:

t + t + 1 = 2 t + 1 t+t+1=2t+1 t+t+1=2t+1

所以:

d ≥ 2 t + 1 d \ge 2t+1 d≥2t+1

人话版:

纠错要求每个合法码字周围的"错误影响范围"互不重叠。否则收到一个错误码字时,就不知道该改回谁。


5. 海明码:如何定位 1 位错误?

海明码把校验位放在编号为 2 的幂的位置:

text 复制代码
位置:1   2   3   4   5   6   7   8   9   10  11
内容:r1  r2  d   r4  d   d   d   r8  d   d   d

其中:

text 复制代码
d = data bit,数据位
r = redundant bit / check bit,校验位

5.1 r1、r2、r4、r8 分别检查什么?

规则是:

某个位置编号可以拆成哪些 2 的幂,它就由哪些校验位检查。

例如:

text 复制代码
3  = 1 + 2       → 第 3 位由 r1、r2 检查
5  = 1 + 4       → 第 5 位由 r1、r4 检查
6  = 2 + 4       → 第 6 位由 r2、r4 检查
7  = 1 + 2 + 4   → 第 7 位由 r1、r2、r4 检查
10 = 2 + 8       → 第 10 位由 r2、r8 检查
11 = 1 + 2 + 8   → 第 11 位由 r1、r2、r8 检查

因此检查范围是:

校验位 检查的位置
r1 1, 3, 5, 7, 9, 11
r2 2, 3, 6, 7, 10, 11
r4 4, 5, 6, 7
r8 8, 9, 10, 11

5.2 为什么 r1、r2、r4 错,r8 对,就说明第 7 位出错?

接收方重新校验后,如果发现:

text 复制代码
r1 错
r2 错
r4 错
r8 对

说明真正出错的那一位同时属于 r1、r2、r4 的检查范围,但不属于 r8 的检查范围。

于是错误位置为:

1 + 2 + 4 = 7 1+2+4=7 1+2+4=7

所以第 7 位出错。

注意:

r1 错不是说第 1 位一定错,而是 r1 负责检查的那一组校验不通过。

普通海明码默认只纠正 1 位错误。如果多位同时出错,普通海明码可能误判。


6. 奇偶校验、二维奇偶校验与 CRC

6.1 单个奇偶校验位

偶校验要求:数据加校验位之后,1 的个数为偶数。

它能检测奇数个 bit 错误,但不能检测偶数个 bit 错误。

例如两个 bit 同时翻转,奇偶性可能不变,接收方就发现不了。


6.2 二维奇偶校验

把数据排成矩阵,对每一行和每一列都加奇偶校验位。

如果只有一个 bit 出错:

text 复制代码
某一行校验失败
某一列校验失败

行和列交叉的位置就是错误 bit。

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


6.3 CRC 循环冗余校验

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

核心思想:

发送方和接收方约定一个生成多项式 G。发送方用数据除以 G,把余数作为校验码贴在后面。接收方收到后再除以 G,如果余数不是 0,就认为出错。

设数据为 D D D,生成多项式对应的比特串为 G G G, G G G 的阶为 r r r。

发送方:

text 复制代码
1. 在 D 后面补 r 个 0
2. 用 G 做模 2 除法
3. 得到 r 位余数 R
4. 发送 D + R

接收方:

text 复制代码
1. 收到 D + R
2. 用同一个 G 做模 2 除法
3. 余数为 0:未检测到错误
4. 余数不为 0:检测到错误

CRC 的特点:

  1. 检测突发错误能力强。
  2. 硬件实现简单。
  3. 被以太网、WiFi 等广泛使用。
  4. 比普通 checksum 更适合链路层。

7. 多路访问:多人共用信道时谁先发?

如果一条链路只有两端,比如:

text 复制代码
电脑 --- 交换机

问题比较简单。

但如果很多设备共享同一个介质,比如早期以太网、WiFi、卫星链路,就会有碰撞:

text 复制代码
A 在发
B 也在发
信号撞在一起
接收方听不清

所以需要 MAC 协议,Multiple Access Control,多路访问控制协议

MAC 协议分三大类:

类型 思想 代表
信道划分 提前把资源切开 TDMA、FDMA
随机访问 谁有数据谁尝试发,撞了再恢复 ALOHA、时隙 ALOHA、CSMA、CSMA/CD
轮流访问 大家按顺序来 Polling、Token Passing

8. 信道划分:TDMA 与 FDMA

8.1 TDMA

TDMA 按时间分信道。

text 复制代码
时隙 1 给 A
时隙 2 给 B
时隙 3 给 C

优点:不会碰撞。

缺点:如果 B 没数据,它的时隙也浪费了。


8.2 FDMA

FDMA 按频率分信道。

text 复制代码
A 用频段 1
B 用频段 2
C 用频段 3

优点:不会碰撞。

缺点:如果某个用户没数据,它占的频段也闲置。


9. 随机访问:ALOHA、时隙 ALOHA、CSMA

9.1 纯 ALOHA

纯 ALOHA 的规则很粗暴:

有数据就直接发,撞了就等随机时间后重发。

如果一个帧的发送时间是 T T T,A 在 t 0 t_0 t0 开始发送,那么其他节点只要在下面这个范围内开始发送,就会和 A 碰撞:

t 0 − T , t 0 + T \] \[t_0-T,\\ t_0+T\] \[t0−T, t0+T

所以纯 ALOHA 的易碰撞时间是:

2 T 2T 2T

最大效率约为:

1 2 e ≈ 18.4 % \frac{1}{2e}\approx 18.4\% 2e1≈18.4%


9.2 时隙 ALOHA

时隙 ALOHA 要求所有节点只能在时隙开头发送。

一个时隙里:

text 复制代码
0 个节点发送 → 空闲
1 个节点发送 → 成功
2 个或以上节点发送 → 碰撞

假设有 N N N 个节点,每个节点在某时隙发送的概率是 p p p。

一个时隙成功的概率是:

η ( p ) = N p ( 1 − p ) N − 1 \eta(p)=Np(1-p)^{N-1} η(p)=Np(1−p)N−1

当:

p = 1 N p=\frac{1}{N} p=N1

效率最大:

η max ⁡ → 1 e ≈ 36.8 % \eta_{\max}\to \frac{1}{e}\approx 36.8\% ηmax→e1≈36.8%

所以时隙 ALOHA 最大效率约为 37%。


9.3 为什么时隙 ALOHA 比纯 ALOHA 碰撞时间少一半?

纯 ALOHA 中,别人可以在任意时间开始发。别人早一点发会撞你,晚一点发也会撞你。

所以危险窗口是:

2 T 2T 2T

时隙 ALOHA 中,所有节点只能在时隙开头发。别人不会在你发到一半时突然插进来。

所以危险窗口只剩当前时隙:

T T T

因此,时隙 ALOHA 的碰撞窗口比纯 ALOHA 少一半。


9.4 吞吐量和发送概率不是一回事

发送概率表示:

text 复制代码
我尝试发送的概率

吞吐量表示:

text 复制代码
我成功发送的平均数量

两个节点 A、B 中:

S A = p A ( 1 − p B ) S_A=p_A(1-p_B) SA=pA(1−pB)

S B = p B ( 1 − p A ) S_B=p_B(1-p_A) SB=pB(1−pA)

因为 A 成功不仅要求 A 发送,还要求 B 不发送。

所以:

发送概率高不等于吞吐量一定高。发了但撞了,也不算成功吞吐量。


10. CSMA/CD:经典以太网的碰撞检测

10.1 CSMA:先听再说

CSMA 的思想像人类聊天:

说话前先听听别人是不是正在说。

如果信道空闲,就发送。

如果信道忙,就等待。

但由于传播时延存在,CSMA 仍然可能碰撞。


10.2 CSMA/CD:边发边听,撞了就停

CSMA/CD 是经典共享以太网使用的协议。

流程:

text 复制代码
1. 发送前监听信道
2. 信道空闲则发送
3. 发送过程中继续监听
4. 如果检测到碰撞,立即停止发送
5. 发送 jam signal
6. 随机退避后重发

退避采用二进制指数退避:

碰撞次数越多,等待范围越大。


10.3 为什么以太网有最小帧长?

CSMA/CD 要求:发送方必须在自己还没发完帧之前,就能检测到最远端的碰撞。

设单程传播时延为 τ \tau τ。

最坏情况下,碰撞信号返回发送方需要:

2 τ 2\tau 2τ

帧的发送时间是:

帧长 速率 \frac{\text{帧长}}{\text{速率}} 速率帧长

其中:

text 复制代码
帧长 / 速率 = 发送完整个帧所需时间,也叫传输时延。

为了检测碰撞,需要:

帧长 速率 ≥ 2 τ \frac{\text{帧长}}{\text{速率}} \ge 2\tau 速率帧长≥2τ

也就是:

最小帧长 ≥ 2 τ × 速率 \text{最小帧长} \ge 2\tau \times \text{速率} 最小帧长≥2τ×速率


11. 轮流访问:Polling 与 Token Passing

11.1 Polling 轮询

一个中心节点挨个问:

text 复制代码
A,你要发吗?
B,你要发吗?
C,你要发吗?

优点:不会碰撞。

缺点:中心节点可能成为单点故障,轮询也有额外开销。


11.2 Token Passing 令牌传递

网络里有一个 token,谁拿到 token 谁能发。

优点:没有中心控制器。

缺点:token 丢失、节点故障都会造成麻烦。


12. MAC 地址:局域网里的硬件地址

MAC 地址通常是 48 位,写成 6 组十六进制数:

text 复制代码
AA:BB:CC:DD:EE:FF

也可以写成:

text 复制代码
AA-BB-CC-DD-EE-FF

课程作业里通常用冒号或短横线都可以。

12.1 MAC 地址写法要求

  1. 一共 6 组。
  2. 每组 2 位十六进制。
  3. 十六进制字符只能是 0-9、A-F。
  4. 不同接口不能重复。
  5. 不要把 FF:FF:FF:FF:FF:FF 分配给普通主机,因为它是广播地址。
  6. MAC 地址没有 /24/24 是 IP 地址的子网掩码写法。

合法例子:

text 复制代码
AA:AA:AA:AA:AA:AA
12:34:56:78:9A:BC
00:1A:2B:3C:4D:5E

非法例子:

text 复制代码
GG:GG:GG:GG:GG:GG      // G 不是十六进制
AA:BB:CC               // 只有 3 组,不够 6 组
192.168.1.1            // 这是 IP 地址,不是 MAC 地址
AA:BB:CC:DD:EE:FF/24   // MAC 地址不能写 /24

13. IP 地址和 MAC 地址的区别

对比 IP 地址 MAC 地址
层次 网络层 链路层
作用范围 跨网络、端到端 本地局域网、当前一跳
是否随网络变化 会变 通常不变
用途 路由选择 局域网内帧交付
例子 192.168.1.1 AA:BB:CC:DD:EE:FF

一句话:

IP 地址负责最终目的地,MAC 地址负责当前这一跳。


14. ARP:知道 IP,怎么找到 MAC?

ARP 解决的问题是:

已知本地 IP 地址,如何得到对应 MAC 地址?

14.1 同一子网内通信

A 和 B 在同一子网,A 想给 B 发数据。

A 广播 ARP 请求:

text 复制代码
谁是 192.168.1.2?请告诉 192.168.1.1。

B 单播回复:

text 复制代码
我是 192.168.1.2,我的 MAC 是 BB:BB:BB:BB:BB:BB。

A 把映射写入 ARP 表:

text 复制代码
192.168.1.2 → BB:BB:BB:BB:BB:BB

14.2 不同子网之间通信

如果 E 要发给 B,但 B 不在 E 的子网里,E 不会 ARP 查询 B 的 MAC。

原因是:ARP 广播只在本地局域网里传播,跨不过路由器。

此时 E 会 ARP 查询默认网关的 MAC:

text 复制代码
谁是 192.168.3.254?

然后把数据先交给默认网关。

口诀:

text 复制代码
同子网:ARP 查询目标主机 MAC。
不同子网:ARP 查询默认网关 MAC。

15. 以太网 Ethernet

以太网是最常见的局域网技术。

以太网帧大致包含:

text 复制代码
Preamble | Destination MAC | Source MAC | Type | Data | CRC
字段 作用
Preamble 前导码,用于同步
Destination MAC 目的 MAC
Source MAC 源 MAC
Type 指明上层协议,如 IP、ARP
Data 承载的数据,通常是 IP 数据报
CRC 差错检测

以太网通常不保证可靠传输。检测到坏帧后一般直接丢弃,可靠性主要交给 TCP 等上层协议。


16. 交换机和路由器的区别

16.1 一句话区分

text 复制代码
交换机:看 MAC 地址,转发以太网帧。
路由器:看 IP 地址,转发 IP 数据报。
对比 交换机 路由器
工作层次 链路层,第 2 层 网络层,第 3 层
看什么地址 MAC 地址 IP 地址
数据单位 Frame,帧 IP Datagram,IP 数据报
连接范围 同一局域网内部 不同子网之间
是否隔离广播域 默认不隔离 隔离

16.2 交换机怎么转发?

交换机靠自学习建立转发表:

text 复制代码
MAC 地址 → 端口

收到帧后:

text 复制代码
1. 看源 MAC,学习这个 MAC 在哪个端口。
2. 看目的 MAC。
3. 如果目的 MAC 已知,只转发到对应端口。
4. 如果目的 MAC 未知,泛洪到其他端口。
5. 如果目的 MAC 是广播地址,也泛洪。

16.3 广播为什么仍然需要交换机?

广播不是凭空扩散。

如果 A 和 B 都插在交换机上:

text 复制代码
A → 交换机 → B

A 发 ARP 广播时,广播帧先到交换机。交换机再把它泛洪到其他端口,B 才能收到。

所以:

广播仍然需要交换机参与,只是交换机做的是二层泛洪,不是三层路由。


16.4 路由器转发时 IP 和 MAC 怎么变化?

假设 E 要发给 B,中间经过路由器。

IP 地址表示端到端通信,通常不变:

text 复制代码
源 IP = E
目的 IP = B

MAC 地址只负责当前这一跳,所以每一跳都会变:

text 复制代码
第一跳:E MAC → 路由器右接口 MAC
第二跳:路由器左接口 MAC → B MAC

路由器每转发一跳都会:

text 复制代码
拆掉旧链路层帧头
查看 IP 目的地址
重新封装新的链路层帧头

17. VLAN:一个物理交换机切成多个逻辑局域网

VLAN 是 Virtual LAN,虚拟局域网。

假设一个交换机上连接两个部门:

text 复制代码
端口 1-8:计算机系
端口 9-16:电子系

如果不用 VLAN,它们都在同一个广播域。

用了 VLAN 后:

text 复制代码
端口 1-8 属于 VLAN 10
端口 9-16 属于 VLAN 20

效果是:

一个物理交换机被切成多个逻辑交换机。

不同 VLAN 之间通信需要路由器或三层交换功能。


17.1 Trunk 与 802.1Q

如果 VLAN 跨多个交换机,需要 trunk 链路。

trunk 链路上的帧必须携带 VLAN ID,告诉对端这个帧属于哪个 VLAN。

802.1Q 就是在以太网帧中插入 VLAN tag。

这个 tag 中包含:

text 复制代码
VLAN ID
优先级字段
Tag Protocol Identifier

18. EVPN/VXLAN:把二层网络拉长

普通 VLAN 通常用于一个局域网或数据中心内部。

但在云计算、数据中心互联场景中,可能需要把不同地点的二层网络逻辑上连起来。

VXLAN/EVPN 的思路是:

text 复制代码
把 Ethernet frame 装进 IP datagram 里面

也就是:

text 复制代码
Ethernet frame 外面再套一层 IP

这样就能在三层网络上"模拟"一个二层网络。


19. MPLS:用标签转发

普通 IP 路由器转发时,要看目的 IP 地址,做最长前缀匹配。

MPLS 的思路是:

给数据包贴一个固定长度标签,后面的设备只看标签转发。

普通 IP 转发:

text 复制代码
看目的 IP → 查路由表 → 找下一跳

MPLS 转发:

text 复制代码
看 label → 查标签表 → 换 label / 转发

MPLS 的好处:

  1. 标签固定长度,查找快。
  2. 支持流量工程。
  3. 可以让到同一目的地的不同流走不同路径。
  4. 可以预先计算备份路径,实现快速重路由。

人话比喻:

IP 路由像看完整地址找路;MPLS 像进入高速公路后看路牌编号走专用车道。


20. 数据中心网络

数据中心里有大量服务器,结构通常类似:

text 复制代码
服务器 → ToR 交换机 → 汇聚交换机 → 核心交换机 → 边界路由器

数据中心网络要解决的问题包括:

  1. 主机数量巨大。
  2. 东西向流量很多。
  3. 不能有单点故障。
  4. 需要高带宽、低延迟。
  5. 需要负载均衡。
  6. 需要快速故障恢复。

常见技术包括:

text 复制代码
多层交换结构
负载均衡器
SDN 控制
ECN
DCTCP
RDMA/RoCE
Clos / Fat-tree 架构

数据中心网络的重点不是"会不会连通",而是:

text 复制代码
能不能低延迟、高吞吐、可扩展、可故障恢复地连通。

21. 一次 Web 请求如何串起第六讲?

假设你打开浏览器访问:

text 复制代码
www.google.com

整个过程大致如下。

21.1 DHCP 获取网络配置

电脑刚接入网络,不知道自己的 IP、默认网关、DNS 服务器。

它会发送 DHCP 请求,获得:

text 复制代码
自己的 IP 地址
默认网关地址
DNS 服务器地址
子网掩码

DHCP 请求本身会被封装:

text 复制代码
DHCP → UDP → IP → Ethernet → Physical

因为一开始还不知道服务器在哪里,所以常用广播发送。


21.2 ARP 获取默认网关 MAC

访问外网时,目标服务器不在本地子网。

电脑需要先把数据交给默认网关,所以要 ARP 查询默认网关的 MAC 地址。


21.3 DNS 查询域名对应 IP

浏览器要先知道:

text 复制代码
www.google.com 对应哪个 IP?

所以电脑向 DNS 服务器发送 DNS 查询。


21.4 TCP 三次握手

知道服务器 IP 后,浏览器与服务器建立 TCP 连接:

text 复制代码
SYN
SYN-ACK
ACK

21.5 HTTP 请求与响应

TCP 连接建立后,浏览器发送 HTTP 请求:

text 复制代码
GET / ...

服务器返回 HTTP 响应,浏览器显示网页。

这个过程串起了很多层:

text 复制代码
HTTP → TCP → IP → Ethernet → Physical

第六讲重点在于:

text 复制代码
每一次本地链路传输都要封装成帧。
ARP 帮你找到本地下一跳的 MAC。
交换机在局域网内转发帧。
路由器跨子网转发 IP 数据报。

22. 作业重点回顾

22.1 时隙 ALOHA 最大效率

成功概率:

η ( p ) = N p ( 1 − p ) N − 1 \eta(p)=Np(1-p)^{N-1} η(p)=Np(1−p)N−1

最大时:

p = 1 N p=\frac{1}{N} p=N1

最大效率:

η max ⁡ = 1 e ≈ 36.8 % \eta_{\max}=\frac{1}{e}\approx 36.8\% ηmax=e1≈36.8%


22.2 纯 ALOHA 最大效率

纯 ALOHA 的碰撞窗口是时隙 ALOHA 的 2 倍,所以最大效率为:

1 2 e ≈ 18.4 % \frac{1}{2e}\approx 18.4\% 2e1≈18.4%


22.3 两节点时隙 ALOHA 吞吐量

A 的发送概率为 p A p_A pA,B 的发送概率为 p B p_B pB。

A 成功:A 发送且 B 不发送。

S A = p A ( 1 − p B ) S_A=p_A(1-p_B) SA=pA(1−pB)

B 成功:B 发送且 A 不发送。

S B = p B ( 1 − p A ) S_B=p_B(1-p_A) SB=pB(1−pA)

总吞吐量:

S = p A ( 1 − p B ) + p B ( 1 − p A ) S=p_A(1-p_B)+p_B(1-p_A) S=pA(1−pB)+pB(1−pA)

发送概率不是吞吐量。吞吐量是成功发送的平均数量。


22.4 不同子网通信时 ARP 查询谁?

text 复制代码
同子网:ARP 查询目标主机 MAC。
不同子网:ARP 查询默认网关 MAC。

22.5 交换机替换路由器后发生了什么?

路由器隔离广播域,交换机不隔离广播域。

所以如果把某个路由器换成交换机,原本分开的两个二层网络可能变成同一个广播域。

但广播仍需要交换机参与:

text 复制代码
A 发广播帧 → 交换机收到 → 交换机泛洪 → B 收到

23. 小测题与答案

题 1:链路层的数据单位叫什么?

A. Segment

B. Datagram

C. Frame

D. Message

答案:C。 链路层的数据单位是 frame,帧。


题 2:链路层主要负责什么范围内的数据传输?

A. 应用到应用

B. 进程到进程

C. 相邻节点之间

D. 全球网络之间

答案:C。 链路层负责相邻节点之间的一跳传输。


题 3:MAC 地址通常是多少位?

A. 16 位

B. 32 位

C. 48 位

D. 64 位

答案:C。 常见 MAC 地址是 48 位。


题 4:下面哪个是合法 MAC 地址?

A. 192.168.1.1

B. AA:BB:CC:DD:EE:FF

C. GG:11:22:33:44:55

D. AA:BB:CC

答案:B。 MAC 地址是 6 组十六进制数。


题 5:FF:FF:FF:FF:FF:FF 表示什么?

答案:广播 MAC 地址。


题 6:ARP 的作用是什么?

答案:已知本地 IP 地址,查询对应 MAC 地址。


题 7:A 和 B 不在同一个子网,A 要发给 B,A 会 ARP 查询谁?

答案:默认网关的 MAC 地址,而不是 B 的 MAC 地址。


题 8:交换机根据什么地址转发?

答案:MAC 地址。


题 9:路由器根据什么地址转发?

答案:IP 地址。


题 10:跨路由器通信时,IP 地址和 MAC 地址如何变化?

答案:IP 源/目的地址通常端到端不变;MAC 源/目的地址每一跳都会变化。


题 11:时隙 ALOHA 的最大效率是多少?

答案:

1 e ≈ 36.8 % \frac{1}{e}\approx 36.8\% e1≈36.8%


题 12:纯 ALOHA 的最大效率是多少?

答案:

1 2 e ≈ 18.4 % \frac{1}{2e}\approx 18.4\% 2e1≈18.4%


题 13:为什么纯 ALOHA 效率比时隙 ALOHA 低?

答案: 纯 ALOHA 可以在任意时间发送,碰撞窗口是 2 T 2T 2T;时隙 ALOHA 只能在时隙开头发送,碰撞窗口是 T T T。因此纯 ALOHA 更容易碰撞。


题 14:两个节点 A、B,A 的发送概率为 p A p_A pA,B 的发送概率为 p B p_B pB,A 的吞吐量是多少?

答案:

S A = p A ( 1 − p B ) S_A=p_A(1-p_B) SA=pA(1−pB)


题 15:发送概率和吞吐量是一回事吗?

答案:不是。 发送概率表示尝试发送;吞吐量表示成功发送的平均数量。发送了但撞了,不算成功吞吐量。


题 16:CSMA/CD 中为什么有最小帧长?

答案: 因为发送方必须在发送完最短帧之前检测到最远端的碰撞。要求:

帧长 速率 ≥ 2 τ \frac{\text{帧长}}{\text{速率}} \ge 2\tau 速率帧长≥2τ


题 17:海明码中 r1、r2、r4、r8 是什么?

答案: 它们是校验位,用于帮助定位出错 bit 的位置。


题 18:海明码校验发现 r1、r2、r4 错,r8 对,哪一位出错?

答案:

1 + 2 + 4 = 7 1+2+4=7 1+2+4=7

所以第 7 位出错。


题 19:VLAN 的作用是什么?

答案: 把一个物理局域网划分成多个逻辑局域网,实现广播域隔离和管理隔离。


题 20:交换机会转发广播帧吗?

答案:会。 交换机会把广播帧泛洪到同一 VLAN 中除入端口外的其他端口。


24. 常见 QA

Q1:r1 错是不是说明第 1 位一定错?

不是。r1 错表示 r1 负责检查的那一组校验不通过,不代表第 1 位本身一定错。


Q2:为什么 r1、r2、r4 都错不是第 3 位和第 6 位也错?

普通海明码默认只纠正 1 位错误。每个出错位置都有唯一报警组合。

text 复制代码
第 3 位出错 → r1、r2 报警
第 6 位出错 → r2、r4 报警
第 7 位出错 → r1、r2、r4 报警

所以 r1、r2、r4 同时报警,对应第 7 位出错。


Q3:吞吐量和概率是一回事吗?

严格来说不是。

吞吐量是单位时间成功传输的数据量;概率是事件发生的可能性。

但在时隙 ALOHA 题中,一个时隙最多成功传 1 帧,所以"成功概率"可以理解为"归一化吞吐量"。


Q4:重传概率和发送概率是一回事吗?

不完全是。

重传概率通常指碰撞失败后,在后续时隙再次尝试发送的概率。发送概率是某个时隙尝试发送的概率。

在 ALOHA 简化模型中,它们常常都用 p p p 表示,因为最终关心的是该节点在这个时隙是否尝试发送。


Q5:为什么广播还需要交换机?

广播不是凭空扩散。A 的网线连接到交换机,广播帧必须先到交换机,再由交换机泛洪到其他端口。

所以:

text 复制代码
A → 交换机 → B

广播仍然需要交换机参与。


Q6:交换机会改 MAC 地址吗?

一般不会。交换机只是根据目的 MAC 转发帧,不会重新封装链路层头部。


Q7:路由器会改 MAC 地址吗?

会。路由器每转发一跳都会拆掉旧链路层帧,再重新封装新的链路层帧,所以 MAC 地址每一跳都会变。


Q8:同一个路由器为什么有多个 MAC?

因为路由器有多个接口,每个接口都像一块网卡。每个接口都有自己的 IP 地址和 MAC 地址。


Q9:交换机和 Hub 有什么区别?

Hub 收到帧后无脑转发到所有端口;交换机会学习 MAC 地址,并尽量只转发到目标端口。


Q10:VLAN 和子网是一回事吗?

不是。

VLAN 是二层概念,用来划分广播域。

子网是三层 IP 概念,用来划分 IP 网络。

实际部署中,通常一个 VLAN 对应一个 IP 子网,但二者不是同一个概念。


25. 拓展理解

25.1 为什么现代以太网基本不用 CSMA/CD?

经典以太网使用共享总线,多台设备可能同时发送,所以需要 CSMA/CD。

现代以太网大多是交换式全双工:

text 复制代码
每个主机单独连接交换机端口
发送和接收可以同时进行
没有共享冲突域

因此基本不再需要 CSMA/CD。

不过最小帧长、碰撞检测、传播时延这些思想仍然非常重要。


25.2 为什么 WiFi 用 CSMA/CA,而不是 CSMA/CD?

有线以太网可以一边发送一边监听碰撞。

WiFi 很难做到碰撞检测,原因包括:

  1. 自己发送信号太强,难以同时听到别人的弱信号。
  2. 存在隐藏终端问题。
  3. 无线信号衰减和干扰复杂。

所以 WiFi 使用 CSMA/CA:

text 复制代码
Collision Avoidance,尽量避免碰撞

而不是碰撞后再检测。


25.3 CRC 和 checksum 有什么区别?

checksum 常用于网络层/传输层,例如 IP、UDP、TCP。

CRC 常用于链路层,例如以太网、WiFi。

CRC 对突发错误的检测能力更强,也更适合硬件实现。


25.4 为什么要有 VLAN?

如果一个大型交换网络里所有人都在同一个广播域,那么 ARP 广播、未知目的 MAC 泛洪等流量会影响所有人。

VLAN 可以把一个大广播域切成多个小广播域,提高隔离性、安全性和管理性。


25.5 数据中心为什么特别强调链路层技术?

数据中心内部服务器之间通信非常频繁,东西向流量巨大。

这要求链路层和交换网络提供:

text 复制代码
高带宽
低延迟
多路径
快速故障恢复
精细拥塞控制

所以数据中心网络中会大量用到交换机、VLAN/VXLAN、ECN、RDMA/RoCE、负载均衡等技术。


26. 期末复习抓手

复习第六讲时,可以按下面这条线走:

text 复制代码
链路层负责一跳
  ↓
一跳传输单位是帧
  ↓
帧需要成帧和检错
  ↓
多人共享链路需要 MAC 协议
  ↓
局域网内用 MAC 地址交付
  ↓
ARP 负责 IP 到 MAC 的解析
  ↓
交换机根据 MAC 地址转发帧
  ↓
路由器根据 IP 地址跨子网转发
  ↓
VLAN/MPLS/数据中心网络是更大规模下的扩展

最重要的五句话:

  1. 链路层负责相邻节点之间的一跳传输。
  2. 链路层传输单位是 frame,帧。
  3. CRC 是链路层最常用的检错方法。
  4. MAC 地址负责本地一跳,IP 地址负责端到端路径。
  5. 交换机看 MAC,路由器看 IP。

27. 最后总结

第六讲看起来知识点很多,但本质上都围绕一个问题:

IP 数据报已经知道下一跳是谁了,那它怎么在本地链路上真正送过去?

于是我们需要:

text 复制代码
帧:承载 IP 数据报
成帧:确定帧边界
CRC/海明码:发现或纠正传输错误
MAC 协议:解决多人共享信道时谁先发
MAC 地址:标识本地网卡
ARP:把本地 IP 映射到 MAC
以太网:最常见的局域网技术
交换机:根据 MAC 地址转发帧
VLAN/MPLS/数据中心网络:在更大规模下组织链路层通信

掌握这条主线,第六讲就不再是零散知识点,而是一整套"本地一跳如何可靠、高效交付"的机制。

相关推荐
SilentSamsara1 小时前
HTTP 客户端实战:httpx/重试/限速/连接池/中间件设计
开发语言·网络·python·http·青少年编程·中间件·httpx
24zhgjx-fuhao1 小时前
ISIS:多区域集成IS-IS
网络·智能路由器
小熊officer1 小时前
网络渗透和网络安全
网络·安全·web安全
饿了吃洗衣凝珠1 小时前
【无标题】
运维·服务器·网络
状元岐1 小时前
1. ModBus从入门到精通
网络
酉鬼女又兒1 小时前
零基础入门计算机网络:定义、分类与核心性能指标
开发语言·计算机网络·考研·青少年编程·职场和发展·php
luweis1 小时前
企智孪生 ETA (3.5 执行层技术落地)【浙江联保网络 卢伟舜】
网络·人工智能·程序人生·职场和发展·学习方法
jiguang1271 小时前
Windows11安装eNSP华为网络仿真工具平台
网络·华为
code monkey.3 小时前
【Linux之旅】Linux 应用层自定义协议与序列化:从粘包问题到网络计算器
linux·网络·c++