破天荒想写点学习笔记,实则是数据跑太慢了,找事情打发时间,简单记录一下两周的计算机网络学习内容。
这份笔记按“先理解在解决什么问题,再记概念和公式”的顺序整理。后面补充的是物理层与数据链路层的常见基础内容,具体考试范围还是以老师讲授和教材为准。
阅读导航:
开始之前:先把分层这件事理顺
首先明确一点: 计算机网络并不是只有一种分层方式。 OSI 参考模型分为七层,TCP/IP 体系结构通常按四层描述,而课程中常用的是方便讲解的五层模型。
这里统一采用五层模型,从上到下是:
应用层 应用程序之间交换信息
↓
运输层 为应用进程之间的通信提供服务,也常称“传输层”
↓
网络层 让分组能够跨越不同网络到达目的地
↓
数据链路层 在一段链路上组织和传送帧
↓
物理层 通过实际信号传输比特流
通过老师讲的例子,计算机网络可以类比快递的实现。发送方把应用数据逐层交给下一层,下层根据需要添加控制信息,这个过程叫 封装 ;接收方反过来逐层处理,这个过程叫 解封装 。
不过,“一层一层贴 tag”只是帮助理解的比喻:不是每层都一定添加同样形式的首部,物理层主要负责把比特表示成可传输的信号。
接下来记录物理层与数据链路层。 话说为什么我们从下往上学,好多网课都是从上往下,hyw。
一、物理层
1. 物理层负责什么
计算机中的数据可以表示成 0 和 1,但网线、光纤和无线空间并不能直接传输抽象的数字,需要把它们转换成实际信号。
| 传输介质 | 传输的信号 |
|---|---|
| 双绞线等铜缆 | 电信号 |
| 光纤 | 光信号 |
| 无线空间 | 电磁波信号 |
通信过程可以简化为:
发送方的比特 → 转换为信号 → 经过传输介质 → 接收方恢复比特
物理层解决的是: 怎样在传输介质上传输比特流。 它通常不关心这些比特是聊天消息、图片,还是视频。
2. 物理层接口的四个特性
物理层不仅涉及信号,也规定通信设备与传输介质之间的接口。
| 特性 | 规定什么 | 直观例子 |
|---|---|---|
| 机械特性 | 接口的形状、尺寸、引脚数量等 | 插头是什么形状 |
| 电气特性 | 电压、阻抗等电气参数 | 什么电平表示什么状态 |
| 功能特性 | 各条线路或引脚的功能 | 哪个引脚负责发送 |
| 过程特性 | 各种操作的步骤和顺序 | 怎样建立、进行和结束传输 |
可以记成: 长什么样、用什么信号、各部分做什么、按什么顺序操作。
3. 数据、信号和码元
- 数据 :需要传递的信息。
- 信号 :数据在传输过程中的物理表现。
- 码元 :数字通信中,在一个符号时间内发送的基本信号单位。
信号可以分为下面两类。信号与系统还在追我。
| 类型 | 特点 |
|---|---|
| 模拟信号 | 表示信息的参数连续变化 |
| 数字信号 | 使用有限种、可区分的信号状态表示信息 |
一个码元不一定只表示一个比特。 例如,规定四种可区分的信号状态:
状态 A → 00
状态 B → 01
状态 C → 10
状态 D → 11
选择其中一种状态,就能够表示一组 2 比特的数据。因此,在每个码元有 种可选状态、直接映射等长比特组的情况下:
这里通常假设 是 2 的整数次幂。比如两种状态对应 1 比特,四种状态对应 2 比特,八种状态对应 3 比特。
4. 波特率与比特率【重点】
| 名称 | 含义 | 单位 |
|---|---|---|
| 码元速率,也叫波特率 | 每秒传输多少个码元 | Baud,波特 |
| 比特率 | 每秒传输多少个比特 | bit/s,也写作 bps |
在上述映射条件下,设码元速率为 ,比特率为 :
例如,码元速率为 2,000 Baud,每个码元有 4 种状态:
波特率数的是码元,比特率数的是比特,二者不能直接画等号。 而且线路比特率也不等于应用实际可用的数据速率,还可能包含编码和协议开销。
顺手记一个单位:。大写 B 是字节,小写 b 是比特。网络速率中的 k、M、G 通常按十进制计算,例如 。
5. 单工、半双工与全双工
这三个概念描述通信方向:
| 方式 | 含义 | 例子 |
|---|---|---|
| 单工 | 只能沿一个方向传输 | 传统广播 |
| 半双工 | 双方都能发送,但不能同时发送 | 对讲机 |
| 全双工 | 双方可以同时发送与接收 | 常见的现代交换式以太网链路 |
“双向”不一定等于“全双工”,还要看能不能同时进行。
6. 编码与调制
两者都在解决“怎样用信号表示数据”,处理方式不同:
- 基带编码 :将数据映射成适合直接传输的基带信号。
- 调制 :让数据控制载波的某些参数,形成适合信道传输的信号。
常见的基带编码:
| 编码方式 | 核心特点 |
|---|---|
| 不归零编码 NRZ | 常见形式用不同电平表示数据,长时间不跳变时可能不利于同步 |
| 曼彻斯特编码 | 每个比特中间都有跳变,可以提供时钟信息;用中间跳变的方向区分比特 |
| 差分曼彻斯特编码 | 比特中间有跳变,用比特开始处是否跳变区分比特 |
画编码波形时,要先看题目对 0、1 的具体约定。 不要只背“向上跳变就是 1”,不同约定可能相反。
常见的调制方式:
| 方式 | 改变载波的什么参数 |
|---|---|
| ASK,振幅键控 | 振幅 |
| FSK,频移键控 | 频率 |
| PSK,相移键控 | 相位 |
| QAM,正交振幅调制 | 结合振幅与相位的变化 |
同步可以直观理解为:接收方需要知道“什么时候读一个符号”,否则即使收到了信号,也可能把相邻数据的边界读错。
7. 为什么传输速率不能无限提高【重点】
实际信道会受到多种限制:
- 衰减 :信号在传播过程中变弱。
- 失真 :不同频率成分受到的影响不同,使波形发生变化。
- 噪声与干扰 :额外信号影响接收判断。
- 带宽有限 :信道只能有效通过一定频率范围的信号。
发送得过快时,相邻码元可能相互影响,出现 码间串扰 。教材中通常用两个公式说明速率限制。
7.1 奈氏准则:理想情况下,码元也不能无限密集
对于带宽为 Hz 的理想低通信道,在无码间串扰的条件下,最高码元速率为:
如果每个码元有 种可区分状态,对应的最高比特率为:
例如,,:
这里能看出两种提高比特率的思路:增加信道带宽,或者让一个码元携带更多比特。
但是,信号状态越多,接收方越难区分相邻状态。真实环境有噪声,所以不能靠无限增加 来无限提高速率。
这里使用的是教材常见的理想低通信道模型,不能把“最高码元速率为 ”不加条件地套到所有信道上。
7.2 香农公式:有噪声时,可靠传输存在容量上限
对于带宽受限、具有加性白高斯噪声的信道,容量为:
| 符号 | 含义 | 单位或要求 |
|---|---|---|
| 信道容量 | bit/s | |
| 信道带宽 | Hz | |
| 接收端信号的平均功率 | 与 使用同一单位 | |
| 噪声的平均功率 | 与 使用同一单位 | |
| 信噪比 | 无量纲的功率比 |
公式里代入的是功率比,不能直接把 dB 数值塞进去。
例如,带宽为 3,000 Hz,信噪比为 30 dB:
也就是约 29.9 kbit/s。
这个容量表示理论上的可靠通信速率边界:在相应模型下,低于容量并采用合适编码,误码率可以做到任意小; 不是说随便一种设备都能达到这个速率,更不是说传输天然零误码。
7.3 两个公式怎么区分
| 对比项 | 奈氏准则的上述表达 | 香农公式 |
|---|---|---|
| 主要关注 | 带宽限制下的码元速率,以及每个码元承载的信息量 | 带宽和噪声共同决定的信道容量 |
| 需要的量 | 带宽 、状态数 | 带宽 、信噪比 |
| 提醒 | 注意理想低通信道、无码间串扰等条件 | 注意 dB 要先换成功率比 |
若一道题同时给出这些条件,并要求在这两类限制下估算上限,应分别计算,结果不能超过其中较小的限制。两个天花板,撞到哪个都上不去。
8. 带宽、速率和吞吐量别混在一起
“带宽”这个词在不同语境里有两种常见用法:
| 概念 | 含义 | 常见单位 |
|---|---|---|
| 信号或信道的频率带宽 | 有效频率范围的宽度 | Hz |
| 网络中的“带宽” | 通常指链路的数据传输能力 | bit/s |
| 吞吐量 | 某段时间内实际通过的数据量与时间之比 | bit/s |
| 有效吞吐量 | 实际交付的有效业务数据速率,不计重复数据及相应开销 | bit/s |
比如“100 Mbit/s 的网口”描述的是速率;“3,000 Hz 的信道带宽”描述的是频率范围。二者不能直接比较大小。
链路标称速率高,也不代表下载一定快:还可能受其他链路、服务器、协议开销和拥塞影响。
9. 常见传输介质
| 介质 | 基本特点 | 理解要点 |
|---|---|---|
| 双绞线 | 将铜线成对绞合,减轻干扰和串扰 | 常见以太网网线采用这种结构 |
| 同轴电缆 | 内导体与外部屏蔽层同轴排列 | 曾用于早期共享式以太网,也用于其他通信系统 |
| 光纤 | 用光传输,抗电磁干扰,适合较高带宽和较长距离的应用 | 常见分类有单模和多模 |
| 无线介质 | 通过空间传播电磁波 | 使用灵活,但受遮挡、干扰和共享信道影响 |
单模、多模中的“模”,说的是光在光纤中的传播模式, 不是单工、全双工中的那个“单”。
顺带区分: 介质 是信号传播所依赖的物理载体, 信道 是通信所使用的传输通道。同一介质可以通过复用承载多个信道。
10. 信道复用:一条传输资源怎么给多人用
如果每两台设备都单独铺设一条线路,成本会很高。复用的思路就是:让多个通信共享传输资源,再用某种规则把它们区分开。
| 方式 | 怎么区分不同通信 | 直观理解 |
|---|---|---|
| 频分复用 FDM | 使用不同频段 | 同一时间,各走不同车道 |
| 时分复用 TDM | 使用不同时间片 | 同一条车道,按固定时隙轮流走 |
| 统计时分复用 STDM | 根据实际需求动态分配时间资源 | 有数据的人再获得发送机会 |
| 波分复用 WDM | 光纤中使用不同波长 | 光通信中的频分思路 |
| 码分复用 CDM | 使用可区分的码序列 | 用不同的编码区分同时传输的信息 |
固定时分复用中,某个用户没数据时,分给它的时隙可能空着;统计时分复用可以改善这种浪费,但需要额外标识和调度。
码分多址 CDMA 的入门理解是:发送端用自己的码片序列表示数据,接收端通过相关运算提取对应信号。在理想的同步正交模型里,不同用户的码序列内积为 0;实际无线环境还要考虑同步、功率和干扰。
11. 发送时延和传播时延【重点】
这部分属于网络基础性能知识,放在这里是因为它和物理传输关系很近。
发送时延 :把整段数据的所有比特推上链路,需要多久?
设数据长度为 bit,发送速率为 bit/s:
传播时延 :一个比特对应的信号从链路一端传播到另一端,需要多久?
设链路长度为 m,传播速度为 m/s:
例如,发送 1,000 B 数据,速率为 8 Mbit/s;链路长 200 km,传播速度取 :
忽略其他因素,从开始发送到最后一个比特到达,共需要 2 ms。
这里并不是先把整帧发完,信号才开始传播: 发送与传播会重叠发生。 最先发出的比特,早就在路上了。
实际还可能有:
- 处理时延 :设备检查、查表等处理消耗的时间。
- 排队时延 :数据等待发送机会的时间,拥塞时可能显著增加。
多跳传输中,要按经过的链路和设备计算相应时延。如果设备采用存储转发,还需要考虑收完一帧后才开始下一跳转发的影响。
提高发送速率,会缩短发送时延;在介质与距离不变时,并不会按同样比例缩短传播时延。
时延带宽积也可以顺手记一下:
单位是 bit,可以理解为链路连续发送时,已经进入链路、还没传播到另一端的比特量。后面讨论端到端窗口时,也会用 衡量一个往返周期内能发送的数据量,要看题目采用哪一种时延。
12. 中继器与集线器
| 设备 | 主要工作 | 是否根据 MAC 地址选择转发方向 |
|---|---|---|
| 中继器 | 对信号进行再生、整形等处理,延伸传输距离 | 否 |
| 集线器 Hub | 可以理解为多端口中继器,将收到的信号向其他端口重复发送 | 否 |
在传统共享式以太网中,集线器连接的主机共享传输资源,处于同一个冲突域。它不会先检查“这帧到底发给谁”,再有选择地发出去。
这就引出了下一层: 只有传输比特的能力,还不够组织好通信。
二、数据链路层
1. 从比特流到帧:这一层多做了什么
物理层让接收方收到一串比特,但只看到连续的 0 和 1,还会遇到这些问题:
- 一段数据从哪里开始、在哪里结束?
- 怎样判断传输中有没有发生差错?
- 多台设备共享介质时,谁可以发送?
- 在以太网这类网络中,怎样识别帧的接收者?
数据链路层把数据组织成 帧(Frame) ,结合具体协议处理这些问题。
发送方:网络层分组 → 封装成帧 → 转换为比特和信号
接收方:接收信号与比特 → 识别并检查帧 → 取出网络层分组
链路 是连接相邻节点的通信路径; 数据链路 是在链路基础上,加上实现通信协议所需的控制机制。
这里的“相邻”是网络通信关系上的相邻,不意味着两台设备必须摆在一起。跨越多个网络到达远方主机的整体问题,还需要后面的网络层参与。
2. 链路层常见的几个任务
| 任务 | 要解决的问题 |
|---|---|
| 封装成帧 | 如何划分和识别数据边界 |
| 透明传输 | 数据内容碰巧像控制标记时,怎样避免误识别 |
| 差错检测 | 怎样发现帧在传输中被破坏 |
| 媒体接入控制 | 共享介质上,多个设备怎样协调发送 |
| 按协议提供流量控制、可靠传输等能力 | 怎样避免接收方来不及处理,以及应对丢失、重复等问题 |
这些不是每一种链路层协议都完整提供的功能清单。 例如,以太网有检错机制,但普通以太网 MAC 不会为每个数据帧执行确认与重传;Wi-Fi 则对许多单播帧提供链路层确认与重试。
3. 封装成帧
概念上,一帧可以表示为:
┌──────────┬───────────────────┬──────────┐
│ 帧首部 │ 数据部分/有效载荷 │ 帧尾部 │
└──────────┴───────────────────┴──────────┘
帧首部可能包含地址、类型或控制信息,帧尾部可能包含检错信息。 具体字段取决于协议,并不是所有帧都长得一样。
常见成帧思路有:
| 方法 | 基本思路 | 需要注意 |
|---|---|---|
| 长度字段或字符计数 | 用长度信息帮助确定边界 | 长度字段出错可能影响后续识别 |
| 特殊字符或字节定界 | 用约定标记表示开始、结束 | 数据中的同类标记需要转义 |
| 特殊比特串定界 | 用约定的比特模式标记边界 | 需要比特填充等机制 |
| 编码违例等物理层机制 | 利用正常数据不会使用的信号模式 | 依赖具体编码和协议 |
不要误以为所有链路层协议都靠同一对“开始字符、结束字符”识别帧。
4. 透明传输:数据里也有分隔符怎么办
假设协议用某个标记表示“帧结束”,而一张图片的数据里恰好出现相同内容,接收方就可能提前截断。
透明传输 要保证:数据中允许出现任意内容,不会因为碰巧像控制标记而被错误解释。它和“加密、让别人看不懂”没有关系。
4.1 字节填充
碰到特殊字节时,在前面加转义字节,或者按约定进行替换;接收端执行逆操作,恢复原数据。
以 PPP 的字节转义规则为例:
数据中的 0x7E → 发送为 0x7D 0x5E
数据中的 0x7D → 发送为 0x7D 0x5D
其中 0x7E 用作帧标志,0x7D 是转义字节;还可能根据配置转义其他控制字符。规则见 RFC 1662:PPP 成帧与透明传输。
4.2 比特填充
在使用 01111110 作为标志的相应比特定界协议中,发送端对标志之间的内容进行处理: 连续遇到 5 个 1,就插入一个 0。
原始内容:111111
填充之后:1111101
分组理解:11111 | 0(插入)| 1(原第六位)
上图的关键是顺序:前五个 1、插入的 0、原来的第六个 1。接收端在对应位置删除填入的 0,恢复原内容。帧边界标志本身不参与这个填充过程。
5. 差错检测:怎样知道数据可能传错了【重点】
传输中,0 可能变成 1,1 也可能变成 0,这叫 比特差错 。还可能发生整帧丢失、重复等情况,不能全部靠一次校验解决。
检错的基本思路是:发送端根据数据计算冗余信息,一起发送;接收端用相同规则检查数据与冗余信息是否一致。
5.1 奇偶校验
以偶校验为例:增加一个校验位,使整个比特串中 1 的数量为偶数。
数据:1011,其中有 3 个 1
校验位:1
发送:10111,共有 4 个 1
如果传输中翻转了奇数个比特,奇偶性就会改变,能够被检测出来;如果翻转了偶数个比特,单个奇偶校验位就不能检出。
5.2 循环冗余检验 CRC
CRC 可以理解为:把比特串当成二进制多项式的系数,用双方约定的生成多项式做模 2 除法,把余数作为检错信息。
初学时先记操作步骤:
- 设生成多项式的最高次数为 ,对应二进制除数有 位。
- 在待发送数据后补 个 0。
- 用约定除数进行模 2 除法。
- 将得到的 位余数附在原始数据后面。
- 接收端用同一除数检查收到的比特串。
模 2 加减都等价于 按位异或 ,没有进位,也没有借位:
0 ⊕ 0 = 0 0 ⊕ 1 = 1
1 ⊕ 0 = 1 1 ⊕ 1 = 0
一个小例子,数据为 1101,除数为 1011,所以 :
原始数据: 1101
补 3 个 0: 1101000
模 2 除法余数:001
最终发送: 1101001
上面求余数时,每次将除数的最高位与当前余数的最高位对齐,再异或:
1101000
⊕ 1011000
---------
0110000
⊕ 0101100
---------
0011100
⊕ 0010110
---------
0001010
⊕ 0001011
---------
0000001 → 取低 3 位,余数为 001
在这个简化教材算法中,接收端计算 1101001 ÷ 1011,余数应为 000;余数非零说明检测到了差错。
余数为零,只能说明没有检测到差错,不能保证数据绝对正确。 某些错误模式仍可能漏检;具体检错能力与生成多项式等条件有关。
实际协议中的 CRC 还可能规定初始值、位序和最终异或等细节,不能把上面的简化计算直接当作所有协议的实现。
CRC 是计算方法,FCS(帧检验序列)是帧中存放检错结果的字段。 二者不是同一层面的概念。
5.3 检错与纠错不是一回事
| 方式 | 基本目的 | 例子 |
|---|---|---|
| 检错 | 发现数据可能出错 | 奇偶校验、CRC |
| 纠错 | 利用冗余信息恢复一定范围内的错误 | 汉明码等纠错码 |
| 检错后重传 | 检测异常后重新发送 | ARQ 机制 |
若教材讲到汉明码,单比特纠错的一个基础关系是:
其中 是数据位数, 是校验位数。右边包含 种单比特出错位置和 1 种无错情况。例如 4 个数据位可以配 3 个校验位,形成常见的 汉明码。
普通单错纠正汉明码不能保证同时安全地区分所有双比特错误;常见的扩展汉明码增加整体奇偶校验,提供单错纠正、双错检测能力。
6. 可靠传输:帧没到怎么办
先区分两个概念:
- 差错检测 :检查收到的帧是否可能损坏。
- 可靠传输机制 :进一步处理丢失、重复等问题,在协议假设和重试策略范围内完成正确交付。
检测出一个坏帧并将其丢弃,还没有解决“这份数据最后到底有没有送到”的问题。
常见机制包括:
| 机制 | 作用 |
|---|---|
| 确认 ACK | 接收方告知发送方,某些数据已成功收到 |
| 超时重传 | 等待过久没收到预期确认,再次发送 |
| 序号 | 区分新数据与重复数据 |
| 缓存 | 在需要时保存待确认数据或乱序数据 |
利用确认和重传实现差错恢复,通常称为 ARQ,自动重传请求 。不要把名称理解成“必须由接收方显式请求,发送方才能重传”,超时也可以触发重传。
7. 停止等待协议【重点】
最容易理解的可靠传输方式是: 发送一帧,等确认;确认收到,再发下一帧。
发送方 接收方
│ ─────── 数据帧 0 ─────────→ │
│ ←──────── ACK ─────────── │
│ ─────── 数据帧 1 ─────────→ │
│ ←──────── ACK ─────────── │
如果数据帧丢失,发送方收不到确认,超时后重传。
更容易忽略的是: 数据帧成功到达,但 ACK 丢了。 发送方也会重传,此时接收方必须识别重复帧,不能把相同数据再向上交付一次,还应再次发送确认。
因此需要序号。经典的交替位停止等待协议使用 0、1 交替编号;这个做法依赖相应的链路和帧寿命假设,不代表现实网络中可以让任意旧帧无限存活。
停止等待为什么效率可能很低
忽略 ACK 的发送时间、处理时间及差错,若一帧发送时间为 ,往返传播时间为 ,发送方用于发送数据的时间比例约为:
这里的 RTT 不包含本公式单独列出的数据帧发送时间 ;做题时要看题目如何定义。
例如,发一帧只需 1 ms,但等待往返传播需要 20 ms:
大多数时间都在等确认。网速挺快,但一直在等“收到”。
8. 滑动窗口、GBN 与 SR【重点】
提高效率的一种办法是: 允许发送方在等待确认期间,连续发送多帧。
发送窗口规定当前允许发送、但尚未完成确认的序号范围。收到确认后,窗口向前移动,让新的帧获得发送资格。
| 对比项 | 停止等待 | 回退 N 帧 GBN | 选择重传 SR |
|---|---|---|---|
| 发送窗口 | 1 | 可以大于 1 | 可以大于 1 |
| 接收乱序帧 | 通常不保留 | 经典形式丢弃乱序帧 | 缓存接收窗口内的正确乱序帧 |
| 确认方式 | 逐帧确认 | 通常累计确认 | 通常分别确认 |
| 典型超时后的处理 | 重传当前帧 | 从最早未确认帧起,重传后续已发送未确认帧 | 重传对应的未确认帧 |
| 实现复杂度 | 低 | 较低 | 较高 |
例如,依次发送 0、1、2、3,其中帧 1 丢失:
- GBN :接收方仍在等待 1,经典实现会丢弃后到的 2、3;发送方之后重传 1、2、3。
- SR :接收方可以先缓存 2、3;发送方补发 1 后,接收方再按顺序交付这些数据。
采用 位循环序号时,经典模型中的窗口限制是:
若 SR 的收发窗口大小相等,均为 :
限制窗口大小,是为了避免序号循环使用后,旧帧被误认为新帧。
不同教材对 ACK 数字的约定可能不同:有的表示“已收到几号”,有的表示“下一个期待几号”。 看时序图前先确认约定。
9. 流量控制与拥塞控制别混淆
| 概念 | 主要关注 | 直观理解 |
|---|---|---|
| 流量控制 | 接收方是否来得及接收和处理 | 对方吃不下,发送方慢一点 |
| 拥塞控制 | 网络中的链路、队列等资源是否过载 | 路已经堵了,需要控制进入网络的流量 |
停止等待和滑动窗口可以参与流量控制。拥塞控制会在后续章节进一步学习,不能把“接收方忙”和“中间网络堵”当成同一件事。
10. 共享介质上,谁先发送
点对点链路只有两端,通信关系相对简单;共享介质可能同时连接多台设备,需要协调发送机会。
媒体接入控制通常简称 MAC,Medium Access Control 。这里的 MAC 是一类控制机制的名字;后面的 MAC 地址是这一层使用的地址,别把两个概念完全等同。
| 思路 | 代表方式 | 怎么分配机会 |
|---|---|---|
| 划分信道 | 频分、时分、码分等 | 预先或按规则划分资源 |
| 随机接入 | ALOHA、CSMA 等 | 各节点按规则竞争,发生冲突后再处理 |
| 轮流接入 | 轮询、令牌传递 | 被选中或拿到令牌后发送 |
复用和多址接入都涉及共享资源,但观察角度不同:复用强调合并和分离多路信号,多址接入强调多个设备怎样使用共享信道。
CSMA 是“载波监听多路访问”: 先听一听介质上是否有人发送,再决定是否发送。 但先听并不能保证无冲突,因为信号传播需要时间。
11. 传统以太网的 CSMA/CD【重点】
CSMA/CD 是“载波监听多路访问 / 碰撞检测”,用于传统共享式、半双工以太网。
核心过程:
- 发送前监听介质。
- 介质忙就等待,空闲并满足协议规定的间隔后开始发送。
- 发送时继续检测是否发生碰撞。
- 检测到碰撞后发送强化碰撞的信号,并停止此次发送。
- 随机退避一段时间,再按规则重试。
为什么先听了,还是会撞
A ───────────────────────── B
信号传播需要时间
A 开始发送时,信号尚未到达 B。B 此时监听到的仍可能是空闲,也开始发送,于是发生碰撞。
为什么和最短帧长有关
设网络两端的单向最大传播时延为 。在简化模型中,发送方最坏可能在约 后才发现碰撞,因此发送时间需要满足:
即:
否则帧太短,发送方早已发完,碰撞影响才传回来,就不能按预期在发送期间检测它。
经典 10/100 Mbit/s 半双工以太网采用 512 比特时间的时隙,与 64 B 最小 MAC 帧长度相联系;不要把这一细节直接推广到所有以太网物理层。
二进制指数退避
碰撞次数增加时,扩大随机等待的选择范围,降低再次同时发送的概率。经典算法中,第 次碰撞后,令 ,从 到 中随机选整数,乘以时隙长度作为退避时间;同一帧连续发生 16 次碰撞后放弃此次发送。
常见的现代交换式全双工以太网不运行 CSMA/CD。 学习它主要是理解共享介质、传播时延和历史以太网的设计关系。
12. 无线局域网为什么采用 CSMA/CA
无线设备发送时,自身信号往往很强,不容易像有线共享以太网那样同时可靠地检测碰撞。此外,还存在 隐藏站问题 :
A 能听见 AP,C 也能听见 AP
但 A 和 C 互相听不见
A ───── AP ───── C
A 和 C 都可能认为信道空闲,却同时向 AP 发送,导致接收端受到干扰。
Wi-Fi 常见的竞争接入机制采用 CSMA/CA:载波监听多路访问 / 碰撞避免 ,结合监听、帧间间隔、随机退避等机制减少冲突,并对许多单播帧使用确认和重试。
可选的 RTS/CTS 交互可以帮助缓解隐藏站问题,但有额外开销,也不能消除所有冲突。
| 机制 | 关注点 | 常见场景 |
|---|---|---|
| CSMA/CD | 发送时检测碰撞,发生后停止并退避 | 传统共享式半双工以太网 |
| CSMA/CA | 通过规则降低碰撞概率,并结合反馈判断是否成功 | 无线局域网中的常见竞争接入 |
“碰撞避免”不是“保证绝不碰撞”,而且现代 Wi-Fi 还包含其他调度和接入机制,不能只用这四个字母概括全部行为。
13. MAC 地址与以太网帧【重点】
13.1 MAC 地址是什么
以太网中常见的 MAC 地址长 48 bit,也就是 6 B,通常写成六组十六进制数:
02:1A:2B:3C:4D:5E
它用于链路层通信中的接口标识。 MAC 地址不一定永远不变,也不能简单理解成“一台电脑一生只有一个身份证”。 设备可以有多个网络接口,地址也可能由软件配置或随机化。
| 类型 | 含义 |
|---|---|
| 单播地址 | 面向一个接收接口 |
| 组播地址 | 面向一组接收者 |
| 广播地址 | 面向当前广播域内的所有站点;以太网广播地址为 FF:FF:FF:FF:FF:FF |
按通常的十六进制显示方式,首字节最低位为 0 表示单播,为 1 表示组地址;广播地址是特殊的组地址。先记住这些基本分类就够了。
13.2 常见的 Ethernet II 帧格式
以 未携带 VLAN 标签的常见 Ethernet II 帧 为例:
| 字段 | 长度 | 作用 |
|---|---|---|
| 目的 MAC 地址 | 6 B | 指定接收者 |
| 源 MAC 地址 | 6 B | 标识发送接口 |
| 类型 EtherType | 2 B | 指明载荷属于哪一种上层协议 |
| 数据与必要填充 | 46~1,500 B | 携带上层数据,不足最小长度时填充 |
| FCS | 4 B | 检测帧传输差错 |
由此计算:
这里从目的地址算到 FCS, 不包括前导码、帧开始定界符,也不包括帧间间隔 。带 VLAN 标签或使用其他扩展时,应按对应格式另算。
基本无标签帧的 64 B、1,518 B 边界,也可对照 IEEE 802.3 帧格式工作组资料中的基本帧尺寸表。
常见以太网 MTU 为 1,500 B,指这里可承载的上层分组大小上限,不能把它当成整个以太网帧长。关于 IP 在以太网中的承载与填充,可参见 RFC 894。
另外,IEEE 802.3 中相应的两字节字段还存在长度解释方式;这里先掌握常见 Ethernet II 的类型字段即可。
14. 交换机如何转发帧【重点】
普通二层以太网交换机可以理解为多端口网桥。它维护一张 MAC 转发表,记录:
在某个 VLAN 内,要到达这个 MAC 地址,应从哪个端口转发。
例如:
| MAC 地址 | 端口 |
|---|---|
| 主机 A 的 MAC | 1 |
| 主机 B 的 MAC | 2 |
| 主机 C 的 MAC | 3 |
14.1 最关键的一句话
根据源地址学习,根据目的地址转发。
在端口处于允许学习、转发的状态,且没有额外过滤策略时,基本过程是:
- 从端口收到帧,读取源 MAC 地址,学习或更新“源 MAC → 入端口”的对应关系。
- 查询目的 MAC 地址。
- 若找到目的端口,且不是入端口,就向该端口转发。
- 若目的端口恰好是入端口,则不再把该帧从其他端口转发出去。
- 若是未知单播,则向同一 VLAN 内其他允许转发的端口泛洪。
- 广播帧通常也在同一 VLAN 内向其他允许转发的端口泛洪;组播可能结合专门的表项处理。
泛洪不等于所有通信永远广播,也不等于交换机修改了帧中的目的地址。 它只是暂时不知道位置时,向多个候选端口发送副本。
14.2 一个完整的小例子
A ── 端口 1 ┐
B ── 端口 2 ├── 交换机
C ── 端口 3 ┘
假设 A 已经知道 B 的 MAC 地址,但交换机的表最初为空:
- A 给 B 发帧,交换机先学到
A → 端口 1。 - 交换机还不知道 B 在哪里,把该帧向端口 2、3 泛洪。
- B 接收该帧;C 的接口在通常接收模式下会过滤掉不是发给自己的单播帧。
- B 回复 A,交换机学到
B → 端口 2。 - 因为已经知道 A 在端口 1,回复只从端口 1 转发。
- 后续 A、B 之间的已知单播,可以定向转发。
动态表项通常会老化,主机位置变化后也需要更新,所以这张表不是学一次就永久不变。
15. 冲突域、广播域与 VLAN
| 概念 | 含义 |
|---|---|
| 冲突域 | 在共享、半双工介质模型中,发送可能相互发生碰撞的范围 |
| 广播域 | 二层广播能够传播到的范围 |
常见设备的区别:
| 设备或配置 | 对冲突的影响 | 对二层广播的影响 |
|---|---|---|
| 集线器 | 多端口共享一个冲突域 | 通常仍在同一广播域 |
| 二层交换机,单个 VLAN | 隔离各端口的共享冲突范围;全双工链路本身无碰撞 | 广播仍可在该 VLAN 内传播 |
| 配置多个 VLAN 的交换机 | 仍按各链路的方式工作 | 将不同 VLAN 划成不同广播域 |
| 路由器 | 各接口连接不同链路 | 通常不直接转发收到的二层广播帧 |
VLAN,虚拟局域网 ,可以把同一套交换设备上的端口划入不同的逻辑局域网。
同一台交换机:
端口 1、2 → VLAN 10
端口 3、4 → VLAN 20
VLAN 10 的广播,不会仅靠普通二层转发跑进 VLAN 20。
跨 VLAN 通信通常需要路由器或三层交换机提供三层转发。交换机之间承载多个 VLAN 时,常使用 IEEE 802.1Q 标签区分流量;不能理解为每台终端发出的每一帧都必须带标签。
16. 多台交换机连接,为什么还要防环路
为了提高可用性,交换机之间可能铺设冗余链路。但普通二层以太网帧没有像 IP TTL 那样的逐跳寿命字段,如果形成转发环路,广播或泛洪的帧可能持续绕行。
可能出现:
- 广播风暴 :大量广播副本占用链路资源。
- 重复帧 :同一帧沿不同路径多次到达。
- MAC 表不稳定 :同一源地址被反复学到不同端口上。
生成树协议 STP 的基本思路是:在存在冗余物理链路的网络中,通过让部分端口不参与正常数据转发,形成逻辑上无环的转发结构;拓扑变化时重新调整。
先记住“物理上可以有冗余,实际二层转发需要避免环路”,具体选根桥、计算路径等细节可以结合课堂继续补。
17. 点对点协议 PPP
PPP 用于点对点链路,可以承载不同网络层协议的数据。
入门时记住三部分:
- 封装方式 :规定怎样把上层分组放进帧。
- LCP,链路控制协议 :用于建立、配置和测试数据链路等。
- NCP,网络控制协议族 :用于配置不同网络层协议所需的参数。
常见的未压缩基本格式可概括为:
标志 | 地址 | 控制 | 协议 | 信息及可能的填充 | FCS | 标志
PPP 使用 FCS 检错,并根据链路形式使用字节转义或比特填充。基本 PPP 数据传送本身不提供逐帧确认和重传,不能因为它能检错就认为它保证可靠交付。帧格式见 RFC 1662。
与以太网相比,PPP 的点对点链路通信对象已经确定,不需要像共享局域网那样,通过源、目的 MAC 地址选择多台主机中的通信对象。它的格式里虽然有“地址”字段,也不能把这个字段直接当成以太网 MAC 地址。
18. 从一个收发过程把知识串起来
假设 A 和 B 在同一 VLAN,通过交换机通信,且 A 已经知道 B 的 MAC 地址:
① A 的网络层交下一份分组
↓
② A 的链路层添加以太网首部与 FCS,形成帧
↓
③ A 的物理层将比特转换成信号,发到链路上
↓
④ 交换机接收帧,学习源 MAC,按目的 MAC 查表转发
↓
⑤ B 的物理层从信号中恢复比特
↓
⑥ B 的链路层识别帧,进行接收过滤与差错检查
↓
⑦ 若帧被接受,去掉相应链路层封装,把分组交给网络层
为了方便理解,这里省略了缓存、具体转发方式和其他实现细节。B 如何处理分组,是后续网络层及更上层的事情。
同一条通信一旦经过路由器进入另一段链路,通常会换用新的链路层封装。因此, 不能想象成一个以太网帧从电脑出发,就原封不动地穿过整个互联网。