计算机网络原理
第六章 第3节
1. 千兆以太网:从“共享信道”走向“交换式全双工”
CSMA/CD 的时候,默认大家共用一条信道,所以可能碰撞。
但现代以太网大多数是:
每台主机和交换机之间是一条点到点链路。
这样好处很明显:
A 和交换机通信,B 和交换机通信,本质上是两条不同的线,不用大家抢同一根总线。
所以现代交换式以太网通常是:
全双工;
点到点;
无碰撞;
不太需要 CSMA/CD。
虽然物理速率、编码方式、拓扑结构变了,但是帧格式还是以太网那套。
2. “轮次”MAC 协议
2.1 信道划分 MAC
比如:
思想是:提前把信道切好,每个人分一块。
优点:高负载时稳定、公平。
缺点:低负载时浪费。
比如 TDMA 里,一共 6 个时隙,但只有 1 号和 3 号节点有数据,其他时隙就空着,信道浪费。
2.2 随机访问 MAC
比如:
思想是:有数据就尝试发,冲突了再处理。
优点:低负载时效率高,谁有数据谁用信道。
缺点:高负载时容易碰撞,浪费严重。
2.3 轮次协议想解决什么?
轮次协议想同时拿到两边的优点:
低负载时不要太浪费; 高负载时不要一直碰撞; 最好大家轮着来,公平一点。
常见两种:
3. 轮询 polling
轮询像老师点名。
有一个主节点 master,一个个问:
A,你要不要发? B,你要不要发? C,你要不要发?
如果某个节点有数据,就允许它发;没有数据,就问下一个。
3.1 轮询的过程
假设有一个主节点 M,三个从节点 A、B、C。
M 先问 A:
A,你有数据吗?
A 有,就发。
A 发完之后,M 问 B。
B 没有,就跳过。
然后 M 问 C。
C 有,就发。
3.2 轮询的优点
不会碰撞。
因为大家不是抢着发,而是:
主节点点到谁,谁才发。
3.3 轮询的缺点
第一,轮询有开销。
即使某些节点没有数据,主节点也要问一遍。
第二,有等待延迟。
假设你刚刚错过自己的轮次,就必须等一整圈。
第三,主节点是单点故障。
如果 master 坏了,整个系统就难以工作。
所以轮询适合:
有中心控制、节点数量不太大、需要比较稳定访问的场景。
4. 令牌传递 token passing
令牌传递像接力棒。
网络里有一个特殊的小帧,叫:
谁拿到 token,谁就有发送权。
4.1 令牌传递过程
假设环形网络:

token 从 A 传到 B。
如果 B 有数据,B 就发送数据。
发完之后,B 把 token 传给 C。
如果 C 没有数据,就直接把 token 传给 D。
4.2 令牌协议的优点
没有碰撞。
因为任意时刻只有拿到 token 的节点能发。
而且公平。
每个人都会轮到。
4.3 令牌协议的缺点
第一,token 本身有开销。
第二,等 token 有延迟。
第三,token 丢失或者某个节点故障会影响网络。
所以它也是一种“轮次 MAC 协议”。
可以记:
轮询是“中心点名”; 令牌是“接力棒轮流传”。
5. 有线接入网络:FDM、TDM、随机访问混合使用

有线电视网、Cable Modem、DOCSIS。
场景是:很多家庭通过有线电视线路接入互联网。
结构大概是:
CMTS 可以理解成运营商侧的集中控制设备。
5.1 为什么要混合用 FDM 和 TDM?
因为有线电视线路上有很多种数据:
电视节目;
下行互联网数据;
上行互联网数据;
控制信息。
所以先用 FDM 把不同频段分开。
比如:
5.2 下行方向
下行方向是:
这像广播。
CMTS 把数据发出去,所有用户都能收到,但每个用户只取属于自己的数据。
类似老师在教室里喊:
张三,这是你的。 李四,这是你的。 王五,这是你的。
大家都听得到,但只接收自己的部分。
5.3 上行方向
上行方向是:
这个方向比较麻烦。
因为很多用户都可能同时往上传数据,可能冲突。
所以 DOCSIS 会使用:
FDM 划分上行/下行频道;
TDM 把上行时间切成很多小微时隙 minislot;
部分时隙用于预约;
部分时隙用于真正上传数据;
预约时可能还要竞争。
所以它不是单纯 TDMA,也不是单纯随机访问,而是混合使用。
6. MAC 地址:链路层的地址
6.1 IP 地址和 MAC 地址的区别
IP 地址是网络层地址。
比如:
MAC 地址是链路层地址。
比如:
可以类比:
IP 地址像“你现在住在哪里”; MAC 地址像“你的身份证号”。
但是这个类比不是完全准确,只是方便理解。
6.2 IP 地址是分层的
IP 地址带有网络结构。
比如:
说明它属于:
这个子网。
所以 IP 地址可以用于路由。
路由器可以根据 IP 前缀判断:这个包应该往哪个方向走。
6.3 MAC 地址是平面的
MAC 地址通常是 48 位。
它没有明显的网络层次结构。
比如:
从这个地址本身看不出来它在哪个子网。
所以 MAC 地址主要用于:同一个 LAN 内部,从一个接口把帧交给另一个接口。
它不能像 IP 地址一样用于全球路由。
7. 为什么 IP 和 MAC 要分开?
假设没有 MAC,直接用 IP 来做链路层地址,会有几个问题。
第一,换网卡会影响地址。
MAC 地址通常跟网卡绑定。换了网卡,MAC 变了,但 IP 可以保持或者重新配置。
第二,不同链路层技术都可以承载 IP。
比如:
以太网;
WiFi;
4G/5G;
PPP。
它们底层的链路层地址机制可能不同,但上层都可以跑 IP。
第三,IP 需要层次化,MAC 不需要。
IP 是为了路由,所以必须带网络结构。
MAC 是为了本地转发,所以只要局域网内唯一就行。
8. ARP 协议:从 IP 找 MAC(上一节讲过)
ARP 的全称是:
地址解析协议。
它解决的问题是:
我知道对方的 IP 地址,但我要在局域网里发帧,需要知道对方的 MAC 地址,怎么办?
所以 ARP 的作用是:
9. ARP 表
每个主机和路由器在 LAN 接口上都有 ARP 表。
ARP 表里存:
例如:
IP 地址 | MAC 地址 | TTL 137.196.7.14 | 58-23-D7-FA-20-B0 | 500
TTL 表示这个映射还能保存多久。
因为设备可能换网卡、换地址,所以 ARP 映射不能永久保存。
10. 同一个 LAN 内 ARP 怎么工作?
假设 A 要发数据给 B。
A 知道 B 的 IP:
但是 A 不知道 B 的 MAC。
于是 A 发 ARP 请求。
10.1 ARP 请求是广播
A 发:
谁是 137.196.7.14?请告诉我你的 MAC 地址。
这个请求封装在以太网帧里。
目的 MAC 地址是广播地址:
表示 LAN 内所有主机都要接收。
所以 A 发出的帧大概是:
10.2 只有 B 会回应
LAN 里的所有主机都会收到这个 ARP 请求。
但只有 B 发现:
这个 IP 是我的。
所以 B 返回 ARP 响应:
ARP 响应通常是单播发回 A。
10.3 A 更新 ARP 表
A 收到 B 的响应后,就把映射写进 ARP 表:
以后 A 再发给 B,就不用重新广播 ARP 了。
11. 跨子网时,ARP 找的是谁?
这是最容易混的点。
假设 A 要发给远处的 B。
A 和 B 不在同一个 LAN。
比如:
A 不能直接 ARP 找 B 的 MAC。
因为 ARP 广播只能在本 LAN 内传播,路由器不会把 ARP 广播转发到别的 LAN。
所以 A 要做的是:
把数据先交给默认网关 R。
因此 A 需要知道的是:
不是 B 的 MAC 地址。
12. 跨子网发送时,IP 地址不变,MAC 地址每跳都变
这是链路层和网络层最核心的区别。
假设路径是:
A 发送给 B 的 IP 数据报里:
这个从头到尾基本不变。
但是链路层帧是每一跳重新封装的。
12.1 第一跳:A 到 R
A 发给默认网关 R。
IP 数据报:
以太网帧:
注意:
目的 IP 是 B,但目的 MAC 是 R。
因为这一跳只是把帧交给下一跳路由器。
12.2 第二跳:R 到 B
R 收到帧后,拆掉链路层头部,取出 IP 数据报。
R 查路由表,发现 B 在右侧 LAN。
于是 R 重新封装一个新的以太网帧。
IP 数据报仍然是:
新的以太网帧变成:
12.3 重点总结
跨子网时:
所以:
IP 地址像快递单上的最终收件人; MAC 地址像每一段运输中交给的下一站。
每经过一个路由器:
IP 数据报继续往前;
原来的链路层帧被拆掉;
新的链路层帧重新封装;
源 MAC 和目的 MAC 都会换。
13. 以太网 Ethernet
以太网是最常见的有线 LAN 技术。
它的特点:
简单;
便宜;
使用广泛;
速率从 10 Mbps 到几百 Gbps;
使用标准以太网帧格式。
14. 以太网物理拓扑
早期以太网是总线型。
所有设备连到同一根线:
大家共享同一个碰撞域。
所以可能碰撞,需要 CSMA/CD。
后来出现集线器 hub。
Hub 看起来像星型,但本质还是共享信道。
一个端口收到信号,会复制到所有端口。
所以仍然是一个大碰撞域。
再后来是交换机 switch。
交换机能根据 MAC 地址选择性转发帧。
所以它是现代以太网的核心。
15. 以太网帧结构
以太网帧大致包括:
15.1 前导码 preamble
前导码用于同步。
它告诉接收方:
我要开始发帧了,你把时钟对齐。
一般是 7 字节的:
后面跟 1 字节的:
15.2 目的 MAC 和源 MAC
目的 MAC:这个帧要交给哪个网卡。
源 MAC:这个帧是谁发出来的。
如果目的 MAC 是自己的 MAC,网卡就接收。
如果目的 MAC 是广播地址,也接收。
否则丢弃。
15.3 类型 type
type 字段告诉接收方:
帧里面装的是什么上层协议。
比如:
IP;
ARP;
其他网络层协议。
接收方根据 type 字段,把数据交给对应的上层协议处理。
15.4 数据 payload
数据部分一般装的是 IP 数据报或者 ARP 报文。
16. 以太网是不可靠、无连接的
16.1 无连接
发送方发送帧之前,不需要先和接收方建立连接。
不像 TCP 那样三次握手。
16.2 不可靠
接收方不会给链路层 ACK。
如果帧出错,被 CRC 检测出来,直接丢弃。
发送方的以太网层不知道这个帧丢了。
如果上层是 TCP,那么 TCP 会恢复。
如果上层是 UDP,那么应用层可能直接丢数据。
所以:
链路层不可靠,不代表整个通信一定不可靠。 可靠性可以由更高层提供。
17. 交换机 switch
交换机是链路层设备。
它主要做三件事:
学习;
过滤;
转发。
18. 交换机和路由器的区别
路由器看 IP 地址。
交换机看 MAC 地址。
路由器工作在网络层。
交换机工作在链路层。
路由器维护路由表。
交换机维护交换表。
19. 交换机表
交换机表里一般存:
例如:
MAC 地址 | 接口 | TTL A | 1 | 60 A' | 4 | 60
意思是:
如果以后要发给 MAC 地址 A,就从接口 1 发出去。 如果以后要发给 MAC 地址 A',就从接口 4 发出去。
20. 交换机怎么自学习?
交换机收到一个帧时,看的是:
比如交换机从端口 1 收到一个帧:
它就知道:A 在端口 1 那边。
于是交换机表中记录:
这叫自学习。
注意:交换机靠源 MAC 学习位置,靠目的 MAC 决定转发方向。
21. 交换机怎么转发?
交换机收到帧以后,看目的 MAC。
分三种情况。
21.1 情况一:目的 MAC 不知道
如果交换表里没有目的 MAC 的记录。
交换机不知道对方在哪。
于是它会泛洪 flooding:
除了收到该帧的端口以外,把帧从所有其他端口发出去。
比如帧从端口 1 进来,目的 MAC 是 A',但表里不知道 A' 在哪。
交换机就从端口 2、3、4、5、6 都发出去。
21.2 情况二:目的 MAC 知道,且在另一个端口
如果表里知道:
那么交换机只把帧从端口 4 发出去。
这叫选择性转发。
21.3 情况三:目的 MAC 就在进入端口
如果帧从端口 1 进入,目的 MAC 也在端口 1 那边。
说明这个帧不需要经过交换机转发。
交换机直接丢弃。
这叫过滤 filtering。
22. 交换机转发规则总结
交换机收到帧时:
第一步,学习源 MAC:
第二步,查目的 MAC:
如果目的 MAC 不在表中:
如果目的 MAC 在表中,且端口不同:
如果目的 MAC 在表中,且端口相同:
源 MAC 用来学习; 目的 MAC 用来查表; 不知道就泛洪; 知道就定向转发; 同端口就过滤。
23. 多个交换机互联也可以自学习
交换机之间连接起来以后,仍然使用同样的规则。
比如:
如果 A 给 G 发数据。
刚开始所有交换机表都是空的。
S1 收到 A 的帧,先学习:
但是 S1 不知道 G 在哪里,于是泛洪。
帧会传到 S4。
S4 收到后,也学习:
S4 不知道 G,就继续泛洪到 S2、S3。
S3 收到后学习:
如果 G 收到帧并回复 A,那么回复帧经过 S3、S4、S1。
沿途交换机会学习:
之后 A 再给 G 发,交换机就知道方向了,不用再泛洪。
24. 交换机的好处
24.1 透明
主机不需要知道交换机的存在。
主机只管发以太网帧。
交换机自己学习、自己转发。
24.2 即插即用
不用手动配置交换表。
交换机通过收到的帧自动学习 MAC 地址位置。
24.3 支持并行传输
交换机的不同端口可以同时传输。
比如:
和:
如果它们走的端口不冲突,就可以同时进行。
这比共享总线强很多。
24.4 隔离碰撞域
在交换式以太网中,每条主机到交换机的链路都可以看成单独的碰撞域。
如果是全双工,就基本没有碰撞。
所以现代以太网效率远高于早期共享总线以太网。
25. 回顾
首先,链路层要解决相邻节点之间的传输。
如果很多节点共享信道,需要 MAC 协议决定谁发。
所以有:
也有:
然后,在局域网中,每个接口有 MAC 地址。
但 IP 和 MAC 不同:
所以需要 ARP 把:
同一 LAN 内,ARP 找目标主机 MAC。
跨子网时,ARP 找默认网关 MAC。
真正传输时:
最后,现代以太网用交换机连接主机。
交换机通过源 MAC 自学习,通过目的 MAC 查表转发。
26. 总结
MAC 协议
信道划分:
随机访问:
轮次协议:
MAC 地址
链路层地址。
用于 LAN 内传帧。
IP 地址
网络层地址。
用于跨网络路由。
ARP
作用:
同 LAN:
跨子网:
以太网帧
交换机
工作层次:
看:
表项:
核心规则:
收到帧先学源 MAC;再查目的 MAC; 不知道就泛洪;知道就转发;同端口就丢弃。
IP 负责跨网络找到最终目的地,MAC 负责每一跳把帧交给下一个节点,ARP 负责把下一跳 IP 变成下一跳 MAC,交换机负责在 LAN 内根据 MAC 转发。
