计算机网络精讲
写给没学过计算机网络的同学:从“一个比特怎么从一根线上传过去”讲起,到能独立做 2009—2026 年全部 163 道计网真题。
计算机网络在 408 里占 25 分:8 道选择题(第 33~40 题,每题 2 分)加 1 道综合题(一般是第 47 题,9 分)。分值不如计组、操作系统多,但它的题目套路最固定:子网划分、信道利用率、CSMA/CD 最短帧长、TCP 拥塞窗口……每年换个数字再考一遍。把这些套路学透,25 分是最容易拿满的一门。
- 按顺序读。第 0 篇补单位换算和二进制,第 1 篇搭起“分层”的框架,第 2~6 篇从物理层一层层往上讲,每一层都用到下面几层。
- 每遇到 真题卡 先自己做,再点「展开解析」。解析会写出每一步的依据,并逐个说明错误选项错在哪里。
- 每个小节标题下面有一条“真题标签”:★★★ 高频 表示这一节考得多;后面的题号点一下就弹出题目和讲解,点「逐题做」可以连续做完这一节挂的全部真题。
- 每个考过选择题的小节末尾都有「选择题变式」(虚线框):每道都由一道真题改动一两个条件而来,解析后面的“变化点”告诉你改了什么、答案为什么跟着变。没考过的考纲知识点也配了标“考纲补充(尚无真题)”的自编题。
- 每篇末尾有“本篇真题闯关”,把这一篇涉及的真题按小节排好;第 8 篇可以按年份刷完 2009—2026 年全部计网真题。
- 标 融合 的地方要把几层串起来想,是综合题的高发区,读两遍。
- 带 ⚙ 的是可以动手的小工具(子网计算器、CRC 计算、信道利用率、TCP 拥塞窗口……),改数字就能看到结果。
- 第 7 篇「大题满分训练营」把 19 道综合题分成 7 类,每类讲“这类题长什么样 → 必须会的几件事 → 解题模板 → 完整示范 → 两道自编模拟大题 → 举一反三变式表 → 丢分点”,部分类别附“预测小题”(考纲有、大题还没考过的点),最后有三套整卷模拟。
- 第 9 篇「满分冲刺」给想拿满 25 分的同学:先看 9.0 的考频热力图,再做 9.1 新考点、9.2 判断组、9.3 计算题型,然后用 9.4 ~ 9.6 三套卷限时 35 分钟(交卷才显示答案和错题),最后在 9.7 细目表里逐条打勾。
一张图看懂:这份讲义讲的是什么
| 篇 | 内容 | 选择题真题数 |
|---|---|---|
| 第 0 篇 | 导读与必备基础:本书地图与 21 分目标、单位换算、科学计数法、dB、2 的幂、二进制与点分十进制、封装全景(剥洋葱) | 所有计算题的地基 |
| 第 1 篇 | 体系结构:网络的组成与分类、三种交换方式、性能指标、协议与分层、OSI 与 TCP/IP | 19 |
| 第 2 篇 | 物理层:码元与波特率、奈奎斯特与香农、编码与调制、传输介质 | 15 |
| 第 3 篇 | 数据链路层:组帧、CRC、停等/GBN/SR、CSMA/CD、CSMA/CA、以太网、VLAN、交换机 | 37(最多) |
| 第 4 篇 | 网络层:IPv4 分组与分片、子网划分与 CIDR、路由聚合、NAT、ARP/DHCP/ICMP、IPv6、RIP/OSPF/BGP | 32 |
| 第 5 篇 | 传输层:UDP、TCP 首部、三次握手与四次挥手、滑动窗口、拥塞控制 | 23 |
| 第 6 篇 | 应用层:C/S 与 P2P、DNS、FTP、电子邮件、HTTP、融合 一次网页访问的全过程 | 18 |
| 第 7 篇 | 大题满分训练营:19 道综合题分 7 类,每类有模板、示范、两道模拟题和变式表;6 道预测小题;三套整卷模拟 | 综合题专项 |
| 第 8 篇 | 考场手册:公式速查、端口与封装速查、易错清单、按年份刷题 | 考前冲刺 |
| 第 9 篇 | 满分冲刺:考纲里还没考过的新考点 32 题、判断组 16 题、计算题型 42 题、三套 25 分限时卷(计时、判分、错题)、152 条知识点细目表 | 冲 25 分 |
小节标题下的星级按“这一小节挂了多少道真题”自动算(选择题算 1、综合题算 3:≥9 为三星,≥4 为两星)。每道题挂在哪个小节、讲解怎么写,都是对照题目逐道确定的。题干和答案来自本机题库(2009—2026 年计算机网络共 163 题:选择题 144 道、综合题 19 道,其中 2014 年综合题是第 42、43 两题)。原题带图的,题干里的图按原卷重画。
导读与必备基础:单位、二进制和“封装”
计网的计算题几乎都卡在两件小事上:单位换算(bit 还是 Byte?K 是 1000 还是 1024?)和二进制(IP 地址、掩码、按位与)。这一篇先把这两件事练熟,再用一张图把“数据从一台电脑到另一台电脑”的全过程过一遍,后面每一篇都在细讲这张图的某一层。
0.1计算机网络在 408 里考什么
408 试卷的第 33~40 题是计网选择题(每题 2 分),第 47 题是计网综合题(9 分,2014 年是第 42、43 两题,2016 年是第 41 题),合计 25 分。18 年 144 道选择题按层分布如下,数据链路层和网络层加起来占了将近一半:
| 层 | 选择题 | 综合题 (按主要考点归属) | 最常考的东西 |
|---|---|---|---|
| 体系结构(第 1 篇) | 19 | — | OSI 各层功能、交换方式的时间计算、性能指标 |
| 物理层(第 2 篇) | 15 | — | 奈奎斯特、香农定理算速率;编码波形 |
| 数据链路层(第 3 篇) | 37 | 5 | GBN/SR 窗口与信道利用率、CSMA/CD 最短帧长、802.11 地址、交换机 |
| 网络层(第 4 篇) | 32 | 8 | 子网划分、路由聚合、最长前缀匹配、分片、NAT、RIP/OSPF |
| 传输层(第 5 篇) | 23 | 4 | TCP 序号与确认号、三次握手四次挥手、拥塞窗口 |
| 应用层(第 6 篇) | 18 | 2 | DNS 查询次数、HTTP 需要几个 RTT、邮件协议、FTP |
本书地图:分值都在哪
综合题只有 7 类(第 7 篇逐类讲):IP 地址规划与路由表、路由协议、报文首部分析、局域网与设备、链路层可靠传输、TCP 连接与拥塞控制、一次访问的全过程。其中“IP 地址 + 路由表”是出现次数最多的一类(2009、2013、2014、2018 年作为主考点,2025 年也考了一问),而且别的类型也常顺带考一问地址或路由表,是必须拿满的。各类的出题年份见第 9 篇 9.0 的轮换图。
目标 21 分:分数从哪里来
北京考生 408 要上 125,计网拿到 21 / 25 就够了:选择题最多错 1 道,综合题丢不超过 2 分。
| 部分 | 满分 | 目标 | 怎么拿 |
|---|---|---|---|
| 选择题 8 道 | 16 | 14 | 体系结构、物理层、应用层每年各约 1 道,概念 + 简单计算,必须全对;链路层、网络层、传输层约 5 道,计算题多,最多错 1 道。 |
| 综合题 1 道 | 9 | 7 | “IP 地址规划 + 路由表”和“TCP 序号 / 拥塞窗口”两类出现最多,必须拿满;其余类型(链路层可靠传输、局域网、一次访问全过程)至少拿下前两问。 |
| 合计 | 25 | 21 | 相当于每年只允许丢 4 分:一道选择题 + 综合题的一个小问。 |
21 分是保底。想冲 25 分,第三轮把第 9 篇做完:9.1 补考纲里有、真题还没考过的点,9.2、9.3 把判断和计算练成固定步骤,9.4 ~ 9.6 三套卷限时 35 分钟,9.7 细目表逐条打勾——每一条都能说出“在哪一节、怎么考”,才算没有死角。
学习路线:三轮
时间特别紧时,按分值从高到低:第 4 篇(网络层)→ 第 3 篇(链路层)→ 第 5 篇(传输层)→ 第 1 篇 → 第 6 篇 → 第 2 篇。但第 0 篇的单位和二进制无论如何先过一遍——后面每篇都要用。
- 发送时延、传播时延、分组交换的总时间(1.2、1.3)
- 奈奎斯特、香农定理求最大数据传输率(2.2)
- CRC 校验码(3.2)
- 停等、GBN、SR 的信道利用率和序号位数(3.3)
- CSMA/CD 的最短帧长、最远距离、退避时间(3.5)
- 子网划分、可分配地址数、广播地址(4.3)
- 路由聚合、最长前缀匹配(4.4)
- IP 分片的片偏移(4.2)
- TCP 序号、确认号、窗口和拥塞窗口(第 5 篇)
- HTTP、DNS 需要多少个 RTT(第 6 篇)
2026 年考纲原文与本书的对应
下表左列是 2026 年 408 考纲计网部分的条目(按原文顺序,原文措辞略有合并),右列是本书讲它的小节。每一条都要能说出本书哪一节讲过——这是“不留死角”的底线。2026 年考纲与 2025 年相比只改了一处措辞(“TCP/IP 模型”改称“TCP/IP 参考模型”),内容没有变化。
| 考纲部分 | 考纲条目(原文) | 本书 |
|---|---|---|
| 一、概述 | 计算机网络的定义、组成与功能;分类;主要性能指标 | 1.1、1.3 |
| 分层结构;协议、接口、服务等概念;ISO/OSI 参考模型和 TCP/IP 参考模型 | 1.4、1.5 | |
| 二、物理层 | 通信基础:信道、信号、带宽、码元、波特、速率、信源与信宿;奈奎斯特定理与香农定理;编码与调制;电路交换、报文交换与分组交换;数据报与虚电路 | 2.1 ~ 2.3;交换方式与数据报 / 虚电路在 1.2 |
| 传输介质:双绞线、同轴电缆、光纤与无线传输介质;物理层接口的特性 | 2.4、2.5 | |
| 物理层设备:中继器、集线器 | 2.5 | |
| 三、数据链路层 | 数据链路层的功能;组帧;差错控制(检错编码、纠错编码) | 3.1、3.2 |
| 流量控制与可靠传输机制:滑动窗口机制;停止-等待、后退 N 帧(GBN)、选择重传(SR) | 3.3 | |
| 介质访问控制:信道划分(频分、时分、波分、码分);随机访问(ALOHA、CSMA、CSMA/CD、CSMA/CA);轮询访问(令牌传递) | 3.4、3.5、3.6 | |
| 局域网:基本概念与体系结构;以太网与 IEEE 802.3;IEEE 802.11 无线局域网;VLAN 基本概念与基本原理 | 3.7、3.6、3.8 | |
| 广域网:基本概念;PPP 协议 | 3.7 | |
| 数据链路层设备:以太网交换机及其工作原理 | 3.9 | |
| 四、网络层 | 网络层的功能:异构网络互连;路由与转发;SDN 基本概念;拥塞控制 | 4.1 |
| 路由算法:静态路由与动态路由;距离-向量;链路状态;层次路由 | 4.8 | |
| IPv4:分组;地址与 NAT;子网划分、路由聚集、子网掩码与 CIDR;ARP、DHCP、ICMP | 4.2 ~ 4.6 | |
| IPv6:主要特点;地址 | 4.7 | |
| 路由协议:自治系统;域内路由与域间路由;RIP、OSPF、BGP | 4.8 | |
| IP 组播:组播的概念;IP 组播地址 | 4.10 | |
| 移动 IP:概念;通信过程 | 4.11 | |
| 网络层设备:路由器的组成和功能;路由表与路由转发 | 4.9、4.4 | |
| 五、传输层 | 传输层的功能;传输层寻址与端口;无连接服务与面向连接服务 | 5.1 |
| UDP:UDP 数据段;UDP 校验 | 5.2 | |
| TCP:TCP 段;连接管理;可靠传输;流量控制;拥塞控制 | 5.3 ~ 5.6 | |
| 六、应用层 | 网络应用模型:客户 / 服务器(C/S)、对等(P2P);DNS 系统:层次域名空间、域名服务器、域名解析过程 | 6.1、6.2 |
| FTP:工作原理、控制连接与数据连接;电子邮件:系统组成、格式与 MIME、SMTP 与 POP3;WWW:概念与组成结构、HTTP 协议 | 6.3 ~ 6.5 |
0.2单位与换算:计网计算题的第一道坎
计网的数字里有三组最容易搞混的单位。每道计算题动笔之前,先把题目里的数字都换成“比特”和“秒”,就不会错。
① bit 和 Byte
b(bit,比特)是一位 0 或 1;B(Byte,字节)是 8 位。速率一律用 bit/s(bps),而帧长、分组、文件大小常用 Byte 给出。所以算发送时间时,要先把字节乘以 8:
② K、M、G 到底是 1000 还是 1024
| 出现在哪里 | K / M / G 的含义 | 例子 |
|---|---|---|
| 速率、频率(bps、Hz) | 103、106、109 | 100Mbps = 108 bit/s;4kHz = 4000Hz |
| 存储容量、缓存、窗口 | 通常 210、220、230,但题目常会写明 | 2016-41:“20KB(K = 1024)”;2013-35:“8Mb(1M = 106)” |
| 文件大小(与速率一起算时) | 看题目说明;没说明时两种算法的结果常常只差一点,选项会拉开 | 2023-33、2025-33 都写明 M = 106 |
口诀:“速率看 10,容量看 2,题目写了听题目”。
③ 时间单位
1s = 103ms = 106μs = 109ns。信号在电缆和光纤中的传播速度约为 2 × 108m/s,换个写法就是 200m/μs、200 000km/s——这个数字在 CSMA/CD 题里几乎每年出现。
| 要记住的几个数 | 结果 |
|---|---|
| 64B(以太网最短帧)在 10Mbps 上的发送时间 | 512bit ÷ 107 = 51.2μs(以太网的“争用期”) |
| 1500B 在 100Mbps 上 | 12 000bit ÷ 108 = 120μs |
| 1000B 在 1Gbps 上 | 8000bit ÷ 109 = 8μs |
| 信号走 2km | 2000m ÷ (2 × 108m/s) = 10μs |
④ 分贝(dB)
香农定理里的信噪比常用分贝给出:信噪比(dB)= 10 × log10(S/N)。反过来:S/N = 10dB/10。
| dB | 10 | 20 | 30 | 40 | 3 |
|---|---|---|---|---|---|
| S/N | 10 | 100 | 1000 | 10 000 | 约 2 |
香农公式里要算 log2(1 + S/N)。S/N = 1000 时,log21001 ≈ 9.97,考试里直接按 10 算(2016-34、2017-34);若题目给的 S/N = 1023,则 log21024 = 10 恰好整(2026-34)。
⑤ 科学计数法:乘除就是指数加减
- a × 10m × b × 10n = (a × b) × 10m + n;a × 10m ÷ (b × 10n) = (a ÷ b) × 10m − n。
- 结果换成好读的单位:10−3 s = 1 ms,10−6 s = 1 μs。例:1.2 × 10−4 s = 120 × 10−6 s = 120 μs(小数点右移 2 位,指数加 2)。
跟我算
(1) 64 × 8 = 512 bit = 5.12 × 102 bit;5.12 × 102 ÷ 109 = 5.12 × 10−7 s = 0.512 μs。(2) (6.4 ÷ 3.2) × 105 − 8 = 2 × 10−3 s = 2 ms。
单位:bit ÷ (bit/s) = s。先算系数(6.4 ÷ 3.2 = 2),再算指数(5 − 8 = −3),最后换单位。
展开解析
发送时延 = 2 × 106 × 8bit ÷ 108bit/s = 0.16s = 160ms。
传播时延 = 2 × 106m ÷ (2 × 108m/s) = 0.01s = 10ms。
两个时延的“分母”不同:发送时延除以速率(每秒能推出去多少比特),传播时延除以传播速度(信号每秒跑多远)。第 1 篇 1.3 专门讲。
0.3二进制与点分十进制:IP 地址的底子
一个 IPv4 地址是 32 位二进制数。为了好读,把它分成 4 个字节,每个字节写成一个 0~255 的十进制数,中间用点隔开,这就是点分十进制:
① 一个字节里 8 位的“权”
| 位 | 第 1 位 | 第 2 位 | 第 3 位 | 第 4 位 | 第 5 位 | 第 6 位 | 第 7 位 | 第 8 位 |
|---|---|---|---|---|---|---|---|---|
| 权 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
十进制转二进制:从 128 开始往下“能减就减、减了写 1”。例:200 = 128 + 64 + 8 → 1100 1000;77 = 64 + 8 + 4 + 1 → 0100 1101。
② 掩码:前面连续的 1
子网掩码也是 32 位,前面一串 1、后面一串 0,1 的个数叫前缀长度,写成“/n”。一个字节里可能出现的掩码值只有 9 种,一定要背熟:
| 这一字节里 1 的个数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|
| 掩码值 | 0 | 128 | 192 | 224 | 240 | 248 | 252 | 254 | 255 |
| 块大小 = 256 − 掩码值 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
例:255.255.252.0 = 8 + 8 + 6 = /22;/26 = 255.255.255.192。
③ 按位与:求网络地址
IP 地址和掩码按位与(两个都是 1 才得 1),得到的就是网络地址——把主机号部分清零。手工算时只需看掩码不是 255 也不是 0 的那个字节:
- 掩码是 255 的字节:地址原样保留;掩码是 0 的字节:变成 0。
- 中间那个字节:块大小法——块大小 = 256 − 掩码值,把地址的这个字节向下取到块大小的整数倍。
展开解析
第 3 字节的掩码是 252,块大小 = 256 − 252 = 4。77 向下取到 4 的倍数是 76。第 4 字节掩码是 0,变成 0。网络地址 = 180.80.76.0。
这个网络占第 3 字节的 76、77、78、79 四个值,广播地址是主机号全为 1:180.80.79.255(2012-39 就考这个)。
用二进制验证:77 = 0100 1101,前 6 位是网络号,保留 0100 11,后 2 位清零 → 0100 1100 = 76。
④ 十六进制和 MAC 地址
一个十六进制数字正好是 4 位二进制(0~9、A~F 表示 0~15),所以 1 字节 = 2 个十六进制数字。以太网的 MAC 地址是 48 位 = 6 字节,写成 00-15-C5-C1-5E-28 这样的 6 组。抓包题(2011-47、2012-47)给的是一串十六进制字节,要会把 “C0 A8 00 08” 读成 192.168.0.8(C0 = 192,A8 = 168)。
⑤ 2 的幂与 log2:“要几位”的问题
| n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 20 | 32 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2n | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 65 536 | 约 106 | 约 4.3 × 109 |
log2x 就是“2 自乘几次得到 x”:log28 = 3,log264 = 6,log21024 = 10。x 不是 2 的整数次幂时,结果在两个整数之间,如 log21000 ≈ 9.97——问“至少要几位”时向上取整,得 10。
计网里用到 2 的幂的地方只有四处,记住“几位 ↔ 几种”这一对关系就够了:
- 码元:有 V 种状态,每个码元携带 log2V 位(第 2 篇)。16 种状态 → 4 位。
- 序号:用 n 位编号,就有 2n 个序号(第 3 篇滑动窗口、第 5 篇 TCP 序号)。3 位序号 → 0 ~ 7。
- 主机数:主机号 n 位,可分配 2n − 2 个地址(去掉全 0、全 1,第 4 篇)。要容纳 1000 台主机:29 − 2 = 510 不够,210 − 2 = 1022 够 → 主机号至少 10 位;500 台 → 9 位。
- 子网数:要划出 N 个子网,至少借 ⌈log2N⌉ 位。5 个子网:22 = 4 不够,23 = 8 够 → 借 3 位。
0.4一张图看懂:数据是怎样从一台电脑到另一台的
你在浏览器里打开一个网页,背后发生的事可以用“寄快递”来想:
你写好信(应用层的数据)→ 装进信封写上收件人的房间号(传输层加上端口号,交给对方电脑里的哪个程序)→ 再套一个大袋子写上城市和街道地址(网络层加上 IP 地址,决定走哪条路)→ 快递员每送一站都贴一张“从这个站点到下个站点”的运单(数据链路层加上 MAC 地址,只管一站)→ 最后装上车跑起来(物理层变成信号)。每经过一个中转站,运单换一张,但信封里的地址不变。
这就是封装:每往下一层,就在前面(有的层还在后面)加一段本层的“控制信息”,叫首部(和尾部)。接收方从下往上一层层去掉首部,叫拆封(解封装)。
剥洋葱:一次网页访问在每层加了什么
上面的图是“抽象的”。下面换成一次真实的访问:你的电脑(192.168.1.10)用浏览器访问 www.example.com(203.0.113.80)上的首页,第一个发出去的 HTTP 请求在网线上长这样——一层套一层,像洋葱:
跟我算
TCP 报文段 = 400 + 20 = 420 B;IP 数据报 = 420 + 20 = 440 B;以太网帧 = 440 + 14 + 4 = 458 B。效率 = 400 ÷ 458 ≈ 87.3%。
单位:全部用字节。每一层的长度 = 上一层的整个长度 + 本层首部(和尾部)。第 1 篇 2017-33 就是这种题。
一路上,谁会变、谁不变
这个帧要经过家里的交换机、路由器 R,再经过运营商的很多台路由器才能到服务器。每经过一台设备,洋葱的哪几层会被改动?
| 经过 | MAC 地址(帧) | IP 地址 | 端口号 | HTTP 内容 |
|---|---|---|---|---|
| 交换机 | 不变(只看目的 MAC 决定从哪个口转发) | 不变 | 不变 | 不变 |
| 每一台路由器 | 换掉:源 MAC = 路由器出口的 MAC,目的 MAC = 下一跳的 MAC | 不变(但 TTL 减 1、首部检验和重算) | 不变 | 不变 |
| 做 NAT 的路由器 | 换掉 | 私有源 IP 换成公网 IP | NAPT 时源端口也换 | 不变 |
MAC 地址“一站一换”,管的是“这一段路从哪到哪”;IP 地址“一路不变”(NAT 除外),管的是“起点和终点”。第 4 篇 4.6 的 ARP、第 7 篇的“一次访问全过程”大题,都在考这句话。
本书的主线,就是把这张图的每一层拆开讲:物理层怎么把比特变成信号(第 2 篇);链路层怎么在一段链路上可靠地传一帧、多台电脑怎么共用一根线(第 3 篇);网络层怎么给全世界的电脑编地址、路由器怎么选路(第 4 篇);传输层怎么在不可靠的网络上做到可靠、怎么不把网络挤爆(第 5 篇);应用层的 DNS、HTTP 怎么工作(第 6 篇)。第 6 篇最后用一次网页访问把所有层串起来。
- 1500B 的帧在 10Mbps 的链路上的发送时延是多少?
答案
12 000bit ÷ 107bit/s = 1.2ms。 - 信噪比 20dB,S/N 是多少?
答案
1020/10 = 100。 - /27 的掩码是多少?这样的子网有多少个地址?
答案
255.255.255.224;25 = 32 个地址,可分配 30 个。 - 主机 183.80.72.48,掩码 255.255.192.0,网络地址是多少?
答案
第 3 字节掩码 192,块大小 64,72 向下取到 64 的倍数是 64:183.80.64.0(2022-35)。 - IP 数据报在数据链路层被封装成什么?帧的“数据”部分包含 IP 首部吗?
答案
帧;包含——整个 IP 数据报(首部 + 数据)都是帧的数据部分。 - 210、216 各是多少?
答案
1024;65 536。 - 要给 60 台主机分配地址,主机号至少要几位?
答案
25 − 2 = 30 不够,26 − 2 = 62 够,至少 6 位。 - 1.25 × 105 bit 的数据在 2.5 × 107 b/s 的链路上发送要多久?
答案
(1.25 ÷ 2.5) × 105 − 7 = 0.5 × 10−2 s = 5 × 10−3 s = 5 ms。 - 一个帧经过两台路由器到达目的主机,帧里的源 MAC 地址被换了几次?IP 首部里的源 IP 地址呢(没有 NAT)?
答案
源 MAC 换了 2 次(每台路由器转发时都换成自己出口的 MAC);源 IP 不变。
体系结构:网络由什么组成、数据怎么交换、为什么要分层
这一篇是整门课的“地图”。先认识网络的组成和分类,再比较电路交换、报文交换、分组交换三种“搬运数据”的办法(要会算时间),然后学衡量网络好坏的性能指标(时延、吞吐量、时延带宽积),最后讲分层:协议、服务、接口是什么,OSI 七层和 TCP/IP 四层各层干什么。OSI 各层的功能几乎每年必考一道选择题。
本篇地图:先看全貌,再逐节攻克
第 1 篇是整门课的“总纲”:后面五篇(物理层 → 应用层)就是把这里的分层模型一层一层展开。19 道真题集中在两处:1.5 各层的功能(9 道,几乎每年一道)和 1.2、1.3 的时间计算(6 道)。
| 小节 | 选择题 | 一句话说清考什么 |
|---|---|---|
| 1.1 概念与分类 | 0 | 边缘 / 核心、通信子网 / 资源子网、按范围分类(给后面打底) |
| 1.2 交换方式 | 4 | 三种交换的总时间(2010-34、2013-35、2025-33);虚电路的特点(2020-34) |
| 1.3 性能指标 | 2 | 发送时延 + 传播时延(2023-33);吞吐量看瓶颈(2024-33) |
| 1.4 协议与分层 | 4 | 体系结构不含实现(2010-33);封装效率(2017-33);协议三要素(2020-33);分层的利弊(2026-33) |
| 1.5 OSI 与 TCP/IP | 9 | 某功能、某设备、某协议在哪一层;TCP/IP 的网络层只提供无连接服务 |
- 1.1 → 1.4 → 1.5(约 2.5 小时):先建立“分层”的整体观念,把七层的功能和设备背熟。
- 1.2 → 1.3(约 2 小时):交换方式与时延计算,每个公式至少做两道题。
- 学完第 2 ~ 6 篇后回头再读一遍 1.5,会有“原来如此”的感觉。
1.1计算机网络是什么:组成、功能与分类
计算机网络就是把分散在各地、各自独立工作的计算机,用通信线路和通信设备连接起来,按照共同的规则(协议)交换信息、共享资源的系统。几个关键词:自治(每台计算机都能独立工作,不是“主机 + 终端”的关系)、互连(用链路和设备连起来)、协议(大家说同一种“语言”)。
把多个网络再用路由器连起来,就成了互连网(internet,小写),“网络的网络”;全世界最大的那个互连网专名叫因特网(Internet,大写),它采用 TCP/IP 协议族。
从三个角度看网络的组成
| 角度 | 分成哪几部分 | 说明 |
|---|---|---|
| 组成部分 | 硬件、软件、协议 | 硬件:主机、链路、交换机、路由器;软件:应用程序;协议是网络的核心,规定了通信的规则。 |
| 工作方式 | 边缘部分 + 核心部分 | 边缘部分是连在网上的主机(端系统),用户直接使用,通信方式有 C/S 和 P2P;核心部分是大量网络和路由器,为边缘部分提供连通和交换服务。 |
| 功能 | 通信子网 + 资源子网 | 通信子网负责把数据传过去,对应 OSI 的下三层(物理层、数据链路层、网络层);资源子网负责数据处理、提供服务,对应上三层。 |
口径提醒:有的资料(如 simple408)一处说“传输层既不属于通信子网也不属于资源子网”,另一处又把传输层划进资源子网,前后矛盾。王道的说法是:下三层是通信子网,上三层是资源子网,传输层承上启下——按这个答。换成 TCP/IP 四层来说:网络接口层 + 网际层对应通信子网(路由器、交换机都有这两层),应用层对应资源子网,传输层同样只在主机里。若题目问到传输层,多半是在考“它只在端系统中、是端到端的”。
功能
数据通信(最基本的功能,其他功能都建立在它之上)、资源共享(硬件、软件、数据)、分布式处理(一个大任务分给多台计算机做)、提高可靠性(一台坏了别的顶上)、负载均衡。
分类
| 按什么分 | 类别 | 要点 |
|---|---|---|
| 分布范围 | 广域网 WAN、城域网 MAN、局域网 LAN、个人区域网 PAN | 广域网是因特网的核心部分,用交换技术;局域网常用广播技术。区分局域网和广域网的根本在于所用的技术,而不只是距离。 |
| 传输技术 | 广播式网络、点对点网络 | 广播式:所有计算机共享一个信道,一台发、其他都收到,靠分组里的目的地址判断要不要收(总线形以太网、无线局域网)。点对点:每条物理线路连一对计算机,分组要经过中间结点存储转发和路由选择。是否使用存储转发和路由选择,是两者的主要区别。 |
| 拓扑结构 | 总线形、星形、环形、网状 | 广域网多用网状(可靠);以太网物理上多是星形(中心是交换机)。 |
| 使用者 | 公用网、专用网 | — |
| 交换技术 | 电路交换、报文交换、分组交换 | 见 1.2 节。 |
| 传输介质 | 有线网络、无线网络 | — |
按作用范围细分:广域网 WAN(几十到几千千米,跨城市、国家)、城域网 MAN(一个城市,5 ~ 50 km,现在多用以太网技术)、局域网 LAN(一栋楼、一个校园,约 1 km 以内)、个人区域网 PAN(个人工作区内把手机、耳机、手表等电子设备连起来,约 10 m,如蓝牙;无线的也叫 WPAN)。
标准化工作与标准化组织
问题:不同厂家生产的电脑、路由器、网卡,为什么插上就能互相通信?因为大家都按同一套标准来做。标准有两种:法定标准(权威机构制定,如 OSI)和事实标准(市场上大家都在用、事实上成了标准,如 TCP/IP)。
| 组织 | 做什么 | 本课程里的例子 |
|---|---|---|
| ISO(国际标准化组织) | 各领域的国际标准 | OSI 参考模型 |
| ITU-T(国际电信联盟的电信标准化部门) | 电信领域的标准 | 电话网、调制解调器的建议书 |
| IEEE(电气和电子工程师学会) | 电气、电子领域的标准 | 802 系列:802.3 以太网、802.11 无线局域网、802.1Q VLAN |
| IETF(因特网工程任务组) | 因特网协议的研究和制定 | TCP、IP、HTTP……都以 RFC 文档发布 |
因特网的标准都以 RFC(Request For Comments,请求评论)的形式发布,但并不是所有 RFC 都是标准。一个协议要成为正式的因特网标准,要经过三个阶段:
拓展 因特网的发展经历了三个阶段:单个网络 ARPANET → 三级结构(主干网、地区网、校园网)→ 多层次 ISP 结构。现在用户上网要经过 ISP(因特网服务提供者),ISP 之间再通过因特网交换点 IXP 直接交换流量。
1.1 在 2009—2026 年还没有单独出过选择题,它是后面各篇的基础。可能的考法:① 按作用范围分类(WAN、MAN、LAN、PAN,蓝牙属于 PAN),或按传输技术(广播式 / 点对点)、拓扑、交换方式分类;② 通信子网、资源子网各对应 OSI 的哪几层(通信子网是下三层);③ 网络的组成(边缘部分、核心部分)与功能(数据通信最基本,还有资源共享、分布式处理、提高可靠性、负载均衡)。标准化组织(IEEE、ISO、IETF)2026 考纲未单列,了解即可。
选择题变式:考纲补充
1.1 还没有出过选择题真题。下面是针对考纲知识点自编的题,做完看“考点”回到对应的讲解。
- A. IEEE
- B. ISO
- C. IETF
- D. ITU-T
展开解析
AIEEE 的 802 委员会制定局域网、城域网标准;ISO 制定 OSI 参考模型;IETF 制定因特网协议(以 RFC 发布);ITU-T 管电信标准。
- A 对对:IEEE 的 802 委员会制定局域网、城域网标准(802.3 以太网、802.11 无线局域网)。
- B 错ISO 制定的是 OSI 参考模型等国际标准;802.3、802.11 是 IEEE 802 委员会制定的。
- C 错IETF 制定因特网协议(TCP、IP、HTTP 等,以 RFC 发布),不制定局域网的物理层和 MAC 层标准。
- D 错ITU-T 是国际电信联盟的电信标准化部门,管电信网标准(电话网、调制解调等),不是局域网标准。
考点:1.1 节“标准化工作与标准化组织”。
- A. 所有 RFC 文档都是因特网标准
- B. 因特网草案已经是 RFC 文档
- C. 因特网标准由 IEEE 负责制定
- D. 协议从“建议标准”阶段起成为 RFC 文档
展开解析
D三个阶段:因特网草案(有效期 6 个月,还不是 RFC)→ 建议标准(成为 RFC)→ 因特网标准。RFC 里还有很多信息性文档,并非都是标准;因特网标准由 IETF 制定。
- A 错RFC 里还有大量信息性、实验性文档,只有走完三个阶段的才是因特网标准。
- B 错因特网草案有效期 6 个月,还不是 RFC 文档;到“建议标准”阶段才成为 RFC。
- C 错因特网标准由 IETF 制定并以 RFC 发布;IEEE 管的是 802 系列局域网标准。
- D 对对:建议标准阶段起成为 RFC,最后才成为因特网标准。
考点:1.1 节 RFC 三阶段图。
- A. 物理层、数据链路层、网络层
- B. 数据链路层、网络层、传输层
- C. 网络层、传输层、会话层
- D. 会话层、表示层、应用层
展开解析
A通信子网负责数据传输,对应下三层;资源子网负责数据处理,对应上三层;传输层承上启下。
- A 对对:通信子网负责数据传输,对应下三层。
- B 错传输层只在主机中实现,起“承上启下”的作用,不属于通信子网;而且漏了物理层。
- C 错会话层属于资源子网,传输层承上启下,三层里只有网络层属于通信子网。
- D 错会话层、表示层、应用层负责数据处理,是资源子网,不是通信子网。
考点:1.1 节“通信子网与资源子网”图。
- A. 广域网 WAN
- B. 城域网 MAN
- C. 局域网 LAN
- D. 个人区域网 PAN
展开解析
D个人区域网是个人工作区内(约 10 m)把电子设备连起来的网络,蓝牙是典型例子,无线的也叫 WPAN。
- A 错广域网覆盖几十到几千千米,跨城市甚至国家;蓝牙只连身边约 10m 内的设备。
- B 错城域网覆盖一个城市(约 5 ~ 50km);蓝牙的范围只有约 10m。
- C 错局域网覆盖一栋楼、一个校园(约 1km 以内);只把个人身边的设备连起来、约 10m 的是个人区域网。
- D 对对:个人区域网 PAN,无线的也叫 WPAN。
考点:1.1 节“按作用范围细分”。
- A. 覆盖的地理范围不同
- B. 是否使用存储转发和路由选择
- C. 使用的传输介质不同
- D. 是否采用 TCP/IP 协议
展开解析
B广播式网络共享一个信道,一台发、大家都收,靠目的地址决定要不要;点对点网络的分组要经中间结点存储转发和路由选择。
- A 错覆盖范围是另一种分类(WAN、MAN、LAN、PAN);广播式与点对点是按传输技术分的。
- B 对对:点对点网络的分组要经中间结点存储转发和路由选择,广播式网络共享一个信道、不需要。
- C 错广播式、点对点网络都可以用双绞线、光纤或无线信道,传输介质不是区分它们的依据。
- D 错两种网络都可以运行 TCP/IP,是否采用 TCP/IP 不是按传输技术分类的依据。
考点:1.1 节“分类”表。
1.2三种交换方式:电路交换、报文交换、分组交换
核心部分要把数据从一台主机送到另一台,中间要经过若干个交换结点。“交换”就是在结点上把数据从一条线路转到另一条线路。历史上有三种做法:
电路交换像打电话:先把沿途每一段路都“包下来”(建立连接),专车专道一路开到底,用完再退(释放连接)。报文交换像整车托运:整车货开到每个中转站都要卸下来、检查、再整车发往下一站。分组交换像把货分成很多小箱子:每个小箱子到了中转站马上就转发,第 1 箱已经往下一站走了,第 2 箱才刚到——多个站点同时在干活,就像流水线。
三种方式的比较
| 电路交换 | 报文交换 | 分组交换 | |
|---|---|---|---|
| 过程 | 建立连接 → 传数据 → 释放连接 | 整个报文存储转发 | 报文切成分组(每个加首部),逐个存储转发 |
| 传送单位 | 比特流(不分组) | 整个报文(长度不定) | 分组(长度有上限) |
| 结点何时转发 | 不存储,信号直通 | 收完整个报文才转发 | 收完一个分组就转发 |
| 差错控制 | 结点不做(只是接通线路) | 每个结点可校验 | 每个结点可校验 |
| 线路 | 通信期间独占一条物理通路 | 动态分配,线路利用率高 | 动态分配,线路利用率高 |
| 优点 | 建好连接后时延小、实时性好;按序到达;没有冲突 | 不需建立连接;可靠性高(可改走别的路);可以一对多发(同一报文发往多个目的);结点可做速率、码制转换 | 无建立时延;各结点流水作业,比报文交换快;分组定长,简化缓存管理;出错只重发一个分组 |
| 缺点 | 建立连接耗时;线路独占,利用率低;灵活性差;不同速率、不同编码的设备难以直接通信 | 每个结点要存整个报文,时延大、要大缓存;报文大小不定 | 每个分组要加首部(额外开销);存在存储转发时延;数据报方式可能失序、丢失、重复 |
| 适合 | 传大量、连续、实时的数据(电话) | —(已很少用) | 计算机数据(突发性强),因特网采用 |
三种方式的时间怎么算
设报文长 L 比特,链路速率 R,从源到目的共经过 k 段链路(k − 1 个中间结点),分组长 P 比特(共 N = L/P 个分组)。先忽略传播时延和结点处理时间:
分组交换公式怎么来的:源主机把 N 个分组发完要 N × P/R,此时最后一个分组刚离开源主机;它还要被 k − 1 个中间结点各转发一次,每次 P/R。这和流水线“(k + n − 1) × Δt”是同一个道理。各段速率不同时,按“最后一个分组”跟着走一遍:源主机发完全部分组的时间,再加上最后一个分组在后面每一段上的发送时间(前提是后面的链路不比前面慢,2025-33)。
跟我算
先把单位换好:报文发一段 = 106 ÷ 106 = 1 s = 1000 ms;分组发一段 = 1000 ÷ 106 = 1 ms;分组数 N = 106 ÷ 1000 = 1000;k = 3。
- 电路交换:建连 10 + 一次发完 1000 + 3 段传播 3 = 1013 ms(结点不存储,信号一路直通)。
- 报文交换:每段都要把整个报文发一遍,3 × 1000 + 3 × 1 = 3003 ms。
- 分组交换:(N + k − 1) × P/R + 传播 = (1000 + 2) × 1 + 3 = 1005 ms。
单位:bit ÷ (bit/s) = s;1 Mb/s = 106 b/s(网络里的 M 是 106,不是 220)。结论:分组交换最快;电路交换只多了建连的 10 ms,报文越长两者越接近——这正是“大量连续数据适合电路交换”的原因。
- A. 800ms、1600ms
- B. 801ms、1600ms
- C. 1600ms、800ms
- D. 1600ms、801ms
展开解析
D路由器是存储转发的,两段链路都要算。忽略传播时延。
- 报文交换:整个报文在每段链路上各发一次。一次 = 8Mb ÷ 10Mbps = 800ms,两段 = 1600ms。
- 分组交换:分组数 N = 8Mb ÷ 10kb = 800,每个分组的发送时间 = 10kb ÷ 10Mbps = 1ms。甲发完全部分组要 800ms,此时最后一个分组刚到路由器,路由器再用 1ms 把它转发出去:800 + 1 = 801ms。也可以直接套公式 (N + k − 1) × P/R = (800 + 2 − 1) × 1ms。
- A 错A 是 800ms、1600ms。按题目顺序读,报文交换 800ms = 8Mb ÷ 10Mbps 只算了第一段链路,路由器存下整个报文后还要在第二段再发一次;分组交换 1600ms 比报文交换还慢,不可能。若看成两个数写反了,分组交换 800ms 又漏了路由器转发最后一个分组的 1ms。
- B 错B 是 801ms、1600ms:两个数都算对了,但顺序反了——题目先问报文交换(1600ms),后问分组交换(801ms)。
- C 错分组交换写成 800ms,漏了最后一个分组在第二段链路上的 1ms。
- D 对1600ms、801ms。
报文交换 = 段数 × L/R;分组交换 = L/R + (段数 − 1) × P/R。分组越小,比报文交换快得越多。
- A. 80ms
- B. 80.08ms
- C. 80.16ms
- D. 80.24ms
展开解析
C“至少”要走最短的路 H1 → S1 → S2 → H2:3 段链路,中间 2 个结点。
- 每个分组 1000B,其中数据 980B,文件 980 000B 正好分成 1000 个分组。
- 每个分组的发送时间 = 1000 × 8bit ÷ 100Mbps = 0.08ms。
- H1 发完 1000 个分组要 80ms;最后一个分组还要被 S1、S2 各转发一次:80 + 2 × 0.08 = 80.16ms。
- A 错80ms 只是 H1 自己发完的时间,没算中间结点的转发。
- B 错80.08ms = 80 + 0.08:只加了一次转发,好像中间只有 1 个结点;最短路 H1 → S1 → S2 → H2 上有 S1、S2 两个结点,最后一个分组要被转发 2 次。
- C 对80.16ms。
- D 错80.24ms = 80 + 3 × 0.08:走了 H1 → S1 → S3 → S2 → H2 这条较长的路(中间 3 个结点),不是“至少”。
分组数要按“每个分组能装多少数据”算(1000B − 20B 头部 = 980B);发送时间要按“整个分组”算(1000B)。
- A. Tcs > Tms > Tps
- B. Tms > Tps > Tcs
- C. Tms > Tcs > Tps
- D. Tps > Tms > Tcs
展开解析
B文件 L = 2 × 106 × 8 = 1.6 × 107bit。三段速率 10、100、1000Mbps 逐段变快。
- 电路交换:Tcs = 32μs + L ÷ 10Mbps = 1.6s + 32μs。
- 报文交换:整个文件在三段上各发一次:Tms = 1.6s + 0.16s + 0.016s = 1.776s。
- 分组交换:分组 P = 400B = 3200bit。H1 发完全部分组要 1.6s;此时最后一个分组还要在 100Mbps、1000Mbps 两段上各发一次:3200 ÷ 108 + 3200 ÷ 109 = 32μs + 3.2μs = 35.2μs。Tps = 1.6s + 35.2μs。
- 比较:Tms(1.776s)> Tps(1.6s + 35.2μs)> Tcs(1.6s + 32μs),Tps 只比 Tcs 多 3.2μs。
- A 错电路交换虽然要建立连接,但只多 32μs,并不是最慢的。
- B 对Tms > Tps > Tcs。
- C 错分组交换还要多出最后一个分组在后两段的转发时间(35.2μs),比电路交换的建立时间 32μs 略长。
- D 错D 说 Tps > Tms,把两者的大小说反了:分组交换 Tps = 1.6s + 35.2μs ≈ 1.600 04s,报文交换 Tms = 1.776s,分组交换反而快了约 0.176s(报文交换要在后两段把整个文件再各发一遍)。
各段速率不同时,分组交换的时间 = 源主机发完全部分组 + 最后一个分组在后面各段的发送时间(后面的链路不比前面慢时成立)。
2025-33 的关键是三段速率不同(10、100、1000 Mb/s)。电路交换只受最慢一段限制:1.6 s + 建连 32 μs;报文交换每段都发整个报文:1.6 + 0.16 + 0.016 = 1.776 s;分组交换在 H1 发完全部分组(1.6 s)后,最后一个分组再走两段快链路(32 μs + 3.2 μs)。所以 Tms > Tps > Tcs,三者里电路交换反而最快——它没有“每段都存一次”的代价。
数据报与虚电路:分组交换的两种方式
分组交换又分两种。数据报方式:不建立连接,每个分组都带完整的目的地址,各自独立选路,可能走不同的路、不按顺序到达,因特网的 IP 就是这种。虚电路方式:先建立一条逻辑连接(虚电路),之后所有分组都沿这条路走,分组只带一个很短的虚电路号,按序到达。
| 数据报 | 虚电路 | |
|---|---|---|
| 建立连接 | 不需要 | 需要(建立时做一次路由选择) |
| 分组带的地址 | 完整的源地址、目的地址 | 虚电路号(短) |
| 路由选择 | 每个分组独立选路 | 建立虚电路时选一次,之后都走这条 |
| 到达顺序 | 不保证 | 保证(走同一条路) |
| 结点出故障 | 影响小,分组可以改走别的路 | 经过该结点的虚电路都不能用了 |
| 差错控制、流量控制 | 由主机负责 | 可由网络负责,也可由主机负责 |
| 典型网络 | 因特网(IP) | X.25、帧中继、ATM(都已很少用) |
| 带宽 | 两者都不预先分配带宽——虚电路只是“逻辑”连接,链路仍被多条虚电路统计复用。独占带宽的是电路交换(2020-34)。 | |
- A. 可以确保数据分组传输顺序
- B. 需要为每条虚电路预分配带宽
- C. 建立虚电路时需要进行路由选择
- D. 依据虚电路号(VCID)进行数据分组转发
展开解析
B虚电路是逻辑连接:建立时选好一条路,之后分组沿这条路走,但链路仍被多条虚电路统计复用,不为每条虚电路预留带宽。预先分配(独占)带宽的是电路交换。
- A 对同一条虚电路的分组走同一条路,按发送顺序到达。
- B 错虚电路不预分配带宽。
- C 对建立虚电路时做一次路由选择,之后不再选路。
- D 对分组只带虚电路号,结点按虚电路号转发。
虚电路 = 分组交换 + 事先定好路线;它仍然是存储转发,不是电路交换。
计算 3 道:报文交换 = 段数 × L ÷ R(2013-35);分组交换 = (N + k − 1) × P ÷ R,“至少”要先选最短路径,分组数按每组能装的数据算、发送时间按整个分组算(2010-34);三种交换比较且各段速率不同时,逐段跟着最后一个分组(或整个报文)走(2025-33)。概念 1 道:虚电路只是逻辑连接,不预分配带宽(2020-34)。挂在 1.3 的 2023-33 用的也是分组交换公式,只是每段再加传播时延。可能的新考法:电路交换的建立时间很长时三者谁快;数据报与虚电路对比表里的“是否按序”“结点故障的影响”。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。
- A. 800ms
- B. 800.8ms
- C. 801.6ms
- D. 802.4ms
展开解析
C980 000 ÷ 980 = 1000 个分组,每个 1000B 在 10Mbps 上发送需 0.8ms。流水线:(1000 + 3 − 1) × 0.8ms = 801.6ms。
- A 错800ms = 1000 × 0.8ms:只算了 H1 发完 1000 个分组,漏了最后一个分组在后两段链路上的 2 × 0.8ms。
- B 错800.8ms = 1001 × 0.8ms:只加了一次转发,好像中间只有 1 个结点;H1 → S1 → S2 → H2 有 2 个中间结点。
- C 对对:(1000 + 3 − 1) × 0.8ms = 801.6ms。
- D 错802.4ms = 1003 × 0.8ms:把 3 段链路都当成额外转发;最后一个分组在第 1 段的发送已算在 H1 的 800ms 里。
变化点:速率降为 1/10,每个分组的发送时间乘 10,总时间也乘 10:80.16ms → 801.6ms。
- A. 1600ms、802ms
- B. 1600ms、801ms
- C. 800ms、802ms
- D. 1602ms、802ms
展开解析
A报文交换:8Mb 在两段链路上各发送一次,2 × 800ms = 1600ms。分组交换:400 个分组,每个 2ms,(400 + 2 − 1) × 2ms = 802ms。
- A 对对:报文交换 2 × 800ms = 1600ms;分组交换 (400 + 2 − 1) × 2ms = 802ms。
- B 错801ms 是原题分组 10kb 时的结果;分组改为 20kb 后每个分组发 2ms,最后一个分组在第二段多花 2ms,应为 802ms。
- C 错报文交换写成 800ms,只算了第一段链路;路由器存下整个报文后还要在第二段再发 800ms。
- D 错报文交换多加了 2ms:整个 8Mb 报文在两段链路上各发一次就是 1600ms,报文交换没有“最后一个分组”的问题。
变化点:分组变大,“最后一个分组在第二段链路上多花的时间”从 1ms 变成 2ms;分组越小,流水线越充分。
- A. 通信前需要建立连接
- B. 每个分组独立选择路由
- C. 分组一定按发送顺序到达
- D. 依据虚电路号进行转发
展开解析
B数据报方式不建立连接,每个分组带完整目的地址、独立选路,可能失序;按虚电路号转发的是虚电路网络。
- A 错数据报方式不建立连接,有分组就发;通信前要先建立连接的是虚电路。
- B 对对:每个分组带完整目的地址,独立选路。
- C 错各分组独立选路,可能走不同路径,先发的不一定先到,可能失序;保证按序的是虚电路。
- D 错数据报分组按目的地址查表转发;依据虚电路号转发的是虚电路网络。
变化点:把“虚电路网络”换成“数据报网络”:要会对比两种方式的四个特点(是否连接、是否独立选路、是否按序、依据什么转发)。
1.3性能指标:速率、带宽、吞吐量、时延、时延带宽积
速率、带宽、吞吐量
- 速率(数据率、比特率、数据传输速率):每秒传送的比特数,单位 bit/s(bps)。
- 带宽:本来是信号的频带宽度,单位 Hz(物理层的奈奎斯特、香农公式里用的就是这个意思);在计算机网络中常指通信线路能传送数据的最高数据率,单位 bps。
- 吞吐量:单位时间内实际通过某个网络(或接口、链路)的数据量。一条路径的吞吐量受瓶颈链路(速率最小的那段)限制;有多条并行路径时,看的是“最多能同时流过多少”,就像水管网里的最大流量(2024-33)。
时延:四个组成部分
处理时延与排队时延:处理时延是路由器检查首部、检验差错、查表决定从哪个口转发的时间,通常很小。排队时延是分组在输出队列里等前面的分组发完的时间,取决于这条链路有多忙。衡量“多忙”的量叫流量强度 = La ÷ R(a 是每秒到达的分组数,L 是分组长度,R 是链路速率):La ÷ R 接近 1 时排队时延急剧增大,大于 1 时到达比发出快,队列越排越长,最后缓存溢出丢包——这就是下面 D = D0 ÷ (1 − U) 曲线和“丢包率”背后的原因。考试计算题一般忽略这两项。
发送时延由数据长度和速率决定,与线路多长无关;传播时延由距离和传播速度决定,与数据多长、速率多高都无关。“提高带宽”只能减少发送时延,不能让信号跑得更快。比方:车队通过收费站所用的时间是“发送时延”,车在高速公路上跑的时间是“传播时延”。
跟我算
每段发送时延 = 1500 × 8 ÷ 108 = 120 μs;每段传播时延 = 2000 ÷ (2 × 108) = 10 μs。存储转发:路由器要收完整个分组才开始往下发,所以两段各花一次发送 + 一次传播,总时延 = 2 × (120 + 10) = 260 μs。
单位:B × 8 = bit;100 Mb/s = 108 b/s;1 μs = 10−6 s。注意这里发送时延(120 μs)比传播时延(10 μs)大得多——局域网里通常是这样;跨洋光缆则反过来。
时延带宽积、往返时间、利用率
- 时延带宽积 = 传播时延 × 带宽,单位 bit。它表示链路上“正在路上”的最多比特数:发送方发出的第一个比特到达终点时,链路里已经塞满了这么多比特。它也叫“以比特为单位的链路长度”。例:传播时延 10μs、带宽 100Mbps,时延带宽积 = 1000bit(2023-33 就是这样给出传播时延的)。
- 往返时间 RTT:从发送方发出数据开始,到收到接收方的确认为止的时间(确认是一个很短的分组,接收方收到数据后立即发回)。它主要由一来一回两段传播时延构成(因特网上还包括沿途的处理、排队时延),不含数据本身的发送时延(那一段单独算)。计算题里一般就取 RTT = 2 × 单向传播时延;若题目给出了确认帧的长度,确认帧的发送时延 TA 也单独加,不算在 RTT 里。所以停等协议一个周期 = 数据发送时延 TD + RTT + TA(确认帧很短时 TA 忽略,第 3 篇);TCP、HTTP 的计算题大多直接以 RTT 为单位。
- 利用率:信道利用率 = 信道有数据通过的时间 ÷ 总时间;网络利用率是全网各信道利用率的加权平均。利用率不是越高越好:设空闲时时延为 D0,利用率为 U,则 D = D0 / (1 − U),U 接近 1 时时延急剧增大。U = 50% 时时延是空闲时的 2 倍,U = 90% 时是 10 倍(见下图)。
- 丢包率:一段时间内丢失的分组数 ÷ 发送的分组总数。如发 1000 个丢 10 个,丢包率 = 10 ÷ 1000 = 1%。分组丢失大多是因为路由器的缓存满了(拥塞),少数是传输差错被丢弃。丢包率高说明网络拥塞,TCP 就据此减速(5.6 节)。
吞吐量看瓶颈:一条路径上 H1 → R1 是 100 Mb/s、R1 → R2 是 10 Mb/s、R2 → H2 是 1 Gb/s,端到端吞吐量最多 10 Mb/s——像水管,最细的那段决定流量。2024-33 中间有三条并行路径,先把三条路径各自的瓶颈加起来(上 1000 + 中 1 + 下 100 = 1101 Mb/s),再和两头的 10 Mb/s 比,取小。
- A. 80.02ms
- B. 80.08ms
- C. 80.09ms
- D. 80.10ms
展开解析
D先由时延带宽积反推传播时延:1000bit ÷ 100Mbps = 10μs = 0.01ms。
- 分组数 = 106B ÷ 1000B = 1000;每个分组的发送时间 = 8000bit ÷ 100Mbps = 0.08ms。
- H1 发完全部分组:1000 × 0.08 = 80ms。
- 最后一个分组:第一段传播 0.01ms → 路由器转发 0.08ms → 第二段传播 0.01ms。
- 总时间 = 80 + 0.01 + 0.08 + 0.01 = 80.10ms。
- A 错80.02ms:只加了两段传播时延,漏了路由器的转发。
- B 错80.08ms:只加了转发,漏了两段传播。
- C 错80.09ms = 80 + 0.08 + 0.01:路由器的转发算了,但只加了一段传播时延,漏了第二段的 0.01ms。
- D 对80.10ms。
跟着“最后一个分组”走一遍:每段链路都要加传播时延,每个中间结点都要加一次发送时延。
- A. 1Mbps
- B. 10Mbps
- C. 100Mbps
- D. 1000Mbps
展开解析
BH1 发出的所有数据都要先经过 H1—S1 这段 10Mbps 的链路,最后也都要经过 S2—H2 这段 10Mbps 的链路。不管中间的路多宽,每秒最多也只能通过 10Mb,吞吐量约为 10Mbps。
- A 错1Mbps 是中间一条直连路径的速率,但数据可以走另外两条更宽的路径。
- B 对两端的接入链路是瓶颈。
- C 错100Mbps 是下方路径的速率,受两端 10Mbps 限制达不到。
- D 错1000Mbps 只是经 S3 那条路径中间两段的速率;数据进出都要经过两端各 10Mbps 的接入链路,不管中间多宽,整条路径每秒最多只能通过 10Mb,到不了 1000Mbps。
吞吐量看“最窄的地方”:串联取最小值,并联的几条路可以相加,但总量不能超过两端接入链路的速率。
2024-33 求端到端吞吐量:串联看最慢的一段,并联先把各路径的瓶颈相加,再与两端的接入链路取小。2023-33 只给了时延带宽积,先除以带宽反推单程传播时延(1000bit ÷ 100Mbps = 10μs),再加进分组交换的总时间。可能的新考法:时延带宽积 = 链路上最多“在途”的比特数;利用率与时延 D = D0 ÷ (1 − U);短帧、长链路时传播时延远大于发送时延。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 80.10ms
- B. 80.14ms
- C. 80.12ms
- D. 80.16ms
展开解析
C单向传播时延 = 2000bit ÷ 100Mbps = 20μs。1000 个分组各 80μs,再加最后一个分组在第二段链路上的 80μs 和两段传播时延 40μs:80 000 + 80 + 40 = 80 120μs = 80.12ms。
- A 错80.10ms 是原题时延带宽积为 1000bit 时的结果,传播时延没有跟着翻倍(每段应为 20μs)。
- B 错80.14ms = 80 + 0.08 + 3 × 0.02:传播时延按 3 段算了;图中 H1—R—H2 只有 2 段链路。
- C 对对:80 + 0.08 + 2 × 0.02 = 80.12ms。
- D 错80.16ms = 80 + 0.08 + 2 × 0.04:每段传播时延算成了 40μs,多乘了 2;单程传播时延 = 2000bit ÷ 100Mbps = 20μs。
变化点:时延带宽积翻倍 → 传播时延翻倍,只影响最后那一小段(多 20μs)。
- A. 8.00ms
- B. 8.02ms
- C. 80.01ms
- D. 8.01ms
展开解析
D分组发送时间 8000bit ÷ 1Gbps = 8μs;传播时延 1000bit ÷ 1Gbps = 1μs。总时间 = 1000 × 8 + 8 + 2 × 1 = 8010μs = 8.01ms。
- A 错8.00ms = 1000 × 8μs:只算了 H1 发完 1000 个分组,漏了最后一个分组的转发 8μs 和两段传播 2μs。
- B 错8.02ms 比正确的 8010μs 多了约 10μs,例如把最后一个分组的转发算了 2 次(8000 + 2 × 8 + 2 × 1 = 8018μs ≈ 8.02ms);图中只有 1 个路由器。
- C 错80.01ms = 1000 × 80μs + 8μs + 2μs:1000 个分组仍按 100Mbps 时的 80μs 算,只把最后一段改成了新速率。
- D 对对:1000 × 8 + 8 + 2 × 1 = 8010μs = 8.01ms。
变化点:速率提高 10 倍,发送时间和(由时延带宽积推出的)传播时延都变为 1/10。
- A. 10Mbps
- B. 100Mbps
- C. 370Mbps
- D. 1110Mbps
展开解析
A端到端吞吐量由路径上最慢的一段(瓶颈链路)决定:min(100, 10, 1000) = 10Mbps。
- A 对对:串联取最慢的一段,min(100, 10, 1000) = 10Mbps。
- B 错100Mbps 是第一段的速率,但数据还要经过 10Mbps 的第二段,整条路径被它卡住。
- C 错370 = (100 + 10 + 1000) ÷ 3,取了三段的平均;吞吐量看最慢的一段,不是平均。
- D 错1110 = 100 + 10 + 1000,把三段串联的速率加起来了;串联只能取最小值,相加只适用于并联的几条路径。
变化点:吞吐量看瓶颈:不是求和,也不是平均。
- A. 1.5 倍
- B. 3 倍
- C. 4 倍
- D. 9 倍
展开解析
C60% 时 D = D0/0.4 = 2.5D0;90% 时 D = D0/0.1 = 10D0;10 ÷ 2.5 = 4。利用率只升了 1.5 倍,时延却升了 4 倍。
- A 错1.5 = 90% ÷ 60%,只比了利用率;时延与 1/(1 − U) 成正比:(1 − 0.6) ÷ (1 − 0.9) = 4。
- B 错3 = (90% − 60%) ÷ (1 − 90%):分子用了利用率的增量 0.3;应比较 1 − U:0.4 ÷ 0.1 = 4。
- C 对对:2.5D₀ → 10D₀,是原来的 4 倍。
- D 错9 = 0.9 ÷ 0.1,是 U ÷ (1 − U) 在 90% 时的值;题目要的是前后两个时延之比 10D₀ ÷ 2.5D₀ = 4。
考点:1.3 节 D–U 曲线。
- A. 104 bit
- B. 105 bit
- C. 106 bit
- D. 2 × 105 bit
展开解析
B传播时延 = 2 × 106 ÷ (2 × 108) = 0.01 s;时延带宽积 = 0.01 × 107 = 105 bit。
- A 错10⁴bit 相当于传播时延 1ms,多除了 10;2 × 10⁶m ÷ (2 × 10⁸m/s) = 0.01s。
- B 对对:0.01s × 10⁷bit/s = 10⁵bit。
- C 错10⁶bit 相当于传播时延 0.1s,把距离多算了一位(2 × 10⁷m);正确是 0.01s。
- D 错2 × 10⁵bit 是往返时间 0.02s 乘带宽;链路上“同时容纳”看单程:时延带宽积 = 单程传播时延 × 带宽。
考点:1.3 节“时延带宽积”管道图。
- A. 只要提高链路带宽,丢包率就一定降为 0
- B. 丢包率 = 丢失的分组数 ÷ 发送的分组总数
- C. 路由器缓存溢出是分组丢失的主要原因之一
- D. 丢包率可以在一定程度上反映网络的拥塞程度
展开解析
A丢包主要来自拥塞(缓存满)和传输差错;提高某条链路的带宽不能消除别处的拥塞,也不能消除差错。
- A 选错误:丢包还来自别处的拥塞和传输差错,提高一条链路的带宽消除不了。
- B 不选正确:丢包率就是丢失的分组数占发送分组总数的比例。
- C 不选正确:路由器缓存满了,新到的分组只能丢弃,这是丢包最主要的原因之一。
- D 不选正确:丢包多往往说明路由器队列经常溢出,网络在拥塞。
考点:1.3 节“丢包率”。
1.4协议、服务、接口与分层
网络通信要解决的问题太多:信号怎么传、出错怎么办、走哪条路、怎么保证不丢、交给哪个程序……全放在一起设计会一团乱麻。办法是分层:把大问题分成若干层,每层只解决一部分问题,上层利用下层提供的服务,自己再向更上层提供服务。
| 分层的好处 | 分层的代价 |
|---|---|
| 各层独立,一层的实现变了,只要接口不变,其他层不受影响;灵活、易于实现和维护;便于标准化;每层功能边界清楚(2026-33) | 有些功能会在多层重复出现(如差错控制);每层都要加首部、做处理,层数越多开销越大、效率越低,所以层数要适当(2026-33 的错误选项就是“层次越多效率越高”) |
北京的老板只会中文,柏林的老板只会德文。北京老板写好合同交给翻译,翻译译成英文交给秘书,秘书装进信封、写上地址交给快递公司;快递公司一站一站地运到柏林;那边的秘书拆信封,翻译把英文译成德文,老板读到合同。
注意三件事:① 两边的翻译之间有约定——“都用英文”,这就是协议(同一层之间,水平的);② 翻译不关心快递怎么运,只要“交给秘书就能寄到”,这就是服务(下层为上层,垂直的);③ 每一层都往信上加自己的东西(译文、信封、运单),到了对方再一层层拿掉,这就是封装与解封。换掉快递公司(下层实现变了),老板和翻译都不受影响——这就是分层的好处。
几个基本概念
- 实体:任何能发送或接收信息的硬件或软件进程。两台机器同一层的实体叫对等实体。
- 协议:控制对等实体之间通信的规则的集合,是水平的。协议有三个要素(2020-33):
- 语法:数据与控制信息的格式,“怎么讲”(例:首部哪几个字节是什么字段);
- 语义:各部分的含义,要发出什么控制信息、完成什么动作、做出什么应答,“讲什么”;
- 同步(时序):事件实现顺序的详细说明,“什么时候讲、先讲什么后讲什么”(例:先请求、再应答)。
- 服务:下层为紧邻的上层提供的功能调用,是垂直的。第 n 层实体在实现本层协议时要使用第 n−1 层的服务,协议的实现保证了能向上一层提供服务。上层只能看见服务,看不见下层的协议(协议对上层是透明的)。
- 接口与服务访问点 SAP:相邻两层交换信息的地方,上层通过它找到下层的服务,下层通过它把数据交给正确的上层协议。王道的例子(按此口径作答):数据链路层的 SAP 是帧首部的“类型”字段(0800 交给 IP,0806 交给 ARP),网络层的 SAP 是 IP 首部的“协议”字段(6 交给 TCP,17 交给 UDP),传输层的 SAP 是端口号。(SAP 不是“本层的地址”:不要说成网络层 SAP = IP 地址、链路层 SAP = MAC 地址。)
- 服务原语:上层使用下层服务时交换的命令,有四类:请求、指示、响应、证实。有确认的服务四类都要用;无确认的服务只用请求和指示(见下图)。
- 数据单元:SDU(服务数据单元,上层交下来要传的数据)+ PCI(协议控制信息,本层加的首部)= PDU(协议数据单元,本层对等实体之间交换的单位)。第 n 层的 PDU 交给下一层,就成了第 n−1 层的 SDU。
| 题目里的字眼 | 考的是 | 判断依据 |
|---|---|---|
| “对等实体”“同一层之间”“两台主机的第 n 层之间的约定”“格式、含义、顺序” | 协议 | 水平方向,双方同层 |
| “第 n 层为第 n + 1 层提供……”“下层向上层”“原语” | 服务 | 垂直方向,只在紧邻的上下两层之间 |
| “相邻两层交换信息的地方”“SAP” | 接口 | 上下两层的边界 |
服务的分类
面向连接(先建连接、再传数据、最后释放,如 TCP)与无连接(直接发,如 IP、UDP);可靠(有确认、重传,保证送到)与不可靠(尽最大努力交付);有应答与无应答。注意“面向连接”和“可靠”是两回事:面向连接不一定可靠(如 PPP 先建链路却不重传),无连接也不一定不可靠(可靠性可以交给上层)。
各层常见协议:连接与可靠性一览
| 协议 / 方式 | 层 | 连接 | 可靠性由谁保证 |
|---|---|---|---|
| 电路交换 | 物理层 | 面向连接 | 不做差错控制,独占线路 |
| 报文交换 | — | 无连接 | 逐结点存储转发,可由网络校验 |
| 分组交换 · 数据报 | 网络层 | 无连接 | 网络尽最大努力交付,可靠性靠端系统(如 TCP) |
| 分组交换 · 虚电路 | 网络层 | 面向连接 | 可由网络保证(按序、可做差错和流量控制) |
| 以太网(802.3) | 链路层 | 无连接 | 不可靠:CRC 检错后丢弃,不确认、不重传(2012-35) |
| PPP | 链路层 | 先建立链路(LCP) | 不可靠:只检错,无确认、无重传、无序号 |
| 802.11 | 链路层 | 无连接 | 链路层有确认(ACK),丢了要重传(第 3 篇 3.6) |
| IP | 网络层 | 无连接 | 不可靠,尽最大努力交付(2011-33) |
| TCP | 传输层 | 面向连接 | 可靠:确认、重传、序号、流量控制、拥塞控制 |
| UDP | 传输层 | 无连接 | 不可靠,需要时由应用层自己保证 |
| HTTP | 应用层 | 无状态(靠 TCP 连接传送) | 依托 TCP 的可靠传输 |
网络体系结构与封装效率
网络体系结构 = 分层结构 + 各层协议的集合,是对网络应完成的功能的精确定义。它是抽象的,不涉及具体实现——协议怎样用硬件、软件实现,属于“实现”,不属于体系结构(2010-33)。
每层封装都要加首部,所以真正有用的数据占的比例会下降:传输效率 = 有效数据 ÷(有效数据 + 各层首部、尾部)。2017-33:OSI 中除物理层和应用层外还有 5 层各加 20B,400B 数据的效率 = 400 ÷ (400 + 5 × 20) = 80%。
- A. 网络的层次
- B. 每一层使用的协议
- C. 协议的内部实现细节
- D. 每一层必须完成的功能
展开解析
C网络体系结构 = 分层结构 + 各层协议的集合,说明“分几层、每层做什么、用什么协议”。它是抽象的功能定义,协议具体怎样用硬件或软件实现属于“实现”,不在体系结构的描述范围内。
- A、B、D网络的层次、每层使用的协议、每层必须完成的功能,都属于体系结构。
- C协议的内部实现细节不属于体系结构。
体系结构回答“做什么”,不回答“怎么做”。
- A. 80%
- B. 83%
- C. 87%
- D. 91%
展开解析
AOSI 共 7 层,除去应用层(产生数据)和物理层(不加首部),还剩表示层、会话层、传输层、网络层、数据链路层 5 层,每层加 20B。
- 总开销 = 5 × 20 = 100B。
- 效率 = 400 ÷ (400 + 100) = 80%。
- A 对80%。
- B 错83%:只算了 4 层(400 ÷ 480)。
- C 错87%:只算了 3 层(400 ÷ 460)。
- D 错91%:只算了 2 层(400 ÷ 440)。
效率 = 有效数据 ÷ 实际发出的总长度,数清楚有几层加了首部。
- A. 每层都有明确的功能边界
- B. 层次越多效率越高
- C. 有利于各层技术独立演化
- D. 上层无需关心下层的具体实现细节
展开解析
B层次越多,每层都要加首部、做一次处理,开销越大、效率越低。所以层数不是越多越好,要适当。
- A 对每层只负责一部分功能,边界清楚。
- B 错层次越多效率越高是错的。
- C 对只要层间接口不变,一层的技术可以独立更新。
- D 对上层只使用下层提供的服务,不关心它怎么实现。
分层的代价:重复的功能和额外的首部、处理开销。
- A. 仅Ⅰ
- B. 仅Ⅱ
- C. 仅Ⅲ
- D. Ⅰ、Ⅱ和Ⅲ
展开解析
C图中画的是两条时间线上消息的先后顺序:发送方先发,接收方再回,发送方收到后再发下一个。它描述的是“什么时候讲、谁先谁后”,属于时序(同步)。
- Ⅰ 语法规定数据的格式(哪个字段放在哪),图中看不出格式。
- Ⅱ 语义规定每条消息的含义和要做的动作,图中也没有。
- Ⅲ 时序事件发生的顺序,就是这张图。
语法 = 格式(怎么讲),语义 = 含义(讲什么),时序 = 顺序(什么时候讲)。
概念 3 道:体系结构 = 层次 + 各层协议 + 功能,不含协议的实现细节(2010-33);协议三要素中描述“先后顺序”的是时序,描述格式的是语法,描述含义和动作的是语义(2020-33);层次越多首部越多、处理越多,效率越低(2026-33)。计算 1 道:封装效率 = 数据 ÷ (数据 + 各层开销),要数清哪些层加首部——2017-33 中 OSI 去掉应用层和物理层还剩 5 层,400 ÷ (400 + 5 × 20) = 80%。可能的新考法:协议是“水平的”、服务是“垂直的”;服务访问点 SAP;各层协议面向连接还是无连接、可靠还是不可靠(上面的一览表)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 80%
- B. 87%
- C. 83%
- D. 91%
展开解析
B400 ÷ (400 + 20 + 20 + 18) = 400 ÷ 458 ≈ 87%。
- A 错80% = 400 ÷ 500,是 OSI 中 5 层各加 20B 的原题结果;这里只有 3 层加开销,共 58B。
- B 对对:400 ÷ (400 + 20 + 20 + 18) = 400 ÷ 458 ≈ 87%。
- C 错83% = 400 ÷ 480,按 4 层各加 20B 算了;TCP/IP 中只有传输层、网际层、网络接口层三层加开销。
- D 错91% = 400 ÷ 440,只算了传输层和网际层的 40B,漏了网络接口层的 18B。
变化点:把 OSI 七层换成 TCP/IP 四层:加开销的层少了,效率变高。注意题目说的是哪几层加开销。
I. 网络的层次划分 II. 每一层使用的协议 III. 协议的内部实现细节 IV. 每一层必须完成的功能
- A. 仅 I、II
- B. 仅 II、III
- C. 仅 I、II、IV
- D. I、II、III、IV
展开解析
C体系结构 = 层次 + 各层协议 + 各层功能,是抽象的;协议如何实现属于具体实现,不在体系结构之内。
- A 错A 漏了 IV:每一层必须完成的功能也是体系结构描述的内容。
- B 错B 含 III 又漏了 I:协议的内部实现细节属于“实现”,不在体系结构之内;层次划分则正是体系结构的核心。
- C 对对:层次、各层协议、各层功能。
- D 错D 把 III 也选了:体系结构是抽象的功能描述,不涉及协议用什么软硬件实现。
变化点:从“不属于”改成“属于”,并把四个说法都列出来逐条判断。
- A. 语法
- B. 语义
- C. 服务原语
- D. 时序(同步)
展开解析
D语法:数据与控制信息的格式;语义:各控制信息的含义、要完成什么动作;时序:事件的先后顺序。
- A 错语法规定数据与控制信息的格式(哪个字段放在哪、多长),不管事件的先后顺序。
- B 错语义规定每条控制信息的含义、要完成什么动作、作出什么响应,不管何时发送。
- C 错服务原语是上下层交互用的(请求、指示、响应、证实),不是协议三要素之一。
- D 对对:时序(同步)规定事件的实现顺序。
变化点:2020-33 用一张收发时序图考“时序”,这里直接问定义。
- A. 请求、证实
- B. 指示、响应
- C. 请求、指示
- D. 响应、证实
展开解析
B发起方:请求(发出)、证实(收到对方同意);接收方:指示(被告知有请求)、响应(作出回答)。
- A 错请求、证实都在发起方一侧:发起方发出请求,最后收到证实。
- B 对对:接收方先被“指示”有请求,再作出“响应”。
- C 错请求在发起方,指示在接收方,一边一个,不是“接收方的两种”。
- D 错响应在接收方,证实在发起方,同样是一边一个。
考点:1.4 节四原语时序图。
- A. 协议是控制对等实体之间通信的规则
- B. 服务是下层向紧邻的上层提供的
- C. 上层能够看见下层的协议
- D. 协议的实现保证了能够向上层提供服务
展开解析
C协议是水平的(对等实体之间),服务是垂直的(下层对上层)。上层只看得见服务,下层的协议对上层是透明的。
- A 不选正确:协议是对等实体之间(水平方向)通信的规则。
- B 不选正确:服务是下层通过层间接口向紧邻的上层提供的(垂直方向)。
- C 选错误:上层只看得见下层提供的服务,下层的协议对上层是透明的。
- D 不选正确:本层协议的实现保证了本层能向上一层提供服务。
考点:1.4 节“几个基本概念”。
1.5OSI 七层模型与 TCP/IP 模型
分层可以有不同的分法。国际标准化组织 ISO 提出的是七层的 OSI 参考模型(法律上的国际标准,但没有流行起来);因特网实际使用的是四层的 TCP/IP 模型(事实上的国际标准);教材为了讲清楚原理,采用两者折中的五层模型。
OSI 各层的功能(考选择题的核心)
| 层 | 主要功能 | 关键词 / 设备 |
|---|---|---|
| 7 应用层 | 为用户的应用程序提供服务(文件传输、电子邮件、网页) | HTTP、FTP、SMTP |
| 6 表示层 | 处理两个系统间交换信息的表示方式:数据格式转换、加密解密、压缩解压 | “数据格式转换”(2013-33) |
| 5 会话层 | 建立、管理、终止会话(进程之间的对话);同步:在数据中插入检查点,出错时从检查点恢复 | “会话管理、对话管理”(2019-33) |
| 4 传输层 | 端到端(进程到进程)的通信:可靠传输、流量控制、差错控制、复用与分用;第一个端到端的层 | 端口;TCP、UDP(2009-33、2014-33) |
| 3 网络层 | 把分组从源主机送到目的主机:路由选择、分组转发、拥塞控制、网际互连;OSI 的网络层还可以做差错控制、流量控制(面向连接的虚电路时) | IP 地址;路由器(2021-33) |
| 2 数据链路层 | 在相邻结点之间的链路上传送帧:组帧、差错控制、流量控制、介质访问控制 | MAC 地址;交换机、网桥(2022-33) |
| 1 物理层 | 在传输介质上透明地传输比特流;规定接口的机械、电气、功能、过程特性 | 集线器、中继器 |
OSI 与 TCP/IP 的比较
| OSI | TCP/IP | |
|---|---|---|
| 层数 | 7 层 | 4 层 |
| 网络层的服务 | 面向连接和无连接两种 | 只有无连接(IP 提供无连接、不可靠的数据报服务,2011-33) |
| 传输层的服务 | 只有面向连接 | 面向连接(TCP)和无连接(UDP)两种 |
| 先有什么 | 先有模型、后有协议,模型通用性强 | 先有协议、后有模型,模型只描述了 TCP/IP 自己 |
| 服务、接口、协议 | 明确区分 | 没有明确区分 |
TCP/IP 协议族:谁在哪一层、谁为谁服务
TCP/IP 的结构像一个沙漏:上面是各种应用层协议,下面是各种物理网络,中间最细的腰是 IP——“一切运行在 IP 之上,IP 运行在一切网络之上”。几个层间关系常考:
- ICMP、IGMP 的报文封装在 IP 数据报中传送,所以直接为 ICMP 提供服务的是 IP(2012-33);但 ICMP 仍属于网络层。
- ARP 通常归入网络层(它为 IP 服务),但它的报文直接封装在帧里,不经过 IP。
- 路由协议:RIP 用 UDP,BGP 用 TCP(它们都算应用层协议);OSPF 直接用 IP(2017-37,第 4 篇详讲)。
- TCP/IP 中传输层下面相邻的一层是网际层,主要功能是路由选择(2021-33);TCP/IP 没有会话层,“对话管理”不属于它的任何一层。
- A. 数据链路层
- B. 传输层
- C. 会话层
- D. 应用层
展开解析
BOSI 的下三层(物理层、数据链路层、网络层)都是点到点的,路由器、交换机上也有这几层,它们处理的是相邻结点之间的事。从传输层开始,只有两端的主机才有,它直接在源主机和目的主机的进程之间通信,是第一个端到端的层。
- A 错数据链路层负责相邻结点之间的链路,是点到点的。
- B 对传输层是自下而上第一个端到端的层。
- C 错会话层也是端到端的,但不是第一个。
- D 错应用层也是端到端的,但它在第 7 层;从第 4 层传输层起往上(会话层、表示层、应用层)都是端到端的,“自下而上第一个”是传输层,不是应用层。
下三层点到点,传输层及以上端到端。
- A. 对话管理
- B. 数据格式转换
- C. 路由选择
- D. 可靠数据传输
展开解析
B应用层的相邻层是表示层,它负责处理信息的表示方式:数据格式转换、加密解密、压缩解压。
- A 错对话管理是会话层(第 5 层)的功能;应用层(第 7 层)的相邻层是表示层(第 6 层),会话层还隔着一层。
- B 对数据格式转换是表示层的功能。
- C 错路由选择是网络层(第 3 层)的功能,离应用层(第 7 层)还隔着表示层、会话层、传输层三层,不相邻。
- D 错可靠数据传输是传输层(以及数据链路层)的功能。
从上往下:应用 → 表示(格式、加密、压缩)→ 会话(会话管理、同步)→ 传输(端到端)→ 网络(路由)→ 链路(帧、相邻结点)→ 物理(比特)。
- A. 应用层
- B. 表示层
- C. 传输层
- D. 网络层
展开解析
C第 n 层由它下面的第 n − 1 层提供服务。会话层是第 5 层,它下面紧挨着的是第 4 层传输层。
- A 错应用层在会话层之上(隔着表示层)。
- B 错表示层在会话层之上,是会话层为它服务。
- C 对传输层。
- D 错网络层是第 3 层,它直接服务的是紧挨在上面的第 4 层传输层;会话层(第 5 层)要隔着传输层才间接用到它。
“直接为第 n 层提供服务”就是第 n − 1 层;背熟 7 层的顺序:物、链、网、传、会、表、应。
- A. 差错控制
- B. 路由选择
- C. 会话管理
- D. 数据表示转换
展开解析
C自下而上第 5 层是会话层,功能是会话管理:建立、管理和终止会话,并用检查点实现同步。
- A 错差错控制是数据链路层和传输层的功能。
- B 错路由选择是第 3 层网络层的功能。
- C 对会话管理。
- D 错数据表示转换是第 6 层表示层的功能。
1 物理、2 链路、3 网络、4 传输、5 会话、6 表示、7 应用。
- A. 物理层
- B. 数据链路层
- C. 网络层
- D. 传输层
展开解析
B“两个相邻结点之间”的流量控制由数据链路层完成(例如停等协议、滑动窗口协议控制发送速度,第 3 篇)。
- A 错物理层只传比特,不做流量控制。
- B 对数据链路层。
- C 错网络层做的是拥塞控制(针对整个网络),不是相邻结点间的流量控制。
- D 错传输层的流量控制是端到端的,不是相邻结点之间的。
相邻结点之间 → 数据链路层;端到端 → 传输层。
- A. 2、2、1
- B. 2、2、2
- C. 3、2、1
- D. 3、2、2
展开解析
C路由器按 IP 地址转发,实现到网络层(第 3 层);交换机按 MAC 地址转发帧,实现到数据链路层(第 2 层);集线器只是把比特再生、放大后转发到所有端口,只在物理层(第 1 层)。
- A 错A 说路由器只到第 2 层:可路由器要读 IP 地址、查路由表转发分组,实现到第 3 层网络层;只到第 2 层的是交换机。
- B 错集线器没有数据链路层的功能(它不认识帧和 MAC 地址)。
- C 对3、2、1。
- D 错D 前两个数 3、2 对了,错在把集线器写成第 2 层(与 B 的错误相同):集线器只把比特再生后转发到所有端口,不认识帧和 MAC 地址,只到第 1 层。
集线器、中继器 → 1;交换机、网桥 → 2;路由器 → 3。
- A. 无连接不可靠的数据报服务
- B. 无连接可靠的数据报服务
- C. 有连接不可靠的虚电路服务
- D. 有连接可靠的虚电路服务
展开解析
ATCP/IP 的网络层(网际层)只有 IP 一种服务:无连接(不建立连接,每个分组独立转发)、不可靠(尽最大努力交付,不保证不丢、不乱序),称为数据报服务。可靠性交给上面的 TCP 负责。
- A 对无连接、不可靠的数据报服务。
- B 错B 的“可靠”错了:IP 只尽最大努力交付,分组可能丢失、重复、乱序,IP 本身既不确认也不重传;可靠传输要靠上面的 TCP。
- C、D 错TCP/IP 的网络层没有面向连接的虚电路服务(OSI 的网络层两种都有)。
TCP/IP:网络层只有无连接;传输层两种都有。OSI:网络层两种都有;传输层只有面向连接。
- A. 对话管理
- B. 路由选择
- C. 端到端报文段传输
- D. 结点到结点流量控制
展开解析
BTCP/IP 模型自下而上是网络接口层、网际层、传输层、应用层。传输层相邻的下一层是网际层,它的主要功能是路由选择和分组转发。
- A 错对话管理是 OSI 会话层的功能,TCP/IP 没有会话层。
- B 对路由选择。
- C 错端到端报文段传输是传输层自己的功能。
- D 错结点到结点的流量控制是数据链路层(网络接口层)的功能。
题目说“TCP/IP 模型”时,层名要按四层来找:传输层下面是网际层(IP)。
- A. PPP
- B. IP
- C. UDP
- D. TCP
展开解析
BICMP 报文作为 IP 数据报的数据部分,封装在 IP 数据报中传送,所以直接为 ICMP 提供服务的是 IP。ICMP 本身仍然属于网络层。
- A 错PPP 是数据链路层协议,它为 IP 服务,不直接为 ICMP 服务。
- B 对IP。
- C、D 错UDP、TCP 在 IP 之上,ICMP 不使用它们。
ICMP、IGMP 用 IP 封装;ARP 直接用帧封装;RIP 用 UDP;BGP 用 TCP;OSPF 直接用 IP。
| 题目里的字眼 | 层 |
|---|---|
| 透明传输比特流;接口的机械 / 电气 / 功能 / 过程特性;中继器、集线器 | 物理层 |
| 组帧;相邻结点间的差错控制、流量控制;介质访问控制;MAC 地址;交换机、网桥 | 数据链路层 |
| 路由选择;分组转发;拥塞控制;网际互连;IP 地址;路由器 | 网络层 |
| 端到端、进程到进程;端口;报文段;可靠传输(TCP) | 传输层 |
| 会话管理、对话管理;同步(插检查点) | 会话层 |
| 数据格式转换;加密解密;压缩解压 | 表示层 |
| 直接为用户的应用程序服务 | 应用层 |
全是“某功能 / 某设备 / 某协议在哪一层”。三步:① 用上表把字眼对号入座;② 看清问的是 OSI 还是 TCP/IP(TCP/IP 没有会话层、表示层,网络层只提供无连接服务,2011-33、2021-33);③ “直接为某层提供服务的”是它下面紧邻的那一层(2014-33:会话层下面是传输层),但 ICMP 这类封装在 IP 数据报里的协议,直接为它服务的是 IP(2012-33)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。
- A. 端到端的报文段传输
- B. 路由选择
- C. 对话管理
- D. 结点到结点的流量控制
展开解析
A网际层的上一层是传输层,提供端到端(进程到进程)的传输。
- A 对对:网际层的上一层是传输层,提供端到端的报文段传输。
- B 错路由选择是网际层自己的功能,题目问的是网际层的上一层(传输层)。
- C 错对话管理是 OSI 会话层的功能,TCP/IP 模型没有会话层。
- D 错结点到结点(相邻结点间)的流量控制是网络接口层的功能,在网际层下面。
变化点:2021-33 问传输层的下一层(网际层:路由选择),这里反过来问网际层的上一层。
- A. 物理层
- B. 数据链路层
- C. 传输层
- D. 会话层
展开解析
B每一层为上一层提供服务:网络层下面是数据链路层。
- A 错物理层直接为数据链路层服务,和网络层之间隔着一层。
- B 对对:第 N 层由第 N − 1 层直接服务,网络层下面是数据链路层。
- C 错传输层在网络层上面,是网络层为它服务,方向反了。
- D 错会话层在传输层之上,离网络层隔了一层,也是被服务的一方。
变化点:把“会话层”换成“网络层”:第 N 层由第 N − 1 层直接提供服务。
- A. 2、2、3
- B. 1、1、3
- C. 2、1、3
- D. 2、1、2
展开解析
C交换机是链路层(第 2 层)设备,中继器是物理层(第 1 层),路由器是网络层(第 3 层)。
- A 错中继器写成第 2 层:它只对信号整形放大,不认识帧,只到第 1 层物理层。
- B 错二层交换机写成第 1 层:交换机按 MAC 地址转发帧,到第 2 层数据链路层。
- C 对对:交换机 2、中继器 1、路由器 3。
- D 错路由器写成第 2 层:路由器要按 IP 地址查路由表转发,到第 3 层网络层。
变化点:把集线器换成中继器、顺序打乱:中继器和集线器都是第 1 层。
- A. 物理层
- B. 数据链路层
- C. 网络层
- D. 传输层
展开解析
D相邻结点之间的流量控制是数据链路层的事;端到端(两台主机之间)的流量控制由传输层实现。
- A 错物理层只负责传比特,不做任何流量控制。
- B 错数据链路层的流量控制在相邻两个结点之间,不是端到端。
- C 错网络层关心的是路由选择和整个网络的拥塞,不负责两台主机之间的流量控制。
- D 对对:传输层在两台主机(进程)之间做端到端的流量控制。
变化点:“相邻结点间”换成“端到端”,答案从数据链路层变成传输层。
- 分组交换比报文交换快的根本原因是什么?
答案
分组小,结点收到一个分组就可以转发,各段链路同时工作(流水);报文交换要在每个结点等整个报文到齐。 - 一个 1500B 的帧在 1Gbps、长 1km 的光纤上传输,发送时延和传播时延哪个大?
答案
发送时延 = 12 000 ÷ 109 = 12μs;传播时延 = 1000 ÷ (2 × 108) = 5μs。发送时延大。 - 时延带宽积的单位是什么?它表示什么?
答案
比特。表示链路上“正在传播中”的最多比特数(以比特为单位的链路长度)。 - 协议和服务有什么区别?
答案
协议是对等实体之间的规则,水平的;服务是下层给上层提供的功能,垂直的。上层只看得见服务,看不见下层的协议。 - 虚电路要不要为每条虚电路预先分配带宽?
答案
不要。虚电路只是逻辑连接,链路由多条虚电路统计复用;预先分配带宽的是电路交换(2020-34)。 - 在 TCP/IP 模型中,提供无连接服务的有哪些层?
答案
网际层(IP,只有无连接)和传输层(UDP;TCP 是面向连接的)。 - 报文 1 Mb 经 2 段 1 Mb/s 的链路(1 个中间结点)。分组交换的分组长 1 kb(忽略首部和传播时延),总时间是多少?报文交换呢?
答案
分组交换:N = 1000,(1000 + 2 − 1) × 1 ms = 1001 ms;报文交换:2 × 1000 ms = 2000 ms。 - 利用率从 50% 升到 90%,时延变为原来的几倍?
答案
D = D0/(1 − U):50% 时为 2D0,90% 时为 10D0,是原来的 5 倍。 - 协议的三要素是什么?“先请求、后应答”属于哪一个?
答案
语法、语义、同步(时序);“先后顺序”属于同步。 - 四种服务原语中,哪两个出现在接收方一侧?
答案
指示和响应。请求和证实在发起方一侧。 - IEEE 和 IETF 分别制定哪类标准?成为因特网标准要经过哪三个阶段?
答案
IEEE:802 系列局域网标准(以太网、无线局域网等);IETF:因特网协议,以 RFC 发布。阶段:因特网草案 → 建议标准 → 因特网标准。 - 路由器、交换机、集线器分别最高工作在 OSI 的哪一层?
答案
网络层(3)、数据链路层(2)、物理层(1)。
一页总结与必会题型
| 主题 | 核心结论 | 必背数字 / 字眼 | 真题 |
|---|---|---|---|
| 概念与分类 | 边缘部分(主机)+ 核心部分(路由器);通信子网(下三层)+ 资源子网(上三层);WAN / MAN / LAN / PAN;广播式 vs 点对点 | IEEE 802;IETF → RFC | — |
| 交换方式 | 电路:建连 + 独占;报文:每段存整个报文;分组:(N + k − 1)·P/R;虚电路按序、不预分配带宽 | 各段速率不同 → 跟着最后一个分组走 | 2010-34、2013-35、2020-34、2025-33 |
| 性能指标 | 发送时延 = L/R,传播时延 = d/v;时延带宽积 = 传播时延 × 带宽;吞吐量看瓶颈;D = D0/(1 − U);丢包率 | 介质中约 2 × 108 m/s;M = 106 | 2023-33、2024-33 |
| 协议与分层 | 协议水平、服务垂直;三要素语法 / 语义 / 同步;体系结构不含实现;层越多开销越大 | 请求、指示、响应、证实 | 2010-33、2017-33、2020-33、2026-33 |
| OSI 与 TCP/IP | 七层功能见“跟我判断”表;传输层是第一个端到端的层;TCP/IP 网络层只提供无连接服务 | 集线器 1、交换机 2、路由器 3 | 2009、2011、2012、2013、2014、2016、2019、2021、2022 年第 33 题 |
1.✎本篇真题闯关(19 题)
本篇各小节挂的真题全部在这里,按小节排好。可以展开后一道道做,也可以用弹窗模式连续做。做题记录(对/错)只保存在你这台电脑的浏览器里,小节标题下的题号会随之变绿或变红。
物理层:比特怎样变成信号,一条线最多能传多快
物理层的任务只有一个:在传输介质上透明地传送比特流——上层交下来一串 0 和 1,它负责把它们变成电信号、光信号或电磁波送到对方,再还原成 0 和 1。这一篇回答三个问题:一个信号能携带几个比特(码元与波特率);一条信道最快能传多快(奈奎斯特定理和香农定理,几乎每年一道计算题);0 和 1 具体画成什么波形(编码与调制,考看图识码)。
本篇地图:先看全貌,再逐节攻克
物理层的 15 道真题里,有 7 道是奈奎斯特 / 香农的计算,4 道是编码与调制——这两块占了大半。其余是概念:码元与波特、传输介质、接口特性、中继器和集线器。
| 小节 | 选择题 | 一句话说清考什么 |
|---|---|---|
| 2.1 通信基础 | 1 | 比特率与波特率互换 |
| 2.2 信道极限 | 7 | 奈奎斯特、香农、两者取小;哪些因素影响速率 |
| 2.3 编码与调制 | 4 | 看波形识别编码、反推比特;FSK 用两个频率 |
| 2.4 传输介质 | 1 | 以太网标准用什么介质 |
| 2.5 接口与设备 | 2 | 四个特性各管什么;物理地址不属于物理层 |
- 2.1 → 2.2(约 2 小时):先分清码元、波特、比特,再把两个定理和 dB 换算练熟——这是本篇的分数大头。
- 2.3(约 1.5 小时):五种编码各画一遍,再练“看波形反推比特”。
- 2.4 → 2.5(约 1 小时):介质、接口特性、设备,以记忆为主。
物理层考虑的是怎样在连接各种计算机的传输介质上传输比特流,而不是具体的传输介质本身。它要做的事:① 规定接口的机械、电气、功能、过程特性(2.5 节);② 把比特变成适合介质的信号——编码或调制(2.3 节);③ 决定比特的传输方式——单工 / 双工、串行 / 并行、同步 / 异步(2.1 节);④ 让信道尽量接近它的速率极限(2.2 节)。它向上提供“透明的比特流”:上层不必知道底下是双绞线、光纤还是无线电。
2.1通信基础:数据、信号、码元、波特率
数据通信系统的模型
问题:你家的电脑通过光猫上网,屏幕上的一个字从你的电脑“走”到远方的服务器,中间经过了哪些环节?物理层要研究的,就是“比特怎样在线路上变成信号、又变回比特”。
- 源系统:信源(产生数据的一端)+ 发送器(把数据编码 / 调制成信号)。目的系统:接收器(把信号还原成数据)+ 信宿(接收数据的一端)。中间是传输系统(传输介质和中间设备)。
- 数据是有意义的符号(如一串比特),信号是数据的电气或电磁表现。信号分模拟信号(取值连续,如话筒输出的电压)和数字信号(取值离散,只有有限几种状态,如计算机输出的方波)。
- 信道:向某一个方向传送信息的通道。一条通信线路往往包含一条发送信道和一条接收信道。按传的信号分模拟信道和数字信道,按介质分有线信道和无线信道。
- 本篇里的带宽取它的本义:信号能通过的频率范围(最高频率 − 最低频率),单位 Hz。到了其他篇,“带宽”常指数据率(bit/s),注意区分。
码元、波特率与比特率
两座山头之间用旗子传话,每秒举一次旗(每秒 1 个码元)。只有红旗、白旗两种(V = 2),每次只能表达 1 位(是 / 否);有红、白、黄、绿四种旗(V = 4),每次就能表达 2 位(00、01、10、11)。举旗的频率就是波特率,每秒传了多少位就是比特率。哪里不像:旗子颜色看得清清楚楚,而电信号的“状态”越多,相邻状态越接近,越容易被噪声弄混。
码元是用一个固定时长的信号波形来表示一位 k 进制数字。如果信号有 V 种可区分的状态(电平、相位、频率……),一个码元就能携带 log2V 比特。
log2V 就是“2 的几次方等于 V”:log22 = 1,log24 = 2,log28 = 3,log216 = 4,log232 = 5,log264 = 6,log21024 = 10。V 不是 2 的幂时(如 log21001),取最接近的:210 = 1024,所以 log21001 ≈ 10(略小于 10)。
跟我算
(1) log216 = 4,比特率 = 2400 × 4 = 9600 b/s。(2) 4 相位 → V = 4,每个码元 2 bit,波特率 = 9600 ÷ 2 = 4800 Baud。
口诀:比特率 ÷ 每码元比特数 = 波特率。只有二进制(V = 2)时,两者在数值上才相等。
- A. 600 波特
- B. 1200 波特
- C. 4800 波特
- D. 9600 波特
展开解析
B4 相位调制:码元有 4 种状态,每个码元携带 log24 = 2 比特。
- 比特率 = 波特率 × log2V。
- 波特率 = 2400 ÷ 2 = 1200 波特。
- A 错600:除以了 4(把 4 相位当成每码元 4 比特)。
- B 对1200 波特。
- C 错4800:乘了 2,方向反了。
- D 错9600 = 2400 × 4:错了两处——把“除以每码元的比特数”做成了乘法,又把状态数 4 当成了每码元的比特数(实际 log₂4 = 2)。
比特率 ≥ 波特率;两者之比是每个码元携带的比特数 log2V。
通信方式与传输方式
- 串行传输:一次传 1 位,一位接一位(远距离通信都用串行);并行传输:一次传多位,每位一条线(计算机内部、短距离)。
- 异步传输:以字符为单位,每个字符前加 1 位起始位(0)、后加停止位(1),字符之间的间隔不定;收方靠起始位对准每个字符(字符内部同步,字符之间异步)。同步传输:以数据块为单位,收发双方的时钟严格同步(如从编码中提取时钟),效率高。
跟我算:异步传输一个 8 位字符加 1 位起始、1 位停止,共 10 位,有效数据占 8 ÷ 10 = 80%。
基带传输与频带传输
- 来自信源的信号叫基带信号(如计算机输出的方波,含有从直流开始的低频分量)。基带信号直接在线路上传叫基带传输,只要做编码(变成合适的数字波形),局域网常用。
- 很多信道(无线、电话线)不能传低频或直流,就要把基带信号调制到较高频率的载波上再传,叫频带(带通)传输。若一条线路上用多个不同频段同时传多路信号,叫宽带传输(如有线电视、ADSL)。
2011-34:比特率 = 波特率 × log2V,4 相位调制每个码元 2 比特,2400b/s → 2400 ÷ 2 = 1200 波特。V 是码元的状态数(如“4 个相位 × 4 种振幅”就是 16)。可能的新考法:单工、半双工、全双工各举一例;串行与并行、同步与异步;基带传输与频带(宽带)传输;曼彻斯特编码的波特率是比特率的 2 倍(2.3 节)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 1200 波特
- B. 450 波特
- C. 1800 波特
- D. 10800 波特
展开解析
A每个码元携带 log28 = 3 比特,波特率 = 3600 ÷ 3 = 1200 波特。
- A 对对:每码元 log₂8 = 3 比特,3600 ÷ 3 = 1200 波特。
- B 错450 = 3600 ÷ 8:直接除以了状态数 8;应除以每码元的比特数 log₂8 = 3。
- C 错1800 = 3600 ÷ 2:按 4 相位每码元 2 比特算了;8 相位每码元 3 比特。
- D 错10800 = 3600 × 3:方向反了,比特率 = 波特率 × 3,求波特率应除以 3。
变化点:相位数从 4 变 8,每码元比特数从 2 变 3。
- A. 1200bps
- B. 4800bps
- C. 2400bps
- D. 19200bps
展开解析
B比特率 = 1200 × log216 = 4800bps。
- A 错1200bps 把波特率直接当成了比特率;16 种状态每码元携带 4 比特。
- B 对对:1200 × log₂16 = 4800bps。
- C 错2400 = 1200 × 2:每码元比特数按 2 算了(那是 4 种状态);16 种状态是 log₂16 = 4。
- D 错19200 = 1200 × 16:把状态数 16 当成了每码元的比特数。
变化点:反过来由波特率求比特率。
- A. 单工
- B. 半双工
- C. 全双工
- D. 并行
展开解析
B对讲机就是半双工;单工只能一个方向(广播),全双工两个方向可以同时(电话)。并行是“一次传多位”的传输方式,不是通信方式。
- A 错单工只能一个方向传(如无线电广播),接收方根本不能发送。
- B 对对:半双工双方都能发,但同一时间只能一方发(对讲机)。
- C 错全双工两个方向可以同时传(如电话),题目说的是“不能同时”。
- D 错并行是“一次同时传多位”的传输方式,和“谁能发、能否同时发”的通信方式是两回事。
考点:2.1 节“通信方式与传输方式”。
- A. 频带传输
- B. 宽带传输
- C. 基带传输
- D. 模拟传输
展开解析
C基带信号直接传送叫基带传输(局域网常用);调制到载波上叫频带传输;一条线路用多个频段同时传多路叫宽带传输。
- A 错频带传输要先把数字信号调制到载波上,题目说的是“不调制”。
- B 错宽带传输是把线路分成多个频段同时传多路信号,同样要调制。
- C 对对:只编码、不调制,直接传数字信号就是基带传输。
- D 错模拟传输传的是模拟信号;直接传送数字信号(只做编码)的是基带传输。
考点:2.1 节“基带传输与频带传输”。
2.2信道的极限:奈奎斯特定理与香农定理
码元为什么不能无限快
信号经过任何实际信道都会失真:信道只让一定频率范围的成分通过(带宽有限),方波的陡峭边沿被“磨圆”,一个码元的波形会拖出尾巴,压到下一个码元上。码元传得越快,尾巴压得越厉害,接收端就分不清前后码元——这叫码间串扰。
任何周期信号都可以分解成一系列频率不同的正弦波之和(傅里叶分析)。方波的边沿越陡,里面高频成分越多。信道就像一个“筛子”,只让带宽范围内的频率通过:高频成分被滤掉,方波就被“磨圆”。所以带宽(能通过的频率范围)越窄,波形越圆,码元就不能太密——这就是上一张图里码间串扰的根源。
奈奎斯特定理:无噪声时的极限
为什么是 2W:带宽 W 的信道能通过的最高频率约为 W,一个周期 1/W 内信号最多“一上一下”变化两次,每次变化就是一个码元,所以每秒最多 2W 个码元——每个码元至少要占 1/(2W) 秒。电话线 W = 4 kHz 时,码元最短 125 μs。
要在带宽固定时提高速率,只能增加 V,让每个码元携带更多比特(多电平、多相位、QAM)。理论上 V 越大越好,但实际上状态越多越难分辨——这就要看香农定理了。
跟我算
(1) 码元速率上限 2 × 4000 = 8000 Baud。二进制:8000 × 1 = 8 kb/s;16 种状态:8000 × 4 = 32 kb/s。
(2) 码元速率上限 2 × 200 k = 400 kBaud;每个码元要携带 1.2 M ÷ 400 k = 3 bit;V ≥ 23 = 8。
香农定理:有噪声时的极限
信噪比 S/N = 信号平均功率 ÷ 噪声平均功率,是个比值(没有单位)。它常用分贝表示:信噪比(dB)= 10 log10(S/N)。反过来 S/N = 10dB ÷ 10。
| dB | 3 | 10 | 20 | 30 | 40 |
|---|---|---|---|---|---|
| S/N | 约 2 | 10 | 100 | 1000 | 10000 |
考试最常见的是 30 dB → S/N = 1000,log2(1 + 1000) ≈ 10。注意代入香农公式的是 S/N 本身,不是 dB 数。
香农定理给出的是不管用什么编码、调制方法都不可能突破的上限。它只和带宽、信噪比有关:带宽越宽、信噪比越大,极限速率越高;与码元状态数 V 无关。但信噪比不可能无限提高(信号功率有限、噪声总是存在),所以有噪声信道的极限速率也不可能无限增大;而且速率只随 log2(1 + S/N) 缓慢增长:带宽一定时,S/N 从 1000 提高到 2000,极限速率只增加约 10%。它的意义在于:只要实际速率低于 C,就一定存在某种编码方法能实现无差错传输。
跟我算
(1) 30 dB → S/N = 1000;C = 3000 × log21001 ≈ 3000 × 9.97 ≈ 29.9 kb/s(约 30 kb/s)。
(2) 10 M = 1 M × log2(1 + S/N) → log2(1 + S/N) = 10 → S/N = 210 − 1 = 1023 → 10 log101023 ≈ 30.1 dB。
两个定理一起用
| 奈奎斯特定理 | 香农定理 | |
|---|---|---|
| 适用条件 | 理想低通信道,无噪声 | 有高斯白噪声 |
| 结论 | 码元速率 ≤ 2W;数据率 ≤ 2W log2V | 数据率 ≤ W log2(1 + S/N) |
| 提高速率的办法 | 增大 W,增大 V | 增大 W,提高信噪比 |
| 两个都给了时 | 两个上限同时成立,实际最大速率取两者中较小的 | |
跟我算
奈奎斯特:2 × 4k × log28 = 24kbps。香农:4k × log2(1 + 1000) ≈ 40kbps。两个限制同时存在,取小的:24kbps。要想逼近 40kbps,就得增加电平数:2W log2V ≥ W log21001 → log2V ≥ 4.98,即至少 32 种电平(2017-34 就是这样出题的)。
信号的传播速度只影响传播时延,不影响一条信道每秒能传多少比特(2014-35)。能影响数据传输速率的是:带宽、信噪比、码元状态数(调制方法)、调制速度(波特率)。
- A. 12kbps
- B. 24kbps
- C. 48kbps
- D. 96kbps
展开解析
B无噪声 → 用奈奎斯特定理。4 个相位 × 4 种振幅 = 16 种状态,V = 16。
- 极限码元速率 = 2W = 2 × 3k = 6k 波特。
- 每个码元 log216 = 4 比特。
- 最大数据传输速率 = 6k × 4 = 24kbps。
- A 错12kbps:忘了乘 2(码元速率是 2W,不是 W)。
- B 对24kbps。
- C 错48kbps:多乘了一个 2,例如把每个码元算成 8 比特(4 相位 × 4 振幅不是 4 + 4 位)。
- D 错96kbps:直接用 2W × 16,把状态数当成了比特数。
奈奎斯特:C = 2W log2V。QAM 的状态数 = 相位数 × 振幅数。
- A. 信噪比
- B. 频率带宽
- C. 调制速度
- D. 信号传播速度
展开解析
D数据传输速率由奈奎斯特和香农定理决定:和带宽、信噪比、码元速率(调制速度)、码元状态数有关。信号的传播速度只决定传播时延(信号跑多快),与每秒能传多少比特无关。
- A信噪比:香农公式中的 S/N,会影响。
- B频率带宽:两个公式中的 W,会影响。
- C调制速度:即波特率,比特率 = 波特率 × log2V,会影响。
- D信号传播速度不影响。
“传得多快”(速率)和“跑得多快”(传播速度)是两回事。
- A. 8kbps
- B. 20kbps
- C. 40kbps
- D. 80kbps
展开解析
考点2.2 香农定理
C给了信噪比 → 用香农定理。30dB → S/N = 103 = 1000。
- 理论最大速率 C = 8k × log2(1 + 1000) ≈ 8k × 10 = 80kbps。
- 实际速率是它的 50%:40kbps。
- A 错8kbps 恰好是带宽 8kHz 的数值:相当于把 log₂(1 + 1000) 当成 1,又没乘 50%;实际 log₂1001 ≈ 10,理论值约 80kbps,实际约 40kbps。
- B 错20kbps:多除了一个 2。
- C 对40kbps。
- D 错80kbps:是理论最大值,忘了乘 50%。
dB 换 S/N:S/N = 10dB/10;30dB → 1000,log21001 ≈ 10。
- A. 4
- B. 8
- C. 16
- D. 32
展开解析
D设带宽 W、状态数 V。要求“无噪声极限 ≥ 30dB 时的极限”。
- 无噪声(奈奎斯特):2W log2V。
- 30dB(香农):W log2(1 + 1000) ≈ 10W。
- 2W log2V ≥ 10W → log2V ≥ 5 → V ≥ 32。
- A 错V = 4:2W × 2 = 4W,远小于 10W。
- B 错V = 8:2W × log₂8 = 6W,仍小于 30dB 时的香农极限 W × log₂1001 ≈ 10W,不满足“不小于”。
- C 错V = 16:8W,仍小于 10W。
- D 对V = 32:10W,刚好达到。
两个定理比大小时,带宽 W 在两边都出现,可以约掉。
- A. 200kbps
- B. 400kbps
- C. 800kbps
- D. 1600kbps
展开解析
C无噪声 → 奈奎斯特。4 个幅值的 ASK,V = 4,每个码元 2 比特。
- 极限码元速率 = 2 × 200k = 400k 波特。
- 最大数据传输速率 = 400k × 2 = 800kbps。
- A 错200kbps:码元速率写成 W 且每码元只算 1 比特。
- B 错400kbps:只算了码元速率,没乘每码元的比特数。
- C 对800kbps。
- D 错1600kbps:把 4 当成了每码元的比特数。
V 种状态 → 每码元 log2V 比特,不是 V 比特。
- A. QAM-16
- B. QAM-32
- C. QAM-64
- D. QAM-128
展开解析
C无噪声理想信道,用奈奎斯特定理倒推 V。
- 48M = 2 × 4M × log2V → log2V = 6。
- V = 26 = 64,即 QAM-64。
- A 错QAM-16:每码元 4 比特,只能 32Mbps。
- B 错QAM-32:每码元 5 比特,40Mbps。
- C 对QAM-64:每码元 6 比特,48Mbps。
- D 错QAM-128:每码元 7 比特,56Mbps。
QAM-n 的 n 就是状态数 V,每码元携带 log2n 比特。
- A. 1ms
- B. 2ms
- C. 3ms
- D. 6ms
展开解析
D给了信噪比 → 香农定理求出极限速率,再用它算发送时延(“至少”就是用最大速率发)。
- C = 200k × log2(1 + 1023) = 200k × 10 = 2Mbps。
- 分组 1500B = 12 000bit,传输时延 = 12 000 ÷ (2 × 106) = 6ms。
- A、B 错1ms、2ms 对应的速率是 12 000bit ÷ 1ms = 12Mbps、12 000bit ÷ 2ms = 6Mbps,都超过了这条信道的香农极限 200k × log₂1024 = 2Mbps——信道每秒最多传 2Mb,发 1500B 不可能比 6ms 更快。
- C 错3ms:速率按 4Mbps 算了,把奈奎斯特公式里的“2W”错用到香农公式上。
- D 对6ms。
1 + S/N 凑成 2 的幂(1024)是出题人故意给的,log2 直接取整。
- “无噪声” → 奈奎斯特(2009-34、2022-34、2023-34):2W log2V,反求 V 时 log2V = 速率 ÷ 2W。
- “信噪比” → 香农(2016-34、2026-34):先把 dB 换成 S/N;2026-34 还把速率代入发送时延 = 长度 ÷ 速率(1500 B = 12000 bit,12000 ÷ 2 Mb/s = 6 ms)。
- 两个都给 / 比较(2017-34):列不等式,或两者取小。
- 概念(2014-35):传播速度不影响数据率。
这个方法失效的情形:题目说的是“带宽 W”但信道是带通的(非低通),奈奎斯特仍按 2W 算(408 不区分);题目给的“带宽”若指数据率(bit/s),就不能套这两个公式。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 16kbps
- B. 24kbps
- C. 32kbps
- D. 64kbps
展开解析
C状态数 V = 8 × 2 = 16,C = 2 × 4k × log216 = 32kbps。
- A 错16kbps = 4k × 4:码元速率只取了 W,漏了奈奎斯特公式里的 2(极限码元速率 2W = 8k 波特)。
- B 错24kbps = 2 × 4k × 3:只按 8 个相位算(log₂8 = 3),漏乘了 2 种振幅;状态数 V = 8 × 2 = 16。
- C 对对:2 × 4k × log₂16 = 32kbps。
- D 错64kbps = 2 × 4k × 8:把相位数 8 当成了每码元的比特数,实际 log₂16 = 4。
变化点:带宽和相位/振幅组合都变了,状态数仍是“相位数 × 振幅数”。
- A. 8kbps
- B. 16kbps
- C. 24kbps
- D. 27kbps
展开解析
B20dB → S/N = 100;C = 4k × log2101 ≈ 4k × 6.66 ≈ 26.6kbps;× 60% ≈ 16kbps。
- A 错8kbps = 2 × 4k,相当于按奈奎斯特二进制信号算(每码元 1 比特);题目给的是信噪比,要用香农定理。
- B 对对:4k × log₂101 ≈ 26.6kbps,乘 60% ≈ 16kbps。
- C 错24kbps ≈ 4k × log₂1001 × 60%:把 20dB 换算成了 S/N = 1000(那是 30dB);20dB 对应 S/N = 10² = 100。
- D 错27kbps ≈ 4k × log₂101 ≈ 26.6kbps,是理论最大值,忘了乘 60%。
变化点:dB 换算:S/N = 10dB/10,20dB 对应 100。
- A. QAM-32
- B. QAM-64
- C. QAM-16
- D. QAM-128
展开解析
C32M = 2 × 4M × log2V → log2V = 4 → V = 16,QAM-16。
- A 错QAM-32 每码元 5 比特:2 × 4M × 5 = 40Mbps,超过了 32Mbps。
- B 错QAM-64 每码元 6 比特:2 × 4M × 6 = 48Mbps,那是原题 2023-34 的数据。
- C 对对:log₂V = 32M ÷ 8M = 4,V = 16。
- D 错QAM-128 每码元 7 比特:2 × 4M × 7 = 56Mbps。
变化点:速率从 48Mbps 改为 32Mbps,每码元比特数从 6 变 4。
- A. 7.5ms
- B. 12ms
- C. 15ms
- D. 30ms
展开解析
CC = 100k × log2256 = 800kbps;1500 × 8 ÷ 800k = 15ms。
- A 错7.5ms 对应 1.6Mbps:把香农公式写成了 2W log₂(1 + S/N),多乘了 2;香农公式里没有 2。
- B 错12ms = 12 000bit ÷ 1Mbps:把 log₂256 当成了 10(套用 1024 的习惯);log₂(1 + 255) = 8,C = 800kbps。
- C 对对:100k × 8 = 800kbps,12 000bit ÷ 800kbps = 15ms。
- D 错30ms 对应 400kbps,只有香农极限 800kbps 的一半;“至少”的发送时延要按极限速率算。
变化点:S/N 取 2k − 1 的形式,log2(1 + S/N) 正好是整数。
- A. 4
- B. 16
- C. 6
- D. 8
展开解析
D码元速率上限 2 × 200k = 400 kBaud;每个码元要携带 1.2M ÷ 400k = 3 bit;V ≥ 23 = 8。
- A 错4 种状态每码元 2 比特:400k × 2 = 800kb/s,达不到 1.2Mb/s。
- B 错16 种状态能达到(1.6Mb/s),但题目问“至少”,8 种就够了。
- C 错6 种状态时每码元 log₂6 ≈ 2.58 比特,400k × 2.58 ≈ 1.03Mb/s,达不到 1.2Mb/s。
- D 对对:每码元要 3 比特,V ≥ 2³ = 8。
考点:2.2 节“奈奎斯特定理”的跟我算。
- A. 30 dB
- B. 10 dB
- C. 20 dB
- D. 40 dB
展开解析
A10M = 1M × log2(1 + S/N) → S/N = 210 − 1 = 1023 → 10 log101023 ≈ 30 dB。
- A 对对:S/N = 2¹⁰ − 1 = 1023,约 30dB。
- B 错10dB 即 S/N = 10:1M × log₂11 ≈ 3.46Mb/s,远不到 10Mb/s。
- C 错20dB 即 S/N = 100:1M × log₂101 ≈ 6.66Mb/s,不够 10Mb/s。
- D 错40dB(S/N = 10⁴)能到约 13.3Mb/s,但不是“至少”;约 30dB 就够了。
考点:2.2 节“香农定理”的跟我算。
2.3编码与调制:0 和 1 画成什么样
把数据变成信号有两类做法:编码把数据变成数字信号(基带传输,局域网用);调制把数据加载到载波上,变成模拟信号(带通传输,无线、电话线用)。数据和信号各有数字、模拟两种,组合起来共四种:
| 转换 | 方法 | 例子 |
|---|---|---|
| 数字数据 → 数字信号 | 编码:NRZ、曼彻斯特等 | 以太网 |
| 数字数据 → 模拟信号 | 调制:ASK、FSK、PSK、QAM | 调制解调器、Wi-Fi |
| 模拟数据 → 数字信号 | PCM:采样、量化、编码 | 数字电话、录音 |
| 模拟数据 → 模拟信号 | 调制到不同频段(调幅、调频广播),频分复用 | 收音机、早期电话网 |
数字数据 → 数字信号:五种编码
| 编码 | 规则(408 真题采用的约定) | 特点 |
|---|---|---|
| RZ 归零 | 正脉冲表示 1,负脉冲表示 0,每个码元的后半段都回到零电平(“归零”) | 每位都有跳变,接收方可以据此调整时钟(自同步);但“归零”占用了一部分带宽,传输效率低。只考概念,不考看图 |
| NRZ 不归零 | 高电平表示 1,低电平表示 0,一个码元内电平不变 | 简单、效率高;连续多个 0 或 1 时没有跳变,接收方无法提取时钟(不能自同步) |
| NRZI 反向不归零 | 电平翻转表示 0,保持不变表示 1 | 连续的 0 有跳变;USB 使用。也有教材规定相反(翻转表示 1),做题以题目为准 |
| 曼彻斯特 | 每个码元中间都跳变;前高后低表示 1,前低后高表示 0(2013-34、2015-34 都按这个约定) | 自同步;以太网(10BaseT)使用。一个码元两个电平,调制速率是数据率的 2 倍(10 Mb/s 以太网的码元速率是 20 MBaud) |
| 差分曼彻斯特 | 每个码元中间都跳变(只作时钟);看码元开始处:有跳变表示 0,没有跳变表示 1(2021-34) | 抗干扰更强;令牌环网使用 |
| 编码 | 能否自同步 | 每比特跳变 | 所需带宽 | 典型应用 |
|---|---|---|---|---|
| NRZ | 否(长串 0 或 1 没有跳变) | 最多 1 次 | 最小 | 计算机内部、短距离 |
| NRZI | 部分(连续 0 有跳变,连续 1 没有) | 最多 1 次 | 小 | USB;配合 4B/5B 用于 FDDI |
| RZ | 是 | 2 次 | 大 | 概念 |
| 曼彻斯特 | 是 | 1 ~ 2 次 | NRZ 的 2 倍 | 10 Mb/s 以太网 |
| 差分曼彻斯特 | 是 | 1 ~ 2 次 | NRZ 的 2 倍 | 令牌环网;信号整体反相也不影响解码,抗干扰更好 |
- 码元中间有没有跳变?都没有 → NRZ 或 NRZI;都有 → 曼彻斯特或差分曼彻斯特。
- 没有中间跳变时:电平直接对应比特 → NRZ;电平“翻转/不变”对应比特 → NRZI。
- 有中间跳变时:看中间跳变的方向能否对上比特 → 曼彻斯特;看码元开始处有无跳变能否对上比特 → 差分曼彻斯特。
4B/5B 编码(拓展):把每 4 位数据换成 5 位编码(从 32 个码组里挑出“0 不太多”的 16 个),保证有足够的跳变,编码效率 80%,用于 100BASE-TX 等快速以太网:100 Mb/s 的数据实际以 125 MBaud 发送,比曼彻斯特(要 200 MBaud)省带宽。
- A. 0011 0110
- B. 1010 1101
- C. 0101 0010
- D. 1100 0101
展开解析
A10BaseT 以太网使用曼彻斯特编码:每个码元中间都有跳变,前高后低表示 1,前低后高表示 0。
- 逐格看中间跳变的方向:低高、低高、高低、高低、低高、高低、高低、低高。
- 对应比特:0 0 1 1 0 1 1 0,即 0011 0110。
- A 对0011 0110。
- B 错1010 1101:第 1 位中间是前低后高,应为 0。
- C 错0101 0010:第 2 位中间是前低后高,应为 0。
- D 错1100 0101:前 4 位是用相反约定(前低后高 = 1)读出来的,后 4 位也对不上。
看到“以太网、10BaseT”就想到曼彻斯特编码;只看每个码元中间跳变的方向。
- A. NRZ 和曼彻斯特编码
- B. NRZ 和差分曼彻斯特编码
- C. NRZI 和曼彻斯特编码
- D. NRZI 和差分曼彻斯特编码
展开解析
A按“看图识码的三步”来判断。
- 编码 1:码元中间都没有跳变,而且高电平正好对应 1、低电平对应 0 → NRZ。(若是 NRZI,第 2、3 位的 1 应该保持前一电平,第 1 位 0 后的“翻转”也对不上。)
- 编码 2:每个码元中间都跳变。看中间跳变的方向:前低后高、前高后低、前高后低、前低后高、前低后高、前高后低、前高后低、前高后低,按“前高后低 = 1”正好读出 01100111 → 曼彻斯特编码。
- 再验证不是差分曼彻斯特:第 3 位是 1,按差分曼彻斯特码元开始处不应跳变,但图中第 3 位开始处有跳变,所以不是。
- A 对NRZ 和曼彻斯特编码。
- B 错B 的编码 1(NRZ)对了,错在编码 2:第 3 位是 1,按差分曼彻斯特码元开始处不应跳变,可图中第 3 位开始处有跳变;而按“前高后低 = 1”读编码 2 正好得到 01100111,它是曼彻斯特编码。
- C、D 错编码 1 的电平直接对应比特,是 NRZ 而不是 NRZI。
曼彻斯特看码元中间的跳变方向;差分曼彻斯特看码元开始处有没有跳变。
- A. 1011 1001
- B. 1101 0001
- C. 0010 1110
- D. 1011 0110
展开解析
A差分曼彻斯特:每个码元中间都跳变(只用作时钟),数据看码元开始处:有跳变表示 0,没有跳变表示 1。
- 第 1 位之前的电平不知道,先跳过。
- 从第 2 位起逐位比较“上一位的后半电平”和“本位的前半电平”:第 2 位 低 → 高,有跳变,0;第 3 位 低 → 低,无跳变,1;第 4 位 高 → 高,1;第 5 位 低 → 低,1;第 6 位 高 → 低,0;第 7 位 高 → 低,0;第 8 位 高 → 高,1。
- 后 7 位是 011 1001,只有 A(1011 1001)符合。
- A 对1011 1001。
- B 错1101 0001:第 2 位是 1,但第 2 位开始处有跳变,应为 0。
- C 错0010 1110:第 4 位是 0,但第 4 位开始处没有跳变,应为 1。
- D 错1011 0110:前 4 位对,第 5 位是 0,但第 5 位开始处没有跳变,应为 1。
差分曼彻斯特第 1 位常常无法确定,先读后面的位,再用选项排除。
数字数据 → 模拟信号:调制
载波是一个正弦波,它有三个可以改变的“旋钮”:振幅、频率、相位。调制就是用数据去拧这几个旋钮:
- ASK(调幅):用载波的有无或不同振幅表示 0、1。实现简单,但抗噪声差。
- FSK(调频):用两个不同频率的载波表示 0、1。抗干扰较好。
- PSK(调相):用载波的不同相位表示 0、1;DPSK(差分调相)用相对前一个码元的相位变化表示。三种基本调制里 PSK 抗干扰能力最强,FSK 次之,ASK 最差。
- QAM(正交振幅调制):幅度和相位结合起来,一个码元可以有很多种状态,在同样的波特率下传更多比特。
QPSK(四相位调制)是 PSK 的扩展:用 4 种相位(如 45°、135°、225°、315°)表示 00、01、10、11,每个码元 2 bit——2011-34 的“4 相位调制”就是它:数据率 2400 b/s 时,波特率只要 2400 ÷ 2 = 1200 Baud。调制解调器(modem)的名字就来自“调制 + 解调”:发送时把数字信号调制成适合电话线的模拟信号,接收时再解调回来。
- A. ASK
- B. PSK
- C. FSK
- D. DPSK
展开解析
考点2.3 调制
CFSK(频移键控、调频)用两个不同频率的载波分别表示 0 和 1。
- A 错原卷印作 ASP,应指 ASK(调幅):只改变一个载波的振幅,用一个频率。
- B 错PSK(调相):一个载波,改变相位。
- C 对FSK。
- D 错DPSK(差分调相):也只用一个载波,用相对相位变化表示数据。
ASK 改幅度、FSK 改频率、PSK 改相位;只有 FSK 需要两个频率。
模拟数据 → 数字信号:PCM
把声音这样的模拟数据变成数字信号用脉冲编码调制 PCM,分三步:采样(每隔一段时间取一个值)、量化(把取值归到有限个等级上,这一步会引入“量化误差”)、编码(把等级写成二进制)。
采样定理(奈奎斯特采样定理):采样频率至少是信号最高频率的 2 倍,才能无失真地恢复原信号。
跟我算
采样频率 ≥ 2 × 4 kHz = 8000 次/秒;128 级 = 27,每个样值 7 bit;数据率 = 8000 × 7 = 56 kb/s。若量化为 256 级(8 bit),就是电话网标准的 64 kb/s。
拓展 CD 音质:人耳能听到约 20 kHz,采样 44.1 kHz(略大于 40 kHz),每个样值 16 bit,双声道:44100 × 16 × 2 ≈ 1.41 Mb/s。
模拟数据 → 模拟信号:例如把话音信号调制到不同频段上,用频分复用在一条线路上传多路(第 3 篇 3.4)。
2013-34、2021-34 给波形反推比特;2015-34 给比特和两种波形,判断是哪种编码(先看码元中间有没有跳变);2024-34 问哪种调制要两个频率。可能的新考法:哪种编码能自同步(曼彻斯特、差分曼彻斯特、RZ);曼彻斯特编码的码元速率是数据率的几倍(2 倍);QAM-N 每个码元几比特(log2N);采样频率至少多少。
- 曼彻斯特“前高后低 = 1”是 408 真题的约定;教材里也有相反的写法,题目给了约定就照题目。
- 差分曼彻斯特的数据只看码元开头,中间那次跳变永远存在,只当时钟。
- 4 种相位 × 4 种振幅是 16 种状态(乘法),不是 8 种。
- 采样频率是信号最高频率的 2 倍,不是带宽的 2 倍(话音 300 ~ 3400 Hz 时一般仍按 4 kHz × 2 = 8 kHz 采样)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 高电平
- B. 无信号
- C. 与第 3 个码元的前半周期相同
- D. 低电平
展开解析
D第 4 位是 0,按约定 0 为“前低后高”,前半周期是低电平。
- A 错高电平是“1”的前半周期;第 4 位是 0,按“前低后高 = 0”,前半周期是低电平。
- B 错曼彻斯特编码每个码元都有高、低两半,不会出现“无信号”的时段。
- C 错第 3 个码元是 1,前半周期是高电平;第 4 个码元是 0,前半周期是低电平,两者不同。
- D 对对:0 是前低后高。
变化点:由波形读比特,反过来由比特画波形。
- A. 1
- B. 0
- C. 由中间跳变方向决定
- D. 无法确定
展开解析
A差分曼彻斯特:每个码元中间都跳变(只作同步);码元开始处有跳变表示 0,没有跳变表示 1。
- A 对对:开始处无跳变表示 1。
- B 错开始处有跳变才表示 0,题目说的是没有跳变。
- C 错差分曼彻斯特码元中间的跳变只作同步时钟,方向不代表数据;按中间跳变方向读数据的是曼彻斯特编码。
- D 错规则是确定的:开始处无跳变 = 1、有跳变 = 0,不需要别的信息就能判断。
变化点:2021-34 由波形读位串,这里直接问规则。
- A. ASK
- B. PSK
- C. FSK
- D. 曼彻斯特编码
展开解析
BASK 调幅、FSK 调频(需要两个频率)、PSK 调相;曼彻斯特编码是基带编码,不是调制。
- A 错ASK(调幅)用载波的不同振幅表示数据,频率和相位都不变。
- B 对对:PSK 调相。
- C 错FSK(调频)用两个不同频率的载波表示 0 和 1,不改相位。
- D 错曼彻斯特编码是基带编码,不用载波,根本不是调制。
变化点:由“两个频率”(FSK)换成“不同相位”(PSK)。
- A. 5 MBaud
- B. 10 MBaud
- C. 20 MBaud
- D. 40 MBaud
展开解析
C曼彻斯特编码每个比特中间都跳变,一个比特对应两个电平段,码元速率是数据率的 2 倍。
- A 错5MBaud = 10M ÷ 2:方向反了,曼彻斯特一个比特占两个码元,码元速率是数据率的 2 倍。
- B 错10MBaud 把码元速率当成了数据率;曼彻斯特每位中间跳变,一位分成两个码元。
- C 对对:2 × 10M = 20MBaud。
- D 错40MBaud = 10M × 4:多乘了一个 2;一个比特只分前后两半。
考点:2.3 节“五种编码”。
- A. 64 kb/s
- B. 128 kb/s
- C. 256 kb/s
- D. 16 kb/s
展开解析
B采样频率 ≥ 2 × 8 kHz = 16000 次/秒;256 级 = 8 bit;16000 × 8 = 128 kb/s。
- A 错64kb/s = 8000 × 8:采样频率只取了 8kHz(等于最高频率);按采样定理至少要 2 × 8k = 16 000 次/秒。
- B 对对:16 000 × 8 = 128kb/s。
- C 错256kb/s 是正确值的 2 倍:采样频率多乘了 2(32 000 次/秒),或每个样值按 16 位算;256 级只要 8 位。
- D 错16kb/s = 16 000 × 1:每个样值只按 1 位算了;256 级要 log₂256 = 8 位。
考点:2.3 节“模拟数据 → 数字信号:PCM”。
- A. NRZ
- B. 曼彻斯特编码
- C. 差分曼彻斯特编码
- D. 归零编码 RZ
展开解析
ANRZ 遇到长串 0 或 1 时电平不变,接收方无法据此校准时钟;其余三种每个码元内都有跳变,能自同步。
- A 对对:NRZ 遇到长串 0 或 1 时电平不变,没有跳变可用来校准时钟。
- B 错曼彻斯特编码每个码元中间都有跳变,接收方可以从中提取时钟,能自同步。
- C 错差分曼彻斯特每个码元中间也都跳变,同样能自同步。
- D 错归零编码每个码元中间都要回到零电平,有跳变可提取时钟。
考点:2.3 节编码对比表。
2.4传输介质
传输介质是发送器和接收器之间的物理通路。严格说它不属于物理层(在物理层之下,被叫作“第 0 层”),但物理层要规定怎样和它打交道。分两大类:
| 介质 | 结构与特点 | 用在哪里 |
|---|---|---|
| 导向传输介质(信号沿固体介质传播) | ||
| 双绞线 | 两根绝缘铜线绞合在一起;分屏蔽 STP(外加金属屏蔽层,抗干扰好、贵)和非屏蔽 UTP。便宜,距离一般不超过 100m | 局域网最常用:10BASE-T、100BASE-T 中的 T 就是双绞线(2019-34) |
| 同轴电缆 | 内导体、绝缘层、网状外导体屏蔽层;抗干扰比双绞线好。50Ω 基带同轴电缆传数字信号,75Ω 宽带同轴电缆传模拟信号 | 早期以太网(10BASE5 粗缆、10BASE2 细缆)、有线电视 |
| 光纤 | 利用光的全反射传光脉冲;带宽极大、损耗小、抗电磁干扰、保密性好、重量轻 | 主干网、远距离 |
| 非导向传输介质(自由空间) | ||
| 无线电波 | 向所有方向传播,穿透力强,可远距离传输;低频、中频沿地面传播,高频(短波)靠电离层反射 | 无线局域网、手机、广播 |
| 微波 | 频率高、带宽大,直线传播;地面微波接力要每隔几十千米设中继站 | — |
| 卫星通信 | 用同步卫星转发微波;3 颗相隔 120° 的同步卫星就能覆盖几乎全球。优点:容量大、距离远、覆盖广、天然广播;缺点:传播时延大(单向约 250~270ms)、保密性差、受天气影响、成本高 | 2015-35、2025-47 的卫星链路 |
| 红外线、激光 | 直线传播,要求对准 | — |
光纤为什么能导光:(结构:纤芯外包一层包层,包层外径约 125μm;多模光纤纤芯约 50μm 或 62.5μm,单模光纤纤芯只有 8~10μm,接近光的波长。发送端用发光二极管或半导体激光器把电脉冲变成光脉冲,接收端用光电二极管把光脉冲还原成电脉冲。)纤芯的折射率比外面包层高,光线以足够大的入射角射到纤芯与包层的界面上时会发生全反射,被关在纤芯里一路向前。光纤传的是光脉冲:有光表示 1,无光表示 0。光纤的带宽可达几十 THz,远超铜线;但光纤本身脆,接续和分路要专门设备。
跟我算:卫星的时延为什么大。同步卫星离地面约 36000 km,信号上去再下来走 72000 km,以光速 3 × 105 km/s 计,单向就要 72000 ÷ 300000 = 0.24 s(240 ms)。这和信道带宽多大无关——所以卫星链路的“时延带宽积”很大,停等协议在上面极其低效(3.3 节)。
双绞线为什么要“绞”:两根线紧挨着平行走,外界的电磁干扰会在两根线上感应出电流;绞合以后,相邻两个“绞距”里感应的干扰方向相反、互相抵消,同时也减少了对相邻线对的干扰(串扰)。绞得越密,抗干扰越好(5 类、6 类线绞距越来越小)。
- A. 双绞线
- B. 单模光纤
- C. 多模光纤
- D. 同轴电缆
展开解析
考点2.4 传输介质
A以太网标准名中的“T”表示 Twisted pair(双绞线)。100BaseT 快速以太网使用双绞线。
- A 对双绞线。
- B、C 错光纤对应 100Base-FX 等带“F”的标准。
- D 错同轴电缆用于早期的 10Base5、10Base2。
“速率 Base 介质”:T 双绞线、F 光纤、5 和 2 是同轴电缆的长度(约 500m、200m)。
三种导向介质对比
| 双绞线 | 同轴电缆 | 光纤 | |
|---|---|---|---|
| 传的信号 | 电信号 | 电信号 | 光脉冲 |
| 抗电磁干扰 | 一般(STP 较好) | 较好(有屏蔽层) | 完全不受电磁干扰 |
| 距离 | 短(以太网约 100m) | 较长(10BASE5 500m) | 远(单模可达几十千米) |
| 带宽 | 较低(随线缆类别提高) | 中等 | 极高 |
| 成本 | 低 | 中 | 高(连接、分路要专门设备) |
| 能否全双工 | 能:收、发用不同的线对 | 早期总线式以太网所有站共用一根导体,只能半双工 | 能:一般成对使用,一根发、一根收 |
双绞线的衰减随信号频率升高而增大;传模拟信号时用放大器补偿,传数字信号时用中继器整形再生(2.5 节)。
以太网标准的名字怎么读
命名规则:“速率 BASE 介质”。前面的数字是速率(Mb/s);BASE 表示基带传输;后缀表示介质——T 是双绞线,F / S / L 是光纤,C 是铜缆,后缀是数字时是同轴电缆,数字约等于最长段长的百米数。
| 名字 | 速率 | 介质与段长 |
|---|---|---|
| 10BASE5 | 10 Mb/s | 粗同轴电缆,每段最长 500m |
| 10BASE2 | 10 Mb/s | 细同轴电缆,每段最长 185m(约 200m) |
| 10BASE-T | 10 Mb/s | 非屏蔽双绞线,最长 100m(2019-34 的 100BaseT 同理) |
| 10BASE-F | 10 Mb/s | 光纤 |
| 100BASE-TX | 100 Mb/s | 2 对 5 类 UTP 或 STP,100m |
| 100BASE-T4 | 100 Mb/s | 4 对 3 类 UTP,100m |
| 100BASE-FX | 100 Mb/s | 2 根光纤(一收一发) |
| 1000BASE-T | 1000 Mb/s | 4 对 5 类 UTP,100m |
| 1000BASE-SX / LX | 1000 Mb/s | 光纤:S = 短波长激光(多模),L = 长波长激光(单模或多模) |
| 1000BASE-CX | 1000 Mb/s | 屏蔽铜缆,最长约 25m(机房内设备互连) |
高速以太网(100 Mb/s 以上)的细节在第 3 篇 3.7 节。
2019-34:以太网名称里的 T 是双绞线,100BaseT 用双绞线;带 F 的(如 100Base-FX)用光纤,10Base5、10Base2 用粗、细同轴电缆。可能的新考法:屏蔽双绞线 STP 与非屏蔽 UTP;单模与多模光纤(单模纤芯只有 8 ~ 10μm,适合长距离;多模纤芯粗,用于短距离);卫星通信传播时延大。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 同轴电缆
- B. 多模光纤
- C. 双绞线
- D. 单模光纤
展开解析
CT = Twisted pair,双绞线;10BASE5、10BASE2 用同轴电缆;100BASE-FX 用光纤。
- A 错同轴电缆对应 10BASE5(粗缆)、10BASE2(细缆),名称末尾是数字,不是 T。
- B 错光纤的名称带 F(如 10BASE-F、100BASE-FX),T 只表示双绞线。
- C 对对:T = Twisted pair,双绞线。
- D 错单模光纤同样属于光纤,名称里用 F 或 LX 等表示,不用 T。
变化点:速率从 100 改为 10,介质不变。
- A. 双绞线
- B. 同轴电缆
- C. 多模光纤
- D. 单模光纤
展开解析
D单模光纤纤芯直径与光波长同量级,光线沿轴向传播,衰减小,适合远距离。
- A 错双绞线是两根绞合的铜线,没有纤芯,衰减大,一般不超过 100m。
- B 错同轴电缆也是铜导线,没有纤芯,传输距离远不如光纤。
- C 错多模光纤纤芯较粗(约 50μm 或 62.5μm),多条光线反射造成脉冲展宽,只适合近距离。
- D 对对:单模光纤纤芯只有 8 ~ 10μm,衰减小,适合远距离。
变化点:从“以太网用哪种介质”换到“各介质的特点”。
- A. 多模光纤纤芯更细
- B. 单模光纤更适合远距离传输
- C. 多模光纤中光线只沿轴线传播
- D. 单模光纤一般用发光二极管作光源
展开解析
B单模光纤纤芯细,光几乎沿直线传播,没有多条路径造成的脉冲展宽,适合远距离,需用半导体激光器;多模光纤纤芯粗,多条光线以不同角度反射,适合近距离。
- A 错说反了:多模光纤纤芯约 50 ~ 62.5μm,单模只有 8 ~ 10μm,单模更细。
- B 对对:单模光纤没有多路径造成的脉冲展宽,适合远距离。
- C 错多模光纤中多条光线以不同角度在纤芯里反射前进;几乎只沿轴线传播的是单模光纤。
- D 错单模光纤要用方向性好的半导体激光器作光源;发光二极管一般配多模光纤。
考点:2.4 节“多模与单模光纤”。
2.5物理层接口特性与物理层设备
物理层接口的四个特性
物理层的协议也叫物理层规程,它规定的是“接口”——设备和传输介质之间的插头插座、电压、引脚、时序。这些特性最早是为 DTE(数据终端设备,如计算机)和 DCE(数据电路端接设备,如调制解调器)之间的接口制定的:DTE 产生和接收数据,DCE 负责把数据变成能在线路上传的信号。用一根网线的 RJ-45 接口来理解四个特性:
| 特性 | 规定什么 | 以 RJ-45 网口为例 |
|---|---|---|
| 机械特性 | 接口的形状、尺寸、引脚数目和排列、固定和锁定装置 | 水晶头宽约 11.7 mm,8 个引脚,有卡扣(2018-34 A“接口形状”) |
| 电气特性 | 接口电缆各条线上的电压范围、传输速率、距离限制 | 差分信号的电压幅度、最大传输距离 100 m(2018-34 D“信号电平”) |
| 功能特性 | 某条线上出现某一电平的含义,各引脚的功能 | 10/100BASE-T:1、2 脚发送,3、6 脚接收,其余备用(2018-34 B“引脚功能”) |
| 过程特性(规程特性) | 实现各种功能的事件出现顺序 | 连上网线后先自动协商速率和双工方式,再开始收发(2012-34) |
物理地址(MAC 地址)不属于物理层,它是数据链路层的概念(2018-34)。
- A. 机械特性
- B. 功能特性
- C. 过程特性
- D. 电气特性
展开解析
C规定“完成每种功能的事件发生顺序”的是过程特性(规程特性)。
- A 错机械特性:接口形状、尺寸、引脚数。
- B 错功能特性:各条线上电平的含义、引脚的功能。
- C 对过程特性。
- D 错电气特性:电压范围、速率、距离。
机械 = 长什么样,电气 = 电压多少,功能 = 每根线干什么,过程 = 先后顺序。
- A. 接口形状
- B. 引脚功能
- C. 物理地址
- D. 信号电平
展开解析
C物理地址(MAC 地址)是数据链路层的概念,物理层接口规范不定义它。
- A接口形状属于机械特性(插头的形状、尺寸、引脚数目和排列),是物理层接口规范的内容,不选。
- B引脚功能属于功能特性(某条线上出现的某一电平表示什么意义),是物理层接口规范的内容,不选。
- C物理地址不属于物理层。
- D信号电平属于电气特性(电压范围、阻抗匹配、传输速率和距离限制),是物理层接口规范的内容,不选。
“物理地址”名字里有“物理”,却属于数据链路层。
中继器和集线器
- 中继器:把衰减、失真的信号整形、放大后再转发,用来延长网络距离。它只认识比特,两端的网段必须使用同一种协议、同一速率;它不能隔离冲突,连起来的仍是同一个冲突域。
- 集线器(Hub):实质上是一个多端口的中继器。从一个端口收到的比特,放大后从所有其他端口发出去。所以用集线器连接的所有主机在同一个冲突域里,同一时刻只能有一台发送(半双工),大家平分带宽。
- 中继器与放大器的区别:放大器放大的是模拟信号,把衰减的信号连同噪声一起放大;中继器处理的是数字信号,把失真的波形重新整形成标准的 0、1 再发出,噪声不会累积。
| 放大器 | 中继器 | 集线器 | |
|---|---|---|---|
| 处理的信号 | 模拟信号 | 数字信号 | 数字信号 |
| 做什么 | 放大(噪声一起放大,会累积) | 整形再生(不累积噪声) | 多端口中继:一个端口进、所有端口出 |
| 端口数 | 2 | 2 | 多个 |
| 隔离冲突域 | 都不能;都工作在物理层,不认识帧、不看地址,两侧必须同一速率、同一协议 | ||
拓展 中继器、集线器“再生”信号也有代价:它们会带来时延,连得越多,冲突检测越难保证。所以 10Mbps 以太网有 5-4-3 规则:两台主机之间最多 5 个网段、4 个中继器(集线器),其中只有 3 个网段可以接主机。考题一般直接给出设备时延,让你按 3.5 节的方法算最远距离(2016-36、2022-47)。
冲突域、广播域和交换机、路由器的比较在第 3 篇 3.9 节集中讲。
2.4、2.5 的 3 道题都是概念:2019-34(100BaseT 用双绞线)、2012-34(事件顺序 = 过程特性)、2018-34(物理地址不属于物理层)。可能的新考法:单模与多模光纤的区别;双绞线为什么要绞;中继器能否连接不同速率的网段(不能);集线器连接的主机有几个冲突域(1 个);放大器与中继器的区别。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 机械特性
- B. 电气特性
- C. 功能特性
- D. 过程特性
展开解析
A机械特性:形状、尺寸、引脚数目和排列;电气特性:电压范围;功能特性:各引脚的含义;过程特性:事件顺序。
- A 对对:机械特性管形状、尺寸、引脚数目和排列。
- B 错电气特性规定电压范围、阻抗匹配、传输速率和距离,不管接口的形状尺寸。
- C 错功能特性规定各条线上电平的含义(引脚功能),不管引脚的数目和排列。
- D 错过程特性规定各种事件出现的顺序,不管接口的物理外形。
变化点:四个特性各对应一句话,换一个问法。
- A. 2
- B. 1
- C. 6
- D. 7
展开解析
B集线器是多端口中继器,把所有端口连成同一个冲突域。
- A 错集线器不分隔冲突域,6 台主机全在同一个冲突域里,不会分成 2 个。
- B 对对:集线器把所有端口连成同一个冲突域。
- C 错6 是用交换机连接时的冲突域个数(每个端口一个);集线器把所有端口连成一个冲突域。
- D 错7 = 6 + 1,好像把集线器本身也算成了一个冲突域;冲突域只有 1 个,包括全部 6 台主机。
变化点:物理层设备不隔离冲突域。
I. 中继器 II. 集线器 III. 交换机
- A. 仅 I
- B. 仅 II、III
- C. 仅 I、II
- D. I、II、III
展开解析
C中继器、集线器是物理层设备,只放大转发比特;交换机是链路层设备,每个端口是一个冲突域。
- A 错A 漏了 II:集线器就是多端口中继器,同样在物理层、不隔离冲突域。
- B 错B 选了 III 又漏了 I:交换机工作在链路层,每个端口一个冲突域;中继器则正是物理层设备。
- C 对对:中继器、集线器。
- D 错D 多选了 III:交换机是链路层设备,能隔离冲突域。
变化点:从“接口规范”延伸到物理层设备。
- A. 放大器把衰减的数字信号整形后再转发
- B. 中继器会把噪声连同信号一起放大并逐级累积
- C. 中继器能够隔离冲突域
- D. 中继器对数字信号整形再生,噪声不会逐级累积
展开解析
D放大器处理模拟信号,连噪声一起放大;中继器把失真的数字波形重新整形成标准的 0、1。两者都工作在物理层,不隔离冲突域。
- A 错整形再生数字信号的是中继器;放大器处理模拟信号,把噪声连同信号一起放大。
- B 错这说的是放大器:中继器把失真的数字波形重新整形成标准的 0、1,噪声不会逐级累积。
- C 错中继器工作在物理层,它连起来的网段仍在同一个冲突域,不能隔离。
- D 对对:中继器整形再生,噪声不逐级累积。
考点:2.5 节“中继器和集线器”。
- 某信道波特率 1200,采用 8 相位调制,比特率是多少?
答案
1200 × log28 = 3600bit/s。 - 带宽 6kHz 的无噪声信道,采用 4 种电平,最大数据率是多少?
答案
2 × 6k × 2 = 24kbps。 - 20 dB 对应的信噪比是多少?40 dB 呢?
答案
1020÷10 = 100;104 = 10000。 - 带宽 3kHz,信噪比 30dB,最大数据率约为多少?
答案
3k × log21001 ≈ 30kbps。 - 为什么提高码元的状态数 V 不能无限提高速率?
答案
V 越大,相邻状态越接近,越容易被噪声弄混;有噪声时速率受香农定理限制,与 V 无关。 - 曼彻斯特编码为什么能自同步?代价是什么?
答案
每个码元中间都有跳变,接收方可以从跳变中提取时钟;代价是每个码元有两个电平,所需带宽是 NRZ 的 2 倍。 - 一段曼彻斯特波形依次是 高低、低高、低高、高低,对应的比特是什么(前高后低 = 1)?
答案
1001。 - QAM-64 的每个码元携带几比特?波特率 1000 时比特率是多少?
答案
log264 = 6 bit;6000 b/s。 - 最高频率 8 kHz 的信号用 PCM 数字化、每个样值 8 bit,数据率至少多少?
答案
采样 16000 次/秒 × 8 bit = 128 kb/s。 - 单模光纤和多模光纤哪个适合远距离?为什么?
答案
单模:纤芯细,光几乎直线传播,没有多条路径造成的脉冲展宽,衰减小。 - 描述“某条引脚上出现高电平表示什么”的是接口的哪个特性?
答案
功能特性。 - 用集线器连接的 5 台主机,有几个冲突域?
答案
1 个。集线器把所有端口连成同一个冲突域。 - QAM-16 每个码元携带几比特?若码元速率为 2400 波特,数据率是多少?
答案
QAM-16 有 16 种码元状态,每码元 log216 = 4 bit;数据率 2400 × 4 = 9600 b/s。
一页总结与必会题型
| 主题 | 核心结论 | 必背数字 | 真题 |
|---|---|---|---|
| 通信基础 | 比特率 = 波特率 × log2V;单工 1 条信道,半双工 / 全双工 2 条;基带传输编码,频带传输调制 | — | 2011-34 |
| 信道极限 | 无噪声:2W log2V;有噪声:W log2(1 + S/N);都给时取小;传播速度不影响数据率 | 30 dB = 1000;log21001 ≈ 10 | 2009-34、2014-35、2016-34、2017-34、2022-34、2023-34、2026-34 |
| 编码调制 | 曼彻斯特前高后低 = 1;差分曼彻斯特看开头;ASK / FSK / PSK / QAM;PCM 采样 ≥ 2 倍最高频率 | 曼彻斯特 2 倍带宽;4B/5B 效率 80% | 2013-34、2015-34、2021-34、2024-34 |
| 传输介质 | 双绞线(T)、同轴、光纤(单模远、多模近)、无线 | 双绞线 100 m | 2019-34 |
| 接口与设备 | 机械、电气、功能、过程四特性;中继器 / 集线器工作在物理层,不隔离冲突域 | RJ-45 8 针 | 2012-34、2018-34 |
2.✎本篇真题闯关(15 题)
本篇各小节挂的真题全部在这里,按小节排好。可以展开后一道道做,也可以用弹窗模式连续做。做题记录(对/错)只保存在你这台电脑的浏览器里,小节标题下的题号会随之变绿或变红。
数据链路层:一段链路上怎样可靠地传一帧、大家怎样共用一根线
物理层只管把比特送过去,不管对错、不管谁先发。数据链路层在它上面做三件事:把比特流切成一个个帧;发现并处理差错;控制发送速度、保证可靠传输(停等、GBN、SR)。对于多台主机共用一条信道的广播信道,还要解决“谁来发”的问题——介质访问控制(CSMA/CD、CSMA/CA)。这一篇是计网考题最多的一篇:18 年 37 道选择题、5 道综合题。
本篇地图:先看全貌,再逐节攻克
数据链路层的内容可以挂在两条线上。第一条线:一段链路上怎么把帧可靠地送过去——组帧(3.1)、检错纠错(3.2)、确认重传和滑动窗口(3.3)。第二条线:很多主机共用一条信道时谁来发——信道划分(3.4)、随机访问(3.5)、无线局域网(3.6),以及在这条线上发展出来的以太网、VLAN 和交换机(3.7~3.9)。
| 小节 | 选择题 | 综合题 | 一句话说清考什么 |
|---|---|---|---|
| 3.1 功能与组帧 | 1 | — | 零比特填充 |
| 3.2 差错控制 | 2 | — | CRC 余数;码距与检纠错能力 |
| 3.3 可靠传输 | 10 | 2017-47、2025-47 | 窗口上限;重传哪些帧;信道利用率与序号位数 |
| 3.4 信道划分 | 2 | — | 哪些会冲突;CDMA 内积 |
| 3.5 随机访问 | 6 | 2010-47 | 最短帧长与距离;指数退避最长等待 |
| 3.6 无线局域网 | 6 | — | RTS/CTS、IFS、NAV 计算;802.11 地址 |
| 3.7 以太网与 PPP | 1 | — | 以太网提供的服务;帧长范围 |
| 3.8 VLAN | 2 | — | 帧能到达哪些主机;ARP 表里有谁 |
| 3.9 设备与域 | 7 | 2019-47、2022-47 | 交换机转发端口;冲突域 / 广播域个数;直通时延 |
- 3.1 → 3.2(约 2.5 小时):组帧和 CRC 是手算题,海明码和计组的校验码一节相通。
- 3.3(约 3 小时):先把停等的四种情况、GBN 与 SR 的区别画清楚,再练利用率和序号位数的计算。
- 3.4 → 3.5 → 3.6(约 3.5 小时):先分清三大类介质访问控制,再分别吃透 CSMA/CD(以太网)和 CSMA/CA(无线)。
- 3.7 → 3.8 → 3.9(约 2.5 小时):以太网帧、VLAN、交换机自学习,最后用数冲突域 / 广播域收尾。
3.1数据链路层的功能与组帧
链路、数据链路与帧
问题:物理层送过去的只是一串 0 和 1。接收方怎么知道哪些比特是一个“包”?这一串里有没有错?对方忙不过来时怎么办?这些都是数据链路层的事。
物理层是铁轨上滚动的车轮,只管“动起来”。数据链路层把货物(IP 数据报)装进一节节车厢(帧),车厢前后各有车钩(首部、尾部),车厢里还附一张“清点单”(检验码),到站后对一对货有没有损坏。一段铁轨只连两个相邻车站,车厢到站后要拆开、换车厢再走下一段——每一段链路都要重新封装成帧。哪里不像:火车车厢的长度是固定的,帧的长度是可变的,所以要专门“标出”帧从哪开始、到哪结束。
- 链路:从一个结点到相邻结点的一段物理线路,中间没有任何其他交换结点。
- 数据链路:链路 + 实现通信协议的硬件和软件(网卡里的控制电路和驱动程序)。
- 帧:数据链路层的传送单位。发送方把网络层交下来的 IP 数据报加上首部和尾部封装成帧;接收方检查无误后取出 IP 数据报交给网络层,有错就丢弃。
数据链路层向网络层提供三种服务:无确认的无连接服务(以太网:不编号、不确认,错帧直接丢弃,靠上层重传;适合误码率低的有线信道);有确认的无连接服务(无线局域网:每帧都要确认,因为无线信道误码率高);有确认的面向连接服务(先建立数据链路,帧编号、确认,适合可靠性要求高的场合)。
它的功能:组帧、差错控制、流量控制与可靠传输(相邻结点之间)、链路管理(面向连接时建立、维持、释放链路),以及广播信道上的介质访问控制。链路层的信道有两种:点对点信道(一对一,代表协议 PPP)和广播信道(一对多,代表协议 CSMA/CD 以太网、CSMA/CA 无线局域网)。
帧为什么有最大长度:帧越长,出错的概率越大(一个比特错整帧作废),占用信道的时间也越长、别人等得越久;所以每种链路层都规定了帧的数据部分最多多少字节,叫最大传送单元 MTU(以太网 1500 B)。网络层的 IP 数据报超过下一段链路的 MTU,就要在网络层分片(4.2 节)。链路层与网络层的分工:链路层只负责“这一段”,网络层负责“一路到底”。
组帧:接收方怎么知道一帧从哪开始、到哪结束
帧的数据部分可能出现任意比特组合。如果其中恰好出现和“帧开始 / 结束标志”一样的比特,接收方就会把帧切错。透明传输指不管数据部分是什么比特组合,都能原样、正确地通过数据链路层——“透明”是说这层对上层来说就像不存在一样。常用的四种组帧方法,各用一个例子说明:
① 字符计数法:帧首部用一个计数字段写明本帧共有多少字节(含计数字段本身)。
② 字节填充法(字符填充):用特定的控制字符 SOH、EOT 作帧的开始和结束;数据中若出现控制字符,在它前面插入一个转义字符 ESC;数据里本来就有的 ESC 前面也要再插一个 ESC。接收方删除每个转义字符,保留紧跟其后的那个字节。
③ 零比特填充法:用 01111110 作帧的开始和结束标志(HDLC、同步线路上的 PPP)。发送方在数据中每遇到连续 5 个 1,就在后面插入一个 0;接收方遇到连续 5 个 1 后面的 0 就删掉。这样数据中永远不会出现 6 个连续的 1,不会被误认为标志。
从左往右数连续的 1,数到 5 个就插一个 0,计数清零后接着数(插入的 0 不参与计数,它后面的 1 重新从 1 数起)。
原数据:0110111111111100
填充后:011011111011111000
原数据第 5 ~ 14 位是 10 个连续的 1:数到第 5 个插一个 0,再数到第 10 个又插一个 0。共插 2 个 0,填充后 18 位。接收方的规则对称:看到 11111 后面跟着 0,就删掉这个 0。
反过来问“接收方收到 0111110101111100,原数据是什么”:删掉每个 11111 后面的 0,得 01111110111110。
- A. 01111100 00111110 10
- B. 01111100 01111101 01111110
- C. 01111100 01111101 0
- D. 01111100 01111110 01111101
展开解析
AHDLC 用 01111110 作帧定界符,数据中每出现连续 5 个 1,就在后面插入一个 0,不管下一位是什么。
- 第一个字节 01111100:5 个 1 后插 0 → 011111000。
- 第二个字节 01111110:5 个 1 后插 0 → 011111010。
- 拼起来:011111000 011111010,按 8 位一组写就是 01111100 00111110 10(18 位,比原来多 2 位)。
- A 对接收方删掉每组 5 个 1 后面的 0,正好还原 01111100 01111110。
- B 错前 16 位与 C 相同(第一组 5 个 1 后面没插 0),末尾又接了一个标志 01111110,还原不出原数据。
- C 错只在第二组后插了 0。第一组 5 个 1 后面原本就是 0,但规则照样要插;漏插后接收方会把原有的那个 0 当成填充位删掉,得到 011111001111110,少了一位。
- D 错前 16 位就是原数据,没做填充;其中 01111110 和帧标志一样,接收方会误以为帧在这里结束。
数连续的 1:够 5 个就插 0,插完从头数。填充后的串中不会出现 6 个连续的 1。
④ 违规编码法:用物理层编码中不会出现的信号表示帧的边界。例如曼彻斯特编码每个码元中间都有一次跳变,那么“整个码元保持高电平”或“整个码元保持低电平”就是违规的,正好用作帧的起止。
| 方法 | 帧界 | 透明传输靠什么 | 优缺点 / 谁在用 |
|---|---|---|---|
| 字符计数法 | 首部的计数字段 | 不需要(数据不会被误认为帧界) | 计数字段一错全错,很少单独使用 |
| 字节填充法 | 控制字符(SOH / EOT,PPP 为 7E) | 数据中的控制字符前插 ESC | 面向字节;异步 PPP |
| 零比特填充法 | 01111110 | 每 5 个连续 1 后插 0 | 面向比特,开销小、硬件易实现;HDLC、同步 PPP |
| 违规编码法 | 编码规则里不可能出现的信号 | 编码规则本身保证 | 无需填充;只适用于冗余编码 |
实际中常把字符计数法与其他方法结合使用。以太网是另一种思路:帧前有 8 字节前导码让接收方同步,帧与帧之间至少空 96 比特时间,靠“信道上没有信号了”判断帧结束,所以以太网帧没有帧结束定界符(3.7 节)。
2013-37 考零比特填充:数连续的 1,第 5 个后插 0。可能的变化:给出填充后的比特串求原数据(反向删 0);问“透明传输”的含义;问 PPP 异步、同步线路各用哪种填充;问字符计数法的缺点。判别要点:插的 0 是在“第 5 个 1 之后”,不是“遇到 6 个 1 才插”。
- 零比特填充是对帧的数据部分做的,首尾的标志 01111110 本身不填充。
- 插入的 0 不参与计数:11111 0 1111 1 → 新插 0 后的 1 重新从 1 数起。
- 数据中原本就有的 0 会让计数清零,不需要插。
- “透明传输”不是“看得见数据”,而是“任何数据都能原样通过”。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 01111110 01111100
- B. 011111100 011111000
- C. 011111010 01111100
- D. 011111010 011111000
展开解析
D每遇到连续 5 个 1 就插入 0:01111110 → 011111010;01111100 → 011111000。合起来 011111010 011111000(18 位)。
- A 错没有填充:第一个字节 01111110 与帧定界标志完全相同,接收方会误以为帧在这里结束。
- B 错第一个字节的 0 插晚了:011111100 在第 6 个 1 之后才插 0,里面仍有 6 个连续的 1;规则是数到 5 个 1 就插。
- C 错第一个字节填对了,但第二个字节 01111100 里也有连续 5 个 1,后面原本是 0 也要再插一个 0。
- D 对对:两个字节各插一个 0,共 18 位。
变化点:第一个字节本身就是标志模式 01111110,填充后它不再有 6 个连续的 1。
- A. 7E 7E
- B. 7D 5E
- C. 7D 7E
- D. 7D 5D
展开解析
B7E 是标志字节,数据中出现时换成 7D 5E;数据中的 7D 换成 7D 5D。
- A 错7E 7E:PPP 没有“重复一遍”的规则,接收方见到 7E 仍会当成帧的边界。
- B 对对:7E 换成 7D 5E(7E 异或 20H)。
- C 错7D 7E:转义后第二个字节要异或 20H 变成 5E;原样留下 7E,接收方仍会把它当成帧界。
- D 错7D 5D 是数据中出现转义字节 7D 本身时的替换,不是 7E 的。
变化点:零比特填充(面向比特)换成字节填充(面向字节)。
- A. 0111110101111100
- B. 01111110111110
- C. 011111101111100
- D. 0111111011111
展开解析
B接收方每遇到连续 5 个 1,就删掉其后的 0:0111110101111100 → 01111110111110。
- A 错没有删除填充位,把收到的比特串原样当成了原数据。
- B 对对:删掉两处“5 个 1 后面的 0”。
- C 错只删了第一处填充位,第二组 5 个 1 后面的 0 没删,比原数据多 1 位。
- D 错多删了末尾的 0:只该删紧跟在 5 个 1 后面的那一个 0,最后的 0 是原数据。
考点:3.1 节“零比特填充:跟我做一遍”。
- A. 不能传送二进制数据
- B. 帧长受到严格限制
- C. 计数字段一旦出错,后续帧的边界都无法确定
- D. 需要在数据中插入转义字符
展开解析
C计数字段错了,接收方就按错误的长度切帧,后面全部错位,而且无法自行恢复。D 是字节填充法的做法。
- A 错字符计数法只靠首部的计数字段定界,数据内容是什么都可以,能传二进制数据。
- B 错帧长只受计数字段位数的限制,这不是它的主要问题;主要问题是计数一错就全部错位。
- C 对对:计数字段出错后,接收方按错误长度切帧,后面全部错位且无法恢复。
- D 错在数据中插入转义字符是字节填充法的做法,字符计数法不需要。
考点:3.1 节“组帧”中的字符计数法。
3.2差错控制:CRC 检错与海明码纠错
差错从哪来,怎么对付
信号在线路上受噪声干扰,比特会出错(0 变 1、1 变 0),这叫位错;整帧丢失、重复、失序叫帧错。传错的比特占总比特数的比例叫误码率 BER(有线信道一般 10−9 以下,无线信道可能到 10−5 甚至更高)。对付位错有两种思路:
- 检错编码:只发现“有错”,然后丢弃或要求重传。奇偶校验、CRC。
- 纠错编码(前向纠错 FEC):不但发现有错,还能指出哪一位错并改正,不用重传。海明码。代价是冗余位更多,适合重传代价很大的场合(卫星、深空通信)。
两种编码的共同思路是冗余:在数据后面附加一些按规则算出来的比特,接收方按同样的规则检查。帧错(丢失、重复、失序)则要靠 3.3 节的编号、确认和重传来解决。
奇偶校验:只能查出奇数个错
在数据后加一位校验位,使整个码字里 1 的个数为奇数(奇校验)或偶数(偶校验)。例:数据 1011001 有 4 个 1,偶校验码字是 10110010,奇校验码字是 10110011。
它只能发现奇数个比特出错:偶校验码字 10110010 若第 1、3 位同时出错,变成 00010010,1 的个数仍是偶数(2 个),接收方查不出来。也不能纠错——知道错了,不知道错在哪一位。漏检率约 50%(错奇数位和偶数位的情况大致各占一半)。
拓展 二维奇偶校验:把数据排成矩阵,每行、每列各加一个校验位。一位错时行、列校验各有一个出错,交叉点就是错位,能纠正 1 位错。
循环冗余校验 CRC(考计算)
模 2 加减就是异或:0 ⊕ 0 = 0,0 ⊕ 1 = 1,1 ⊕ 0 = 1,1 ⊕ 1 = 0,不进位、不借位,加和减一样。比特串和多项式一一对应:从左到右是从高次到 0 次的系数。1101 ↔ x3 + x2 + 1(x 的一次项系数是 0);10011 ↔ x4 + x + 1。多项式的最高次 r 叫它的阶,对应的比特串有 r + 1 位。
收发双方事先约定一个生成多项式 G(x),阶为 r。CRC 的想法是:在数据后面接上 r 位,使整个码字恰好能被 G(x) “模 2 整除”。
- 发送方:在数据后面补 r 个 0,用模 2 除法除以生成多项式(每一步看当前最高位:是 1 就商 1、异或 G;是 0 就商 0、不异或;然后落下一位),得到 r 位余数,这就是帧检验序列 FCS,把它接在数据后面一起发送。
- 接收方:把收到的整串直接除以生成多项式,余数全 0 就认为没出错,否则丢弃这一帧。
跟我算
G(x) 写成 1101,r = 3。数据后补 3 个 0:101001000。模 2 除以 1101(商依次为 110101):
101001000 ← 数据 101001 后面补 3 个 0 1101 ← 首位是 1:商 1,异或 1101 ──── 1110 ← 余 0111,去掉首位 0,再落下一位 0 1101 ← 首位 1:商 1,异或 ──── 0111 ← 余 0011 去掉首位,落下 1;首位 0:商 0,不异或 1110 ← 再落下一位 0 1101 ← 商 1,异或 ──── 0110 ← 余 0011 去掉首位,落下 0;首位 0:商 0 1100 ← 再落下一位 0 1101 ← 商 1,异或 ──── 001 ← 余数 = FCS(3 位)
FCS = 001,发送 101001001。接收方用 101001001 除以 1101,余数 000,判为无错。下面的小工具可以看到每一步。
跟我算
G = 10011,r = 4,被除数 110101100000(12 位)。只有“当前最高位是 1”时才异或,只需做三次:
- 前 5 位 11010 ⊕ 10011 = 01001;去掉首位 0,落下一位 1 → 10011。
- 10011 ⊕ 10011 = 00000;接下来落下的几位首位都是 0(商 0),直到凑出 10000。
- 10000 ⊕ 10011 = 00011;去掉首位、落下最后一位 0 → 0110,首位 0,结束。
余数 FCS = 0110,发送 110101100110。接收方把第 4 位翻转后的 110001100110 除以 10011,余数不为 0,能发现错误。验证时也可以只看结论:G(x) 至少有两项,就能检出所有单个比特错误。
- A. 101110000
- B. 101110100
- C. 101111000
- D. 101111100
展开解析
D接收方把收到的整串直接用模 2 除法除以 G = 10011,余数全 0 才认为没出错。
- D:101111100 的前 5 位 10111 ⊕ 10011 = 00100,得 001001100;再从第 3 位起 10011 ⊕ 10011 = 00000,余数 0000。
- 其余三项按同样方法算,余数都不为 0(见下)。
- 小技巧:四个选项只有第 6、7 位不同。算出 A 的余数 1100 后,B 比 A 多一个 x2,余数再异或 0100 得 1000;C 多一个 x3,异或 1000 得 0100;D 两者都多,1100 ⊕ 1100 = 0000。
- A 错101110000 余数 1100。
- B 错101110100 余数 1000。
- C 错101111000 余数 0100。
- D 对101111100 余数 0000。
发送方补 r 个 0 再除,余数作 FCS;接收方不补 0,整串直接除,看余数是否全 0。
- 最高位是 1:它决定了阶 r,也就是 FCS 的位数。
- 最低位(常数项)是 1:若 G(x) 没有常数项,比如 1110(x3 + x2 + x),算出的余数最低位永远是 0,等于白白浪费一位;更重要的是它会漏掉一些短的突发错误——例如连续 3 位出错 0000111000,恰好能被 1110 整除,接收方查不出来。含常数项的 r 阶多项式能检出所有长度 ≤ r 的突发错误(连续出错的一段),1101 就能检出上面这个错误。
实际使用的生成多项式(以太网用 CRC-32,PPP 用 CRC-CCITT)检错能力更强:在规定的帧长范围内,所有 1 位错、2 位错和长度 ≤ r 的突发错误都能检出;其中含 (x + 1) 因子的(CRC-16、CRC-CCITT)还能检出所有奇数个比特的错误。
拓展 常见的标准生成多项式:CRC-16 = x16 + x15 + x2 + 1;CRC-CCITT = x16 + x12 + x5 + 1(HDLC、PPP);CRC-32(以太网)是 32 阶、15 项的多项式。它们首尾都是 1。CRC-16、CRC-CCITT 各有 4 项(偶数项),能被 (x + 1) 整除,所以能检出所有奇数个比特的错误;CRC-32 有 15 项,不含 (x + 1) 因子,它靠更高的阶数保证检错能力。考试不要求背,知道“阶数 = FCS 位数”即可。
CRC 为什么查错能力强:把出错看成在发送的码字上“异或”了一个错误串 E。接收方算的是“(码字 ⊕ E) 除以 G 的余数”,码字本来能被 G 整除,所以余数就是“E 除以 G 的余数”——只要 E 不是 G 的倍数,余数就不为 0,错误就被发现。G 选得好,常见的错误(一位错、两位错、奇数个错、短的突发错误)都不是它的倍数。反过来,如果错误恰好是 G 的倍数,CRC 就会漏检,只是概率极小(r 位 CRC 约为 1/2r)。
CRC 在数据链路层只能做到“无差错接受”:凡是接收的帧都认为没有传输差错(概率极接近 1),有差错的帧直接丢弃。它不等于可靠传输——丢了的帧怎么补回来,要靠确认和重传。CRC 也不能纠错:余数不为 0 只说明有错,不说明错在哪里。
海明码与码距
- 海明距离(码距):两个等长码字对应位不同的个数,如 10110 与 11100 的距离是 2。一个编码集合的码距是其中任意两个合法码字距离的最小值 d。
- 要检测 t 位错,需要 d ≥ t + 1;要纠正 t 位错,需要 d ≥ 2t + 1。反过来:码距为 d 的编码最多能检测 d − 1 位错、纠正 ⌊(d − 1) / 2⌋ 位错(2025-34)。
海明码能纠正 1 位错(码距 3):数据 k 位、校验位 r 位,要满足 2r ≥ k + r + 1——r 位校验能组合出 2r 种结果,要能指出“哪一位错了(k + r 种)”或“没错(1 种)”。所以 4 位数据要 3 位校验,8 位数据要 4 位,16 位数据要 5 位。海明码怎么编,分四步(偶校验):
- 定校验位数 r:取满足 2r ≥ k + r + 1 的最小 r。
- 排位置:从 1 开始给各位编号,1、2、4、8……(2 的幂)号位放校验位 P1、P2、P3……,其余位置依次放数据位。
- 分组求校验位:把每个位置号写成二进制。第 i 个校验位负责“位置号二进制第 i 位为 1”的所有位,让这一组里 1 的个数为偶数(即 P = 组内数据位的异或)。
- 接收方纠错:每一组重新做异或得到 Si(含校验位本身),把 …S2S1 拼成二进制数:为 0 表示无错,否则它就是出错位的位置号,把那一位取反即可。
跟我算
k = 4:23 = 8 ≥ 4 + 3 + 1,r = 3。7 位的排列:位置 1、2、4 放校验位,3、5、6、7 放数据 1、0、1、0。
| 位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| 二进制 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
| 内容 | P1 | P2 | D1 = 1 | P3 | D2 = 0 | D3 = 1 | D4 = 0 |
P1 管最低位为 1 的位置 3、5、7:1 ⊕ 0 ⊕ 0 = 1;P2 管 3、6、7:1 ⊕ 1 ⊕ 0 = 0;P3 管 5、6、7:0 ⊕ 1 ⊕ 0 = 1。码字(位置 1~7)= 1011010。
收到 1011000:S1 = 位 1、3、5、7 = 1 ⊕ 1 ⊕ 0 ⊕ 0 = 0;S2 = 位 2、3、6、7 = 0 ⊕ 1 ⊕ 0 ⊕ 0 = 1;S3 = 位 4、5、6、7 = 1 ⊕ 0 ⊕ 0 ⊕ 0 = 1。S3S2S1 = 110 = 6,第 6 位出错,取反得 1011010,数据 1010。
更快的求校正子方法:把所有为 1 的位置号做异或。1011000 中为 1 的位置是 1、3、4,1 ⊕ 3 ⊕ 4 = 001 ⊕ 011 ⊕ 100 = 110 = 6。
跟我算
r:24 = 16 ≥ 8 + 4 + 1 = 13,r = 4,码长 12。校验位在位置 1、2、4、8,数据依次放在 3、5、6、7、9、10、11、12:
| 位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 内容 | P1 | P2 | 1 | P3 | 0 | 0 | 1 | P4 | 1 | 0 | 1 | 0 |
| 结果 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
- P1 管位置号最低位为 1 的 3、5、7、9、11:1 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 1 = 0。
- P2 管 3、6、7、10、11:1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 1 = 1。
- P3 管 5、6、7、12:0 ⊕ 0 ⊕ 1 ⊕ 0 = 1。
- P4 管 9、10、11、12:1 ⊕ 0 ⊕ 1 ⊕ 0 = 0。
码字 = 0111 0010 1010。第 9 位出错后,含第 9 位的组是 S1(9 = 1001 的最低位)和 S4(最高位),这两组的异或都变成 1,S4S3S2S1 = 1001 = 9,把第 9 位取反即可。
- A. 可以检测不超过 2 位错,检错率 100%;可纠正不超过 1 位错
- B. 可以检测不超过 2 位错,检错率 100%;可纠正不超过 2 位错
- C. 可以检测不超过 3 位错,检错率 100%;可纠正不超过 1 位错
- D. 可以检测不超过 3 位错,检错率 100%;可纠正不超过 2 位错
展开解析
C编码集的检错、纠错能力由最小海明距离 d 决定:能检测 d − 1 位错,能纠正 ⌊(d − 1) / 2⌋ 位错。
- 两两比较对应位:10011010 与 01011100、11110000、00001111 的距离都是 4;01011100 与 11110000、00001111 的距离都是 4;11110000 与 00001111 的距离是 8。
- 最小距离 d = 4。
- 检错:4 − 1 = 3 位;纠错:⌊3 / 2⌋ = 1 位。
- A 错检错能力少算了:d = 4 能保证检测 3 位错。
- B 错检错少算;纠正 2 位错需要 d ≥ 5。
- C 对检 3 纠 1。
- D 错纠正 2 位错需要 d ≥ 2 × 2 + 1 = 5,这里 d = 4。
检 t 位:d ≥ t + 1;纠 t 位:d ≥ 2t + 1。算距离一定取所有码字对中的最小值。
海明码的码距是 3,所以只能纠 1 位错(或检 2 位错),不能同时做到。计组的“校验码”一节考的也是这套方法。
- 校正子指向校验位:S 的值是 1、2、4……时,错的是那个校验位本身,数据位没错,数据照收即可。
- 校正子“超界”:码长小于 2r − 1 时,S 可能算出一个不存在的位置号。例如 3 位数据配 3 位校验(23 ≥ 3 + 3 + 1),码长 6,却算出 S = 7——说明发生了多位错,海明码纠不了。反过来,2 位错有时会被“纠”到一个错误的位置上,这正是码距 3 的局限。
- 扩展海明码:再加一位对整个码字的总奇偶校验位,码距变为 4,就能同时纠正 1 位错并检测 2 位错(S ≠ 0 而总校验通过 → 2 位错,只报错不纠)。一般地,要同时检测 c 位错、纠正 t 位错(c > t),需要 d ≥ c + t + 1。
2023-37 给生成多项式和四个比特串,问哪个没出错——逐个模 2 除,余数为 0 的就是;四个选项只差几位时,可以利用“余数可叠加”只算一个再推其余(见 2023-37 的讲解)。2025-34 给一个编码集,先两两求距离取最小值 d,再套 d − 1、⌊(d − 1)/2⌋。可能的变化:求 FCS;k 位数据要几位海明校验位;由校正子找错位;奇偶校验能否检出几位错。
- 补 0 的个数 = 生成多项式的阶 r,不是比特串的位数 r + 1。
- 模 2 除法里“商”的每一位只看当前最高位是 0 还是 1,不比较大小。
- CRC 发现错误后只是丢弃,不纠错、不重传(重传是 3.3 的事);以太网就只检错不重传。
- 码距看的是最小距离;检错 d − 1、纠错 ⌊(d − 1)/2⌋,别把两个式子套反。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 1011001110
- B. 1011001100
- C. 1011001010
- D. 1011001011
展开解析
A整串除以 1101:A 余数 000,B 余数 010,C 余数 100,D 余数 101。只有 A 余数为 0。
- A 对对:1011001110 除以 1101 余数 000。
- B 错1011001100 除以 1101 余数 010 ≠ 000:它与 A 只差 x¹ 那一位,余数也正好差 x¹ 除以 G 的余数 010。
- C 错1011001010 余数 100 ≠ 000:与 A 只差 x² 那一位,余数差 100。
- D 错1011001011 余数 101 ≠ 000:与 A 差 x² 和 x⁰ 两位,余数差 100 ⊕ 001 = 101。
变化点:生成多项式换成 3 次,余数 3 位;方法不变:整串直接除,余数全 0 才无错。
- A. 可检测 2 位错,可纠正 1 位错
- B. 可检测 3 位错,可纠正 1 位错
- C. 可检测 2 位错,不能纠错
- D. 可检测 3 位错,可纠正 2 位错
展开解析
A最小海明距离为 3(如 0000000 与 1110000),检错 d − 1 = 2 位,纠错 ⌊(3 − 1)/2⌋ = 1 位。
- A 对对:最小距离 3,检 2 纠 1。
- B 错检 3 位错需要 d ≥ 4;这里最小距离只有 3(0000000 与 1110000、0001111 与 1111111)。
- C 错d = 3 ≥ 2 × 1 + 1,能纠正 1 位错,不是“不能纠错”。
- D 错纠 2 位错需要 d ≥ 5、检 3 位错需要 d ≥ 4,最小距离 3 两项都达不到。
变化点:换一组码字,距离变成 3。先两两算距离取最小。
- A. 4
- B. 5
- C. 6
- D. 16
展开解析
B2r ≥ k + r + 1:r = 5 时 32 ≥ 16 + 5 + 1 = 22 成立;r = 4 时 16 < 21。
- A 错r = 4 时 2⁴ = 16 < 16 + 4 + 1 = 21,不满足 2ʳ ≥ k + r + 1。
- B 对对:r = 5 时 32 ≥ 22。
- C 错r = 6 也满足,但题目问“至少”,r = 5 已经满足 32 ≥ 22。
- D 错16 是数据位数,把数据位数当成了校验位数。
变化点:由距离换成海明码校验位数。
- A. 一定能检测出错误
- B. 一定检测不出错误
- C. 能检测出错误并纠正
- D. 能否检测出取决于出错位置
展开解析
B两位同时翻转,1 的个数的奇偶性不变,校验照样通过。奇偶校验只能检出奇数个比特的错误,也不能纠错。
- A 错两位同时翻转后 1 的个数的奇偶性不变,偶校验照样通过,检测不出来。
- B 对对:奇偶校验只能检出奇数个比特的错误。
- C 错奇偶校验只有 1 位冗余,只能发现奇数个错,不能纠正任何错误。
- D 错与出错位置无关:任意两位同时翻转,奇偶性都不变,一定检测不出。
考点:3.2 节“奇偶校验”。
- A. 4
- B. 6
- C. 3
- D. 5
展开解析
D2r ≥ 16 + r + 1:r = 4 时 16 < 21,不够;r = 5 时 32 ≥ 22,满足。
- A 错r = 4 时 2⁴ = 16 < 16 + 4 + 1 = 21,不够。
- B 错r = 6 满足但不是最少;r = 5 时 32 ≥ 22 已经满足。
- C 错r = 3 时 2³ = 8 < 16 + 3 + 1 = 20,远远不够。
- D 对对:r = 5。
考点:3.2 节“海明码与码距”。
- A. 5
- B. 6
- C. 4
- D. 3
展开解析
AFCS 的位数等于生成多项式的阶 r = 5(比特串 110101 有 6 位,但余数只有 5 位),发送方在数据后补 5 个 0 再做模 2 除法。
- A 对对:FCS 位数等于生成多项式的最高次 5。
- B 错6 是比特串 110101 的位数;余数比除数少一位,FCS 位数 = 最高次 5。
- C 错4 是 G(x) 的项数(x⁵、x⁴、x²、1);FCS 位数看最高次,不看有几项。
- D 错3 是 G(x) 中除最高次外的项数(x⁴、x²、1);FCS 位数等于最高次 5。
考点:3.2 节“循环冗余校验 CRC”。
3.3可靠传输:停等、后退 N 帧(GBN)、选择重传(SR)
接收方的缓冲区有限,发送方发得太快会把它“淹没”,所以要流量控制;帧可能出错被丢弃,所以要可靠传输:接收方收到正确的帧就回一个确认(ACK),发送方每发一帧就启动一个超时计时器,到时没收到确认就重传。这种机制叫自动重传请求 ARQ。三种协议都用滑动窗口来同时实现流量控制和可靠传输:
- 发送窗口:发送方在没收到确认时最多能连续发出的帧数;收到确认,窗口向前滑动。
- 接收窗口:接收方允许接收的帧的序号范围,落在窗口外的帧直接丢弃。只有收到序号落在接收窗口内的帧,接收窗口才会滑动。
| 停止—等待 | 后退 N 帧 GBN | 选择重传 SR | |
|---|---|---|---|
| 发送窗口 | 1 | 1 < WT ≤ 2n − 1 | WT + WR ≤ 2n;收发窗口相等时 WT = WR ≤ 2n−1(两者也可以不等,如 2019-35:n = 3、WT = 5,则 WR ≤ 3) |
| 接收窗口 | 1 | 1(只收按序到达的帧) | 1 < WR ≤ WT(比发送窗口大没有意义),最常见 WR = WT = 2n−1 |
| 确认方式 | 每帧确认 | 累积确认:收到 ACKk 表示 k 及以前的帧都收到了(本讲义按“确认号 = 已收到的最后一帧”;有的题目用“确认号 = 期望的下一帧”,以题目为准) | 对每个正确收到的帧单独确认 |
| 失序的帧 | — | 丢弃,重发期间重复确认最后一个按序收到的帧 | 在窗口内就先缓存,等缺的帧到了一起交给上层 |
| 超时后重传 | 重传这一帧 | 重传出错帧以及它之后已发出的所有帧 | 只重传超时的那一帧 |
| 序号位数 | 1 位就够 | n 位序号,窗口不能超过上面的上限,否则新旧帧的序号会混淆 | |
| 计时器 | 1 个 | 通常只给最早的已发未确认帧计时(它一超时就从它起全部重发) | 每个已发未确认的帧各一个 |
| 接收方缓存 | 1 帧 | 1 帧(失序帧不缓存) | WR 帧 |
| 适合的信道 | 误码率低、时延小(如短距离链路) | 误码率低、时延大,需要高吞吐 | 误码率高、时延大(重传代价大) |
停止—等待协议:出错、丢失、迟到时怎么办
停等协议每发一帧就停下来等确认。发送方发完一帧后保留它的副本并启动超时计时器,可能遇到四种情况:
| 情况 | 发生了什么 | 怎么处理 |
|---|---|---|
| 正常 | 数据帧无错到达,ACK 按时回来 | 发送方删除副本,发下一帧 |
| 数据帧出错或丢失 | 接收方检出错误就丢弃(或者根本没收到),不回确认 | 发送方计时器超时,重传副本 |
| 确认帧丢失 | 接收方其实收到了,但 ACK 在路上丢了 | 发送方超时重传;接收方收到的是重复帧,靠序号认出来,丢弃重复帧,但要再回一次确认(否则发送方会一直重传) |
| 确认帧迟到 | ACK 在超时之后才到,发送方已经重传过 | 发送方收到重复的确认,直接丢弃 |
超时时间应略大于“帧的发送时间 + 往返时间”。停等协议简单,但发一帧就要空等一个往返时间,信道利用率低,所以有了连续发多帧的 GBN 和 SR。
GBN 与 SR:丢了一帧以后
- GBN:接收方只有一个接收窗口位置,只按序接收;失序到达的帧一律丢弃,并重复发送对最后一个按序帧的确认。好处是接收方简单、不需要大缓存;坏处是一帧出错,后面已发出的帧全部白发——信道误码率高时效率反而可能不如停等。
- SR:接收方为窗口内的每个序号准备缓存,失序但正确的帧先收下;发送方为每个已发未确认的帧单独计时,谁超时重传谁。也可以用否认帧 NAK 让发送方立即重传某一帧。代价是收发双方都要更多缓存和更复杂的控制。
跟我走一遍:GBN 的发送窗口怎样滑动(3 位序号,为了画得清楚取窗口 4):
SR 的接收窗口怎样动(3 位序号,收发窗口都为 4):接收窗口开始是 0 ~ 3。先到了 1、2 号帧,在窗口内但不是按序的,先缓存、各自回确认,窗口不动;0 号帧到达后,0、1、2 一起交给上层,窗口滑到 3 ~ 6。这时若来了一个 7 号帧(窗口外),丢弃;若来了一个重复的 1 号帧(落在刚刚过去的旧窗口里),也丢弃,但要再回一次 ACK1——说明发送方没收到上次的确认。
- A. 2
- B. 3
- C. 4
- D. 5
展开解析
CGBN 采用累积确认:收到 3 号帧的确认,说明 0~3 号帧都已正确收到。1 号帧的确认没收到,只说明那个确认帧在返回途中丢了,并不影响。
- 已确认:0、1、2、3。
- 未确认:4、5、6、7。超时后 GBN 要重发未确认的第一帧及其后已发出的所有帧。
- 重发 4、5、6、7,共 4 帧。
- A 错2:少算了,4~7 都没有被确认。
- B 错3 帧不够:ACK3 累积确认了 0 ~ 3 号,未确认的是 4、5、6、7 四帧;GBN 超时后要从 4 号起把已发出的 4 帧全部重发,只发 3 帧还漏一帧。
- C 对4 帧。
- D 错5:把 1 号帧也算进去重发,但 ACK3 已经说明 1 号收到了。
GBN 看“最大的那个确认号”:它之前的全都收到了,它之后的全部重发。
- A. 1
- B. 2
- C. 3
- D. 4
展开解析
BSR 对每个帧单独确认,确认没有累积作用;也只重传超时的那一帧。
- 收到 ACK1:只说明 1 号收到了,不能说明 0 号收到了。
- 0、2 号超时 → 重传 0、2。
- 3 号的计时器还没到时,暂不重传。共 2 帧。
- A 错1:若把 ACK1 当成累积确认(认为 0 号也收到了),就只重传 2 号。SR 的确认不是累积的。
- B 对0 和 2 两帧。
- C 错3:把没超时的 3 号也重传了。
- D 错4:全部重发,不符合 SR“只重传超时帧”的规则。
SR:谁超时重传谁。GBN:从超时的那帧起全部重传。
两道题的对照:GBN 是累积确认,收到 ACK3 就说明 0 ~ 3 都到了(ACK1 丢了也没关系),重发 4 ~ 7 共 4 帧;SR 是逐帧确认,ACK1 只说明 1 号到了,谁超时就只重发谁(0、2 号,共 2 帧)。
| 接收方收到的帧 | GBN 接收方 | SR 接收方 |
|---|---|---|
| 正确、按序(正是期望的那一帧) | 交付上层,确认,期望号 + 1 | 交付上层(连同缓存里接得上的帧),确认,接收窗口滑动 |
| 正确,但失序(在接收窗口内) | 丢弃,重发对最后一个按序帧的确认 | 缓存,单独确认 |
| 正确,但是重复帧(序号在窗口之前) | 丢弃,重发确认 | 丢弃,再回一次该帧的确认 |
| 序号在接收窗口之后 | 丢弃 | 丢弃 |
| 检测出差错 | 丢弃,不确认 | 丢弃;可以发 NAK 让发送方立即重传 |
拓展 考虑出错:若每帧出错(或丢失)的概率为 p,停等协议平均每帧要发 1 ÷ (1 − p) 次,利用率再乘 (1 − p)。后面“信道利用率”一节里 40% 的例子(停等,周期 100 ms)在 p = 0.1 时降为 0.9 × 40% = 36%。GBN 一出错要重发一串帧,信道误码率高时吃亏更大,这时 SR 的优势才明显。
窗口为什么有上限:画一个序号环
问题:序号用 n 位表示,只有 2n 个号,用完要循环使用。窗口如果太大,一个“重传的旧帧”可能和“新一轮的同号帧”撞在一起,接收方分不出来。用 n = 2(序号 0、1、2、3)看最清楚:
SR 的接收窗口也大于 1:接收方收完一批后,接收窗口整体前移。若前移后的新窗口和发送方可能重传的旧帧序号重叠,就会把旧帧当新帧收下。不重叠的条件是 WT + WR ≤ 2n:
- A. 2
- B. 3
- C. 4
- D. 5
展开解析
Bn 位序号共 2n 个号。为了不让新旧帧的序号混淆,要求 WT + WR ≤ 2n。
- n = 3,序号共 8 个。
- WR ≤ 8 − 5 = 3。
- A 错2:5 + 2 = 7 ≤ 8,满足 W_T + W_R ≤ 2³;但 W_R = 3 时 5 + 3 = 8 也满足,题目问的是最大值。
- B 对3。
- C 错4:5 + 4 = 9 > 8,发送方的旧帧重传时接收方可能误当成新帧。
- D 错5:5 + 5 = 10 > 8。
WT + WR ≤ 2n。GBN 是 WR = 1 的特例(WT ≤ 2n − 1)。
- A. F1、F3
- B. F1、F4
- C. F3、F1
- D. F4、F1
展开解析
D3 位序号,SR 收发窗口相等时最大为 23−1 = 4。所以甲一开始连续发 F0~F3 后窗口已满,必须等确认。
- 图中乙回了 ACK0、ACK2、ACK3,没有 ACK1:F1 没有被正确接收(ACK3 在途中丢失)。
- t1:甲收到 ACK0,窗口下沿从 0 移到 1,窗口变成 1~4,于是可以发送新帧 F4。
- t2:F1 的计时器超时。SR 只重传超时的帧,发送 F1。这时收到的 ACK2 不能让窗口滑动,因为窗口下沿 F1 还没确认。
- A 错F1、F3:t1 时 F1 还没超时,不会重发;F3 也不需要重发。
- B 错F1、F4:两个时刻的顺序反了。
- C 错F3、F1:t1 时 F3 刚发出不久,没有超时;窗口腾出位置后应发送新帧 F4。
- D 对F4、F1。
收到确认 → 窗口下沿右移,腾出几个位置就发几个新帧;计时器超时 → SR 只重传这一帧。
2024-37 的思路:3 位序号、收发窗口相等且最大 → 窗口 = 23−1 = 4,甲一开始发 F0 ~ F3 正好用满窗口。t1 收到 ACK0,窗口后沿移到 1,可以发 F4;F1 一直没被确认,超时后在 t2 只重传 F1。
信道利用率与序号位数(每年几乎必考的计算)
(2) 速率 1 Mb/s,帧长 1000 B,单向传播时延 20 ms,忽略确认帧。要使利用率达到 100%,窗口至少多大?用 GBN 和 SR(收发窗口相等)时,帧序号各至少几位?
跟我算
(1) TD = 4000 ÷ (100 × 103) = 0.04 s = 40 ms;RTT = 2 × 30 = 60 ms;周期 T = 40 + 60 = 100 ms。停等:U = 40 ÷ 100 = 40%。W = 2:2 × 40 ÷ 100 = 80%。W = 3:3 × 40 = 120 ≥ 100,100%(就是上图)。
(2) 单位换算:1000 B = 8000 bit;1 Mb/s = 106 b/s。TD = 8000 ÷ 106 = 8 ms;T = 8 + 40 = 48 ms;W ≥ 48 ÷ 8 = 6。GBN:2n − 1 ≥ 6 → n = 3;SR:2n−1 ≥ 6 → n = 4。
另一种写法:令 a = τ ÷ TD(单向传播时延与帧发送时间之比),忽略确认帧时停等协议的利用率 U = 1 ÷ (1 + 2a)。上例 a = 30 ÷ 40 = 0.75,U = 1 ÷ 2.5 = 40%。a 越大(链路越长、速率越高、帧越短),停等协议越吃亏——卫星链路上非用滑动窗口不可。
- 算 TD 和一个周期 T(注意单位:B × 8 变 bit;单向传播时延要乘 2;确认帧与数据帧等长时 TA = TD)。
- 按要求的利用率求窗口:W ≥ U × T ÷ TD,向上取整。“利用率最高”就是 U = 100%;帧长有范围时,取最短的帧(需要的窗口最大,2012-36)。
- 由窗口求 n:GBN 或一般的滑动窗口用 2n − 1 ≥ W;SR 用 2n−1 ≥ W。
- A. 240 比特
- B. 400 比特
- C. 480 比特
- D. 800 比特
展开解析
D设帧长 x 比特。停等协议 U = TD ÷ (TD + RTT),忽略确认帧发送时间。
- TD = x ÷ 3000(秒),RTT = 2 × 200ms = 0.4s。
- TD ÷ (TD + 0.4) = 0.4 → 0.6TD = 0.16 → TD ≈ 0.267s。
- x = 0.267 × 3000 = 800 比特。验算:800 ÷ 3000 ≈ 0.267s,0.267 ÷ 0.667 = 40%。
- A 错240 = 3000 × 0.2 × 0.4:周期只算了单程传播,还漏掉了帧自身的发送时间。
- B 错400:周期写成 TD + 200ms,只算了单程传播。
- C 错480 = 3000 × 0.4 × 0.4:周期漏掉了帧自身的发送时间,只剩 RTT。
- D 对800 比特。
停等周期 = TD + 2 × 单向传播(+ 确认帧发送时间,题目说忽略就不加)。
- A. 80%
- B. 66.7%
- C. 44.4%
- D. 40%
展开解析
D题目说确认帧与数据帧等长,所以确认帧的发送时间不能忽略。
- 数据帧、确认帧的发送时间都是 1000 × 8 ÷ 10k = 800ms。
- 周期 = 800(发数据)+ 200(传过去)+ 800(发确认)+ 200(传回来)= 2000ms。
- U = 800 ÷ 2000 = 40%。
- A 错80% = 800 ÷ 1000:周期只算了数据帧发送和单程传播。
- B 错66.7% = 800 ÷ 1200:漏掉了确认帧的发送时间。
- C 错44.4% = 800 ÷ 1800:少算了一个单程传播时延。
- D 对40%。
周期四项:数据帧发送、去程传播、确认帧发送、回程传播。题目没说忽略就都要算。
- A. 10Mbps
- B. 20Mbps
- C. 80Mbps
- D. 100Mbps
展开解析
C实际速率受两个上限约束:信道带宽,以及“一个周期最多发一个窗口的数据”。取两者中较小的。
- 一帧发送时间:1000 × 8 ÷ 100M = 80μs;一个窗口 1000 帧共发 80ms。
- 第一帧的确认要在 80μs + 100ms(RTT)≈ 100.08ms 后才回来。80ms < 100.08ms,窗口发完后要空等,受窗口限制。
- 速率 = 1000 × 1000 × 8bit ÷ 100.08ms ≈ 79.9Mbps ≈ 80Mbps,小于带宽 100Mbps。
- A 错10:1MB ÷ 0.1s = 10MB/s,这是字节每秒,忘了乘 8。
- B 错20 = 1000 × 1000B ÷ 50ms:周期只用了单程传播时延 50ms,而且算出的是字节每秒(20MB/s),又忘了乘 8。正确的周期是 RTT ≈ 100.08ms,速率约 80Mbps。
- C 对约 80Mbps。
- D 错100:带宽上限。只有窗口数据能填满整个周期时才能达到,这里窗口只能填满 80ms。
实际速率 = min(带宽,窗口数据量 ÷ 周期)。
- A. 3
- B. 4
- C. 7
- D. 8
展开解析
B先由利用率求窗口,再由窗口求序号位数。
- TD = 1000 × 8 ÷ 128k = 62.5ms。
- 周期 = 62.5 + 250 × 2 = 562.5ms(不计确认帧)。
- W × 62.5 ÷ 562.5 ≥ 80% → W ≥ 7.2,取 8。
- 2n − 1 ≥ 8 → n = 4。(按 SR 的 2n−1 ≥ 8 也是 4。)
- A 错3:窗口最多 7,利用率 7 × 62.5 ÷ 562.5 ≈ 77.8%,不到 80%。
- B 对4 位。
- C 错C 是 7 位:把算出的窗口下限 7.2 取成 7 当作了序号位数。窗口是帧数,位数要由 2ⁿ − 1 ≥ 8 求出,4 位就够。
- D 错8:同样是把窗口大小 8 当成了位数。
卫星链路单向约 250ms,周期里要加 500ms。
- A. 5
- B. 4
- C. 3
- D. 2
展开解析
B“信道利用率最高”要求发送方在收到第一帧确认前一直有帧可发。帧长可变时要按最短帧算:短帧发得快,同样的等待时间里要发更多帧,需要的窗口最大。
- 最短帧的发送时间 TD = 128 × 8 ÷ 16k = 64ms;确认帧与数据帧等长,也要 64ms。
- 一个周期:64 + 270 × 2 + 64 = 668ms。
- 窗口 W ≥ 668 ÷ 64 ≈ 10.4,取 11。
- GBN:2n − 1 ≥ 11 → n = 4(3 位只能到 7)。
- A 错5:按 SR 的上限 2n−1 ≥ 11 才需要 5 位,本题是 GBN。
- B 对4 位。
- C 错3:用最长帧 512B 算(TD = 256ms,周期 1052ms,W ≥ 4.1 → 5,3 位够用)。但发短帧时窗口就不够了。
- D 错2:2 位序号的 GBN 窗口最多 3。
帧长给范围:求窗口用最短帧。周期 = 数据帧发送 + 2 × 传播 + 确认帧发送。
- A. U1 ≤ U2 ≤ U3
- B. U1 ≤ U3 ≤ U2
- C. U2 ≤ U3 ≤ U1
- D. U3 ≤ U2 ≤ U1
展开解析
B同一信道、同样帧长,利用率 U = min(1, W × TD ÷ 周期),只看窗口 W 能开多大。
- 停等:W = 1。
- GBN:W ≤ 23 − 1 = 7。
- SR(收发窗口相等):W ≤ 23−1 = 4。
- 窗口 1 ≤ 4 ≤ 7,所以 U1 ≤ U3 ≤ U2(信道很短时后两者都可能到 100%,所以用 ≤)。
- A 错U2 ≤ U3:误以为 SR 窗口更大。收发窗口相等时 SR 最大窗口是 4,比 GBN 的 7 小。
- B 对U1 ≤ U3 ≤ U2。
- C 错停等协议窗口只有 1,U1 不可能最大。
- D 错D 说 U3 ≤ U2 ≤ U1,让停等协议的利用率最大:可停等窗口只有 1,GBN、SR 的窗口 7、4 都比它大,D 把三者的顺序整个倒过来了。
3 位序号:停等 1,SR 4,GBN 7。SR 的优势是重传少,不是窗口大。
累积确认、捎带确认与综合题
- 累积确认(GBN):一个确认可以同时确认多帧,确认帧丢了一两个也不要紧——后面更大的确认一到,前面的就都确认了。
- 捎带确认:双方都有数据要发时,把确认放在自己发出的数据帧里一起带过去,省掉单独的确认帧(TCP 也这样做,5.5 节)。
- 综合题 2017-47、2025-47(第 7 篇 t5)把 GBN / SR 的窗口、重传帧和信道利用率放在同一个情景里考,做法就是本节的三张表加“三步法”。
(1) 若采用 3 位序号的 GBN,最大发送窗口是多少?此时最大信道利用率是多少?
(2) 要使信道利用率达到 100%,GBN 和 SR(收发窗口相等)的帧序号各至少几位?
(3) 3 位序号的 GBN,甲已发出 0 ~ 6 号帧,收到 ACK3 后 4 号帧超时,要重发哪些帧?若改用 SR,且只有 4 号帧丢失呢?
跟我做
(1) WT ≤ 23 − 1 = 7。TD = 500 × 8 ÷ 106 s = 4 ms;周期 T = 4 + 2 × 20 = 44 ms;U = 7 × 4 ÷ 44 ≈ 63.6%。
(2) W ≥ 44 ÷ 4 = 11。GBN:2n − 1 ≥ 11 → n = 4;SR:2n−1 ≥ 11 → n = 5。
(3) GBN 是累积确认,ACK3 说明 0 ~ 3 都到了;4 号超时,要重发 4 号及其后已发出的 4、5、6 共 3 帧。SR 只重发超时的 4 号 1 帧(5、6 号已被单独确认、在接收方缓存着)。
- 重传哪些帧(2009-35、2011-35、2024-37):GBN 累积确认 → 从第一个没被确认的帧起全部重发;SR → 谁超时重发谁。
- 窗口上限(2019-35、2023-35):GBN ≤ 2n − 1;SR WT + WR ≤ 2n。
- 利用率 / 数据率(2014-36、2018-36、2020-36):先算 TD 和周期;确认帧等长时周期里要加 TA。
- 序号位数(2012-36、2015-35):三步法;帧长有范围取最短。
这个方法失效的情形:题目说确认帧“与数据帧等长”就不能忽略 TA(2012-36、2020-36);问的是“发送方最大利用率”还是“实际数据率”(2014-36 乘了带宽)要看清。
- 周期里的传播时延是往返的:单向时延要乘 2。
- GBN 的接收窗口是 1,不是 W;SR 的“2n−1”只在收发窗口相等时成立。
- 停等协议也是一种滑动窗口协议(窗口为 1),1 位序号就够。
- GBN 的确认号有两种约定(“已收到的最后一帧”或“期望的下一帧”),做题时看题目说明。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 4
- B. 5
- C. 6
- D. 7
展开解析
C按最短帧:TD = 1024 ÷ 64k = 16ms;周期 = 16 + 540 + 16 = 572ms;W ≥ 572 ÷ 16 = 35.75,取 36;2n − 1 ≥ 36 → n = 6。
- A 错4 位是原题 16kbps 时的答案(W ≥ 11);速率提高到 64kbps 后最短帧只要 16ms,要 W ≥ 36。
- B 错5 位时 GBN 窗口最多 2⁵ − 1 = 31 < 36,发完 31 帧还得空等确认。
- C 对对:2⁶ − 1 = 63 ≥ 36。
- D 错7 位是按 SR 的 2ⁿ⁻¹ ≥ 36 算的;本题是 GBN,2ⁿ − 1 ≥ 36 时 6 位就够。
变化点:速率提高 4 倍,发送时间缩短,同样的等待时间里要发更多帧,窗口和序号位数都变大。
- A. 3
- B. 5
- C. 7
- D. 4
展开解析
DTD = 8000 ÷ 256k = 31.25ms;W ≥ 0.8 × (31.25 + 500) ÷ 31.25 = 13.6,取 14;2n − 1 ≥ 14 → n = 4。
- A 错3 位时窗口最多 7:7 × 31.25 ÷ 531.25 ≈ 41%,不到 80%。
- B 错5 位够用但不是“至少”:4 位时窗口可到 15 ≥ 14。
- C 错7 位远多于需要;位数由 2ⁿ − 1 ≥ 14 决定,4 位即可(就算按 SR 的 2ⁿ⁻¹ ≥ 14 也只要 5 位)。
- D 对对:W ≥ 13.6 取 14,2⁴ − 1 = 15 ≥ 14。
变化点:速率翻倍,窗口从 8 变 14,位数仍是 4。
- A. 62.5%
- B. 40%
- C. 66.7%
- D. 80%
展开解析
A数据帧 800ms,确认帧 80ms,周期 = 800 + 200 + 80 + 200 = 1280ms,U = 800 ÷ 1280 = 62.5%。
- A 对对:800 ÷ (800 + 200 + 80 + 200) = 62.5%。
- B 错40% 是原题 2020-36(确认帧也是 1000B、要 800ms)的结果;确认帧改成 100B 后只要 80ms。
- C 错66.7% = 800 ÷ 1200:漏了确认帧的发送时间 80ms。
- D 错80% = 800 ÷ 1000:周期只算了数据帧发送和单程传播。
变化点:确认帧变短,周期变小,利用率提高。
- A. 10Mbps
- B. 40Mbps
- C. 20Mbps
- D. 80Mbps
展开解析
B一个周期约 100.08ms 内最多发 500 × 8000bit = 4Mb,速率 ≈ 4Mb ÷ 0.1s = 40Mbps。
- A 错10 = 500 × 1000B ÷ 0.05s ÷ 10⁶:周期只用了单程 50ms,算出的又是字节每秒(10MB/s),忘了乘 8。
- B 对对:500 × 8000bit ÷ 0.1s ≈ 40Mbps。
- C 错20Mbps = 4Mb ÷ 0.2s:周期算成了 200ms,把往返时间又乘了 2。
- D 错80Mbps 是原题窗口 1000 时的结果;窗口减半,每个周期只能发 4Mb。
变化点:窗口减半,受窗口限制的速率也减半。
- A. 4
- B. 5
- C. 6
- D. 10
展开解析
CWT + WR ≤ 24 = 16,WR ≤ 6。
- A 错WR = 4 满足 10 + 4 ≤ 16,但不是最大,6 也满足。
- B 错WR = 5 满足 10 + 5 ≤ 16,但不是最大,10 + 6 = 16 正好到上限。
- C 对对:WR ≤ 16 − 10 = 6。
- D 错10 + 10 = 20 > 16,新旧帧的序号会重叠,接收方可能把重传的旧帧当成新帧收下。
变化点:序号位数和发送窗口都变了,公式不变。
- A. 2
- B. 3
- C. 5
- D. 4
展开解析
D累积确认:ACK3 说明 0~3 都已收到,要重发 4、5、6、7 共 4 帧。
- A 错2 帧是把确认当成了逐个确认,只补发没确认的 0、2 号;GBN 是累积确认,ACK3 已说明 0 ~ 3 都收到。
- B 错3 = 7 − 4:用末尾减开头时忘了 + 1;要重发 4、5、6、7 共 4 帧。
- C 错5 帧是把 3 号也重发了;收到 3 号帧的确认说明 3 号已经收到(累积确认)。
- D 对对:重发 4 ~ 7 共 4 帧。
变化点:收到的确认换了,最大的那个确认号决定一切。
- A. 丢弃该帧,并再发一次对它的确认
- B. 把它交给上层
- C. 丢弃该帧,不发确认
- D. 发送否认帧,要求发送方重传
展开解析
A序号相同说明是重复帧:上一帧的确认丢了,发送方超时重传。接收方丢弃重复帧,但必须再回一次确认,否则发送方会一直重传。
- A 对对:丢弃重复帧,并再确认一次。
- B 错这一帧上次已经交给上层了,再交一次就重复了。
- C 错丢弃是对的,但不发确认的话,发送方收不到确认会一直超时重传。
- D 错这一帧本身没有错,只是重复,不需要否认;需要的是再发一次确认。
考点:3.3 节“停止—等待协议:出错、丢失时怎么办”。
- A. 缓存该帧
- B. 丢弃该帧,并再次发送对它的确认
- C. 丢弃该帧,不做任何处理
- D. 交付上层后发送否认帧
展开解析
B这是重复帧,说明发送方没收到上次的确认,所以要再确认一次,否则发送方会一直重传。
- A 错这一帧早已交付过上层,缓存它会造成重复交付;落在旧窗口里说明它是重传的旧帧。
- B 对对:丢弃并再确认一次。
- C 错不发确认的话,发送方一直收不到对它的确认,会不停地重传。
- D 错重复帧不能再交付上层;而且帧本身正确,不需要发否认帧。
考点:3.3 节“GBN 与 SR 接收方的处理”。
3.4介质访问控制(一):信道划分——FDM、TDM、WDM、CDMA
问题:一根总线、一片无线信道上连着很多台主机,两台同时发送,信号就会叠在一起,谁也收不清(冲突)。点对点链路没有这个问题;广播信道必须解决“谁、什么时候可以发”,这就是介质访问控制(MAC)。方法分三大类:
- A. CDMA
- B. CSMA
- C. TDMA
- D. FDMA
展开解析
B信道划分(FDMA、TDMA、CDMA)是静态分配,每个站固定占用自己的频带、时隙或码片序列,互不干扰,不会冲突。只有随机访问才可能冲突。
- A 错CDMA:码分多址,各站码片序列正交,同时发也能分开,不冲突。
- B 对CSMA:随机访问,监听到空闲才发,但信号有传播时延,仍可能冲突。
- C 错TDMA:时分多址,每站用固定时隙,不冲突。
- D 错FDMA:频分多址,每站用固定频带,不冲突。
名字里有 CSMA 或 ALOHA 的是随机访问,会冲突;FDMA、TDMA、CDMA 都不会冲突。
复用:FDM、TDM、统计时分、WDM
划车道,每辆车一条道,同时开(频分);不划车道,规定每辆车轮流开几秒(时分);谁有货谁开,没货就让出来(统计时分)。哪里不像:马路上的车不会“叠在一起”还都能到达,而码分复用(CDMA)恰恰是让信号叠在一起,再靠“密码”分开。
信道划分的本质是复用:把一条信道静态地分成若干个子信道,每个用户固定使用一个,彼此互不干扰,所以不会冲突。
- 频分复用 FDM:把信道带宽分成若干频带,每个用户固定占一个频带,所有用户同时通信(广播电台、有线电视)。频带之间要留“隔离带”防止互相干扰。
- 时分复用 TDM:把时间分成等长的 TDM 帧,每帧再分成若干时隙,每个用户固定用每帧中的同一个时隙,在不同时间占用同样的频带宽度。用户没数据时它的时隙也空着,利用率不高。
- 统计时分复用 STDM(异步时分复用):用一个集中器把各用户的数据按到达顺序依次放进 STDM 帧的时隙里,按需动态分配时隙;每个时隙必须带用户的地址。STDM 帧的时隙数小于用户数,线路利用率高。
- 波分复用 WDM:光的频分复用,一根光纤里同时传多种不同波长的光信号,接收端再用分光器分开。
跟我算:上图中 4 个用户、3 个 TDM 帧共 12 个时隙,只有 4 个装了数据,TDM 的利用率 4 ÷ 12 ≈ 33%;STDM 只用 4 个时隙就传完了。
拓展 TDM 的经典例子:电话网的 T1 线路把 24 路话音时分复用,每路每次 8 bit,再加 1 位帧同步,一个 TDM 帧 24 × 8 + 1 = 193 bit;话音每秒采样 8000 次,所以每秒 8000 帧,速率 193 × 8000 = 1.544 Mb/s。欧洲和我国用的 E1 是 32 个时隙 × 8 bit × 8000 = 2.048 Mb/s。
| FDM | TDM | CDMA | |
|---|---|---|---|
| 分什么 | 频率 | 时间 | 码型 |
| 各用户 | 同时发,用不同频带 | 轮流发,用同一频带 | 同时发,用同一频带 |
| 典型应用 | 广播电台、有线电视 | 电话 T1 / E1 线路 | 3G 移动通信、卫星 |
| 缺点 / 代价 | 频带之间要留隔离带 | 用户没数据时时隙空着(STDM 改进) | 每个比特要发 m 个码片,需要的带宽是原来的 m 倍(扩频) |
码分复用 CDMA:信号叠在一起,靠“密码”分开
走廊里很多人同时说话,有人说中文,有人说英语、法语。你只懂中文,就只“听得出”说中文的那个人,其他语言在你耳朵里只是噪声。CDMA 里每个站说一种“语言”(码片序列),不同语言之间“完全听不懂”(正交),所以大家可以同时、在同一频带里说话。
- 每个比特时间再划分成 m 个码片。每个站分配一个唯一的 m 位码片序列,计算时把 0 写成 −1、1 写成 +1,看成一个向量 S。
- 站要发比特 1,就发自己的码片序列 S;发比特 0,就发它的反码 −S;不发就什么都不发。
- 不同站的码片序列相互正交:规格化内积 S · T = (1/m) Σ SiTi = 0。而任何序列和自己的规格化内积 S · S = 1,和自己的反码 S · (−S) = −1。
- 各站同时发送,信道上的信号是各站发出的向量逐项相加。接收方想知道站 S 发了什么,就用 S 与收到的叠加信号做规格化内积:1 → 发了 1;−1 → 发了 0;0 → 没发。其他站的信号因为正交,内积全变成 0。
(1) 验证 A 与 B 正交。(2) A 发 1、B 发 0、C 不发,信道上是什么信号?接收方如何解出?(3) 若收到 (1, 1, 1, −3),各站发了什么?
跟我算
(1) A · B = [1×1 + (−1)×1 + (−1)×(−1) + 1×(−1)] ÷ 4 = (1 − 1 + 1 − 1) ÷ 4 = 0,正交。
(2) A 发 1 → 送出 A = (1, −1, −1, 1);B 发 0 → 送出 −B = (−1, −1, 1, 1)。逐项相加:(0, −2, 0, 2)。
- 用 A 解:[0×1 + (−2)×(−1) + 0×(−1) + 2×1] ÷ 4 = (2 + 2) ÷ 4 = 1 → A 发了 1。
- 用 B 解:[0 + (−2)×1 + 0 + 2×(−1)] ÷ 4 = −4 ÷ 4 = −1 → B 发了 0。
- 用 C 解:[0 + (−2)×(−1) + 0 + 2×(−1)] ÷ 4 = 0 → C 没发。
(3) 与 A 的内积 (1 − 1 − 1 − 3) ÷ 4 = −1 → A 发 0;与 B 的内积 (1 + 1 − 1 + 3) ÷ 4 = 1 → B 发 1;与 C 的内积 (1 − 1 + 1 + 3) ÷ 4 = 1 → C 发 1。验算:−A + B + C = (1, 1, 1, −3)。✓
- A. 000
- B. 101
- C. 110
- D. 111
展开解析
B码片序列长 4,把收到的 12 个数分成 3 组,每组与 A 的码片序列 (1, 1, 1, 1) 做规格化内积:1 表示发 1,−1 表示发 0。
- (2, 0, 2, 0) · (1, 1, 1, 1) ÷ 4 = 4 ÷ 4 = 1。
- (0, −2, 0, −2) · (1, 1, 1, 1) ÷ 4 = −4 ÷ 4 = −1。
- (0, 2, 0, 2) · (1, 1, 1, 1) ÷ 4 = 4 ÷ 4 = 1。
- A 发送的是 101。
- A 错000:第 1、3 组的内积是 1,表示发的是 1。
- B 对101。
- C 错110:这是 B 站发的数据。用 B 的码片 (1, −1, 1, −1) 计算,三组内积是 1、1、−1。
- D 错111:第 2 组内积是 −1,表示发 0。
求谁的数据就用谁的码片序列做内积,再除以码片长度 m。结果 0 表示该站没发。
2014-37 的做法:码片序列 4 位,所以把收到的 12 个数每 4 个一组,分成 3 个比特时间;每组都和 A = (1, 1, 1, 1) 做规格化内积:(2 + 0 + 2 + 0) ÷ 4 = 1,(0 − 2 + 0 − 2) ÷ 4 = −1,(0 + 2 + 0 + 2) ÷ 4 = 1 → 101。
2013-36 问哪种方法会冲突(只有随机访问会);2014-37 考 CDMA 内积。可能的变化:判断两个码片序列是否正交;给出叠加信号求某站发的比特串;STDM 与 TDM 的区别(按需分配、时隙带地址);WDM 用在哪里(光纤)。CDMA 计算的关键是先分组:码片序列有几位,就每几个数一组。
- 内积要除以 m(规格化);不除的话结果是 ±m 或 0,判断方法一样,但选项常给规格化后的值。
- 发 0 发的是反码 −S,不是“什么都不发”;什么都不发对应的内积才是 0。
- 信道划分、轮询访问不会冲突;FDMA、TDMA、CDMA 后面的 “MA”(多址)就是“多路复用用于多个用户接入”。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 000
- B. 101
- C. 110
- D. 111
展开解析
B与 B 的码片序列做规格化内积:(4)/4 = 1,(−4)/4 = −1,(4)/4 = 1 → 101。(用 A 的码片算三组都为 0,A 没发送。)
- A 错第 1、3 组与 B 的码片序列做规格化内积都是 1,表示发的是 1,不是 0。
- B 对对:三组内积依次为 1、−1、1。
- C 错第 2 组内积是 −1(发 0)、第 3 组是 1(发 1),110 把后两位弄反了。
- D 错第 2 组 (−1, 1, −1, 1) 与 B 的码片序列内积为 −4 ÷ 4 = −1,表示发 0,不是 1。
变化点:换一个接收序列、问另一个站。
I. TDMA II. CSMA/CD III. CDMA IV. ALOHA
- A. 仅 I、III
- B. 仅 II、IV
- C. 仅 I、II
- D. 仅 III、IV
展开解析
ATDMA、CDMA 是信道划分,静态分配,不冲突;CSMA/CD、ALOHA 是随机访问,可能冲突。
- A 对对:TDMA、CDMA 是信道划分,静态分配,不冲突。
- B 错B 选的 CSMA/CD、ALOHA 都是随机访问,恰恰可能冲突。
- C 错C 含 II:CSMA/CD 先听后发,但传播时延使冲突仍可能发生;又漏了 III CDMA。
- D 错D 含 IV:ALOHA 想发就发,最容易冲突;又漏了 I TDMA。
变化点:从“可能发生冲突”反过来问“不会冲突”。
- A. 按需动态分配时隙
- B. 每个时隙需要携带用户的地址信息
- C. 线路利用率比普通 TDM 高
- D. 每个用户在每个帧中都固定占用一个时隙
展开解析
DD 描述的是普通 TDM:用户没数据时它的时隙也空着。STDM 只把时隙分给有数据的用户,所以要带地址。
- A 不选正确:STDM 只在用户有数据时才给它时隙,按需动态分配。
- B 不选正确:时隙不固定属于谁,所以每个时隙都要带上用户的地址。
- C 不选正确:没有数据的用户不占时隙,线路利用率比普通 TDM 高。
- D 选错误:每个用户在每帧中固定占一个时隙的是普通 TDM,STDM 不固定分配。
考点:3.4 节“复用:FDM、TDM、统计时分、WDM”。
- A. 全 0 序列
- B. 不发送任何信号
- C. 自己码片序列的反码
- D. 其他站码片序列之和
展开解析
C发 1 发自己的码片序列 S,发 0 发 −S;不发送时内积为 0,与发 0(内积为 −1)是两回事。
- A 错全 0 序列与任何码片序列的内积都是 0,接收方会判为“没有发送”,而不是发了 0。
- B 错不发送时接收方算出内积为 0;发 0 的内积是 −1,两者是两回事。
- C 对对:发 0 就发 −S(自己码片序列的反码)。
- D 错其他站的码片序列之和与本站要发的数据无关;发 0 要发自己码片的反码 −S。
考点:3.4 节“码分复用 CDMA”。
3.5介质访问控制(二):ALOHA、CSMA、CSMA/CD 与令牌传递
信道划分把信道分死了,用户没数据时也占着。随机访问反其道而行之:所有用户都可以随机地发送,不预先分配;如果两个站同时发而冲突了,就各自等一段随机时间再重发——随机等待让下次再撞的可能变小。随机访问实质上是“争用”信道,所以也叫争用型协议。
ALOHA:想发就发
- 纯 ALOHA:任何站有数据就立即发送;在规定时间内收不到确认,就认为冲突了,等待一段随机时间再重发。一帧从开始发送前 T(帧的发送时间)到发送结束这 2T 的时间里,只要别的站发送就会冲突——易损期是 2T。
- 时隙 ALOHA:把时间分成等长的时隙(一个时隙 = 一帧的发送时间 T),各站只能在时隙开始时发送。两帧要么在同一时隙完全重叠,要么互不相干,易损期缩为 T,冲突减少一半。
拓展 吞吐率:设网络负载为 G(每个帧时间内平均发送的帧数),纯 ALOHA 的吞吐率 S = G·e−2G,在 G = 0.5 时最大,约 1 ÷ (2e) ≈ 18.4%;时隙 ALOHA 的 S = G·e−G,在 G = 1 时最大,约 1 ÷ e ≈ 36.8%。了解即可。
CSMA:先听再说,三种“坚持”
ALOHA 不看信道就发,太鲁莽。CSMA(载波监听多路访问)在发送前先监听信道:听到有人在发就不发。按“信道忙时怎么办”分三种策略:
| 策略 | 监听到信道空闲 | 监听到信道忙 | 特点 |
|---|---|---|---|
| 1-坚持 | 立即发送 | 继续监听,一空闲马上发 | 信道不会空着;但几个站同时在等时,一空闲就一起发,冲突多。以太网的 CSMA/CD 就用 1-坚持 |
| 非坚持 | 立即发送 | 放弃监听,等一段随机时间再监听 | 冲突少;但信道空闲了也可能没人发,利用率低、时延大 |
| p-坚持 | 以概率 p 发送,以概率 1 − p 推迟到下一个时隙再监听 | 持续监听,直到空闲再按上一格处理 | 两者的折中,用于时隙信道 |
监听只能减少冲突,不能避免:电磁波在总线上传播需要时间,A 已经开始发了,但信号还没传到 B,B 监听到的仍是“空闲”,也开始发——冲突照样发生。所以还需要“发现冲突后怎么办”,这就是 CSMA/CD。
CSMA/CD:以太网的做法
CSMA/CD = 载波监听 + 碰撞检测。口诀“先听后发,边发边听,冲突停发,随机重发”:发送前监听,空闲就发;发送过程中持续检测信道,一旦发现冲突立即停止,发一个短的干扰信号,然后按退避算法等一段随机时间再重新监听。它用于总线形、半双工的以太网(交换机全双工连接时不需要 CSMA/CD)。
(2) 100 Mb/s 局域网用 CSMA/CD,最短帧长 128 B,一个冲突域内两站间的单向传播时延最多是多少?(2019-36)
跟我算
(1) τ = 1000 m ÷ (2 × 108 m/s) = 5 × 10−6 s = 5 μs;争用期 2τ = 10 μs;最短帧长 = 10 μs × 100 Mb/s = 10 × 10−6 × 108 = 1000 bit = 125 B。
(2) 反过来算:128 B = 1024 bit;发送 1024 bit 需要 1024 ÷ 108 s = 10.24 μs,这就是争用期 2τ;单向时延 τ 最多 5.12 μs。
单位换算单独写:1 μs = 10−6 s;100 Mb/s = 108 b/s;“m/μs”方便算距离:2 × 108 m/s = 200 m/μs。
跟我算
(1) B 在 A 的信号到达时发现冲突:t = τ = 25 μs;A 在 B 的信号到达时发现:t = 15 + 25 = 40 μs。干扰信号 32 bit 要发 32 ÷ 107 s = 3.2 μs。
(2) 1000 bit 的帧要发 1000 ÷ 107 s = 100 μs,40 μs 时 A 还在发,能检测到冲突并停发。300 bit 的帧只要 30 μs 就发完了,A 在 30 μs 时已经停止“边发边听”,40 μs 冲突信号才到——A 会误以为发送成功。这正是“帧的发送时间不能短于争用期 2τ”的原因:本例 2τ = 50 μs,最短帧长 = 50 μs × 10 Mb/s = 500 bit。
- A. 2.56μs
- B. 5.12μs
- C. 10.24μs
- D. 20.48μs
展开解析
B最短帧的发送时间要不小于争用期 2τ。
- 128B = 1024bit,100Mbps 下发送时间 10.24μs。
- 2τ ≤ 10.24μs → τ ≤ 5.12μs。
- A 错2.56μs:按以太网标准 64B 算出的值,本题最小帧长是 128B。
- B 对5.12μs。
- C 错10.24μs:没有除以 2,这是往返时间 2τ。
- D 错20.48μs:乘了 2,方向反了。
帧的发送时间 ≥ 2τ,求的是单向就要除以 2。
二进制指数退避算法:第 k 次重传前,从 {0, 1, …, 2k − 1} 中随机选一个数 r,等待 r × 争用期(2τ)。其中 k = min(重传次数, 10);重传 16 次仍失败就放弃并向上层报错。所以第 k 次冲突后,最长等待 (2k − 1) × 争用期,k 超过 10 就按 10 算(2023-36、2025-35)。
| 第几次冲突 | k | r 的取值范围 | 最长等待(争用期 51.2 μs) |
|---|---|---|---|
| 1 | 1 | {0, 1} | 1 × 51.2 = 51.2 μs |
| 2 | 2 | {0, 1, 2, 3} | 3 × 51.2 = 153.6 μs |
| 3 | 3 | {0, …, 7} | 7 × 51.2 = 358.4 μs |
| 4 | 4 | {0, …, 15} | 15 × 51.2 = 768 μs(2023-36) |
| 10 | 10 | {0, …, 1023} | 1023 × 51.2 = 52 377.6 μs |
| 11 ~ 15 | 仍为 10 | {0, …, 1023} | 52.3776 ms(2025-35:第 11 次冲突后) |
| 16 | — | — | 不再重传,丢弃该帧并报错 |
退避的道理:冲突次数越多,说明想发的站越多、信道越挤,就把随机等待的范围翻倍扩大,让大家错开得更开。两个站第一次冲突后各从 {0, 1} 中选,有 1/2 的概率选得不一样而错开;冲突 k 次后选得一样的概率只有 1/2k。
- 检测到冲突后立即停止发送,并发送 32 或 48 比特的人为干扰信号(强化碰撞),让所有站都知道发生了冲突。
- 凡是长度小于 64B 的帧,都是因冲突而中途停止的无效帧,接收方收到就丢弃。
- 以太网规定帧间最小间隔 9.6μs(10Mbps 下 96 比特时间),让刚收到帧的站有时间清理缓存、准备接收下一帧。
- 边发边听是为了检测冲突,不是同时收数据:使用 CSMA/CD 的站不能同时发送和接收,只能半双工工作。
- CSMA/CD 的效率与 τ 有关:传播时延越小(相对于帧的发送时间),冲突浪费的时间越少,τ → 0 时信道利用率趋近 100%(2015-36 的 D 项)。
拓展 以太网的极限信道利用率:理想情况下各站轮流发、从不冲突,每发一帧(发送时间 T0)后还要等 τ 让信号传完,信道才真正空出来,所以 Smax = T0 ÷ (T0 + τ) = 1 ÷ (1 + a),a = τ ÷ T0。10 Mb/s、τ = 25.6 μs 时:1500 B 的帧(T0 = 1200 μs)为 97.9%;64 B 的最短帧(T0 = 51.2 μs)只有 66.7%。所以以太网希望帧长一些、电缆短一些(a 小)。
- A. 51.2μs
- B. 204.8μs
- C. 768μs
- D. 819.2μs
展开解析
C第 k 次冲突后,k' = min(k, 10),从 {0, 1, …, 2k' − 1} 中随机选 r,等待 r 个争用期。
- 连续 4 次冲突:k' = 4,r 最大为 24 − 1 = 15。
- 最长等待 15 × 51.2μs = 768μs。
- A 错51.2μs:只是 1 个争用期。
- B 错204.8μs = 4 × 51.2:把冲突次数当成了 r 的最大值。
- C 对768μs。
- D 错819.2μs = 16 × 51.2:用了 2k,忘了减 1。
最长等待 = (2min(k,10) − 1) × 争用期。
- A. 0.512ms
- B. 0.5632ms
- C. 52.3776ms
- D. 104.8064ms
展开解析
C重传次数超过 10 后,k 固定为 10,r 最大为 210 − 1 = 1023。10BaseT 的争用期为 51.2μs。
- 连续 11 次冲突:k = min(11, 10) = 10。
- 最长等待 1023 × 51.2μs = 52 377.6μs = 52.3776ms。
- A 错0.512ms = 10 × 51.2μs:把 k 当成了 r 的最大值。
- B 错0.5632ms = 11 × 51.2μs:把冲突次数当成了等待的争用期个数。
- C 对52.3776ms。
- D 错104.8064ms = 2047 × 51.2μs:没有把 k 截断为 10。
k 最多取 10;重传 16 次仍失败就放弃。1023 × 51.2 = 52 377.6,别算成 1024 倍。
- A. 边发送数据帧,边检测是否发生冲突
- B. 适用于无线网络,以实现无线链路共享
- C. 需要根据网络跨距和数据传输速率限定最小帧长
- D. 当信号传播延迟趋近 0 时,信道利用率趋近 100%
展开解析
B本题选错误的叙述。CSMA/CD 用于有线以太网;无线网络中很难边发边检测冲突,还有隐蔽站问题,用的是 CSMA/CA。
- A 正确“边发边听”,发送时检测冲突。
- B 错误无线网络用 CSMA/CA,不用 CSMA/CD。
- C 正确最短帧长 = 2τ × 速率,τ 由网络跨距决定。
- D 正确传播时延趋于 0 时,争用期趋于 0,一发出去别人立刻知道,几乎不会冲突,利用率趋近 100%。
有线 CD(检测),无线 CA(避免)。
- 最短帧长 = 2τ × 速率,不是 τ × 速率;“单向传播时延”题目常直接给出,最短帧长要用它的 2 倍。
- 最短帧长和距离成正比:帧长不变而速率提高 10 倍,最远距离要缩短为原来的 1/10;最短帧长减少多少比特,距离就按比例减少(2009-37)。
- A. 增加 160m
- B. 增加 80m
- C. 减少 160m
- D. 减少 80m
展开解析
D最短帧长 = 2τ × 速率 = 2 × (距离 ÷ 传播速度) × 速率。速率不变时,帧长和距离成正比:帧长减少,距离也要减少。
- 帧长减少 800bit,发送时间减少 800 ÷ 109 = 0.8μs,即往返时间 2τ 要减少 0.8μs。
- 单程减少 0.4μs,对应距离 0.4μs × 200m/μs = 80m。
- A 错增加:方向反了。帧变短,允许的往返时间变短,距离只能减少。
- B 错增加 80m:数值 80m 对了,方向反了——帧长减少 800bit,允许的往返时间少 0.8μs,距离只能减少。
- C 错减少 160m:忘了除以 2。争用期是往返时间,对应的是两倍距离。
- D 对减少 80m。
Δ距离 = Δ帧长 ÷ 速率 × 传播速度 ÷ 2。
- A. 200m
- B. 205m
- C. 359m
- D. 512m
展开解析
BH3、H4 接在 100Base-T 集线器上,同一冲突域,要满足以太网最短帧 64B 的发送时间 ≥ 往返时延。
- 64B = 512bit,100Mbps 下发送时间 5.12μs,所以单程时延最多 2.56μs。
- H3 → Hub → H4 的单程时延 = 电缆传播时延 + Hub 时延 1.535μs。
- 电缆传播时延 ≤ 2.56 − 1.535 = 1.025μs,距离 ≤ 1.025 × 200 = 205m。
- A 错200m:不是按题给数据算出的结果(100Base-T 工程上每段双绞线限 100m,两段正好 200m,但题目问的是理论最远距离)。
- B 对205m。
- C 错359m:往返中只减了一次 Hub 时延,(5.12 − 1.535) ÷ 2 × 200 ≈ 359。信号往返两次经过 Hub,要减两次。
- D 错512m:忽略了 Hub 时延,2.56 × 200 = 512。
最短帧发送时间 ≥ 2 ×(传播时延 + 中间设备时延)。
2016-36 的算法:100 Mb/s 以太网最短帧 64 B = 512 bit,争用期 = 512 ÷ 108 = 5.12 μs,单向最多 2.56 μs;扣掉集线器的 1.535 μs,留给电缆的只有 1.025 μs,距离 = 1.025 × 200 = 205 m。综合题 2010-47(第 7 篇 t4)也是 CSMA/CD 的时间计算,要逐段画出两台主机发帧、冲突、确认的时间轴。
轮询访问:轮询与令牌传递
随机访问在站点多、负载重时冲突频繁,效率很低。轮询访问让各站按顺序轮流使用信道,谁拿到“发言权”谁发,所以不会冲突。它有两种做法:
- 轮询协议:一个主结点依次“点名”询问各从结点“你有数据要发吗”,被点到的才能发。缺点:点名本身要花时间(轮询开销);排在后面的要等前面的都问完;主结点一坏,整个网络瘫痪。
- 令牌传递协议(考纲要求,典型是令牌环网 IEEE 802.5):没有主结点,一个叫令牌的特殊短帧在各站之间按固定顺序传递,拿到令牌的站才能发送。
- 令牌是一个特殊格式的短帧,不携带数据,只表示“拿到它的站可以发送”。
- 站点要发数据,必须等令牌;发完后由发送站收回自己的帧并重新产生令牌(目的站只复制,不撤下帧)。
- 优点:没有冲突;负载重时各站轮流发,效率高,最长等待时间确定。缺点:令牌丢失或重复都会出错,需要专门维护令牌;负载很轻时也要等令牌转过来才能发。
- 拓扑:令牌环网逻辑上是环形、物理上常接成星形;FDDI(光纤分布式数据接口)是双环结构的令牌网。
| 信道划分(FDM、TDM……) | 随机访问(CSMA/CD……) | 轮询访问(令牌传递) | |
|---|---|---|---|
| 会不会冲突 | 不会 | 会 | 不会 |
| 负载轻时 | 差:分给别人的份额空着也不能用 | 好:信道空闲就能立即发 | 一般:要等令牌转过来 |
| 负载重时 | 好:各用各的 | 差:冲突多,效率低 | 好:轮流发,没有冲突 |
- 最短帧长 ↔ 距离 ↔ 时延(2009-37、2016-36、2019-36):抓住“最短帧的发送时间 = 2τ”,正着求帧长、反着求距离或时延,中间设备的时延计入单向时延。
- 退避最长等待(2023-36、2025-35):(2k − 1) × 争用期,k = min(冲突次数, 10)。
- 概念判断(2015-36):CSMA/CD 用于有线半双工,不用于无线;τ 越小效率越高。
可能的新考法:三种坚持策略的区别(哪种冲突最多、哪种利用率最低);纯 ALOHA 与时隙 ALOHA 的易损期;轮询与令牌传递的优缺点;以太网为什么规定最短帧长 64 B。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 增加 800m
- B. 减少 800m
- C. 增加 400m
- D. 减少 400m
展开解析
B减少的发送时间 800 ÷ 100M = 8μs = 减少的往返时间,单程减少 4μs,距离减少 4μs × 200m/μs = 800m。
- A 错增加:方向反了,帧变短,允许的往返时间变短,距离只能减少。
- B 对对:往返少 8μs,单程少 4μs,距离少 800m。
- C 错增加 400m:方向反了,而且多除了一次 2(8μs 是往返,单程 4μs × 200m/μs = 800m)。
- D 错减少 400m:多除了一次 2;8μs 是往返时间,单程 4μs,乘 200m/μs 就是 800m。
变化点:速率降为 1/10,同样减少 800bit 对应的距离变为 10 倍。
- A. 307.2μs
- B. 3276.8μs
- C. 3225.6μs
- D. 6502.4μs
展开解析
Ck = 6,r 最大 26 − 1 = 63,最长 63 × 51.2 = 3225.6μs。
- A 错307.2μs = 6 × 51.2:把冲突次数 6 当成了 r 的最大值。
- B 错3276.8μs = 64 × 51.2:用了 2⁶,忘了减 1;r 最大是 2⁶ − 1 = 63。
- C 对对:63 × 51.2 = 3225.6μs。
- D 错6502.4μs = 127 × 51.2:按 k = 7 算了(2⁷ − 1);第 6 次冲突 k = 6。
变化点:冲突次数变了;只要不超过 10,k 就等于冲突次数。
- A. 1.024μs
- B. 4.096μs
- C. 8.192μs
- D. 2.048μs
展开解析
D512 × 8 ÷ 1Gbps = 4.096μs ≥ 2τ,τ ≤ 2.048μs。
- A 错1.024μs 多除了一次 2:4.096μs 是往返时延的上限,单向是它的一半 2.048μs。
- B 错4.096μs 是最小帧的发送时间,等于往返时延 2τ,没有除以 2。
- C 错8.192μs = 2 × 4.096:方向反了,乘了 2。
- D 对对:τ ≤ 4.096 ÷ 2 = 2.048μs。
变化点:速率和最小帧长都变了;关键是除以 2。
- A. 312m
- B. 412m
- C. 512m
- D. 624m
展开解析
A单程最多 2.56μs,减去 Hub 时延 1μs,传播 1.56μs × 200 = 312m。
- A 对对:(2.56 − 1) × 200 = 312m。
- B 错412m = (2.56 − 0.5) × 200:Hub 时延只减了一半;信号单程经过 Hub 一次,就要减整整 1μs。
- C 错512m = 2.56 × 200:忽略了 Hub 的 1μs 时延。
- D 错624m = (5.12 − 2) × 200:用了往返时间,没有除以 2,算的是来回的总距离。
变化点:设备时延变了,其余不变。
- A. 令牌传递
- B. 纯 ALOHA
- C. 1-坚持 CSMA
- D. CSMA/CD
展开解析
A令牌传递按顺序轮流发送,没有冲突,每个站持有令牌的时间有上限,所以等待时间也有上限;负载越重越能体现优势。ALOHA、CSMA、CSMA/CD 都是随机访问,负载重时冲突多。
- A 对对:令牌轮流传递,没有冲突,等待时间有上限。
- B 错纯 ALOHA 想发就发,负载重时冲突极多,等待时间也没有上限。
- C 错1-坚持 CSMA 负载重时多个站同时等着,信道一空闲就一起发,冲突多,时延没有上限。
- D 错CSMA/CD 是随机访问,负载重时冲突、退避频繁,等待时间没有确定的上限。
考点:3.5 节“轮询访问:令牌传递协议”。
- A. 立即发送
- B. 等待一段随机时间后再监听
- C. 等待 DIFS 后发送
- D. 以概率 p 发送,以概率 1 − p 推迟到下一个时隙再监听
展开解析
D立即发送是 1-坚持和非坚持在信道空闲时的做法;“等随机时间再监听”是非坚持在信道忙时的做法;DIFS 是 802.11 CSMA/CA 的概念。
- A 错立即发送是 1-坚持(以及非坚持)在信道空闲时的做法,p-坚持要按概率 p 决定。
- B 错等一段随机时间再监听是非坚持 CSMA 在信道忙时的做法。
- C 错DIFS 是 802.11 CSMA/CA 的帧间间隔,CSMA 的三种坚持策略里没有这个概念。
- D 对对:以概率 p 发送,以 1 − p 推迟到下一时隙。
考点:3.5 节 CSMA 三种策略对照表。
- A. 1-坚持 CSMA
- B. 非坚持 CSMA
- C. p-坚持 CSMA
- D. CSMA/CA
展开解析
A1-坚持“死等”,信道空闲立即发,几个站同时等时冲突多;非坚持忙时随机等待后再监听;p-坚持空闲时以概率 p 发送。
- A 对对:1-坚持“死等”,空闲立即发。
- B 错非坚持 CSMA 在信道忙时不持续监听,而是随机等待一段时间后再监听。
- C 错p-坚持 CSMA 在空闲时只以概率 p 发送,不是一定立即发送。
- D 错CSMA/CA 信道空闲时还要等 DIFS 并退避,不会“一空闲就立即发送”。
考点:3.5 节“CSMA:先听再说,三种坚持”。
- A. T / 2
- B. T
- C. 3T
- D. 2T
展开解析
D从本帧开始前 T(别人的帧还没发完)到本帧结束,共 2T。时隙 ALOHA 把易损期缩为 T。
- A 错T/2 太短:别的站只要在本帧开始前 T 内或本帧发送期间开始发,都会重叠。
- B 错T 是时隙 ALOHA 的易损期;纯 ALOHA 不对齐时隙,易损期是 2T。
- C 错3T 多算了一个 T:易损期是本帧开始前的 T 加上本帧发送的 T。
- D 对对:2T。
考点:3.5 节“ALOHA:想发就发”。
3.6无线局域网 802.11:CSMA/CA、RTS/CTS 与四个地址
组网方式:BSS、ESS 与自组织网络
802.11 无线局域网有两种组网方式:有固定基础设施的——若干站点和一个接入点 AP 组成一个基本服务集 BSS,多个 BSS 通过分配系统 DS(通常是有线以太网)连成扩展服务集 ESS,站点的所有通信都要经过 AP;无固定基础设施的叫自组织网络(ad hoc),站点之间直接通信,每个站都兼做转发。
为什么无线网不能用 CSMA/CD:隐蔽站与暴露站
- 无线信号在接收端的强度远小于发送端,站点在发送时很难同时检测到别人的微弱信号,“边发边听”的硬件代价太大。
- 更根本的是:无线信号的覆盖范围有限,发送方听到的情况不等于接收方那里的情况。
所以 802.11 改为尽量避免冲突(Collision Avoidance),并且因为无线信道误码率高,采用链路层确认:接收方正确收到数据帧后要回送 ACK,发送方收不到 ACK 就重传。四种 MAC 协议中只有 CSMA/CA 对正确接收的帧进行确认(2011-36)。
- A. CSMA
- B. CDMA
- C. CSMA/CD
- D. CSMA/CA
展开解析
D无线信道误码率高,又无法检测冲突,所以 802.11 的 CSMA/CA 采用链路层确认:接收方正确收到数据帧后等 SIFS 回送 ACK,发送方收不到 ACK 就重传。
- A 错CSMA:只监听后发送,没有确认。
- B 错CDMA:码分多址,属于信道划分,不涉及确认。
- C 错CSMA/CD:以太网提供不可靠服务,不确认;发送方靠检测冲突判断是否要重发。
- D 对CSMA/CA。
以太网不确认;802.11 每个数据帧都要 ACK。
帧间间隔与 CSMA/CA 的发送过程
| 帧间间隔 | 长短 | 用在哪里 |
|---|---|---|
| SIFS(短帧间间隔) | 最短 | 需要立即响应的帧:ACK、CTS、分片后的后续数据帧,以及回答 CTS 后发出的数据帧 |
| PIFS(点协调帧间间隔) | 中等 | AP 在点协调方式下使用(了解) |
| DIFS(分布协调帧间间隔) | 最长 | 站点要开始一次新的发送(发送数据帧或 RTS)前必须等待的时间 |
IFS 越短优先级越高:一次“交换”(RTS—CTS—DATA—ACK)开始时等 DIFS,中间每一步都只等 SIFS,别的站至少要等 DIFS 才能动手,所以插不进来,整个交换不会被打断(2020-37:最长的是交换开始前的 IFS1)。
- 站点有数据要发,先监听信道。若信道空闲,等待一个 DIFS 后仍空闲,就发送整个数据帧(发送过程中不再检测冲突)。
- 若信道忙(或 DIFS 期间变忙),就推迟,并选一个随机退避时间启动退避计时器。信道空闲时计时器倒数,信道忙时冻结;减到 0 时(此时信道一定空闲)发送整个帧。(退避时间 = 从 [0, CW] 中随机取的时隙数 × 时隙长度。拓展 竞争窗口 CW 从最小值开始(如 802.11a/g 为 15),每次重传翻倍加 1:31、63……到上限 1023 不再增大;发送成功后恢复最小值。和以太网的二进制指数退避是同一个思路。)
- 接收方正确收到数据帧(CRC 校验通过),等待 SIFS 后回送 ACK。
- 发送方在规定时间内收到 ACK,说明成功;若要发送下一帧,仍要从第 2 步的退避开始(除非是分片的后续帧)。收不到 ACK,就认为出错,退避后重传;重传次数到上限就放弃。
- A. IFS1
- B. IFS2
- C. IFS3
- D. IFS4
展开解析
A开始一次新的发送前等 DIFS(最长);在一次交换中作出响应的帧前面等 SIFS(最短)。
- IFS1:H 发 RTS 前,这是一次交换的开始 → DIFS。
- IFS2:AP 回 CTS 前 → SIFS。
- IFS3:H 收到 CTS 后发 DATA 前 → SIFS。
- IFS4:AP 回 ACK 前 → SIFS。
- A 对IFS1 是 DIFS,最长。
- B 错IFS2 是 AP 回 CTS 之前的间隔,属于同一次交换中的应答,等的是最短的 SIFS,不是最长的。
- C 错IFS3 是 SIFS:数据帧是对 CTS 的回应,属于同一次交换。
- D 错IFS4 是 AP 回 ACK 之前的间隔,同样是应答帧前面的 SIFS,最短。
交换开头等 DIFS,中间都等 SIFS,这样别人插不进来。
| CSMA/CD(有线以太网) | CSMA/CA(无线局域网 802.11) | |
|---|---|---|
| 对冲突 | 检测:边发边听,发现冲突立即停发 | 避免:发送前等 DIFS、随机退避,发送时不检测 |
| 什么时候退避 | 冲突之后 | 信道由忙变闲时就先退避(一般每次发送前都要) |
| 退避计时 | 冲突后立即开始倒数 | 只在信道空闲时倒数,忙时冻结 |
| 确认 | 没有(以太网不确认) | 有:收不到 ACK 就重传 |
| 载波监听 | 物理载波监听 | 物理载波监听 + 虚拟载波监听(NAV) |
| 信道预约 | 无 | RTS / CTS(可选) |
| 工作方式 | 半双工 | 半双工(无线收发不能同时) |
信道预约:RTS / CTS 与 NAV
为了进一步避免冲突(尤其是隐蔽站),源站可以先预约信道(2018-35):
- 源站等待 DIFS 后,先发一个很短的请求发送帧 RTS,里面写明这次通信要占用信道多长时间(持续时间字段)。
- AP 收到后等 SIFS,广播一个允许发送帧 CTS,同样带有持续时间。
- 源站收到 CTS 后等 SIFS 发送数据帧;AP 收到后等 SIFS 回 ACK。
- 其他站收到 RTS 或 CTS 后,按其中的持续时间设置网络分配向量 NAV:在 NAV 倒数到 0 之前,认为信道忙,不发送。这叫虚拟载波监听。隐蔽站听不到 RTS,但能听到 AP 发的 CTS,所以也会让路。
跟我算
先算数据帧发送时间:1000 B = 8000 bit;100 Mb/s = 108 b/s;8000 ÷ 108 s = 80 μs。
- RTS 之后还有:SIFS + CTS + SIFS + DATA + SIFS + ACK = 10 + 14 + 10 + 80 + 10 + 14 = 138 μs。
- CTS 之后还有:SIFS + DATA + SIFS + ACK = 10 + 80 + 10 + 14 = 114 μs。
- DATA 之后还有:SIFS + ACK = 24 μs。
- 整个交换:DIFS + RTS + 138 = 50 + 20 + 138 = 208 μs。
NAV 从“收到这一帧”之后开始算,不包括这一帧本身和它之前的 DIFS、RTS。算数据帧发送时间时注意 B 要乘 8。题目若“忽略 ACK 的发送时延”,最后一项就是 0(2026-35)。
- A. 326μs
- B. 354μs
- C. 385μs
- D. 513μs
展开解析
B隐藏站 B 听不到 A 的 RTS,只能听到 AP 的 CTS。CTS 中的持续时间是 CTS 发完之后信道还要被占用的时间:SIFS + DATA + SIFS + ACK。
- 数据帧发送时间 = 1998 × 8 ÷ 54M = 296μs。
- NAV = 28 + 296 + 28 + 2 = 354μs。
- A 错326 = 296 + 28 + 2:少算了一个 SIFS。
- B 对354μs。
- C 错385 = 354 + 3 + 28:多出的 31μs 正好是 RTS(3μs)和它后面的一个 SIFS(28μs)。可隐藏站 B 听不到 RTS,它的 NAV 只能从收到的 CTS 发完时算起。
- D 错513μs 比整个交换过程还长:从 A 等 DIFS 到 ACK 发完一共 120 + 3 + 28 + 2 + 28 + 296 + 28 + 2 = 507μs,任何站的 NAV 都不可能超过它;B 的 NAV 只从 CTS 发完算起。
CTS 设置的 NAV = SIFS + DATA + SIFS + ACK;RTS 设置的 NAV 还要在前面加 SIFS + CTS。
- A. 40μs
- B. 68μs
- C. 168μs
- D. 196μs
展开解析
B计时从“开始发送数据帧”算起,DIFS 已经等过了,不计入。之后是:发送数据帧 → 接收方等 SIFS → 发 ACK(ACK 发送时间和传播时延都忽略)。
- 数据帧发送时间 = 1500 × 8 ÷ 300M = 40μs。
- 加上接收方回 ACK 前的 SIFS:40 + 28 = 68μs。
- A 错40μs:漏了接收方回 ACK 前的 SIFS。
- B 对68μs。
- C 错168 = 40 + 128:把 ACK 前的 SIFS 错用成了 DIFS。
- D 错196 = 128 + 40 + 28:把发送前的 DIFS 也算进来了,但计时从开始发送数据帧算起。
先看计时起点和终点,再决定 DIFS 算不算。ACK 前面永远是 SIFS。
- A. 发送确认帧
- B. 采用二进制指数退避
- C. 使用多个 MAC 地址
- D. 交换 RTS 与 CTS 帧
展开解析
D源站先发 RTS 说明要占用信道多久,AP 广播 CTS 作答;其他站据此设置 NAV,在这段时间内不发送。这就是“预约”信道。
- A 错确认帧用来保证可靠传输,发现丢帧后重传,不能预约信道。
- B 错二进制指数退避是 CSMA/CD 冲突后的重传策略。CSMA/CA 虽然也退避,但退避不是预约。
- C 错多个 MAC 地址与预约无关。802.11 帧有多个地址字段,是为了标明收发双方和源、目的。
- D 对交换 RTS 与 CTS。
预约 = RTS/CTS + NAV(虚拟载波监听)。
802.11 的帧分三类:数据帧;控制帧(RTS、CTS、ACK);管理帧(信标 beacon——AP 周期性广播自己的 SSID,站点据此发现网络;关联请求 / 响应等)。拓展 物理层标准有 802.11b(2.4 GHz,11 Mb/s)、802.11a/g(54 Mb/s)、802.11n、802.11ac、802.11ax(Wi-Fi 6)等,MAC 层都用 CSMA/CA。
802.11 数据帧的地址(考填地址)
802.11 数据帧首部有 4 个地址字段,有基础设施的网络只用前 3 个。它们的含义取决于帧控制字段中的“去往 AP”(To DS)和“来自 AP”(From DS)两位:
| 方向 | To DS | From DS | 地址 1 | 地址 2 | 地址 3 |
|---|---|---|---|---|---|
| 站点 → AP(发往外部) | 1 | 0 | AP(接收地址,BSSID) | 源站 | 目的地址(如路由器接口) |
| AP → 站点(从外部来) | 0 | 1 | 目的站 | AP(发送地址,BSSID) | 源地址(如路由器接口) |
| 站点 → 站点(自组织网络,无 AP) | 0 | 0 | 目的站 | 源站 | BSSID(这个自组织网络的标识) |
地址 1 永远是这一跳无线传输的接收者,地址 2 永远是这一跳的发送者,地址 3 是 AP 另一侧的那个地址(往外发是最终目的,往里收是最初来源)。H 发往 Internet 的帧,这一跳从 H 发到 AP,地址 3 是 AP 所连路由器的接口 MAC(2017-35)。
- A. 00-12-34-56-78-9a,00-12-34-56-78-9b,00-12-34-56-78-9c
- B. 00-12-34-56-78-9b,00-12-34-56-78-9a,00-12-34-56-78-9c
- C. 00-12-34-56-78-9b,00-12-34-56-78-9c,00-12-34-56-78-9a
- D. 00-12-34-56-78-9a,00-12-34-56-78-9c,00-12-34-56-78-9b
展开解析
B帧 F 从 H 发往 AP(去往 AP):地址 1 = 这一跳的接收者(AP),地址 2 = 这一跳的发送者(H),地址 3 = 最终的链路层目的地址。
- 地址 1:AP 的 MAC 00-12-34-56-78-9b。
- 地址 2:H 的 MAC 00-12-34-56-78-9a。
- 地址 3:IP 分组要去 Internet,下一跳是路由器 R,所以是 R 接口的 MAC 00-12-34-56-78-9c。
- A 错9a、9b、9c:这是反方向(AP 把从 R 来的帧转发给 H)时的地址:地址 1 = H,地址 2 = AP,地址 3 = R。
- B 对9b、9a、9c。
- C 错地址 2 写成了 R。R 不在这一跳无线传输上,发送者是 H。
- D 错地址 1 写成了 H 自己。接收者是 AP。
地址 1 收,地址 2 发,地址 3 是 AP 另一侧的那台设备。
- 概念(2011-36、2018-35):只有 CSMA/CA 确认;信道预约靠 RTS / CTS。
- IFS(2020-37):交换开始前等 DIFS(最长),中间都等 SIFS。
- NAV / 时间(2024-36、2026-35):从“这一帧之后”加到 ACK 结束;题目忽略谁就把谁记 0。
- 地址(2017-35):地址 1 收、地址 2 发、地址 3 远端。
可能的新考法:暴露站问题;退避计时器冻结;ad hoc 与有 AP 的区别;AP 发往站点时三个地址怎么填(图中下行那一行)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 428μs
- B. 458μs
- C. 489μs
- D. 578μs
展开解析
B数据帧 2700 × 8 ÷ 54M = 400μs;NAV = SIFS + DATA + SIFS + ACK = 28 + 400 + 28 + 2 = 458μs。
- A 错428μs = 28 + 400:少算了 ACK 前的 SIFS 和 ACK 本身(还要加 28 + 2)。
- B 对对:28 + 400 + 28 + 2 = 458μs。
- C 错489μs = 458 + 3 + 28:多算了 RTS 和它后面的一个 SIFS;隐藏站听不到 RTS,NAV 从 CTS 发完算起。
- D 错578μs = 458 + 120:把 DIFS 也算进来了;NAV 只覆盖 CTS 之后的 SIFS + DATA + SIFS + ACK。
变化点:只有数据帧发送时间变了,公式不变。
- A. 20μs
- B. 148μs
- C. 48μs
- D. 176μs
展开解析
C数据帧 1500 × 8 ÷ 600M = 20μs,加上 ACK 前的 SIFS 28μs,共 48μs。
- A 错20μs 只算了数据帧的发送时间,漏了接收方回 ACK 之前的 SIFS 28μs。
- B 错148μs = 20 + 128:把 ACK 前的 SIFS 错用成了 DIFS。
- C 对对:20 + 28 = 48μs。
- D 错176μs = 128 + 20 + 28:把发送前的 DIFS 也算了进去,但计时从开始发送数据帧算起。
变化点:速率翻倍,只有数据帧时间减半。
- A. 9b、9a、9c
- B. 9c、9b、9a
- C. 9a、9c、9b
- D. 9a、9b、9c
展开解析
D来自 AP 的帧:地址 1 = 接收者 H(9a),地址 2 = 发送者 AP(9b),地址 3 = 源地址 R(9c)。
- A 错9b、9a、9c 是 H 发往 AP 时的地址(地址 1 = AP、地址 2 = H);方向反过来,地址 1、2 要对调。
- B 错地址 1 写成了 R:R 不在这一跳无线传输上,接收者是 H;R 填在地址 3。
- C 错地址 2、3 写反了:这一跳的发送者是 AP(地址 2),R 是源地址(地址 3)。
- D 对对:接收者 H、发送者 AP、源地址 R。
变化点:方向反过来:H → AP 变成 AP → H。
- A. 隐蔽站问题
- B. 暴露站问题
- C. 冲突检测失败
- D. 多径效应
展开解析
B暴露站是“听到忙就不发”造成的浪费;隐蔽站是“听到闲就发”造成的冲突。两者都说明发送方的监听不代表接收方处的情况。
- A 错隐蔽站是“听不到别人在发、以为信道空闲就发”而造成冲突,与题中“听到忙就不发”正相反。
- B 对对:暴露站问题,白白推迟了本可以进行的发送。
- C 错无线局域网本来就不做冲突检测(用 CSMA/CA),题中也没有发生冲突,只是白白推迟了发送。
- D 错多径效应是信号经不同路径反射后叠加造成的失真,讲的是信号质量,不是推迟发送。
考点:3.6 节“隐蔽站与暴露站”。
- A. 冻结计时器,信道再次空闲 DIFS 后接着倒数
- B. 立即发送
- C. 重新选择一个更大的随机数
- D. 放弃本次发送
展开解析
A退避计数只在信道空闲时减少,忙时冻结,不重新抽——等得越久的站越先轮到。
- A 对对:忙时冻结,空闲 DIFS 后接着倒数。
- B 错信道忙时立即发送必然与正在进行的传输冲突;倒数要等信道空闲才继续。
- C 错重新抽一个更大的随机数是没收到 ACK(发送失败)后的做法;信道变忙只冻结,不重新选。
- D 错信道忙不是发送失败,不会放弃;等信道空闲 DIFS 后接着倒数,到 0 就发。
考点:3.6 节“帧间间隔与 CSMA/CA 的发送过程”。
- A. H 的 MAC 地址
- B. AP 的 MAC 地址
- C. R 的 MAC 地址
- D. 广播地址
展开解析
CFrom DS = 1 时:地址 1 = 接收者 H,地址 2 = 发送者 AP,地址 3 = 源地址 R。
- A 错H 是这一跳的接收者,填在地址 1,不是地址 3。
- B 错AP 是这一跳的发送者,填在地址 2,不是地址 3。
- C 对对:From DS = 1 时地址 3 是源地址 R。
- D 错这是发给 H 的单播帧,不涉及广播地址;地址 3 填原始发送方 R。
考点:3.6 节“802.11 数据帧的地址”。
3.7局域网与以太网,广域网与 PPP 协议
局域网的基本概念与体系结构
局域网(LAN)是在较小的地理范围内(一栋楼、一个校园)把计算机和外设连起来的网络。特点:为一个单位所有,范围小;速率高、时延小、误码率低;各站平等地共享传输信道,便于广播和多播。
决定局域网特性的三个要素:拓扑结构(星形、总线形、环形、树形)、传输介质(双绞线最常用,还有同轴电缆、光纤、无线)、介质访问控制方式。其中介质访问控制方式最重要,它决定了局域网的技术特性。
| 局域网 | 标准 | 逻辑拓扑 | 物理拓扑 | 介质访问控制 |
|---|---|---|---|---|
| 以太网 | IEEE 802.3 | 总线形 | 星形(中心是集线器或交换机) | CSMA/CD |
| 令牌环网 | IEEE 802.5 | 环形 | 星形 | 令牌传递 |
| FDDI | — | 环形 | 双环 | 令牌传递 |
| 无线局域网 | IEEE 802.11 | — | 有 AP 时为星形 | CSMA/CA |
IEEE 802 参考模型只对应 OSI 的物理层和数据链路层,并把数据链路层拆成两个子层:
- 逻辑链路控制 LLC 子层:与传输介质无关,向网络层提供服务(无确认无连接、面向连接、带确认无连接等),为网络层屏蔽不同的介质访问方式。
- 介质访问控制 MAC 子层:与传输介质有关,负责组帧和拆帧、比特差错检测、按 MAC 地址寻址、介质访问控制(CSMA/CD 等)。
以太网在局域网市场一家独大后,LLC 的作用已经很小,许多网卡只装 MAC 协议,以太网 V2 帧里也没有 LLC 的内容。
以太网的特点与 MAC 地址
- 以太网是目前最流行的有线局域网。它采用无连接的工作方式,对发送的帧不编号、不要求确认:收到有差错的帧就丢弃,是否重传由高层(如 TCP)决定。所以以太网提供的是无连接、不可靠的服务,即尽最大努力交付(2012-35)。
- 传统以太网:逻辑上是总线,用 CSMA/CD;10Mbps 以太网使用曼彻斯特编码。用集线器连成星形,物理上是星形,逻辑上仍是总线。
- MAC 地址(硬件地址、物理地址)48 位,写成 6 个字节,如 00-1A-2B-3C-4D-5E。前 24 位是 IEEE 分给厂商的组织唯一标识符 OUI,后 24 位由厂商自行分配,固化在网卡(网络适配器)的 ROM 中。网卡负责实现物理层和数据链路层的功能。严格地说,MAC 地址是网卡的“名字”而不是“地址”——它不随主机搬家而改变。
| MAC 地址 | 首字节二进制 | 类型 | 谁会收下 |
|---|---|---|---|
| 00-1A-2B-3C-4D-5E | 0000 0000 | 单播 | 只有这块网卡 |
| 01-00-5E-01-02-03 | 0000 0001 | 多播(IP 多播映射,4.10 节) | 加入了相应组的网卡 |
| 33-33-00-00-00-01 | 0011 0011 | 多播(IPv6 多播用) | 加入了相应组的网卡 |
| FF-FF-FF-FF-FF-FF | 1111 1111 | 广播 | 同一广播域里的所有网卡 |
网卡收到帧后先看目的地址:是发给本机的单播帧、广播帧或本机所在多播组的帧就收下,否则丢弃(网卡被设成“混杂模式”时什么帧都收,抓包软件就是这样工作的)。
- A. 无连接不可靠服务
- B. 无连接可靠服务
- C. 有连接不可靠服务
- D. 有连接可靠服务
展开解析
A以太网不建立连接,对帧不编号、不确认,收到错帧直接丢弃,是否重传由上层决定。所以是无连接、不可靠的服务(尽最大努力交付)。
- A 对无连接不可靠。
- B 错可靠:以太网没有确认和重传机制,谈不上可靠。
- C 错有连接:以太网发送前不建立连接。
- D 错D 的“有连接”和“可靠”两处都错:以太网发送前不建立连接,对帧也不编号、不确认、不重传。
以太网、IP、UDP 都是无连接不可靠;可靠靠 TCP。
从共享式以太网到交换式以太网:早期以太网用一根同轴电缆(总线)或一个集线器连接所有主机,大家共享带宽、用 CSMA/CD 争用信道。后来交换机普及,每台主机独占一个交换机端口,全双工通信时根本不会冲突,CSMA/CD 就用不上了——但帧格式、MAC 地址一直没变,所以仍叫以太网。考题里说“以太网采用 CSMA/CD”,指的是共享式(半双工)以太网。
以太网 V2 的 MAC 帧格式
| 字段 | 是什么 | 怎么考 |
|---|---|---|
| 前导码 8 B | 7 字节 10101010 让接收方时钟同步,1 字节帧开始定界符 10101011 | 物理层加上的,不算帧长;2013-38 说“不包括前导码” |
| 目的地址 6 B | 接收方的 MAC 地址,放在最前面 | 网卡、交换机收到前 6 个字节就能决定收不收、往哪转(直通交换的依据) |
| 源地址 6 B | 发送方的 MAC 地址 | 交换机靠它自学习 |
| 类型 2 B | 上层协议:0x0800 IPv4、0x0806 ARP、0x86DD IPv6 | 链路层的“服务访问点”(1.4 节) |
| 数据 46 ~ 1500 B | IP 数据报;不足 46 B 要填充 | MTU = 1500;填充的内容由 IP 首部的总长度字段区分出来 |
| FCS 4 B | CRC-32 检验码,覆盖目的地址到数据 | 只检错,错帧直接丢弃 |
跟我算:填充。一个 ARP 报文只有 28 字节,装进以太网帧时数据部分要补 46 − 28 = 18 字节的填充,帧长 14 + 46 + 4 = 64 字节。接收方怎么知道后面 18 个字节是填充?IP 数据报、ARP 报文自己的首部里写着真正的长度,多出来的部分上层直接丢掉。
802.3 帧与 V2 帧的差别:V2 的“类型”字段在 802.3 中是“长度/类型”字段,值小于 0x0600 时表示数据长度。现在市场上几乎都是 V2 格式。
以太网的物理层命名与高速以太网
以太网标准的名字有固定格式“速率 + BASE + 介质”:10BASE-T 中,10 表示 10 Mb/s,BASE 表示基带传输,T 表示双绞线(Twisted pair)。同理,10BASE5 是粗同轴电缆(每段最长 500 m),10BASE2 是细同轴电缆(约 200 m,实际 185 m),10BASE-F 是光纤;100BASE-TX 用双绞线,1000BASE-LX 用光纤。10BASE-T 每段双绞线最长 100 m。
- 100BASE-T(快速以太网):双绞线,100Mbps;支持全双工和半双工,半双工时仍用 CSMA/CD。最短帧长仍为 64B,所以争用期缩为 5.12μs,最大电缆长度相应缩短(这就是“速率提高、距离缩短”的来历)。
- 吉比特以太网:1Gbps,全双工时不用 CSMA/CD;半双工时用载波延伸、分组突发保证最短帧的发送时间够长。
- 10 吉比特以太网及更快的:只工作在全双工,不使用 CSMA/CD,已经不是“共享信道”了。
高速以太网保留了以太网的帧格式(64 ~ 1518 B),所以无论多快,交换机、网卡之间都能互通——这是以太网能一路从 10 Mb/s 升级到 100 Gb/s 的原因。
广域网与 PPP 协议
- 广域网(WAN)跨越很大的地理范围(城市、国家乃至洲际),是因特网的核心部分,任务是长距离传送主机发出的数据。它由结点交换机和连接它们的高速链路组成,结点之间是点对点连接,采用存储转发的分组交换。
- 与局域网的区别:局域网使用的协议主要在数据链路层(还有少量物理层),广域网使用的协议主要在网络层;局域网多用共享的广播信道,广域网用点对点信道。区分两者的关键是所用的技术,不只是距离。
- 广域网不等于互联网:广域网是一个网络,用结点交换机连接主机;互联网是用路由器把多个网络(局域网、广域网)连起来的“网络的网络”。广域网的链路层最常用 PPP(以前还有 HDLC)。
用户通过电话线、光纤接入 ISP 时,链路层常用 PPP(点对点协议)。它由三部分组成:把 IP 数据报封装到链路上的方法;链路控制协议 LCP(建立、配置和测试数据链路连接);一套网络控制协议 NCP(为不同的网络层协议建立和配置逻辑连接,如 IP 用的 IPCP)。
| 字段 | 标志 F | 地址 A | 控制 C | 协议 | 信息 | FCS | 标志 F |
|---|---|---|---|---|---|---|---|
| 值 / 长度 | 0x7E | 0xFF | 0x03 | 2 字节 | ≤ 1500 字节 | 2 字节 | 0x7E |
协议字段说明信息部分装的是什么:0x0021 是 IP 数据报,0xC021 是 LCP 数据,0x8021 是 IPCP(NCP)数据。地址字段固定 0xFF、控制字段固定 0x03,实际上没有用——点对点链路只有两端,不需要地址。
异步线路上,PPP 用 7E 作帧界、7D 作转义字符。规则:数据中的 7E → 7D 5E,7D → 7D 5D,ASCII 码小于 0x20 的控制字符 x → 7D (x ⊕ 0x20)。
信息字段:7E 41 7D 03
填充后 :7D 5E 41 7D 5D 7D 23
接收方每遇到 7D,就删掉它,并把后面那个字节与 0x20 异或还原(5E → 7E,5D → 7D,23 → 03)。同步线路(如 SONET/SDH)上 PPP 改用零比特填充。
- PPP 只做差错检测(FCS 发现错帧就丢弃),不做纠错、没有序号和确认、不提供可靠传输,也没有流量控制;只支持点对点、全双工链路;面向字节,帧长都是整数个字节。
- 为什么不做可靠传输:链路的误码率已经很低,可靠传输交给上层的 TCP 做更划算,链路层越简单越快。
- 身份鉴别(可选):LCP 建好链路后、NCP 配置之前,可以先认证对方:PAP(口令认证,两次握手,口令明文传送,不安全)或 CHAP(质询握手认证,三次握手,口令不在线路上传送,更安全)。拨号、宽带接入要先认证再分地址就是这一步。
- 支持多种网络层协议:靠不同的 NCP,同一条 PPP 链路可以承载 IP、IPX 等,两端的网络层协议各自协商配置。
拓展 HDLC(高级数据链路控制)是面向比特的链路层协议,用 01111110 作帧界、零比特填充实现透明传输(2013-37 的背景)。它有三类帧:信息帧(I 帧,传数据,带发送序号和捎带的确认序号)、监督帧(S 帧,做流量控制和差错控制,如确认、拒绝)、无编号帧(U 帧,建立和释放链路等控制)。与 PPP 不同,HDLC 自带编号和确认,可以提供可靠传输。
3.7 只有 2012-35 一道直接题(以太网提供无连接不可靠服务),但本节的数字到处被用:帧长 64 ~ 1518 B(最短帧、MTU)、MAC 地址 48 位、前导码不算帧长(2013-38)、类型 0x0800 / 0x0806(抓包题)。可能的新考法:MAC 地址是单播还是多播;ARP 报文要填充多少字节;10BASE-T 的含义;PPP 的组成(LCP、NCP)、能否纠错、是否可靠;PPP 字节填充。
- 以太网帧长 64 ~ 1518 B 不含前导码 8 B;数据部分 46 ~ 1500 B。
- 以太网、PPP 都只检错不纠错、不可靠;HDLC 带编号和确认,可以可靠。
- PPP 是点对点协议,不需要 MAC 地址,也不用 CSMA/CD;地址字段固定 0xFF。
- MAC 地址看首字节最低位判断单播 / 多播,不是看最高位。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 无确认、只做差错检测的服务
- B. 面向连接的可靠服务
- C. 有编号和确认的可靠服务
- D. 支持多点访问的广播服务
展开解析
APPP 只做差错检测,出错就丢弃,不编号、不确认、不重传;只用于点对点链路。
- A 对对:只做差错检测,出错就丢弃。
- B 错PPP 有建立链路的过程,但它不编号、不确认、不重传,提供的不是可靠服务。
- C 错PPP 帧没有序号字段,也没有确认机制;有编号和确认的是 HDLC 等协议。
- D 错PPP 只用于点对点链路,不支持多点访问;广播信道上用的是以太网的 CSMA/CD。
变化点:从以太网换成 PPP,两者都不可靠。
- A. 0.48μs
- B. 80μs
- C. 5.12μs
- D. 121.44μs
展开解析
B存储转发要把整个帧收完:1000 × 8 ÷ 100Mbps = 80μs。
- A 错0.48μs 是直通交换只收 6 字节目的地址的延迟;存储转发要把 1000B 收完。
- B 对对:1000 × 8 ÷ 100Mbps = 80μs。
- C 错5.12μs 是 64B 最短帧的发送时间;题目的帧是 1000B。
- D 错121.44μs 是 1518B 最长帧的发送时间;题目的帧是 1000B。
变化点:直通交换换成存储转发,看的是整个帧而不是 6 字节目的地址。
- A. LLC 子层
- B. MAC 子层
- C. 网络层
- D. 传输层
展开解析
BIEEE 802 把数据链路层拆成 LLC 和 MAC 两个子层:LLC 与介质无关,向网络层提供服务;MAC 与介质有关,负责组帧、差错检测、寻址和介质访问控制。
- A 错LLC 子层与传输介质无关,向网络层提供统一的服务,不负责介质访问控制。
- B 对对:MAC 子层与介质有关,负责介质访问控制和按 MAC 地址寻址。
- C 错网络层按 IP 地址转发分组,不按 MAC 地址寻址,也不管介质访问。
- D 错传输层在两台主机的进程之间端到端通信,根本不涉及传输介质和 MAC 地址。
考点:3.7 节“局域网的基本概念与体系结构”。
- A. 用链路控制协议 LCP 建立、配置和测试链路
- B. 用网络控制协议 NCP(如 IPCP)配置网络层参数
- C. 通过帧序号和确认机制实现可靠传输
- D. 可以在鉴别阶段用 PAP 或 CHAP 验证用户身份
展开解析
CPPP 只做差错检测,发现错帧就丢弃;它没有序号和确认,不提供可靠传输,也没有流量控制。
- A 不选正确:LCP 负责建立、配置和测试数据链路连接。
- B 不选正确:NCP(如 IP 用的 IPCP)为网络层协商参数,例如分配 IP 地址。
- C 选错误:PPP 帧没有序号,也不确认,只做差错检测,不提供可靠传输。
- D 不选正确:PPP 在鉴别阶段可以用 PAP 或 CHAP 验证用户身份。
考点:3.7 节 PPP 的组成、特点和工作过程。
- A. 00-1A-2B-3C-4D-5E
- B. 02-00-00-12-34-56
- C. 0C-29-AB-CD-EF-01
- D. 01-00-5E-7F-00-01
展开解析
D看首字节最低位(I/G 位):01 = 0000 0001,最低位为 1,是多播;00、02、0C 的最低位都是 0,是单播(02 的次低位为 1,表示本地管理)。
- A 错首字节 00 = 0000 0000,最低位 0,是单播地址。
- B 错首字节 02 = 0000 0010,最低位 0,是单播(次低位 1 只表示本地管理)。
- C 错首字节 0C = 0000 1100,最低位 0,是单播地址。
- D 对对:首字节 01 最低位为 1,是多播(01-00-5E 开头正是 IP 组播映射的地址)。
考点:3.7 节“以太网的特点与 MAC 地址”。
- A. 0
- B. 18
- C. 36
- D. 46
展开解析
B以太网帧的数据部分最少 46 B,46 − 28 = 18 B,帧长 14 + 46 + 4 = 64 B。
- A 错28B 小于以太网数据部分的最小值 46B,必须填充。
- B 对对:46 − 28 = 18B。
- C 错36 = 64 − 28:把 64B 当成了数据部分的最小值;64B 是整帧的最小长度(含首部 14B、尾部 4B),数据部分最少 46B。
- D 错46 是数据部分的最小长度,不是要填充的字节数;46 − 28 = 18。
考点:3.7 节“以太网 V2 的 MAC 帧格式”。
3.8虚拟局域网 VLAN
VLAN:在一台交换机上“隔出”几个广播域
问题:交换机连起来的整个局域网是一个广播域:任何一台主机发的广播帧(如 ARP 请求),所有主机都会收到。主机一多,广播帧会占用大量带宽,也不安全——财务部的主机能直接收到研发部的广播。买几台交换机按部门分开接?部门和楼层往往对不上,人员一调动就要重新布线。
虚拟局域网 VLAN 把一个物理局域网在逻辑上划分成若干个互相隔离的广播域,每个 VLAN 就是一个广播域,和主机的物理位置无关。
- 划分方法:基于交换机端口(最常用,考题都是这种);基于 MAC 地址;基于 IP 地址等网络层信息。
- 同一 VLAN 的主机之间在链路层直接通信;不同 VLAN 之间在链路层完全隔离,必须经过路由器或三层交换机转发。
- 交换机对帧的处理都限制在帧进入端口所属的 VLAN 内:单播帧只在本 VLAN 内查表转发(查不到也只在本 VLAN 内泛洪);广播帧只发往本 VLAN 的其他端口。
- 所以 ARP 请求(广播)只能到达同一 VLAN 的主机,一台主机的 ARP 表里只会有同一 VLAN 中主机的 IP—MAC 对应关系(2024-35);不同 VLAN 的主机即使 IP 在同一网段也解析不到(它们实际上也不应该配在同一网段)。
多个交换机上的同一 VLAN 要互通,交换机之间的干道链路(trunk)上传输的帧要标明属于哪个 VLAN。IEEE 802.1Q 在以太网帧的源地址和类型字段之间插入 4 字节的 VLAN 标签:
- 接入端口(access):连主机的端口,只属于一个 VLAN。帧从主机进来时交换机给它“贴上”标签,从接入端口发给主机时“撕掉”标签——主机看到的始终是普通以太网帧,完全不知道 VLAN 的存在。
- 干道端口(trunk):交换机之间、交换机与路由器之间的端口,可以承载多个 VLAN 的帧,帧在这里带着标签传输。
VLAN 的好处:① 缩小广播域,减少广播帧占用的带宽;② 安全:不同部门在链路层互相看不见;③ 灵活:人员调动只要在交换机上改一下端口所属的 VLAN,不用重新布线。
不同 VLAN 怎样通信:VLAN 之间在链路层是隔断的,必须经过网络层。常见做法是“单臂路由”:路由器只用一个物理接口接到交换机的干道端口,在这个接口上为每个 VLAN 配一个子接口(各有一个 IP 地址,作为该 VLAN 的默认网关);VLAN 10 的帧带着标签 10 上到路由器,路由器查路由表后改成标签 20 发回交换机,再交给 VLAN 20 的主机。三层交换机把这件事在交换机内部做了,更快。
F2:(DA)00-1A-2B-3C-4D-04;(SA)00-1A-2B-3C-4D-05
F3:(DA)FF-FF-FF-FF-FF-FF;(SA)00-1A-2B-3C-4D-02
F4:(DA)00-1A-2B-3C-4D-06;(SA)00-1A-2B-3C-4D-03
- A. 仅 F2、F4
- B. 仅 F1、F3
- C. 仅 F1、F2
- D. 仅 F3、F4
展开解析
BH3 接端口 5,属于 VLAN 1(端口 1~7、13~19)。交换机只在帧进入端口所属的 VLAN 内转发,所以 H3 只能收到 VLAN 1 中发给它的单播帧和广播帧。
- 对应关系:VLAN 1 = H1(端口 13,…-01)、H2(端口 2,…-02)、H3(端口 5,…-03);VLAN 2 = H4(端口 8,…-04)、H5(端口 9,…-05)、H6(端口 12,…-06)。
- F1:H1 → H3,同在 VLAN 1 的单播 → H3 收到。
- F2:H5 → H4,都在 VLAN 2 → 到不了 H3。
- F3:H2 发的广播,在 VLAN 1 内泛洪 → H3 收到。
- F4:H3 自己发给 H6 的帧,H3 是发送方;而且 H6 在 VLAN 2,交换机不会转发过去。
- A 错F2 在 VLAN 2 内,F4 是 H3 自己发出的帧。
- B 对F1、F3。
- C 错F2 的源和目的都在 VLAN 2,H3 收不到。
- D 错D 的 F3 对了,错在 F4:F4 是 H3 自己发给 H6 的帧,H3 是发送方而不是接收方;何况 H6 在 VLAN 2,交换机也不会把它转出 VLAN 1。
先按端口把主机分进 VLAN,再逐帧看:同 VLAN 的单播到目的主机,同 VLAN 的广播到所有主机,跨 VLAN 的都到不了。
- A. <192.168.3.81,00-18-A2-3B-36-21,14:32:00>
- B. <192.168.3.91,00-3E-C2-39-12-B5,14:37:00>
- C. <192.168.3.125,00-E5-78-4A-09-B2,14:35:00>
- D. <192.168.3.129,00-08-6E-05-A7-82,14:52:00>
展开解析
DARP 请求是广播帧,只能在同一个 VLAN 内传播。H4 的 ARP 表里只可能出现与它同一 VLAN 的主机。
- 看图中端口的分组:VLAN 1 = H1、H2、H3、H4;VLAN 2 = H5;VLAN 3 = H6、H7。
- H4 在 VLAN 1,ARP 表中只可能有 H1、H2、H3 的表项。
- 192.168.3.129、00-08-6E-05-A7-82 是 H6,属于 VLAN 3,不会出现。
- A192.168.3.81 是 H2,同在 VLAN 1,可以出现。
- B192.168.3.91 是 H1,同在 VLAN 1,可以出现。
- C192.168.3.125 是 H3,同在 VLAN 1,可以出现。
- DH6 在 VLAN 3,H4 的 ARP 广播到不了它,不会出现。
VLAN = 广播域。ARP 靠广播,跨不了 VLAN。TTL 一栏只是干扰。
两道 VLAN 题都是“先给每台主机标上 VLAN 号,再看帧能到哪”:单播帧要求源、目的在同一 VLAN;广播帧到达源所在 VLAN 的所有主机;ARP 表里只可能有同一 VLAN 的主机。可能的新考法:802.1Q 标签插在哪、多长、VID 几位;带标签帧的最大长度 1522 B;不同 VLAN 之间怎样通信(路由器 / 三层交换机);VLAN 隔离的是广播域还是冲突域(广播域)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. H4
- B. H5
- C. H7
- D. H1、H2、H3、H4
展开解析
CARP 请求是广播帧,只在 H6 所在的 VLAN 3 内传播,同一 VLAN 的只有 H7。
- A 错H4 在 VLAN 1,H6 的 ARP 广播只在 VLAN 3 内传播,到不了 H4。
- B 错H5 在 VLAN 2,同样收不到 VLAN 3 的广播。
- C 对对:同在 VLAN 3 的只有 H7。
- D 错H1 ~ H4 都在 VLAN 1,广播帧不会跨出 H6 所在的 VLAN 3。
变化点:从“ARP 表里有谁”换成“谁收得到广播”,本质都是 VLAN 隔离广播域。
F1:DA 为 H4,SA 为 H6 F2:DA 为 FF-FF-FF-FF-FF-FF,SA 为 H2 F3:DA 为 H5,SA 为 H4 F4:DA 为 FF-FF-FF-FF-FF-FF,SA 为 H6
- A. 仅 F1、F3
- B. 仅 F2、F4
- C. 仅 F1、F2
- D. 仅 F3、F4
展开解析
DH5 在 VLAN 2(端口 9)。F3:同 VLAN 发给 H5 的单播,收到;F4:VLAN 2 内的广播,收到;F1 目的是 H4;F2 是 VLAN 1 的广播,到不了 VLAN 2。
- A 错F1 的目的是 H4,交换机已学到 H4 的端口,只从那里转发,H5 收不到;F3 倒是对的。
- B 错F2 是 H2 在 VLAN 1 发的广播,到不了 VLAN 2 的 H5;F4 倒是对的。
- C 错F1 发给 H4(单播,交换机已学到端口),F2 是 VLAN 1 的广播,H5 一个也收不到。
- D 对对:F3(同 VLAN 发给 H5)、F4(VLAN 2 内广播)。
变化点:换一台主机当接收方,重新按 VLAN 分组判断。
- A. 12 位
- B. 8 位
- C. 16 位
- D. 4 位
展开解析
A802.1Q 标签 4 B:TPID 16 位(0x8100)+ 优先级 3 位 + DEI 1 位 + VID 12 位,最多 4096 个 VLAN。
- A 对对:VID 12 位,最多 4096 个。
- B 错8 位只能标识 256 个 VLAN;VID 是 12 位。
- C 错16 位是 TPID(0x8100)字段的长度,不是 VID。
- D 错4 是整个 802.1Q 标签的字节数(4B),VID 只占其中 12 位。
考点:3.8 节“802.1Q 标签”。
- A. 把交换机设为混杂模式
- B. 经过路由器或三层交换机转发
- C. 使用广播帧
- D. 把两台主机的 MAC 地址设为相同
展开解析
B不同 VLAN 在链路层完全隔离,只能经网络层转发(如单臂路由、三层交换机)。
- A 错混杂模式只是让网卡接收所有帧,不能让交换机把帧转发到别的 VLAN。
- B 对对:不同 VLAN 之间必须经网络层转发。
- C 错广播帧同样被限制在本 VLAN 内,到不了另一个 VLAN。
- D 错MAC 地址相同会让交换表混乱;VLAN 隔离按端口划分,改 MAC 地址也照样不能通信。
考点:3.8 节“VLAN 的好处与单臂路由”。
3.9链路层设备:网桥与交换机,冲突域与广播域
从集线器到网桥,再到交换机
用集线器把几个以太网连成一个大网,所有主机都在一个冲突域里,网越大冲突越多。网桥工作在数据链路层:它收到一个帧,先看目的 MAC 地址,再决定转不转、往哪个端口转。这样网桥两侧各自是一个冲突域,一侧内部的通信不会被转到另一侧,网络的总吞吐量提高了。
- 透明网桥:主机感觉不到它的存在,即插即用,转发表靠自学习建立(下面讲)。
- 能连接不同规格的局域网:网桥是存储转发的——先把整个帧收下、检查无误再转发,所以两侧可以是不同速率的以太网,甚至不同 MAC 协议的局域网(如以太网与令牌环网,要做帧格式转换)。集线器、中继器做不到这一点。代价是存储转发带来时延;网桥的端口少(典型 2 个),用软件查表,交换机端口多、用硬件高速转发。
- 以太网交换机本质上是一个多端口的网桥(2015-37),每个端口通常直接接一台主机或一个集线器,工作在数据链路层,根据帧的目的 MAC 地址转发(2009-36)。交换机工作在全双工方式时没有冲突,不需要 CSMA/CD。
- A. 目的物理地址
- B. 目的 IP 地址
- C. 源物理地址
- D. 源 IP 地址
展开解析
A交换机工作在数据链路层,只认识 MAC 地址(物理地址),根据帧的目的 MAC 地址查转发表决定从哪个端口转发。
- A 对目的物理地址。
- B 错目的 IP 地址是网络层地址,路由器用它转发。
- C 错源物理地址是交换机用来“学习”、建立转发表的,不用于转发决策。
- D 错源 IP 地址是网络层地址,交换机不看。
交换机:源 MAC 用来学,目的 MAC 用来转。
- A. 以太网交换机本质上是一种多端口网桥
- B. 通过交换机互连的一组工作站构成一个冲突域
- C. 交换机每个端口所连网络构成一个独立的广播域
- D. 以太网交换机可实现采用不同网络层协议的网络互联
展开解析
A以太网交换机本质上是一个多端口网桥,工作在数据链路层。
- A 对多端口网桥。
- B 错交换机的每个端口是一个独立的冲突域,用交换机连起来的工作站不在同一个冲突域(用集线器连才是)。
- C 错交换机不隔离广播域,它的所有端口同属一个广播域。每个端口是一个独立的冲突域,不是广播域。
- D 错互连网络层协议不同的网络要用路由器(网络层及以上的设备),交换机做不到。
交换机:每端口一个冲突域,整体一个广播域。
交换机怎样转发:自学习,跟我走一遍
交换机的转发表(交换表)不用人工配置,是自学习出来的:
- 学习:收到一个帧,先把(源 MAC 地址,进入端口)写入转发表——“从这个口进来的,以后发给它就走这个口”。表项有有效时间(如 300 s),过期删除,所以主机换了端口也能重新学到。
- 转发:用目的 MAC 地址查表。
- 查到了,且对应端口不是进入端口 → 只从该端口转发;
- 查到了,但就是进入端口 → 目的主机和源在同一侧,丢弃(过滤);
- 查不到,或者是广播帧 → 从除进入端口外的所有端口转发(泛洪)。
| 次序 | 帧(源 → 目的) | 学到什么 | 查目的地址 | 从哪些端口发出 | 转发表(之后) |
|---|---|---|---|---|---|
| ① | A → D | A 在端口 1 | D 不在表中 | 2、3、4(泛洪) | A-1 |
| ② | D → A | D 在端口 4 | A 在端口 1 | 1 | A-1、D-4 |
| ③ | C → A | C 在端口 3 | A 在端口 1 | 1 | A-1、D-4、C-3 |
| ④ | B → 广播 | B 在端口 2 | 广播帧 | 1、3、4(泛洪) | A-1、D-4、C-3、B-2 |
| ⑤ | A → C | (已有) | C 在端口 3 | 3 | 不变 |
注意第 ① 步:D 还没“说过话”,交换机不知道它在哪,只能泛洪——B、C 也会收到这个帧(网卡发现目的地址不是自己就丢弃)。交换机学的永远是源地址,用的永远是目的地址。
- A. {3} 和 {1}
- B. {2, 3} 和 {1}
- C. {2, 3} 和 {1, 2}
- D. {1, 2, 3} 和 {1}
展开解析
B交换机收到帧:先用源地址“学习”,再用目的地址查表;查不到就从除进入端口外的所有端口转发。
- 第 1 帧 a1 → c1,从端口 1 进入:学到(a1,端口 1)。表中没有 c1,从端口 {2, 3} 转发。
- 第 2 帧 c1 → a1,从端口 3 进入:学到(c1,端口 3)。表中已有 a1 → 端口 1,只从 {1} 转发。
- A 错{3}:第 1 帧时表中还没有 c1,交换机不知道它在端口 3,只能泛洪。
- B 对{2, 3} 和 {1}。
- C 错{1, 2}:第 2 帧时交换机已经从第 1 帧学到 a1 在端口 1,不会泛洪。
- D 错{1, 2, 3}:泛洪不会从帧进入的端口 1 发回去。
每收到一帧都先学源地址。泛洪 = 除进入端口外的所有端口。
三种交换方式与交换机的容量
| 直通交换(cut-through) | 无碎片交换(fragment-free) | 存储转发(store-and-forward) | |
|---|---|---|---|
| 做法 | 只要收到帧首部的 6 字节目的地址,查表后立即开始转发 | 收到前 64 字节再转发(短于 64 B 的是冲突碎片,丢掉) | 把整个帧收下来放进缓存,CRC 检查无误后再转发 |
| 转发时延(100 Mb/s) | 48 bit ÷ 108 b/s = 0.48 μs(2013-38) | 512 bit ÷ 108 b/s = 5.12 μs | 至少整帧的发送时间:64 B 帧 5.12 μs,1518 B 帧 121.44 μs |
| 检错 | 不检查,错帧也照转 | 只过滤冲突碎片 | 丢弃错帧 |
| 其他 | 两端口速率必须相同 | 折中(拓展) | 可连接不同速率的端口,是最常用的方式 |
- A. 0μs
- B. 0.48μs
- C. 5.12μs
- D. 121.44μs
展开解析
B直通交换只要收到帧首部的目的 MAC 地址(6 字节)就能查表并开始转发,不用等整个帧到齐。
- 不含前导码时,帧的开头就是目的地址,共 6 × 8 = 48bit。
- 转发延迟至少 48 ÷ 100M = 0.48μs。
- A 错0μs:至少要收到目的地址才能查表。
- B 对0.48μs。
- C 错5.12μs:64B 最短帧的发送时间,是存储转发方式转发最短帧的延迟。
- D 错121.44μs:1518B 最长帧的发送时间,是存储转发方式转发最长帧的延迟。
直通:只等 6B 目的地址;存储转发:等整帧。
交换机的总容量:用集线器连接的 N 台 10 Mb/s 主机共享 10 Mb/s,平均每台只有 10 ÷ N;用 10 Mb/s 交换机连接时,每个端口到主机都独占 10 Mb/s,多对主机可以同时通信,N 个端口的交换机总容量为 N × 10 Mb/s。跟我算:24 口的 100 Mb/s 交换机,总容量 24 × 100 Mb/s = 2.4 Gb/s;若各端口都工作在全双工、两个方向分别计算,则为 4.8 Gb/s(题目说明“全双工”并按双向计时用这个口径)。
跟我算:共享与独占。10 台主机用 100 Mb/s 的集线器连接,所有主机共享 100 Mb/s,平均每台 100 ÷ 10 = 10 Mb/s,而且同一时刻只能有一台在发;换成 10 口 100 Mb/s 交换机后,每台主机独占 100 Mb/s,5 对主机可以同时通信,交换机总容量 10 × 100 Mb/s = 1 Gb/s。
为了可靠,常在交换机之间多连几条线,形成环路。可广播帧会沿着环一圈圈地转(交换机不改帧,以太网帧也没有 TTL),越转越多,很快占满带宽——这就是广播风暴;同一个源地址还会从不同端口“学到”,转发表来回抖动。生成树协议 STP(IEEE 802.1D)让交换机之间交换信息,自动选出一棵没有环路的生成树,把多余的端口阻塞(不转发数据帧);正在用的链路坏了,再把被阻塞的端口打开顶上。逻辑上无环,物理上仍有备份。
冲突域与广播域:怎么数
- 冲突域:同一时刻只能有一台主机发送的范围——其中任意两台同时发就会冲突。
- 广播域:一台主机发出的链路层广播帧能到达的范围。
| 设备 | 工作层次 | 隔离冲突域 | 隔离广播域 | 说明 |
|---|---|---|---|---|
| 中继器、集线器 | 物理层 | ✗ | ✗ | 只放大转发比特,连起来的都在一个冲突域 |
| 网桥、交换机 | 数据链路层 | ✓(每个端口一个冲突域) | ✗ | 广播帧照样泛洪到所有端口;划分 VLAN 后每个 VLAN 一个广播域 |
| 路由器 | 网络层 | ✓ | ✓(每个接口一个广播域) | 不转发链路层广播,能抑制广播风暴(2010-38) |
- 广播域:只看路由器(和 VLAN)。每个路由器接口连出去的那一片是一个广播域;划了 VLAN 的交换机,每个 VLAN 一个广播域。
- 冲突域:交换机和路由器的每个端口都是一个分界点。一个集线器连同它下面所有主机算一个冲突域;交换机端口直接连一台主机,这条链路自成一个冲突域。交换机与交换机、交换机与路由器之间的点对点链路,按 2020-35 的官方答案不计入(题目另有说明时除外)。
跟我数
(1) 广播域 = 路由器接口数 = 2。冲突域:S 下面 H1、H2 各 1 个,Hub1 连同 H3、H4 1 个;R 接口 2 下面的 Hub2 连同 H5 ~ H7(还有 R 的接口)1 个;S 与 R 之间的链路按官方口径不计。共 4 个。
(2) Hub2 换成交换机后,H5、H6、H7 各成一个冲突域:2 + 1 + 3 = 6 个冲突域;广播域仍是 2(交换机不隔离广播域)。
(3) 每个端口一台主机:8 个冲突域;两个 VLAN:2 个广播域。两个 VLAN 的主机要通信,必须再接一台路由器(或用三层交换机)。
仍用上面“数域练习”的图,设交换机 S 已经学全了转发表。
- H3 发帧给 H1:Hub1 把比特送到它的所有端口 → H4 收到(丢弃),S 也收到;S 查表只从 H1 的端口转出 → H1 收到。H2 收不到。
- H1 回帧给 H3:S 查表只从连 Hub1 的端口转出;Hub1 再转到所有端口 → H3、H4 都收到。
- H5 发广播帧:Hub2 送给 H6、H7 和 R 的接口 2;R 不转发链路层广播 → H1 ~ H4 都收不到。
口诀:集线器见谁都给,交换机只给该给的,路由器连广播都挡。2016-35 就是第二种情况的翻版。
| 网桥 / 交换机 | 路由器 | |
|---|---|---|
| 层次 | 数据链路层 | 网络层 |
| 看什么地址 | MAC 地址 | IP 地址 |
| 转发表怎么来 | 自学习 | 路由协议或人工配置 |
| 广播帧 | 转发(泛洪) | 不转发 |
| 连接不同网络 | 只能连同一种链路层(同一个网络内) | 能连不同网络、不同链路层 |
| 即插即用 | 是 | 要配置 IP 地址、路由 |
拓展 三层交换机 = 交换机 + 路由功能,常用来在不同 VLAN 之间转发,速度比普通路由器快。
跟我做
- H1 广播 ARP 请求(问 R 接口 1 的 MAC,因为 H5 在别的网络,要先交给默认网关):S 学到“H1 在 H1 的端口”,广播帧泛洪 → H2、Hub1(H3、H4)、R 接口 1 都收到;只有 R 回答。
- R 单播 ARP 响应给 H1:S 学到“R 接口 1 在连 R 的端口”,查表只发给 H1。
- H1 发出封装 IP 分组的帧(目的 MAC = R 接口 1):S 查表只发给 R。
- R 查路由表,从接口 2 发出:先在接口 2 一侧广播 ARP 请求问 H5 的 MAC → Hub2 把它送给 H5、H6、H7;H5 回 ARP 响应。
- R 把 IP 分组封装成新帧(源 MAC = R 接口 2,目的 MAC = H5)发出:Hub2 照样送给 H5、H6、H7,只有 H5 收下,H6、H7 的网卡丢弃。
要点:IP 地址从头到尾不变;帧在每一段链路上重新封装,MAC 地址每段都换(4.6 节);交换机后面只转发给目的端口,集线器后面所有主机都“听得到”。
I. 中继器 II. 集线器 III. 网桥 IV. 路由器
- A. 仅 I 和 II
- B. 仅 III
- C. 仅 III 和 IV
- D. 仅 IV
展开解析
D广播风暴是广播帧在网络中泛滥。只有能隔离广播域的设备才能抑制它,也就是网络层的路由器。
- I 中继器、II 集线器:物理层,冲突域和广播域都不隔离。
- III 网桥:隔离冲突域,但广播帧照样从所有端口转发,不隔离广播域。
- IV 路由器:不转发链路层广播,隔离广播域。
- A 错中继器、集线器连冲突域都不隔离。
- B 错网桥转发广播帧,不能抑制广播风暴。
- C 错C 的路由器(IV)对了,错在多选了网桥(III):网桥只隔离冲突域,广播帧照样从所有端口转发,抑制不了广播风暴。
- D 对仅路由器。
冲突域:交换机、网桥、路由器都能隔离。广播域:只有路由器(和 VLAN)能隔离。
- A. 2,2
- B. 2,4
- C. 4,2
- D. 4,4
展开解析
C路由器隔离广播域和冲突域;交换机只隔离冲突域;集线器都不隔离。
- 广播域:路由器有 2 个接口,各连一台交换机及其下面的所有设备 → 2 个。
- 冲突域:交换机的每个端口是一个冲突域的边界;每个集线器连同它下面的 2 台主机是一个冲突域 → 4 个集线器,4 个。
- 交换机与路由器之间是点对点全双工链路,不会发生冲突,本题不计入(官方答案为 4)。
- A 错冲突域 2:把每台交换机下面算成一个冲突域,但交换机的每个端口都隔离冲突域。
- B 错B 是冲突域 2、广播域 4:两个数正好颠倒——交换机和集线器都不隔离广播域,广播域只有路由器两个接口划出的 2 个;冲突域才是 4 个(每个集线器连同它的主机一个)。
- C 对4 个冲突域,2 个广播域。
- D 错广播域 4:集线器和交换机都不隔离广播域,只有路由器的 2 个接口划出 2 个广播域。
广播域数 = 路由器接口数(不划 VLAN 时)。冲突域:一个集线器连同它下面的主机算一个,交换机直连主机的端口各算一个。
- A. 仅 H2
- B. 仅 H3
- C. 仅 H1、H2
- D. 仅 H2、H3
展开解析
DH4 接在集线器上,集线器把信号从所有其他端口发出;交换机则按转发表只往目的端口转发。
- H2 先发给 H4 的数据帧经过交换机,交换机已经学到 H2 在哪个端口。
- H4 的确认帧到集线器:集线器把它发给 H3 和交换机。
- 交换机查表,目的 H2 的端口已知,只从 H2 那个端口转发 → H2 收到;H1 收不到。
- A 错仅 H2:漏了 H3。H3 与 H4 同在一个集线器上,物理层一定收得到(只是链路层发现目的地址不是自己,丢弃)。
- B 错仅 H3:漏了目的主机 H2。
- C 错H1 接在交换机另一个端口上,交换机不会把这个帧发给 H1。
- D 对H2、H3。
“物理层上能收到”= 看比特信号送到了哪里:集线器全送,交换机只送目的端口(已学到时)。
2016-35 的关键:H4 发给 H2 的确认帧先到集线器,集线器把比特转发到所有端口,H3 一定收到;再到交换机,交换机已经从 H2 发来的帧学到 H2 在哪个端口,只转发给 H2,H1 收不到。综合题 2019-47、2022-47(第 7 篇 t4)在同类拓扑上考设备、冲突域和帧的转发范围。
- 交换机学习用源地址,转发用目的地址;ARP 请求是广播帧,交换机一定泛洪。
- 集线器是物理层设备,没有转发表,也不检查任何地址。
- VLAN 隔离的是广播域;交换机端口隔离的是冲突域。
- 直通交换“至少”的时延只算目的地址 6 B,不算前导码(题目会说明)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. {2} 和 {3}
- B. {1, 2} 和 {3}
- C. {2} 和 {1, 3}
- D. {1, 2} 和 {1, 3}
展开解析
A第 1 帧:学到 c1 → 3;b1 已在表中 → 只从端口 2 转发。第 2 帧:学到 b1 → 2(已有);c1 已学到 → 只从端口 3 转发。
- A 对对:两次目的地址都在表中,各只从一个端口转发。
- B 错{1, 2} 是把 b1 当成未知、泛洪的结果;表中已有 b1 → 2,只从端口 2 转发。
- C 错{1, 3} 是把 c1 当成未知、泛洪的结果;交换机已从第 1 帧学到 c1 在端口 3,只从端口 3 转发。
- D 错两帧都按泛洪处理了:b1 本来就在表中,c1 也在第 1 帧时学到,两帧都只需一个端口。
变化点:目的地址已在表中,就不用泛洪。
- A. 3、2
- B. 4、2
- C. 4、1
- D. 3、1
展开解析
B三个集线器各一个冲突域,路由器另一侧那台主机的链路一个,共 4 个;路由器两个接口划出 2 个广播域。
- A 错冲突域少算了路由器另一个接口直连主机的那条链路,它自成一个冲突域。
- B 对对:3 个集线器 + 1 条直连链路 = 4 个冲突域;路由器 2 个接口 = 2 个广播域。
- C 错广播域少算了:路由器的两个接口各连一个网络,划出 2 个广播域。
- D 错两个数都少了一个:漏了路由器另一侧的冲突域,也漏了路由器隔出的第 2 个广播域。
变化点:拓扑换了,数法不变:集线器整体算一个,路由器接口数 = 广播域数。
- A. 仅 H3
- B. 仅 H2、H3
- C. 仅 H3、H4
- D. H2、H3、H4
展开解析
C交换机只把帧转发到 Hub 所在端口,Hub 再从所有端口发出,H3、H4 都收到;H2 在交换机的另一个端口,收不到。
- A 错只有 H3 不够:交换机把帧转发到 Hub 所在端口后,Hub 从所有端口发出,H4 物理上也收得到。
- B 错H2 在交换机的另一个端口,交换机已学到 H3 的端口,不会转发给 H2;而且漏了 H4。
- C 对对:Hub 上的 H3、H4 都收到。
- D 错多了 H2:交换机只往 Hub 那个端口转发,H2 所在的端口收不到。
变化点:发送方从集线器一侧换到交换机一侧。
I. 中继器 II. 集线器 III. 网桥 IV. 交换机 V. 路由器
- A. 仅 I、II
- B. 仅 III、IV、V
- C. 仅 V
- D. 仅 III、IV
展开解析
D网桥、交换机是链路层设备,每个端口一个冲突域,但广播帧照样转发;路由器两者都隔离。
- A 错中继器、集线器在物理层,连冲突域都不隔离。
- B 错B 含 V:路由器既隔离冲突域也隔离广播域,不属于“不能隔离广播域”的设备。
- C 错路由器两种域都隔离;题目要的是“隔离冲突域但不隔离广播域”,那是网桥和交换机。
- D 对对:网桥、交换机。
变化点:从“抑制广播风暴”换成“隔离冲突域但不隔离广播域”。
- A. 目的地址 6 字节
- B. 整个帧
- C. 前 64 字节
- D. 前 14 字节
展开解析
C小于 64 B 的帧是冲突碎片,收满 64 B 才转发就能把碎片过滤掉。A 是直通交换,B 是存储转发。
- A 错只收 6 字节目的地址就开始转发的是直通交换,冲突碎片过滤不掉。
- B 错收完整个帧再转发的是存储转发。
- C 对对:收满 64B,冲突碎片就过滤掉了。
- D 错14 字节是帧首部(目的地址 + 源地址 + 类型),无碎片交换要等到 64 字节。
考点:3.9 节“三种交换方式与交换机的容量”。
- A. ARP
- B. RIP
- C. CSMA/CD
- D. 生成树协议 STP
展开解析
DSTP 选出一棵无环的生成树,把多余端口阻塞,链路故障时再启用备份端口。
- A 错ARP 把 IP 地址解析为 MAC 地址,不能消除交换机之间的环路。
- B 错RIP 是路由器之间的路由协议,交换机的二层环路它管不了。
- C 错CSMA/CD 是共享介质上的访问控制方法,不能消除交换机之间的环路。
- D 对对:STP 阻塞多余端口,得到无环的生成树。
考点:3.9 节“生成树协议 STP”(拓展)。
- 对 1101 0111 1101 1111 1010 进行零比特填充,结果是什么?
答案
1101011111001111101010。原数据第 6~10 位是 5 个连续的 1,后面插一个 0;第 12~17 位有 6 个连续的 1,数到第 5 个就插 0,第 6 个 1 接在插入的 0 后面。填充后共 22 位。 - 字符计数法有什么缺点?
答案
计数字段一旦出错,接收方就无法确定这一帧的结束位置,后面所有帧都跟着错位,而且无法自行恢复。 - 数据 1101011011,生成多项式 x4 + x + 1,求 FCS。
答案
G = 10011,补 4 个 0 后模 2 除,余数 1110,发送 1101011011 1110。 - 8 位数据用海明码纠 1 位错,至少要几位校验位?码长多少?
答案
2r ≥ 8 + r + 1:r = 3 时 8 < 12 不够,r = 4 时 16 ≥ 13 满足。校验位 4 位,码长 12 位。 - 数据 1011 用海明码(偶校验)编码,码字是什么?
答案
位置 3、5、6、7 放 1、0、1、1。P1 = 1 ⊕ 0 ⊕ 1 = 0,P2 = 1 ⊕ 1 ⊕ 1 = 1,P3 = 0 ⊕ 1 ⊕ 1 = 0,码字 0110011。 - 用 3 位序号,GBN 和 SR 的最大发送窗口各是多少?
答案
GBN:23 − 1 = 7;SR:23−1 = 4(收发窗口相等时)。 - 停等协议,帧长 1000bit,速率 10kbps,单向传播时延 50ms,忽略确认帧,信道利用率是多少?
答案
TD = 100ms,周期 = 100 + 100 = 200ms,U = 50%。 - 停等协议中,确认帧丢失会带来什么问题?怎么解决?
答案
发送方超时重传,接收方收到重复帧。靠帧的序号(1 位就够)认出重复帧,丢弃它并再回一次确认。 - CDMA 中站 S 的码片序列为 (1, −1, 1, −1),收到的叠加信号为 (0, −2, 2, 0),S 发了什么?
答案
(0 + 2 + 2 + 0) ÷ 4 = 1 → S 发了比特 1。 - 1Gbps 以太网用 CSMA/CD,最短帧 64B,电缆传播速度 2 × 108m/s,最大距离是多少?
答案
发送 512bit 需 0.512μs = 2τ,τ = 0.256μs,距离 = 0.256μs × 200m/μs = 51.2m。 - 某站连续冲突 2 次,争用期 51.2 μs,下次重传前最多等多久?可能的等待时间有哪几种?
答案
k = 2,r ∈ {0, 1, 2, 3},等待 0、51.2、102.4、153.6 μs 之一,最多 153.6 μs。 - 为什么 802.11 不用 CSMA/CD?它用什么代替“碰撞检测”?
答案
无线网卡难以边发边听,且有隐蔽站等问题,发送方检测不到接收方处的冲突。802.11 用 CSMA/CA:发送前等 DIFS 并随机退避(尽量避免冲突),可选 RTS/CTS 预约信道,并靠接收方的 ACK 确认是否发送成功。 - 802.11 中 AP 把从路由器收到的帧转发给站点 H,三个地址分别填谁?
答案
地址 1 = H(接收者),地址 2 = AP(发送者),地址 3 = 路由器接口(源地址)。 - 判断地址类型:01-00-5E-7F-00-01、00-0C-29-AB-CD-EF、FF-FF-FF-FF-FF-FF。
答案
首字节 01 最低位为 1 → 多播;00 → 单播;全 1 → 广播。 - PPP 异步传输时,信息字段 7D 7E 20 填充后是什么?
答案
7D → 7D 5D,7E → 7D 5E,20 不小于 0x20 不用转义:7D 5D 7D 5E 20。 - 802.1Q 标签插在以太网帧的什么位置?多长?VID 几位?
答案
插在源地址与类型字段之间,4 字节;VID 12 位。带标签的帧最长 1522 字节。 - 交换机的端口 1~4 各直接连一台主机,端口 5 连一个集线器,集线器下面再连 4 台主机。整个网络有几个冲突域、几个广播域?
答案
冲突域 5 个:端口 1~4 各 1 个,端口 5 连同集线器和它下面的 4 台主机算 1 个。广播域 1 个:没有路由器,也没有划 VLAN。 - 100 Mb/s 交换机用存储转发方式转发一个 1518 B 的帧,至少引入多大时延?
答案
1518 × 8 = 12144 bit;12144 ÷ 108 s = 121.44 μs。 - 令牌传递协议会不会发生冲突?负载轻和负载重时,它与 CSMA/CD 谁更好?
答案
不会冲突,只有拿到令牌的站才能发。负载轻时 CSMA/CD 好(空闲就能发,不必等令牌);负载重时令牌传递好(轮流发,没有冲突)。 - IEEE 802 把数据链路层分成哪两个子层?哪一个与传输介质有关?
答案
LLC(逻辑链路控制)和 MAC(介质访问控制)子层;MAC 子层与传输介质有关,LLC 与介质无关。 - 一台 16 口交换机,每个端口 100Mb/s、工作在全双工,总容量(两个方向分别计算)是多少?若换成 16 口的 100Mb/s 集线器呢?
答案
交换机每个端口独占 100Mb/s,全双工两个方向各 100Mb/s:总容量 16 × 100 × 2 = 3.2Gb/s(只算一个方向为 1.6Gb/s)。集线器的所有端口在同一个冲突域里,16 台主机共享 100Mb/s。 - CDMA 中每个比特用 8 个码片表示,站点的数据率为 10kb/s,它发出的码片速率是多少?所需带宽是原来的几倍?
答案
每比特变成 8 个码片:码片速率 10k × 8 = 80k 码片/秒,所需带宽也扩大到原来的 8 倍——这就是“扩频”,换来的是多个站可以同时同频发送。
一页总结与必会题型
| 主题 | 核心结论 | 必背数字 | 真题 |
|---|---|---|---|
| 组帧 | 四种方法;零比特填充:5 个 1 后插 0;透明传输 = 任何数据都能原样通过 | 标志 01111110;PPP 7E / 7D | 2013-37 |
| 差错控制 | 奇偶只检奇数个错;CRC 补 r 个 0 模 2 除,余数为 FCS;检错 d − 1、纠错 ⌊(d − 1)/2⌋;海明码 2r ≥ k + r + 1 | 海明码码距 3 | 2023-37、2025-34 |
| 可靠传输 | 停等 1 位序号;GBN 累积确认、重传后面全部;SR 单独确认、只重传超时帧;U = min(1, W·TD ÷ T) | GBN ≤ 2n − 1;SR WT + WR ≤ 2n | 2009-35、2011-35、2012-36、2014-36、2015-35、2018-36、2019-35、2020-36、2023-35、2024-37 |
| 信道划分 | FDM / TDM / STDM / WDM / CDMA 都不冲突;CDMA 规格化内积 1 / −1 / 0 | — | 2013-36、2014-37 |
| 随机访问 | CSMA 三种坚持;CSMA/CD 先听后发、边发边听、冲突停发、随机重发;最短帧长 = 2τ × 速率 | 51.2 μs、64 B;退避 k ≤ 10、16 次放弃 | 2009-37、2015-36、2016-36、2019-36、2023-36、2025-35 |
| 802.11 | CSMA/CA + ACK;DIFS 开始、SIFS 中间;RTS/CTS 设 NAV;地址 1 收、2 发、3 远端 | SIFS < PIFS < DIFS | 2011-36、2017-35、2018-35、2020-37、2024-36、2026-35 |
| 以太网 / PPP | 以太网无连接不可靠;首字节最低位 1 为多播;PPP 只检错不可靠,LCP + NCP | 帧 64 ~ 1518 B;MTU 1500;MAC 48 位 | 2012-35 |
| VLAN | 每个 VLAN 一个广播域;跨 VLAN 要路由器;802.1Q 标签 4 B | VID 12 位;1522 B | 2024-35、2026-36 |
| 设备与域 | 交换机 = 多端口网桥,学源转目的;集线器不隔离任何域;路由器隔离广播域 | 直通 0.48 μs(100 Mb/s) | 2009-36、2010-38、2013-38、2014-34、2015-37、2016-35、2020-35 |
3.✎本篇真题闯关(42 题)
本篇各小节挂的真题全部在这里,按小节排好。可以展开后一道道做,也可以用弹窗模式连续做。做题记录(对/错)只保存在你这台电脑的浏览器里,小节标题下的题号会随之变绿或变红。
网络层:分组怎样跨过一个个网络,找到目的主机
数据链路层只管一段链路。要从北京的主机把分组送到广州的服务器,中间要经过许多个网络和路由器,这是网络层的事:给每台主机一个全球统一的 IP 地址;每个路由器根据分组的目的地址查路由表转发;路由表由路由协议(RIP、OSPF、BGP)自动算出来。围绕它还有一组辅助协议:ARP 把 IP 地址换成 MAC 地址,DHCP 给新主机分配地址,ICMP 报告差错,NAT 让内网主机共用一个公网地址。这是计网分值最高的一篇:18 年 32 道选择题,综合题里有 8 道以网络层为主,IP 地址规划和路由表是综合题中出现最多的题型(别的类型也常顺带考一问)。
本篇地图:先看全貌,再逐节攻克
网络层的内容多而散,初学时最容易“学了后面忘了前面”。先把它们挂到一棵树上:网络层只有一个核心任务——把 IP 分组从源主机送到目的主机;其余内容都是在回答“为了完成这个任务,还需要什么”。
| 小节 | 选择题 | 综合题(大题) | 一句话说清考什么 |
|---|---|---|---|
| 4.1 功能、SDN | 1 | — | 转发与路由选择的分工;SDN 的四种接口 |
| 4.2 IPv4 分组 | 1 | 抓包题 2011-47、2012-47 都要读首部 | 三个“单位”字段;分片后各片的总长度、片偏移、MF |
| 4.3 地址与子网 | 11 | 2018-47 | 网络地址 / 广播地址 / 可分配地址数;定长与变长划分 |
| 4.4 路由表与转发 | 4(另挂 3) | 2009-47、2013-47、2014-43 | 最长前缀匹配、路由聚合、填路由表(下一跳写谁) |
| 4.5 NAT | 3 | 2020-47 | 经过 NAT 后源地址、端口、检验和怎么变 |
| 4.6 ARP、DHCP、ICMP | 4(另挂 1) | 2015-47 | ARP 解析谁的 MAC;DHCP 各报文的地址;ICMP 报文类型 |
| 4.7 IPv6 | 1 | — | 与 IPv4 的区别(首部、分片、地址) |
| 4.8 路由协议 | 6 | 2014-42、2024-47 | RIP 更新与坏消息;OSPF 区域;三个协议的封装 |
| 4.9 网络层设备(路由器) | 1 | — | 路由器功能(2012-37);一个分组穿过路由器改了哪些字段 |
| 4.10 IP 组播 | 0 | — | 从未考过:组播与单播 / 广播、D 类地址分段、组播 MAC 映射 |
| 4.11 移动 IP | 0 | — | 从未考过:永久地址与转交地址、归属 / 外地代理、三角路由 |
选择题按每题讲解的“主归属小节”计数,合计 32 道;括号里“另挂”的是主要考点在别的小节、但也要用到本节知识的题(如 2016-39、2018-37、2026-37 挂在 4.4,2012-33 挂在 4.6)。
- 4.2 → 4.3 → 4.4(约 6 小时):IP 首部、地址计算、查路由表,这是网络层大题的“基本功”,必须练到不看书也能算对。
- 4.6 → 4.5(约 3 小时):一个分组从主机发出要先经 DHCP 拿地址、ARP 找 MAC,出内网还要过 NAT——这是“一次访问全过程”大题(第 7 篇 t7)的主线。
- 4.8(约 3 小时):先懂“为什么分层路由”,再学 RIP、OSPF、BGP 三个协议。
- 4.1、4.7、4.9 ~ 4.11(约 2.5 小时):概念为主,记住对比表即可;4.10 组播、4.11 移动 IP 从未考过,是 2027 年的冷点候选(第 9 篇 9.1)。
4.1网络层的功能:转发与路由选择,拥塞控制,SDN
数据链路层只负责“相邻两个结点之间”的一段链路。北京的主机要把分组送到广州的服务器,中间隔着几十个网络、几十台路由器,每一台都要决定“这个分组下一步交给谁”——这就是网络层要解决的问题。
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务:发送分组时不建立连接,每个分组独立选择路由,不编号,不保证不丢失、不重复、按序到达。可靠交付交给端系统的传输层(TCP)去做。这样路由器可以做得简单、便宜,网络出了故障也容易绕开。
转发与路由选择:分拣员和规划部
问题:一个分组到了路由器的某个输入端口,路由器怎么知道该从哪个端口送出去?“该从哪个口出去”这张表又是谁定的?
分拣员看包裹上的目的城市,查一下手边的分拣表,把包裹扔上对应的传送带——每个包裹都要这样做一遍,必须快,这就是转发。分拣表是总部规划部根据全国线路情况(哪里堵、哪里封路)算出来、定期下发的,算一次要很久,但不必每个包裹都算——这就是路由选择。
哪里不像:传统路由器的“规划部”就装在每台路由器里,各自与邻居商量着算(分布式);只有 SDN 才真的把规划部搬到一个中央控制器上。
- 转发(数据平面):分组到达路由器的某个输入端口,路由器查转发表,把它送到合适的输出端口。这是每个分组都要做的、在纳秒到微秒级完成的本地动作,通常由硬件完成。
- 路由选择(控制平面):按照某种路由算法,与其他路由器交换信息,算出到各个目的网络的最佳路径,生成路由表,再由路由表得出转发表。这是全网范围的、较慢的过程(秒级),由软件完成。
| 动作 | 平面 | 判断依据 |
|---|---|---|
| 按目的 IP 地址查转发表,决定从哪个端口送出 | 数据平面 | 每个分组都做,本地动作 |
| 把 TTL 减 1、重算首部检验和 | 数据平面 | 每个分组都做 |
| 输出端口排队,队列满了丢弃分组 | 数据平面 | 每个分组都可能遇到 |
| 运行 OSPF,与其他路由器交换链路状态 | 控制平面 | 与别的路由器协作、生成路由表 |
| 用 Dijkstra 重新计算最短路径 | 控制平面 | 生成路由表的计算 |
| SDN 控制器下发流表 | 控制平面 | 决定规则,不转发具体分组 |
2012-37 问路由器的功能:“运行路由协议、设置路由表”是控制平面的工作,“根据目的地址转发到合适的输出线路”是数据平面的工作,“拥塞时丢弃分组”也是路由器会做的;但“差错校验确保分组不丢失”是错的——IP 只检验首部、有错就丢,从不保证不丢失。看到“保证”“确保”这类字眼,先想网络层是尽最大努力交付。
网络层的两种服务:数据报与虚电路
计算机网络发展时有过两种思路:电信网的思路是“网络负责可靠”,于是有了虚电路(先建立一条逻辑连接,所有分组沿同一条路走);因特网的思路是“网络尽力而为,可靠交给端系统”,于是用数据报。两者对比如下(1.2 节从交换方式的角度也讲过一遍):
| 对比项 | 数据报服务(因特网采用) | 虚电路服务(X.25、帧中继、ATM) |
|---|---|---|
| 连接 | 不需要建立连接 | 先建立虚电路(逻辑连接),用完释放 |
| 目的地址 | 每个分组都带完整的目的地址 | 只在建立连接时用完整地址;之后分组只带很短的虚电路号 |
| 路由选择 | 每个分组独立选路 | 建立时选一次,之后所有分组都走这条路 |
| 到达顺序 | 可能失序,由目的主机排序 | 按序到达 |
| 结点出故障 | 只丢失故障结点里的分组,其余可以绕路 | 经过故障结点的所有虚电路都中断 |
| 可靠性、差错与流量控制 | 由用户主机(传输层)负责 | 可以由网络负责,也可以由主机负责 |
虚电路只是一条逻辑连接,分组仍然存储转发、仍然共享链路,并不独占带宽——这是它与电路交换的根本区别。“虚电路方式下分组一定不会丢失”也是错的:虚电路保证的是按序,不是不丢失。
异构网络互连
各个网络的链路层可以完全不同(以太网、无线局域网、PPP 广域网……),帧格式、最大帧长、编址方式都不一样。用路由器把它们连起来,在网络层统一使用 IP 协议,从 IP 层看就像一个统一的虚拟互连网络:主机之间按 IP 地址通信,看不见下面各种网络的差异。路由器在每一段链路上把 IP 分组装进该链路自己的帧里(帧的格式、MAC 地址每段都换),IP 分组本身原样传下去。
网络层的拥塞控制
问题:一条高速公路,车少时车速很快;车越来越多,开始排队、变慢;再多,所有车堵死,一辆也走不动。网络也一样:进入网络的分组太多,超过了路由器或链路的处理能力,网络性能明显下降,这叫拥塞。
- 拥塞控制与流量控制的区别:拥塞控制是全局性的,要保证整个网络能承受现有负载,涉及所有主机和路由器;流量控制是点对点的(相邻结点之间或端到端),只让发送方别把接收方淹没。比喻:拥塞控制是交警疏导整条高速公路,流量控制是收费站按自己的窗口数放行。两者都可能用“让发送方降速”的手段,但目的不同。
- 开环控制:在设计网络时事先考虑可能引起拥塞的因素(如路由器缓存大小、链路带宽、何时丢弃分组),力求不发生拥塞;系统运行起来后不再中途修改(静态)。
- 闭环控制:基于反馈(动态)——① 监测网络,发现何时何处发生拥塞;② 把拥塞信息传给能采取措施的地方;③ 调整系统运行。例:路由器因拥塞丢弃分组,向源主机发 ICMP 源点抑制报文(4.6 节,2010-36);TCP 发送方按是否丢包调整拥塞窗口(5.6 节)。
“流量控制是全局的”“拥塞控制只涉及收发双方”——都说反了。另一个陷阱:拥塞时“加大缓存就能解决”是错的,缓存越大排队越久,分组可能早已超时被重传,反而加重拥塞。
软件定义网络 SDN
传统路由器的控制平面分散在每一台路由器里,各自运行路由协议;想改变网络的行为(比如让某类流量绕开某条链路),要逐台登录配置。SDN 把控制平面从路由器中抽出来,集中到远程的控制器上:控制器掌握全网状态,计算出每台交换机的流表,再下发给交换机;交换机只负责按流表转发。
流表:“匹配 + 动作”。传统路由器的转发表只看目的 IP 地址;SDN 交换机(OpenFlow)的流表每一项由匹配字段、优先级、计数器和动作组成。匹配字段可以同时看链路层(源 / 目的 MAC、以太网类型、VLAN)、网络层(源 / 目的 IP、协议)、传输层(源 / 目的端口)的多个首部字段;动作可以是“从某端口转发”“丢弃”“修改某字段后转发”“交给控制器”。这叫广义转发:同一套“匹配 + 动作”既能当路由器,也能当交换机、防火墙,甚至做 NAT。
| 优先级 | 匹配字段 | 动作 |
|---|---|---|
| 300 | 目的 IP ∈ 10.2.0.0/16,IP 协议 = TCP,目的端口 = 22 | 丢弃 |
| 200 | 目的 IP ∈ 10.2.0.0/16 | 从端口 2 转发 |
| 100 | 目的 MAC = 00-1A-2B-3C-4D-5E | 从端口 3 转发 |
| 0 | 任意(表中没有匹配项) | 交给控制器 |
展开解析
- ① 同时匹配优先级 300 和 200 两项,取 300 → 丢弃。这一项的效果相当于防火墙(禁止访问 10.2 网段的 SSH 端口 22)。
- ② 端口 80 不满足 300 项,匹配 200 → 从端口 2 转发。这一项按目的 IP 转发,相当于路由器。
- ③ 目的 IP 不在 10.2.0.0/16,只匹配 100 → 从端口 3 转发。按目的 MAC 转发,相当于交换机。
- ④ 只匹配优先级 0 的“兜底”项 → 交给控制器,由控制器决定怎么处理,必要时再下发一条新流表项。
结论:一张流表就把路由器、交换机、防火墙三种设备的功能都做了,这就是“可编程”。
- SDN 的四个特点:基于流的转发;数据平面与控制平面分离;控制平面功能集中在控制器、运行在服务器上(远程控制器);网络可编程。
- 优点:全局集中控制、便于管理和升级,硬件可以是通用的“白盒”交换机,网络创新不必等设备厂商;缺点:控制器是单点,安全性、可靠性和性能都要专门考虑(所以要多个控制器经东西向接口协同)。
2022-37 只考了“下发流表用哪个接口”(南向)。可能的变化:问“向上给应用提供编程接口”(北向)、“控制器之间”(东西向)、“SDN 交换机是否运行路由协议”(不运行)、“OpenFlow 属于哪类接口”(南向)。判别方法就是上面那张三层图:选项里的方位词对着图找。
- A. 东向接口
- B. 南向接口
- C. 西向接口
- D. 北向接口
展开解析
BSDN 控制器位于中间:向下通过南向接口(如 OpenFlow)控制数据平面的交换机、下发流表;向上通过北向接口为网络应用提供编程接口;控制器之间用东西向接口。
- A 错东向接口:东西向接口用于多个控制器之间的通信。
- B 对南向接口:控制器 ↔ 交换机,下发流表。
- C 错西向接口和东向接口合称东西向接口,用于多个 SDN 控制器之间交换信息,不用来向交换机下发流表。
- D 错北向接口:控制器 ↔ 上层网络应用。
上北下南:应用在上(北),交换机在下(南),控制器之间是东西。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 北向接口
- B. 东向接口
- C. 南向接口
- D. 西向接口
展开解析
A控制器向上为应用提供北向接口,向下通过南向接口(如 OpenFlow)控制交换机,控制器之间是东西向接口。
- A 对对:北向接口面向上层网络应用。
- B 错东向接口(东西向)用于多个控制器之间交换信息,不面向上层应用。
- C 错南向接口朝下,控制器通过它(如 OpenFlow)向交换机下发流表。
- D 错西向接口和东向接口合称东西向接口,同样是控制器之间的接口。
变化点:由“下发流表”(南向)换成“向上提供编程接口”(北向)。
- A. 数据平面与控制平面分离
- B. 每台 SDN 交换机都独立运行路由协议计算路由
- C. 交换机按控制器下发的流表转发分组
- D. 网络可以通过控制器编程
展开解析
BSDN 的控制功能集中在控制器,交换机只按流表转发,不再各自运行路由协议。
- A 不选正确:SDN 把控制平面从交换机里分离出来,集中到控制器。
- B 选错误:SDN 的路由计算集中在控制器,交换机不再各自运行路由协议。
- C 不选正确:交换机只按控制器下发的流表做匹配和转发。
- D 不选正确:控制器提供北向接口,网络行为可以通过编程来控制。
变化点:从“接口名称”扩展到 SDN 的四个特点。
- A. 拥塞控制只涉及一对发送方和接收方
- B. 开环控制根据网络运行时的反馈动态调整
- C. 拥塞控制与流量控制是同一回事
- D. 闭环控制基于反馈:监测到拥塞后,把信息传给能采取措施的地方
展开解析
D拥塞控制是全局性的,涉及所有主机和路由器;流量控制才是点对点的。开环控制是在设计时事先考虑、运行中不再修改;基于反馈、动态调整的是闭环控制。
- A 错只涉及一对发送方和接收方的是流量控制;拥塞控制是全局性的,涉及所有主机和路由器。
- B 错开环控制是在设计时事先考虑、运行中不再改;根据反馈动态调整的是闭环控制。
- C 错流量控制是点对点的(别把接收方淹没),拥塞控制是全局的(别把网络堵死),两回事。
- D 对对:闭环控制基于反馈。
考点:4.1 节“网络层的拥塞控制”。
4.2IPv4 分组格式与分片
问题:一个 IP 分组在网上传的时候,其实就是一串 0 和 1。路由器怎么从这串比特里知道“它要去哪、有多长、还能活几跳、里面装的是 TCP 还是 UDP”?靠的就是事先约定好的首部格式:第几位到第几位表示什么。
IP 首部就像贴在包裹上的面单,格子位置是固定的:左上角写寄件人、右上角写收件人、下面写重量和件数……分拣员不用读包裹里的东西,只看面单。哪里不像:面单是给人看的,可以写得随意;IP 首部每个字段的位数和单位都是死规定,差一位就全读错。
IP 数据报由首部和数据两部分组成。首部的前 20 字节是固定的,后面是长度可变的可选字段。考试要求记住每个字段的位数和单位——大题抓包分析(2011-47、2012-47、2018-47 等)就是按这张图逐字节切分十六进制数据。
| 字段 | 位数 | 是什么 | 怎么考 |
|---|---|---|---|
| 版本 | 4 | IP 协议的版本,IPv4 是 4 | 十六进制首字节 45 的“4”;IPv6 首字节的高 4 位是 6 |
| 首部长度 | 4 | 首部有多长,单位 4 B | 最小 5(20 B),最大 15(60 B)→ 可选字段最多 40 B。首字节 0x45 → 首部 5 × 4 = 20 B;0x46 → 24 B(带 4 B 选项) |
| 区分服务 | 8 | 希望得到哪种服务质量(旧称服务类型) | 一般为 0,几乎不考 |
| 总长度 | 16 | 首部 + 数据的总长度,单位 1 B | 最大 216 − 1 = 65 535 B;受链路层 MTU(以太网 1500 B)限制,超过就要分片。数据长度 = 总长度 − 首部长度 |
| 标识 | 16 | 源主机每发一个数据报,计数器加 1,填进这里 | 同一数据报的所有分片标识相同,目的主机据此把分片拼回去 |
| 标志 | 3 | 最高位保留(0);中间 DF(Don't Fragment);最低位 MF(More Fragments) | DF = 1:不许分片;MF = 1:后面还有分片,最后一片 MF = 0。十六进制 0x4000 → DF = 1;0x2000 → MF = 1 |
| 片偏移 | 13 | 本片数据在原数据报数据部分中的位置,单位 8 B | 所以除最后一片外,每片数据长度都必须是 8 的倍数;13 位 × 8 正好能表示 213 × 8 = 65 536,覆盖总长度的范围 |
| 生存时间 TTL | 8 | 还能经过多少个路由器 | 每经过一个路由器减 1,减到 0 就丢弃并向源主机发 ICMP 时间超过,防止分组在环路里无限兜圈子;traceroute 就利用它 |
| 协议 | 8 | 数据部分交给上层哪个协议 | 1 = ICMP,2 = IGMP,6 = TCP,17 = UDP,89 = OSPF;抓包题看到 06 就知道里面是 TCP 报文段 |
| 首部检验和 | 16 | 反码求和得到的校验值 | 只检验首部,不检验数据;每经过一个路由器 TTL 都变,都要重新计算。IPv6 干脆取消了它 |
| 源 / 目的地址 | 32 + 32 | 发送方和最终接收方的 IP 地址 | 转发途中始终不变(经过 NAT 时除外);每段链路上变的是帧的 MAC 地址 |
| 可选字段 + 填充 | 0~40 B | 记录路由、时间戳等,很少用 | 填充用 0 补齐,使首部长度是 4 B 的整数倍(因为首部长度以 4 B 为单位) |
跟我读一个首部:十六进制逐字节切分 + 首部检验和
- 十六进制:每位 0~F(A = 10 … F = 15),1 位十六进制 = 4 位二进制,2 位十六进制 = 1 字节。例:0x45 = 0100 0101;0x34 = 3 × 16 + 4 = 52;0x0A = 10。
- 反码求和:把数据按 16 位一组相加,若最高位产生进位,就把进位加回到最低位(“回卷”),最后对结果按位取反得到检验和。接收方把包括检验和在内的所有 16 位字再按同样方法相加,结果全 1(0xFFFF)就认为没错。
45 00 00 34 3A 2B 40 00 80 06 00 00 0A 01 02 03 CA 70 0B 05展开解析
① 按上面首部图的格子,从第 0 字节开始切:
| 字节 | 十六进制 | 字段 | 值与含义 |
|---|---|---|---|
| 0 | 45 | 版本 / 首部长度 | 版本 4;首部长度 5 × 4 = 20 B(没有可选字段) |
| 1 | 00 | 区分服务 | 0 |
| 2~3 | 00 34 | 总长度 | 0x34 = 52 B → 数据部分 52 − 20 = 32 B |
| 4~5 | 3A 2B | 标识 | 0x3A2B = 14891 |
| 6~7 | 40 00 | 标志 + 片偏移 | 0100 0000 0000 0000:保留 0,DF = 1,MF = 0,片偏移 0 → 不许分片、也没被分过片 |
| 8 | 80 | TTL | 128 |
| 9 | 06 | 协议 | 6 → 数据部分是 TCP 报文段(32 B,正好是带 12 B 选项的 TCP 首部) |
| 10~11 | 00 00 | 首部检验和 | 待求 |
| 12~15 | 0A 01 02 03 | 源 IP | 10.1.2.3 |
| 16~19 | CA 70 0B 05 | 目的 IP | 202.112.11.5 |
② 检验和(发送方):
- 把首部按 16 位分成 10 个字(检验和位置先填 0):4500、0034、3A2B、4000、8006、0000、0A01、0203、CA70、0B05。
- 逐个相加:和 = 0x220DE(超过 16 位,最高处多出一个 2)。
- 回卷:0x20DE + 0x2 = 0x20E0(把溢出的进位加回最低位)。
- 取反:~0x20E0 = 0xDF1F → 检验和字段填 DF 1F。
- 接收方验算:把含 DF1F 在内的 10 个字相加并回卷,得 0xFFFF(全 1)→ 首部无差错。
(这些数用程序验算过。考试不会让你手算整个检验和,但会考“检验和只覆盖首部”“每一跳都要重算”“取反码求和”这几个结论,以及从十六进制里读出各字段。)
抓包题(2011-47、2012-47)给出整段十六进制,问 IP 地址、总长度、是否分片、经过了几个路由器(看 TTL 的变化)等。方法固定:先看首字节 45 定首部 20 B,在第 20 字节处切开,后面才是 TCP/UDP 首部;第 9 字节是协议号;第 12~19 字节是两个地址。注意如果首字节是 46、47……首部就是 24、28 B,切点要后移。2011-47(4) 问“经过路由器 R 转发时要改首部哪些字段”:TTL 减 1、首部检验和重算;该题主机用的是私有地址,R 还做 NAT,所以源 IP 地址也要改。
IP 分片:一步步算
问题:IP 数据报最长可以到 65 535 B,可以太网一帧最多装 1500 B 的数据(叫做 MTU,最大传送单元)。数据报比下一段链路的 MTU 还大怎么办?——拆成几片,每片单独装一帧。
分组要从 MTU 较小的链路转发出去时,路由器把它分成若干片,每片都是一个完整的 IP 数据报(复制原首部,修改总长度、标志、片偏移、检验和)。分片只在目的主机重组,中间路由器不重组——因为各片可能走不同的路,中间路由器不一定能收齐。
- 原数据长度 = 总长度 − 首部长度。
- 每片最多装的数据 = (MTU − 首部长度),再向下取到 8 的倍数(因为片偏移以 8 B 为单位,下一片的起点必须能被 8 整除)。
- 依次切片:第 k 片片偏移 = 前面各片数据长度之和 ÷ 8;前面各片 MF = 1,最后一片 MF = 0;每片总长度 = 该片数据 + 首部;各片标识都与原数据报相同。
展开解析
数据 3980B;每片最多 1480B(1480 恰是 8 的倍数)。
| 分片 | 数据长度 | 总长度 | 片偏移 | MF |
|---|---|---|---|---|
| 1 | 1480 | 1500 | 0 | 1 |
| 2 | 1480 | 1500 | 1480 ÷ 8 = 185 | 1 |
| 3 | 1020 | 1040 | 2960 ÷ 8 = 370 | 0 |
三片的标识都与原数据报相同;DF 都是 0。三片总长度加起来 4040 B,比原来多 40 B——多出来的是两个新复制的首部。
展开解析
- 第一段链路:数据 3800 B,每片最多 1480 B → 1480 + 1480 + 840,得到 A1(偏移 0,MF = 1)、A2(偏移 185,MF = 1)、A3(偏移 370,MF = 0)。
- 第二段链路:每片最多装 576 − 20 = 556 B,向下取到 8 的倍数 → 552 B。A1、A2、A3 各自再分:
| 来自 | 新分片数据 | 总长度 | 片偏移 | MF |
|---|---|---|---|---|
| A1(数据 0~1479) | 552 | 572 | 0 | 1 |
| 552 | 572 | 69 | 1 | |
| 376 | 396 | 138 | 1 | |
| A2(数据 1480~2959) | 552 | 572 | 185 | 1 |
| 552 | 572 | 254 | 1 | |
| 376 | 396 | 323 | 1 | |
| A3(数据 2960~3799) | 552 | 572 | 370 | 1 |
| 288 | 308 | 439 | 0 |
两个关键点:① 片偏移始终相对于最初的原数据报,所以 A2 再分出的第一片偏移是 185(= 1480 ÷ 8),不是 0;② 一片再分时,前几片 MF = 1,最后一片的 MF 照抄被分的那一片——A1、A2 本来 MF = 1,再分后最后一片仍是 1;只有 A3 分出的最后一片才是 0。目的主机收到 8 片,按片偏移排好,看到 MF = 0 且偏移连续无缺口,就知道收齐了。
- DF = 1 又放不下:路由器不分片,丢弃该分组,并向源主机发 ICMP 终点不可达(“需要分片但 DF 置为 1”)。源主机可以据此调小分组——这就是“路径 MTU 发现”的原理。
- 重组超时:目的主机在规定时间内没收齐某个数据报的全部分片,就丢弃已收到的部分,并发 ICMP 时间超过报文(4.6 节)。
| MF | 片偏移 | 结论 | 例 1 中 |
|---|---|---|---|
| 0 | 0 | 没有分过片的完整数据报(第一片同时也是最后一片) | 原数据报若不分片就是这样 |
| 1 | 0 | 第一片 | 分片 1 |
| 1 | ≠ 0 | 中间的某一片 | 分片 2 |
| 0 | ≠ 0 | 最后一片 | 分片 3 |
两个提醒:① 这张表看的是 MF,与 DF 无关——DF 只说“允不允许再分”;② 收到 MF = 0 的那一片不等于收齐,目的主机还要检查从偏移 0 开始各片首尾相接、没有缺口(例 2 的 8 片就要靠偏移排序)。由最后一片还能反推原数据长度:原数据 = 最后一片的片偏移 × 8 + 最后一片的数据长度(例 1:370 × 8 + 1020 = 3980 B)。
- 每片数据要取 8 的倍数——但最后一片不必是 8 的倍数(2021-36 最后一片只有 8 B 是巧合,例 1 的 1020 B 就不是)。
- 片偏移的单位是 8 B,总长度的单位是 1 B:问“总长度字段”写字节数,问“片偏移字段”写字节数 ÷ 8。
- 首部长度不一定是 20 B:首字节是 46 时首部 24 B,每片数据最多 MTU − 24 再取 8 的倍数。
- “分片在路由器重组”是错的,只有目的主机重组;IPv6 更进一步,连分片也只在源主机做(4.7 节)。
2021-36 给出 MTU、总长度,问第 2 片的总长度和 MF:直接按三步算,陷阱在“780 不是 8 的倍数”。2018-47(2) 大题:总长 1500 B 的分组从 MTU = 800 B 的接口转出,最大片装 776 B 数据,1480 = 776 + 704 共 2 片,片偏移 0 和 97。秒杀:每片数据 = ⌊(MTU − 首部) ÷ 8⌋ × 8;除最后一片外总长度都相同。这个方法在“首部带选项”“分片再分片”时要调整:前者首部按实际长度算,后者偏移从原数据报算起。
- A. 796,0
- B. 796,1
- C. 800,0
- D. 800,1
展开解析
B片偏移以 8 字节为单位,除最后一片外,每片的数据长度必须是 8 的倍数。
- 原数据 = 1580 − 20 = 1560B。
- 每片最多装 800 − 20 = 780B,向下取到 8 的倍数:776B。
- 切片:776 + 776 + 8。第 1 片总长 796、偏移 0、MF = 1;第 2 片总长 796、偏移 97、MF = 1;第 3 片总长 28、偏移 194、MF = 0。
- A 错MF = 0:第 2 片后面还有第 3 片,MF 应为 1。
- B 对796,1。
- C 错800:数据 780B 不是 8 的倍数,下一片的偏移无法表示。
- D 错D 的 MF = 1 对了,但总长度 800 不行:数据 780B 不是 8 的倍数,下一片的片偏移 780 ÷ 8 = 97.5 无法表示。
每片数据 = ⌊(MTU − 首部) ÷ 8⌋ × 8;只有最后一片 MF = 0。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。
- A. 72,0
- B. 144,1
- C. 144,0
- D. 1152,0
展开解析
C每片数据最多 ⌊580 ÷ 8⌋ × 8 = 576B。1560 = 576 + 576 + 408,第 3 片偏移 1152 ÷ 8 = 144,是最后一片,MF = 0。
- A 错72 = 576 ÷ 8 是第 2 片的偏移;第 3 片前面有两片共 1152B,偏移是 144。
- B 错偏移对了,但第 3 片是最后一片(576 + 576 + 408 = 1560),MF = 0。
- C 对对:偏移 1152 ÷ 8 = 144,最后一片 MF = 0。
- D 错1152 是前面数据的字节数,忘了除以 8;片偏移以 8B 为单位,是 144。
变化点:MTU 从 800 改为 600,片数变成 3;片偏移要除以 8。
- A. 6B
- B. 20B
- C. 24B
- D. 46B
展开解析
C低 4 位 6 是首部长度,单位 4B:6 × 4 = 24B(含 4B 选项)。
- A 错6 是首部长度字段的值,单位是 4B,要乘 4:6 × 4 = 24B。
- B 错20B 是没有选项的最短首部(字段值为 5);这里字段值是 6。
- C 对对:6 × 4 = 24B。
- D 错46 是这个字节的十六进制写法:高 4 位是版本 4,低 4 位才是首部长度 6。
变化点:由“分片”延伸到首部其他字段的单位:首部长度以 4B 为单位。
4.3IPv4 地址:分类、特殊地址、子网划分与 CIDR
问题:全世界几十亿台设备,怎样给每一台编一个号,既不重复,又能让路由器一眼看出“它在哪个网络里”?路由器不可能记住每一台主机,它只记“网络”——所以 IP 地址必须分成两段:前面一段说“哪个网络”,后面一段说“网络里的哪台主机”。
010-6275 1234:前面的区号 010 说明在北京,后面才是具体的电话。长途交换机只看区号就知道往哪送,到了北京再看后面的号码。IP 地址的网络号就像区号,主机号就像本地号码。哪里不像:电话区号长度是固定的规矩;IP 地址的“网络号有多长”早期按类别定,现在由掩码或 /n 随意指定(CIDR)。
分类的 IP 地址
IP 地址 32 位,为了好读,每 8 位一组写成十进制,中间用点隔开(点分十进制),如 11001010 01110110 00010100 00000101 写成 202.118.20.5。最早的编址方法把它分成网络号和主机号两部分,按网络号长度分成五类:
| 类别 | 首字节二进制 | 首字节范围 | 网络号 / 主机号 | 最大可指派网络数 | 每个网络最大主机数 | 默认掩码 |
|---|---|---|---|---|---|---|
| A | 0xxx xxxx | 1 ~ 126 | 8 / 24 | 27 − 2 = 126(网络号 0 和 127 不指派) | 224 − 2 = 16 777 214 | 255.0.0.0(/8) |
| B | 10xx xxxx | 128 ~ 191 | 16 / 16 | 214 − 1 = 16 383(128.0 不指派) | 216 − 2 = 65 534 | 255.255.0.0(/16) |
| C | 110x xxxx | 192 ~ 223 | 24 / 8 | 221 − 1 = 2 097 151(192.0.0 不指派) | 28 − 2 = 254 | 255.255.255.0(/24) |
| D | 1110 xxxx | 224 ~ 239 | 没有网络号和主机号之分,整个地址标识一个多播组(4.10 节) | — | ||
| E | 1111 xxxx | 240 ~ 255 | 保留,留作以后用 | — | ||
为什么 A 类网络数是 27 − 2:A 类网络号 8 位,第一位固定为 0,只剩 7 位可变,共 27 = 128 个;其中网络号全 0(0.x.x.x,表示“本网络”)和 127(环回)不指派,剩 126 个。B、C 类前缀 10、110 已经保证网络号不会全 0 或全 1,只是 128.0 和 192.0.0 这两个最小的网络号按规定不指派,所以只减 1。每个网络的主机数都减 2,是因为主机号全 0(网络地址)和全 1(广播地址)不能分给主机。
| 特殊地址 | 含义 | 能作源地址 | 能作目的地址 |
|---|---|---|---|
| 0.0.0.0 | 本网络上的本主机(刚启动、还没有地址时用,如 DHCP 请求);在路由表里写成 0.0.0.0/0 表示默认路由 | ✓ | ✗ |
| 网络号全 0,主机号为 x | 本网络上主机号为 x 的那台主机 | ✓ | ✓ |
| 主机号全 0 | 表示网络本身(网络地址),不分配给主机 | ✗ | ✗ |
| 主机号全 1 | 该网络的广播地址(直接广播,可以被路由器转发到该网络) | ✗ | ✓ |
| 255.255.255.255 | 本网络上的受限广播,路由器不转发 | ✗ | ✓ |
| 127.x.x.x(如 127.0.0.1) | 环回测试,分组不会发到网络上,在本机内部“绕一圈”回来 | ✓ | ✓ |
私有地址(专用地址,RFC 1918):只在机构内部使用,可以被不同机构重复使用;因特网上的路由器不转发目的地址为私有地址的分组。共三块:10.0.0.0/8(1 个 A 类网络)、172.16.0.0/12(172.16~172.31,16 个 B 类网络)、192.168.0.0/16(192.168.0~192.168.255,256 个 C 类网络)。私有地址要上因特网,必须经过 NAT(4.5 节)。
2017-36 问“只能作源地址、不能作目的地址”的是哪个——0.0.0.0(还没地址的主机用它“自称”,别人不能往这里发);255.255.255.255 正好相反,只能作目的。2011-38 问“子网 192.168.4.0/30 中能接收目的地址 192.168.4.3 的最大主机数”:/30 只有 4 个地址,.3 是这个子网的广播地址,能接收的就是子网里所有可分配地址的主机——4 − 2 = 2 台。秒杀:先判断目的地址是不是“主机号全 1”。
子网划分与子网掩码
问题:一个学校分到一个 B 类网络 172.20.0.0,可以容纳 6 万多台主机,但学校有十几个院系,每个院系的主机放在一个大广播域里,广播风暴会让网络瘫痪;再申请十几个网络号又太浪费。办法是在内部把这一个网络再切成多个子网。
从主机号里“借”若干位作子网号:IP 地址 = 网络号 + 子网号 + 主机号。对外仍是一个网络(外面的路由器只看网络号),内部路由器用子网掩码(网络号和子网号对应的位为 1,主机号为 0)区分各个子网:IP 地址 与 子网掩码 按位与 = 网络地址。
| 主机号位数 h | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 16 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 地址总数 2h | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 65 536 |
| 可分配 2h − 2 | 2 | 6 | 14 | 30 | 62 | 126 | 254 | 510 | 1022 | 2046 | 4094 | 65 534 |
| 前缀 /n = 32 − h | /30 | /29 | /28 | /27 | /26 | /25 | /24 | /23 | /22 | /21 | /20 | /16 |
反过来用:要容纳 50 台主机 → 找第一个“可分配 ≥ 50”的格子 → 62,h = 6,前缀 /26。
展开解析
- 掩码 255.255.240.0:前两个字节全 1;第 3 字节 240 = 1111 0000,有 4 个 1;第 4 字节全 0 → 前缀共 16 + 4 = 20 位,主机号 12 位。
- 前两个字节与 255 相与不变,第 4 字节与 0 相与得 0。只有第 3 字节要真算:
157 = 1001 1101
240 = 1111 0000
与 = 1001 0000 = 144 - 网络地址 = 172.20.144.0。广播地址:把主机号的 12 位全置 1——第 3 字节低 4 位置 1 得 1001 1111 = 159,第 4 字节 255 → 172.20.159.255。
- 可分配地址数 = 212 − 2 = 4094,范围 172.20.144.1 ~ 172.20.159.254。
验算:用下面的“块大小法”,/20 在第 3 字节的块大小是 16,157 向下取到 16 的倍数是 144,144 + 15 = 159,结果一致。
CIDR(无分类编址)
分类编址很浪费:一个单位有 300 台主机,C 类(254)不够,只能给一个 B 类(65 534),浪费了 99%。现在的因特网不再按 A/B/C 类分配,而使用 CIDR(无分类域间路由选择):地址写成 a.b.c.d/n,n 是网络前缀的位数,可以是 0~32 之间任何一个数,剩下 32 − n 位是主机号。前缀相同的一段连续地址叫一个 CIDR 地址块;上面那个单位可以分到一个 /23(510 个可分配地址)。/n 对应的掩码就是前 n 位为 1(也叫地址掩码)。CIDR 还能把多个小地址块聚合成一个大地址块(超网),见 4.4 节。
| “有意思的字节”里 1 的个数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|
| 该字节的掩码值 | 0 | 128 | 192 | 224 | 240 | 248 | 252 | 254 | 255 |
| 该字节的块大小 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
用法:/22 = 8 + 8 + 6 → 第 3 字节有 6 个 1 → 掩码 255.255.252.0、块大小 4;/27 = 8 + 8 + 8 + 3 → 掩码 255.255.255.224、块大小 32。掩码值 + 块大小 = 256,这张表背熟了,地址题就快了一半。
快速计算:块大小法
不必把 32 位全写成二进制,只看前缀落在的那个字节:
- 找“有意思的字节”:前缀 n 落在第 ⌈n / 8⌉ 个字节。
- 块大小 = 2(8k − n),k 是这个字节的序号(例如 /22 落在第 3 字节,块大小 224−22 = 4;/27 落在第 4 字节,块大小 25 = 32)。
- 该字节的值向下取到块大小的倍数 → 网络地址;再加上块大小 − 1,后面字节全填 255 → 广播地址。
展开解析
/22 落在第 3 字节,块大小 4。77 向下取到 4 的倍数是 76 → 网络地址 180.80.76.0;76 + 3 = 79 → 广播地址 180.80.79.255;可分配 180.80.76.1 ~ 180.80.79.254,共 210 − 2 = 1022 个(这就是 2012-39)。
定长划分与变长划分(VLSM)
- 定长:所有子网一样大。把 /m 平均分成 2k 个子网,新前缀 /(m + k)(2017-38:/16 分 128 个 → /23,每个 29 − 2 = 510;2026-39:/22 分 32 个 → /27)。
- 变长(VLSM):子网大小可以不同,按需求从大到小分配,每个子网都必须是 2 的幂大小、而且起点对齐到自己的块大小。求“最小的子网最小能多小”:每次把剩下的一半再对半分,最后两块一样大(2019-37)。
划分出的各子网互不重叠、合起来正好是原网络。已知一个子网,另一个候选子网放进去后,剩下的部分必须还能凑成题目要求个数的合法地址块(2021-35:已知 .128/26,若另一个是 .0/26,剩下的 .64/26 和 .192/26 不相邻,一个子网装不下)。
二叉树分配法:把一个地址块看成二叉树的根,每往下一层前缀长度加 1、地址范围对半分(左孩子 = 下一位取 0,右孩子 = 下一位取 1)。树上的每个结点都天然是一个“2 的幂大小、起点对齐”的合法地址块。分配时从大到小,每个子网挑一个大小合适、还没被占用的结点;一个结点一旦分出去,它的祖先和子孙都不能再分,这样各子网就不会重叠。
展开解析
- 算每个子网至少要多大(要加上网络地址和广播地址这 2 个):LAN1 需要 100 + 1 + 2 = 103 → 取 2 的幂 128(/25);LAN2 需要 50 + 1 + 2 = 53 → 64(/26);LAN3 需要 20 + 1 + 2 = 23 → 32(/27);每条链路 2 + 2 = 4 → 4(/30)。合计 128 + 64 + 32 + 4 + 4 = 232 ≤ 256,够分。
- 从大到小在二叉树上挑结点(见下图):LAN1 取左半 .0/25;右半 .128/25 再对半,左边 .128/26 给 LAN2;.192/26 再对半,.192/27 给 LAN3;.224/27 继续往下分,最后两个 /30 给两条链路。
- 结果:
| 子网 | 地址块 | 子网掩码 | 可分配地址 | 个数 |
|---|---|---|---|---|
| LAN1 | 202.118.20.0/25 | 255.255.255.128 | .1 ~ .126 | 126 |
| LAN2 | 202.118.20.128/26 | 255.255.255.192 | .129 ~ .190 | 62 |
| LAN3 | 202.118.20.192/27 | 255.255.255.224 | .193 ~ .222 | 30 |
| 链路 a | 202.118.20.224/30 | 255.255.255.252 | .225 ~ .226 | 2 |
| 链路 b | 202.118.20.228/30 | 255.255.255.252 | .229 ~ .230 | 2 |
剩下 .232/29 和 .240/28 留作以后扩展。答案不唯一(比如 LAN1 也可以放在 .128/25),但每块的起点必须是自己块大小的整数倍:/26 的起点只能是 .0、.64、.128、.192,放在 .100 就错了。
| 题型 | 真题 | 方法 | 什么时候会失效 |
|---|---|---|---|
| 求网络地址、广播地址、可分配范围 | 2012-39、2022-35、2023-39 | 块大小法:有意思的字节向下取整 | 前缀正好是 8 的倍数时“有意思的字节”是下一个字节,块大小 256 |
| 定长划分 | 2010-37、2017-38、2026-39 | 平分 2k 份 → 前缀加 k;每份主机数 232−n − 2 | 题目说明“子网号不能全 0 / 全 1”时子网数要减 2 |
| 变长划分 | 2019-37、2021-35 | 二叉树:大块先分、互不重叠、合起来正好是原网络 | 要求“最小子网最大”时反过来——尽量均分 |
| 特殊地址与主机配置 | 2011-38、2017-36、2016-39 | 先判断是不是网络地址 / 广播地址 / 0.0.0.0;配置题检查“主机与网关是否在同一子网” | — |
| 容易错成 | 正确的是 |
|---|---|
| /n 网络能分 232−n 台主机 | 要减去网络地址和广播地址:232−n − 2。/30 只有 2 个可用地址,正好给点对点链路两端的路由器接口 |
| 子网 /26 可以从 .100 开始 | 地址块的起点必须是块大小的整数倍:/26(64 个)只能从 .0、.64、.128、.192 开始 |
| 255.255.255.240 是 /24 + 240 位 | 240 = 1111 0000,有 4 个 1,所以是 /28;掩码一定是“前面连续的 1 + 后面连续的 0”,255.255.255.250 这种不是合法掩码 |
| 主机号全 1 的地址谁都收不到 | 它是直接广播地址,本子网所有主机都收(2011-38);255.255.255.255 是受限广播,只在本网络、路由器不转发 |
| 借 n 位就有 2n − 2 个子网 | CIDR 下是 2n;只有题目声明“子网号不能全 0 / 全 1”时才减 2 |
- A. 180.80.76.0
- B. 180.80.76.255
- C. 180.80.77.255
- D. 180.80.79.255
展开解析
D掩码 255.255.252.0 = /22,主机号 10 位(第 3 字节的低 2 位 + 第 4 字节)。
- 块大小法:/22 在第 3 字节,块大小 4;77 向下取到 4 的倍数是 76 → 网络地址 180.80.76.0。
- 广播地址:主机号 10 位全 1 → 第 3 字节 76 + 3 = 79,第 4 字节 255 → 180.80.79.255。
- A 错180.80.76.0 是网络地址。
- B 错只把第 4 字节置成了全 1,第 3 字节的低 2 位也属于主机号,也要置 1。
- C 错按 /24 算的广播地址,掩码不是 255.255.255.0。
- D 对180.80.79.255。
广播地址 = 网络地址 + 块大小 − 1(在有意思的那个字节上),后面字节全 255。
- A. 126
- B. 254
- C. 510
- D. 1022
展开解析
B/20 共 212 = 4096 个地址,要划成 5 个子网,每个子网的大小都是 2 的幂,加起来等于 4096。想让最小的那个尽量小,就让其他子网尽量大:每次把剩下的一半再对半分。
- 4096 = 2048(/21)+ 1024(/22)+ 512(/23)+ 256(/24)+ 256(/24)。
- 最小子网是 /24,可分配 28 − 2 = 254。
- 能否更小?5 个 2 的幂凑成 4096 只有三种分法:2048+1024+512+256+256、2048+512+512+512+512、1024+1024+1024+512+512,最小块最小就是 256。
- A 错126 对应 /25。5 个子网恰好分完 /20 时做不到:出现 128 的块就至少要两个,其余三个凑不成 3840。
- B 对254。
- C 错510(/23):在 1024+1024+1024+512+512 这种分法中最小子网是它,但不是“最小可能”。
- D 错1022(/22):5 个 /22 需要 5120 个地址,超过 4096,最小子网不可能这么大。
变长划分求“最小子网最小能多小”:对半、再对半……最后两块一样大。
- A. 192.168.9.0/25
- B. 192.168.9.0/26
- C. 192.168.9.192/26
- D. 192.168.9.192/27
展开解析
B3 个子网互不重叠、合起来恰好是原网络。已知一个子网 192.168.9.128/26(.128~.191),逐个试:另一个子网放进去后,剩下的部分能否恰好是 1 个合法地址块。
- A .0/25(.0~.127):原网络取 .0/24,剩 .192/26,一个块 ✓。
- B .0/26(.0~.63):原网络至少是 .0/24,剩 .64~.127 和 .192~.255 两段不相邻,一个子网装不下 ✗。
- C .192/26:原网络取 .0/24,剩 .0/25 ✓。
- D .192/27(.192~.223):原网络取 .128/25,剩 .224/27 ✓。
- A 可以.0/25、.128/26、.192/26 正好分完 .0/24。
- B 不可能剩下的两段不连续,至少还要 2 个子网。
- C 可以原网络取 192.168.9.0/24,除去 .128/26 和 .192/26,剩下的 .0 ~ .127 正好是一个 /25 块,第三个子网就是 192.168.9.0/25。
- D 可以.128/26、.192/27、.224/27 正好分完 .128/25。
画一条 0~255 的数轴,把已知子网标上去,看剩下的空当是不是一个对齐的 2 的幂块。
- A. H1 不能与 H2 进行正常 IP 通信
- B. H2 与 H4 均不能访问 Internet
- C. H1 不能与 H3 进行正常 IP 通信
- D. H3 不能与 H4 进行正常 IP 通信
展开解析
C掩码 /25 把 192.168.3.0/24 分成两半:H1(.2)、H2(.3)在 192.168.3.0/25;H3(.251)、H4(.252)在 192.168.3.128/25。R2 的 E1 接口是 192.168.3.254。
- H1、H2 同一子网,直接经交换机通信,正常;H3、H4 同理。
- H1、H2 的默认网关 192.168.3.1 在网络中并不存在(R2 的接口是 .254),发往其他子网的分组交不出去。
- H3、H4 的网关 .254 正确,可以访问 Internet。
- H1 与 H3 不在同一子网,H1 要经网关转发,而网关不存在 → 不能通信。
- A 不会H1、H2 同在 192.168.3.0/25,直接通信,不需要网关。
- B 不会H2 不能上网,但 H4 的网关 .254 正确,能访问 Internet。
- C 可能H1 发往 H3 要经网关 .1,而 .1 不存在。
- D 不会H3、H4 同在 192.168.3.128/25,直接通信。
主机先用自己的掩码判断目的地址是否同一子网:是 → 直接发;不是 → 交给默认网关。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。
- A. 16,16
- B. 14,16
- C. 8,30
- D. 16,14
展开解析
D240 = 11110000,借 4 位作子网号:24 = 16 个子网;主机号 4 位:24 − 2 = 14。
- A 错子网数对了,但每个子网 16 个地址中网络地址和广播地址不能分配,只有 14 个。
- B 错两处都减错了:CIDR 下全 0、全 1 子网号都能用,子网数是 16;要减 2 的是主机号全 0、全 1 的地址。
- C 错8、30 对应借 3 位(/27,掩码 224);掩码 240 是借 4 位。
- D 对对:2⁴ = 16 个子网,每个 2⁴ − 2 = 14 个可分配地址。
变化点:掩码 248 换成 240。
- A. 6
- B. 1
- C. 7
- D. 8
展开解析
A/29 有 8 个地址(.0 ~ .7),.7 是广播地址,可分配 .1 ~ .6 共 6 台主机,都能收到。
- A 对对:.1 ~ .6 共 6 台主机都收广播。
- B 错1:把 .7 当成了某一台主机的地址;.7 是 /29 的广播地址,子网内的主机都会接收。
- C 错7 把网络地址 .0 也算成了主机;可分配的只有 .1 ~ .6。
- D 错8 是 /29 的地址总数,网络地址 .0 和广播地址 .7 都不能分给主机。
变化点:/30 换成 /29。
- A. 180.80.76.255
- B. 180.80.77.255
- C. 180.80.79.255
- D. 180.80.255.255
展开解析
B/23 在第 3 字节块大小 2:77 → 76 ~ 77,广播地址 180.80.77.255。
- A 错76 是网络地址的第 3 字节,只把第 4 字节置了 1;/23 时第 3 字节的最低位也是主机号,76 + 1 = 77。
- B 对对:180.80.76.0/23 的广播地址 180.80.77.255。
- C 错180.80.79.255 是按 /22(块大小 4,76 ~ 79)算的,那是原题 2012-39 的掩码。
- D 错按 /16 算了,把第 3、4 字节全置 1;/23 的主机号只有 9 位。
变化点:掩码从 /22 改为 /23,块大小从 4 变 2。
- A. 254
- B. 510
- C. 1022
- D. 1024
展开解析
C64 = 26,新前缀 /22,主机位 10:210 − 2 = 1022。
- A 错254 = 2⁸ − 2,对应 /24(借 8 位);64 个子网只需借 6 位,新前缀 /22。
- B 错510 = 2⁹ − 2,是原题 128 个子网(/23)的答案。
- C 对对:2¹⁰ − 2 = 1022。
- D 错1024 = 2¹⁰ 是每个子网的地址总数,忘了去掉网络地址和广播地址。
变化点:子网个数从 128 改为 64。
- A. 168.16.84.1,168.16.87.254
- B. 168.16.80.1,168.16.95.254
- C. 168.16.84.1,168.16.84.254
- D. 168.16.80.1,168.16.87.254
展开解析
D/21 在第 3 字节块大小 8:84 → 80 ~ 87,可分配 168.16.80.1 ~ 168.16.87.254。
- A 错最小地址按 /24 写成了 168.16.84.1;/21 的块从 80 开始,最小可分配 168.16.80.1。
- B 错最大地址按 /20(80 ~ 95)算了,那是原题 2023-39 的前缀;/21 块大小 8,到 87 为止。
- C 错两端都按 /24 算了,只是 168.16.84.0/24 的范围。
- D 对对:168.16.80.0/21,可分配 80.1 ~ 87.254。
变化点:前缀从 /20 改为 /21。
- A. 123.4.6.64/26
- B. 123.4.6.0/26
- C. 123.4.6.96/27
- D. 123.4.4.64/26
展开解析
A16 = 24,新前缀 /26,块大小 64:100 → 64 ~ 127,子网 123.4.6.64/26。
- A 对对:/26 块大小 64,100 落在 64 ~ 127。
- B 错123.4.6.0/26 是 .0 ~ .63,不含 .100;100 向下取到 64 的倍数是 64。
- C 错/27 对应 32 个子网;16 个子网只借 4 位,新前缀 /26。
- D 错第 3 字节写错了:地址是 123.4.6.x,所在子网的第 3 字节也是 6。
变化点:子网个数和地址都变了,方法仍是“新前缀 → 块大小 → 向下取整”。
4.4路由表与分组转发:最长前缀匹配、路由聚合
问题:路由器手里只有一张路由表,分组上只有一个目的 IP 地址。它是怎么从几十万条表项里,挑出“该走哪个口、交给谁”的?
牌子上写“广东方向 → 走 3 号出口”“广州市区 → 走 5 号出口”“其他方向 → 直行”。要去广州天河,两块牌子都对得上,你会选写得更具体的“广州市区”——这就是最长前缀匹配;什么都对不上就“直行”——这就是默认路由。哪里不像:司机可以看路况临时改道,路由器查表是死规矩,表里写哪个口就走哪个口。
路由表的每一项主要是:目的网络地址、子网掩码(或前缀长度)、下一跳地址、转发接口。路由器收到分组后按下面的算法转发:
- 取出分组的目的 IP 地址 D。
- 若 D 在与本路由器直接相连的某个网络上,直接交付(经 ARP 得到目的主机的 MAC 地址,封装成帧发过去)。
- 否则查路由表:把 D 与每一项的掩码相与,看是否等于该项的目的网络地址。有多项匹配时,选前缀最长的那一项(最长前缀匹配),交给它的下一跳(间接交付)。
- 都不匹配就走默认路由 0.0.0.0/0(前缀长度 0,任何地址都匹配,但优先级最低);没有默认路由则丢弃,并向源主机发 ICMP 终点不可达。
还有一种特定主机路由:目的是一台主机,前缀 /32(掩码 255.255.255.255),匹配时优先级最高(前缀最长)。常用于给某台服务器单独指定路径,或者网络管理员测试、排错。
转发流程与一张完整的路由表
| 目的网络 | 子网掩码 | 下一跳 | 接口 | 这是哪种路由 |
|---|---|---|---|---|
| 192.168.1.0 | 255.255.255.0 | 直接交付 | E0 | 直连网络 |
| 192.168.2.0 | 255.255.255.0 | 直接交付 | E1 | 直连网络 |
| 172.16.0.0 | 255.255.0.0 | 10.0.0.2 | S0 | 网络路由(间接交付) |
| 202.118.3.2 | 255.255.255.255 | 10.0.0.2 | S0 | 特定主机路由(/32) |
| 0.0.0.0 | 0.0.0.0 | 10.0.0.2 | S0 | 默认路由(/0) |
下一跳是相邻路由器与本路由器在同一网络上的那个接口的 IP 地址(上表中是 R2 的 10.0.0.2),不是本路由器自己的接口地址(10.0.0.1),也不是远处的地址。直连网络的下一跳写“直接交付”(或写本接口)。大题填路由表时这是最常见的失分点(2011-37、2009-47)。
上表的写法正是 2009-47(2) 要求的四类路由:到两个局域网的直连路由、到域名服务器的主机路由、到互联网的默认路由。
最长前缀匹配:跟我比一遍
为什么要“最长”?因为前缀越长,表示的地址范围越小、信息越具体。一个目的地址可能同时落在一个大块(比如整个省)和一个小块(某个城市)里,小块的表项是管理员或路由协议专门为它设的,当然更可信。
展开解析
以 172.16.75.200 为例,把它写成二进制,与每一项的前 n 位比较(下图):
- ① /16:前两个字节都是 172.16 → 匹配。
- ② /18:第 3 字节 75 = 0100 1011,表项 64 = 0100 0000,前 2 位相同 → 匹配。
- ③ /21:第 3 字节前 5 位:75 = 01001 011,72 = 01001 000 → 匹配。
- ④ /25:第 3 字节 8 位都要比,75 = 0100 1011,72 = 0100 1000,不同 → 不匹配。
- ⑤ /0:不比较任何位 → 总是匹配。
- 匹配的有 ①②③⑤,最长的是 ③(21 位)→ 交给 R3。
同样做法:172.16.72.150 第 4 字节 150 ≥ 128,连 ④ 也匹配 → R4;172.16.130.5 第 3 字节 130 不在 64~127 → 只匹配 ①⑤ → R1;172.17.0.1 第 2 字节就不同 → 只剩默认路由 → R5。
快速判断法:用块大小法求出每一项的地址范围(② 是 172.16.64.0 ~ 172.16.127.255,③ 是 172.16.72.0 ~ 172.16.79.255,④ 是 172.16.72.128 ~ 172.16.72.255),看目的地址落在哪几个范围里,取范围最小的那个。
路由聚合(构成超网)
问题:因特网上有几十万个网络,如果主干路由器为每个网络都存一条路由,表会大到查不动。好在离得远的路由器看来,一个单位的十几个子网都“走同一个方向”,完全可以合成一条。
若几条路由的下一跳相同,且目的网络可以合成一个更大的地址块,就可以合成一条,路由表变小。做法:把这几个网络地址写成二进制,找共同前缀,前缀后面全部置 0。
展开解析
第 3 字节:32 = 00100000,40 = 00101000,48 = 00110000,56 = 00111000。共同前缀是前 16 位 + 3 位 = 19 位,后面置 0 得 32 → 35.230.32.0/19。验算:/19 在第 3 字节的块大小是 32,32~63 正好覆盖 32、40、48、56 四个 /21。
- 聚合后的网络地址是共同前缀后面补 0,不一定是原来最小的那个地址(本例恰好是 32)。
- 只能聚合恰好凑成一个 2 的幂大小、且起点对齐的地址块。不连续或凑不整的,聚合后会“多包进”不属于它的地址——除非用最长前缀匹配另外加更具体的路由来纠正。
聚合 + 例外路由:最长前缀匹配的妙用
四个网络 10.8.0.0/24、10.8.1.0/24、10.8.2.0/24、10.8.3.0/24 中,前三个的下一跳是 R1,第四个的下一跳是 R2。能不能聚合?
- 只合下一跳相同的:10.8.0.0/24 和 10.8.1.0/24 合成 10.8.0.0/23 → R1;10.8.2.0/24 单独 → R1(它和 /23 合不成对齐的块);10.8.3.0/24 → R2。共 3 条。
- 聚合 + 例外:四个合成 10.8.0.0/22 → R1,再加一条更具体的 10.8.3.0/24 → R2。共 2 条。发往 10.8.3.77 的分组同时匹配 /22 和 /24,按最长前缀匹配选 /24 → R2,正确;发往 10.8.2.77 的只匹配 /22 → R1,正确。
真实网络里“聚合 + 例外路由”很常见。但 408 大题说“路由项尽可能少”时,标准答案一般只做恰好拼成对齐块、下一跳相同的聚合,并且绝不把原来不存在的地址包进来(2026-37:199.10.20.64/27 和 .128/25 中间隔着不存在的 .96/27,就不能合成 .0/24,答案是 5 条)。题目没有明确允许时,按“恰好聚合”答最稳妥;如果用了例外路由,要写清楚依据是最长前缀匹配。
- 查表转发(2015-38):几项同时匹配,选最长;/0 最后才用。秒杀:先把各项写成地址范围,看目的地址落在哪几个里。
- 聚合(2018-38、2011-37):2011-37 中 R2 后面的 192.168.2.0/25 和 .128/25 恰好合成 192.168.2.0/24,下一跳是 R2 的接口 192.168.1.2。
- 配置检查(2022-36、2016-39):主机的默认网关必须是同一子网里路由器接口的地址,掩码必须与路由器那个接口一致。
- 大题填表(2009-47、2013-47、2014-43):先划子网,再按“直连 / 网络路由 / 主机路由 / 默认路由”逐类写,最后检查能不能聚合;下一跳写相邻路由器的接口地址。
- 动态变化后重算(2026-37):链路断开 → 重算最短路 → 出接口改变 → 重新聚合。
- 最长前缀匹配是“在匹配的表项里选前缀最长的”,不是直接挑表里前缀最长的那一项——先逐项判断是否匹配(例中 /25 最长,但它不匹配 172.16.75.200)。
- 默认路由 0.0.0.0/0 总是匹配,所以它只在“别的都不匹配”时才起作用;路由表里没有默认路由时,查不到就丢弃并回 ICMP 终点不可达。
- 下一跳是相邻路由器接口的地址,不是本路由器出接口的地址;直连网络的表项没有下一跳路由器,写“直接交付”。
- 聚合后要回头检查:聚合出的地址块有没有把不属于这些网络的地址也包进来?有,就不能这样聚合(除非题目允许加例外路由)。
- A. 192.168.2.0,255.255.255.128,192.168.1.1
- B. 192.168.2.0,255.255.255.0,192.168.1.1
- C. 192.168.2.0,255.255.255.128,192.168.1.2
- D. 192.168.2.0,255.255.255.0,192.168.1.2
展开解析
DR1 还缺到 192.168.2.0/25 和 192.168.2.128/25 的路由,两者都经 R2。只增加一条,就要把它们聚合。
- 192.168.2.0/25 与 192.168.2.128/25 前 24 位相同,聚合为 192.168.2.0/24,掩码 255.255.255.0。
- 下一跳:R2 在与 R1 相连的网络 192.168.1.0/24 上的接口 192.168.1.2。
- A 错掩码 /25 只覆盖 192.168.2.0/25;下一跳 192.168.1.1 是 R1 自己的接口。
- B 错掩码对了,但下一跳写成了 R1 自己的接口。
- C 错下一跳对了,但掩码 /25 漏掉了 192.168.2.128/25。
- D 对192.168.2.0,255.255.255.0,192.168.1.2。
下一跳 = 相邻路由器在共同网络上的接口地址。
| 目的网络 | 下一跳 | 接口 |
|---|---|---|
| 169.96.40.0/23 | 176.1.1.1 | S1 |
| 169.96.40.0/25 | 176.2.2.2 | S2 |
| 169.96.40.0/27 | 176.3.3.3 | S3 |
| 0.0.0.0/0 | 176.4.4.4 | S4 |
- A. S1
- B. S2
- C. S3
- D. S4
展开解析
C逐项判断目的地址是否落在该网络内,再在匹配的项中选前缀最长的。
- /23:169.96.40.0 ~ 169.96.41.255,包含 40.5 ✓。
- /25:169.96.40.0 ~ 169.96.40.127 ✓。
- /27:169.96.40.0 ~ 169.96.40.31 ✓。
- 默认路由总是匹配,但前缀长度 0。最长的是 /27 → 接口 S3。
- A 错S1 的 /23 也匹配,但前缀较短。
- B 错S2 的 /25 也匹配,但不是最长。
- C 对S3,/27 最长。
- D 错默认路由只在其他项都不匹配时才用。
多项匹配选最长前缀;默认路由 /0 永远排最后。
- A. 255.255.255.192,192.168.1.1
- B. 255.255.255.192,192.168.1.62
- C. 255.255.255.224,192.168.1.1
- D. 255.255.255.224,192.168.1.62
展开解析
DH 所在的网络是路由器接口 192.168.1.62/27 所连的那个网络,H 的掩码要与该网络一致,默认网关就是这个接口。
- /27 → 掩码 255.255.255.224;网络 192.168.1.32/27(.32 ~ .63),H 的 .60 在其中。
- 默认网关 = 本网络路由器接口 192.168.1.62。
- A 错掩码 .192 是 /26,与网关接口的 /27 不一致;192.168.1.1 在两个路由器之间的 /30 链路上,不在 H 的网络里。
- B 错网关 192.168.1.62 对了,但掩码 255.255.255.192 是 /26,与网关接口的 /27 不一致:H 会把 192.168.1.0 ~ .31(包括 /30 链路上的 .1、.2)也当成本网络,直接 ARP 而不交给网关。
- C 错掩码 255.255.255.224 对了,但网关 192.168.1.1 在两个路由器之间的 /30 链路(192.168.1.0/30)上,不在 H 所在的 192.168.1.32/27 里,H 无法把分组交给它。
- D 对255.255.255.224,192.168.1.62。
默认网关 = 与主机在同一网络上的路由器接口;主机掩码跟这个接口的前缀一致。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。
- A. S2
- B. S1
- C. S3
- D. S4
展开解析
B169.96.40.200 不在 /25(.0 ~ .127)和 /27 内,只匹配 /23(40.0 ~ 41.255)和默认路由,取最长的 /23 → S1。
- A 错/25 只覆盖 169.96.40.0 ~ .127,不包含 .200。
- B 对对:只有 /23 和默认路由匹配,取 /23。
- C 错/27 只覆盖 169.96.40.0 ~ .31,也不包含 .200。
- D 错默认路由只在其他项都不匹配时才用;这里 /23 匹配,前缀更长。
变化点:目的地址换成 .200,更长的前缀不匹配了。
- A. 10.0.16.0/19
- B. 10.0.0.0/20
- C. 10.0.16.0/20
- D. 10.0.16.0/21
展开解析
C第 3 字节 16、20、24、28 = 0001 0000、0001 0100、0001 1000、0001 1100,共同前缀 16 + 4 = 20 位 → 10.0.16.0/20(第 3 字节 16 ~ 31)。
- A 错10.0.16.0/19 不是合法的网络地址:/19 块大小 32,起点应为 0;它实际覆盖 0 ~ 31,多包进了 0 ~ 15。
- B 错10.0.0.0/20 覆盖第 3 字节 0 ~ 15,四个网络一个都不包含。
- C 对对:共同前缀 20 位,10.0.16.0/20 覆盖 16 ~ 31。
- D 错/21 只覆盖 16 ~ 23,漏了 24、28 两个网络。
变化点:聚合对象从 /21 换成 /22。
- A. 255.255.255.224,192.168.1.126
- B. 255.255.255.192,192.168.1.100
- C. 255.255.255.128,192.168.1.1
- D. 255.255.255.192,192.168.1.126
展开解析
D/26 = 255.255.255.192;H 与该接口都在 192.168.1.64/26 中,默认网关是 192.168.1.126。
- A 错掩码 255.255.255.224 是 /27,与网关接口的 /26 不一致,H 会把同网的 .64 ~ .95 当成外网。
- B 错掩码对了,但网关写成了 H 自己的地址 192.168.1.100,分组交不出去。
- C 错掩码 .128 是 /25,与接口的 /26 不一致;网关 192.168.1.1 也不在 H 所在的 192.168.1.64/26 里。
- D 对对:/26 掩码,网关是同网的路由器接口 .126。
变化点:/27 换成 /26。
- A. 192.168.2.0,255.255.255.128,192.168.1.2
- B. 192.168.2.0,255.255.255.0,192.168.1.2
- C. 192.168.2.0,255.255.255.192,192.168.1.2
- D. 192.168.2.0,255.255.255.128,192.168.1.1
展开解析
A两个 /26 相邻且对齐,聚合为 192.168.2.0/25(255.255.255.128),下一跳 R2 的 192.168.1.2。
- A 对对:两个相邻的 /26 聚合为 /25,下一跳 R2。
- B 错/24 多包进了 192.168.2.128 ~ .255,它们并不在 R2 后面;两个相邻的 /26 恰好聚合成 /25。
- C 错掩码 /26 只覆盖 192.168.2.0/26,漏了 192.168.2.64/26。
- D 错掩码对了,但下一跳 192.168.1.1 是 R1 自己的接口,应为 R2 的 192.168.1.2。
变化点:子网变小,聚合结果从 /24 变成 /25;下一跳不变。
4.5网络地址转换 NAT
问题:IPv4 只有约 43 亿个地址,早已分完;可一个家庭就有手机、电脑、电视好几台设备,一个学校有上万台。私有地址(10.x、172.16~31.x、192.168.x)可以随便用,但因特网上的路由器不转发它们——用私有地址的主机怎么上网?
公司对外只有一个总机号码,员工打出去时,对方看到的都是总机号;对方回拨总机,总机按“分机号”转给具体的员工。NAT 路由器就是总机:内网主机的私有地址是“员工的内部工号”,NAT 路由器的全球地址是“总机号”,端口号就是“分机号”。哪里不像:总机的分机号是固定分配的;NAPT 的“分机号”(转换后的端口)是有人往外打电话时临时分配的,通话结束一段时间后就收回。
IPv4 地址不够用,一个单位内部的大量主机使用私有地址,只在连接因特网的路由器上装 NAT 软件,拥有少量全球地址。内网主机访问外网时,NAT 路由器把分组的源地址换成全球地址;外网回来的分组,再把目的地址换回内网私有地址。
只换 IP 地址的话,同一时刻一个全球地址只能给一台内网主机用。实际使用的是 NAPT(网络地址与端口号转换):把(私有地址,源端口)一起换成(全球地址,新端口),用不同端口区分不同内网主机,一个全球地址就能让很多主机同时上网。
- NAT 修改了 IP 首部 → IP 首部检验和要重算;NAPT 还修改了 TCP/UDP 的端口号,而 TCP/UDP 检验和覆盖伪首部(含源、目的 IP 地址)和端口 → 传输层检验和也要重算(2025-37)。长度字段、目的端口(出去时)都不变。
- NAT 路由器要看、要改传输层的端口号,严格说越过了网络层的职责;但它是实际中使用最广的节省地址的办法。另外 NAT 破坏了“端到端”的透明性:外网主机看不到内网主机的真实地址,也不能主动向它发起连接,P2P 应用、内网服务器都要额外配置(静态映射等)才能用。
- 判断 NAT 后源地址的思路:出去的分组经过 NAT 路由器后,源地址 = NAT 路由器外网接口的地址(2016-38、2023-38)。若外网接口地址没直接给,就用它所在链路的地址块推:/30 链路只有两个可用地址,一个是对端路由器的,另一个就是它的。
三种 NAT:静态、动态、NAPT
| 方式 | 怎么转换 | 特点与用途 |
|---|---|---|
| 静态 NAT | 管理员事先配好“一个私有地址 ↔ 一个全球地址”(或“全球地址:端口 ↔ 私有地址:端口”)的固定映射 | 映射永久存在,外网主机可以主动访问内网服务器。2020-47 就是在 R2 上把 203.10.2.2:80 静态映射到内网 Web 服务器 192.168.1.2:80(也叫端口映射) |
| 动态 NAT | NAT 路由器有一个全球地址池,内网主机要出去时临时分一个,用完收回 | 同一时刻能上网的内网主机数 ≤ 全球地址个数 |
| NAPT | (私有地址,端口)↔(全球地址,新端口),用端口区分不同内网主机 | 一个全球地址可供上万台主机同时上网;家用路由器都是它。表项由内网主动发出的分组“触发”建立,外网主机不能主动发起连接 |
NAPT 转换表:跟我走一遍
内网两台主机 H1(192.168.1.2)和 H2(192.168.1.3)碰巧都用源端口 5000 访问同一台 Web 服务器 S(202.10.5.8:80)。NAT 路由器 R 的外网接口地址是 61.155.1.10。看 R 的转换表怎样一步步建立、怎样把回来的分组送对人:
| 内网一侧 | 外网一侧 | ||
|---|---|---|---|
| 私有 IP 地址 | 端口 | 全球 IP 地址 | 端口 |
| 192.168.1.2 | 5000 | 61.155.1.10 | 30001 |
| 192.168.1.3 | 5000 | 61.155.1.10 | 30002 |
如果外网某主机主动发一个分组到 61.155.1.10:40000,R 查不到 40000 这一项,就不知道该交给谁,只能丢弃——所以 NAPT 天然挡住了“外网主动连进来”,想让外网访问内网服务器,就要像 2020-47 那样配静态映射。
| 方向 | IP 首部 | TCP / UDP 首部 |
|---|---|---|
| 内 → 外 | 源 IP 改为全球地址;TTL 减 1;首部检验和重算 | 源端口改为新端口;检验和重算(伪首部里有源 IP) |
| 外 → 内 | 目的 IP 改为私有地址;TTL 减 1;首部检验和重算 | 目的端口改回原端口;检验和重算 |
| 不变 | 总长度、协议字段、UDP 长度、另一方向的端口(出去时的目的端口 80 不变) | |
- 内网主机之间互相通信(目的地址也是本内网私有地址)不经过 NAT,地址不变。
- NAPT 的转换表项是内网主机主动向外发分组时建立的;外网主动发来的分组若查不到表项就被丢弃。所以内网服务器要被外网访问,必须事先配置静态映射。
- 不同内网里可以出现相同的私有地址(2020-47 中 H2 与 Web 服务器都是 192.168.1.2),它们靠各自的 NAT 路由器区分,互不冲突。
- NAT 改的是“出去的源、回来的目的”,不改出去分组的目的地址和目的端口(如 Web 服务器的 80)。
- A. 192.168.0.33
- B. 192.168.0.35
- C. 192.168.0.1
- D. 192.168.0.3
展开解析
A经过 NAT 的 R2 后,源地址换成 R2 外侧接口(连 R1 的那个接口)的地址。
- R1—R2 链路是 192.168.0.34/30:地址块 192.168.0.32 ~ .35,.32 网络地址,.35 广播地址,可用 .33、.34。
- .34 标在 R1 一侧,是 R1 的接口,所以 R2 外侧接口是 192.168.0.33。
- A 对192.168.0.33。
- B 错192.168.0.35 是这个 /30 块的广播地址。
- C 错192.168.0.1 是 R2 的内网接口,是 H 的默认网关。
- D 错192.168.0.3 是 H 自己的地址,经过 NAT 后要被换掉。
/30 链路两端各占一个可用地址:知道一端,另一端就确定了。
- A. 192.168.3.251,130.18.10.1
- B. 192.168.3.251,201.1.3.9
- C. 201.1.3.8,130.18.10.1
- D. 201.1.3.10,130.18.10.1
展开解析
DH3 用私有地址 192.168.3.251,R2 的 L0 接口实现 NAT:分组从 L0 转发出去时,源地址换成 L0 的公网地址;目的地址一直是服务器 S。
- R1 与 R2 之间的链路是 /30:R1 一侧 201.1.3.9 所在的地址块是 201.1.3.8 ~ 201.1.3.11,.8 是网络地址,.11 是广播地址,可用的只有 .9 和 .10。
- .9 是 R1 的,所以 R2 的 L0 = 201.1.3.10。
- 源 201.1.3.10,目的 130.18.10.1。
- A 错源地址还是私有地址,没有经过 NAT 转换。
- B 错目的地址写成了下一跳 R1 的接口。IP 分组的目的地址始终是最终目的 S。
- C 错201.1.3.8 是这个 /30 块的网络地址,不能作源地址。
- D 对201.1.3.10,130.18.10.1。
出 NAT:源地址 = NAT 路由器外网接口地址;目的地址不变。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。
- A. 192.168.0.36
- B. 192.168.0.38
- C. 192.168.0.37
- D. 192.168.0.39
展开解析
B/30 块 .36 ~ .39,可用 .37、.38;.37 是 R1 的,R2 外侧接口是 .38。
- A 错.36 是这个 /30 块的网络地址,不能分配给接口。
- B 对对:/30 块 .36 ~ .39,可用 .37、.38,.37 是 R1 的。
- C 错.37 是 R1 的接口,R2 外侧接口是剩下的 .38。
- D 错.39 是这个 /30 块的广播地址,不能分配给接口。
变化点:/30 的另一端随已知地址改变。
I. 源端口 II. 目的端口 III. 序号 IV. 检验和
- A. 仅 I、III
- B. 仅 II、IV
- C. 仅 I、IV
- D. 仅 I、III、IV
展开解析
CNAPT 改源 IP 和源端口;TCP 检验和覆盖伪首部(含源 IP)和端口,必须重算。序号、目的端口不变。
- A 错A 含 III:NAPT 不改 TCP 序号;又漏了 IV,检验和要重算。
- B 错B 含 II:目的端口是外网服务器的端口,不变;又漏了要换成新端口号的 I。
- C 对对:源端口、检验和。
- D 错D 多选了 III:序号由两端的 TCP 维护,NAPT 不动它。
变化点:UDP 换成 TCP,结论相同。
- A. 130.18.10.1,201.1.3.10
- B. 201.1.3.10,192.168.3.251
- C. 192.168.3.251,130.18.10.1
- D. 130.18.10.1,192.168.3.251
展开解析
D回来的分组到 R2 之前目的是 201.1.3.10;R2 查 NAT 表把目的地址改回 H3 的 192.168.3.251,源地址仍是 S。
- A 错目的地址 201.1.3.10 是到 R2 之前的值;经 R2 转发后已改回 H3 的私有地址。
- B 错源地址写成了 R2 的公网地址:入方向 NAT 只改目的地址,源地址仍是服务器 S。
- C 错源、目的写反了:这是 S 发给 H3 的回复,源是 S(130.18.10.1),目的是 H3。
- D 对对:源 S,目的已改回 H3 的私有地址。
变化点:方向反过来:入方向 NAT 改目的地址。
- A. 192.168.1.2,5000
- B. 192.168.1.2,30001
- C. 61.155.1.10,30001
- D. 61.155.1.10,80
展开解析
C服务器只知道 NAT 改过的源地址和源端口(61.155.1.10:30001),响应就发往这里;NAT 路由器查表后再把目的改回 192.168.1.2:5000。
- A 错192.168.1.2:5000 是 NAT 路由器改写后、转发给内网主机时的目的;到达路由器之前,服务器只知道 61.155.1.10:30001。
- B 错混用了两边的值:内网 IP 配外网端口;到达路由器时目的是外网地址加外网端口。
- C 对对:61.155.1.10:30001。
- D 错80 是服务器自己的端口(响应的源端口);响应的目的端口是 NAPT 分配的 30001。
考点:4.5 节“NAPT 转换表:跟我走一遍”。
4.6ARP、DHCP 与 ICMP
IP 只管“按地址转发”。要让一台主机真正把分组发出去,还要回答三个问题:下一站的 MAC 地址是多少(ARP)?我自己的 IP 地址是多少(DHCP)?出了问题谁来告诉我(ICMP)?这三个协议常在“一次访问全过程”的大题里一起出现(2015-47、2021-47)。
ARP:已知 IP 地址,求同一网络上的 MAC 地址
问题:分组在每一段链路上要封装成帧,帧里要写下一站的 MAC 地址,而路由表只给出下一跳的 IP 地址。IP 地址和 MAC 地址之间没有任何换算关系(一个是管理员分配的,一个是网卡出厂时烧进去的),只能“问”。
老师拿着名单想找“学号 1023”的同学,但不认识脸。于是对全班喊:“学号 1023 是谁?举手!”(广播)。全班都听见了,只有 1023 号举手,并走过来说“是我,我坐第 3 排第 5 个”(单播回答)。老师在名单上记下座位(ARP 高速缓存),下次直接去找。哪里不像:ARP 只在同一个局域网(同一个广播域)里喊得到,隔着路由器就喊不到了。
ARP(地址解析协议)负责把同一局域网内某个 IP 地址解析成 MAC 地址(2012-38)。
- 每台主机有一张 ARP 高速缓存(IP 地址 → MAC 地址,每项有生存时间,一般十几分钟,过期删除)。先查缓存,查到就直接用。
- 查不到:广播一个 ARP 请求帧(目的 MAC 为 FF-FF-FF-FF-FF-FF):“IP 为 x 的主机,你的 MAC 是多少?”同一局域网的所有主机都收到。
- IP 为 x 的主机用单播回 ARP 响应,写上自己的 MAC;同时把请求方的 IP—MAC 记入自己的缓存(对方很可能马上要和它通信)。其他主机发现问的不是自己,丢弃。
- 请求方收到响应,写入缓存。
ARP 表长什么样:在 Windows 命令行输入 arp -a 可以看到本机的 ARP 高速缓存,类似下表。“动态”项是 ARP 自动学来的,过一段时间不用就删除;“静态”项是手工配置或系统固定的(如广播地址),不会过期。
| Internet 地址 | 物理地址 | 类型 |
|---|---|---|
| 192.168.1.1 | 3c-06-a7-12-5b-01 | 动态(这是默认网关,几乎总在表里) |
| 192.168.1.23 | 8c-85-90-4e-aa-17 | 动态 |
| 192.168.1.255 | ff-ff-ff-ff-ff-ff | 静态(本子网广播) |
| 224.0.0.22 | 01-00-5e-00-00-16 | 静态(多播,映射规则见 4.10) |
ARP 请求和响应直接封装在以太网帧里(类型字段 0x0806),不经过 IP;在 408 中归入网络层。ARP 请求是广播,所以只在一个广播域内有效,不能跨路由器,也不能跨 VLAN(2024-35)。
ARP 的四种情况:跨网络时解析的是谁
判断规则只有一条:ARP 解析的永远是“这一段链路上的下一站”。目的主机在本网络就是目的主机,不在本网络就是路由器(默认网关或下一跳路由器)。
展开解析
| 链路段 | 帧的源 MAC | 帧的目的 MAC | 源 IP | 目的 IP | 这一段 ARP 解析谁 |
|---|---|---|---|---|---|
| H1 → R1 | MAC-H1 | MAC-R1a | 10.1.1.10 | 10.1.2.20 | R1 的 a 口 10.1.1.1 |
| R1 → R2 | MAC-R1b | MAC-R2a | 10.1.1.10 | 10.1.2.20 | R2 的 a 口 10.1.12.2 |
| R2 → H2 | MAC-R2b | MAC-H2 | 10.1.1.10 | 10.1.2.20 | H2 10.1.2.20 |
规律:IP 地址一路不变,MAC 地址每段都换,换成“这一段的发送接口 → 这一段的接收接口”。H1 怎么知道 H2 不在本网络?用自己的掩码 255.255.255.0 分别与 10.1.1.10、10.1.2.20 相与,得到 10.1.1.0 ≠ 10.1.2.0,所以交给默认网关。交换机 S1、S2 不改任何地址。
IP 分组从源主机到目的主机,源、目的 IP 地址始终不变(NAT 除外);每经过一段链路,帧的 MAC 地址都换成这一段的收发双方:H1 发出的帧,目的 MAC 是默认网关(路由器左接口);路由器转发出去的帧,源 MAC 是路由器右接口,目的 MAC 是 H2(2018-37)。交换机不改 MAC 地址。
- A. 00-a1-b2-c3-d4-62,00-1a-2b-3c-4d-52
- B. 00-a1-b2-c3-d4-62,00-a1-b2-c3-d4-61
- C. 00-1a-2b-3c-4d-51,00-1a-2b-3c-4d-52
- D. 00-1a-2b-3c-4d-51,00-a1-b2-c3-d4-61
展开解析
DH1(192.168.3.2)与 H2(192.168.4.2)不在同一网络,H1 要把分组交给默认网关 R;帧的 MAC 地址每一段都换,IP 地址不变。
- 第一段 H1 → R:源 MAC = H1(…4d-52),目的 MAC = R 左接口 00-1a-2b-3c-4d-51(H1 用 ARP 解析网关 192.168.3.1 得到)。
- 第二段 R → H2:源 MAC = R 右接口 00-a1-b2-c3-d4-61,目的 MAC = H2(…d4-62)。
- 交换机 S1、S2 只转发,不修改 MAC 地址。
- A 错目的 MAC 写成了 H2:H2 在另一个网络,H1 的帧到不了它;源 MAC 写成了 H1,但 R 转发时会换成自己的接口地址。
- B 错第二个对了,第一个错把 H2 当成了第一段的目的。
- C 错第一个对了,第二个错以为 H2 收到的帧源 MAC 仍是 H1。
- D 对00-1a-2b-3c-4d-51,00-a1-b2-c3-d4-61。
IP 地址端到端不变,MAC 地址逐段改写;跨网络时第一段的目的 MAC 是网关。
免费 ARP:问自己的地址
免费 ARP(gratuitous ARP,也叫无偿 ARP)是一种特殊的 ARP 请求:主机广播一个 ARP 请求,问的正是自己的 IP 地址。正常情况下不会有人回答;如果有人回答,说明网络中另一台主机也在用这个地址。用途有两个:
- 检测 IP 地址冲突:主机刚配置好地址(手工配置或刚从 DHCP 拿到)时发一次。有应答 → 地址冲突,不能用(DHCP 客户此时会发 DHCP DECLINE 谢绝这个地址,见下文)。
- 通告自己的新 MAC:主机换了网卡,或双机热备时备用机接管了主机的 IP,广播一次免费 ARP,其他主机收到后就把缓存里这个 IP 对应的 MAC 更新掉。
〔拓〕ARP 不做任何验证,谁回答都信,所以有“ARP 欺骗”攻击:坏人冒充网关回答,让别人把分组都发给自己。另有早已淘汰的 RARP(逆地址解析:已知 MAC 求 IP),功能已被 DHCP 取代。
2012-38 直接问 ARP 的功能(IP → MAC,不要和 DNS 的“域名 → IP”混)。更常见的是大题里问“发出的第一个以太网帧的目的 MAC”(2015-47(2):ARP 表为空时,第一个帧是 ARP 请求,目的 MAC 为 FF-FF-FF-FF-FF-FF)和“封装 IP 分组的帧的目的 MAC”(默认网关的 MAC)。这两问的区别就在“第一个帧”是 ARP 请求本身。
DHCP:新主机怎样自动拿到 IP 地址
问题:一台笔记本走进图书馆连上 Wi-Fi,它不知道这里的网络地址是多少、网关是谁、DNS 服务器在哪,自己连 IP 地址都没有——它怎么开口说话?
你走进大堂喊一声“有空房吗?”(DISCOVER,广播);前台说“308 可以给你”(OFFER);你说“好,我要 308”(REQUEST);前台登记、给房卡,“住到后天中午”(ACK,含租期)。快到期时你去前台续住(续约),退房时交还房卡(RELEASE)。哪里不像:大堂里可能有好几家酒店的前台同时回答你,所以你“我要 308”这句话也要大声喊(广播),让没被选中的前台知道。
DHCP(动态主机配置协议)让主机开机后自动获得 IP 地址、子网掩码、默认网关、DNS 服务器地址等。它是应用层协议,使用 UDP,客户端口 68、服务器端口 67,采用客户/服务器方式。地址是租用的,有租期。
| 报文 | 方向 | 源 IP : 端口 | 目的 IP : 端口 | 广播 / 单播 |
|---|---|---|---|---|
| DISCOVER | 客户 → 服务器 | 0.0.0.0 : 68 | 255.255.255.255 : 67 | 广播(帧目的 MAC 全 F) |
| OFFER | 服务器 → 客户 | 服务器 IP : 67 | 255.255.255.255 : 68 * | 广播 * |
| REQUEST | 客户 → 服务器 | 0.0.0.0 : 68 | 255.255.255.255 : 67 | 广播 |
| ACK | 服务器 → 客户 | 服务器 IP : 67 | 255.255.255.255 : 68 * | 广播 * |
| 续约 REQUEST(T1) | 客户 → 原服务器 | 已租地址 : 68 | 原服务器 IP : 67 | 单播 |
| 续约 REQUEST(T2) | 客户 → 所有服务器 | 已租地址 : 68 | 255.255.255.255 : 67 | 广播 |
| RELEASE | 客户 → 原服务器 | 已租地址 : 68 | 原服务器 IP : 67 | 单播 |
* 教材(谢希仁、王道)的图把 OFFER、ACK 画成广播。RFC 2131 的规定是:客户在 DISCOVER 里把“广播标志”置 1 时服务器广播回答,否则可以直接单播给 yiaddr(帧发往客户的 MAC)。真题只考过 DISCOVER / REQUEST 的地址(一定是 0.0.0.0 → 255.255.255.255),OFFER / ACK 若被问到,按教材写广播;选项里只有单播时再按 RFC 理解。
- DHCP 报文的封装:DHCP → UDP → IP → 以太网帧。DISCOVER 帧的目的 MAC 是 FF-FF-FF-FF-FF-FF,源 MAC 是本机网卡地址。服务器靠报文里的 chaddr 字段(客户 MAC)认出是谁。
- NAK(否认):客户请求的地址不能给(例如它从别的网络搬来,还想续用旧地址),服务器回 NAK,客户必须停用、重新 DISCOVER。
- DECLINE(谢绝):客户收到 ACK 后用免费 ARP 发现地址冲突,发 DECLINE 告诉服务器“这个地址有人用了”,然后重新 DISCOVER。
- RELEASE(释放):客户关机、断网前主动归还地址,服务器收回到地址池。
DHCP 中继代理与租期续约
DISCOVER 是受限广播(255.255.255.255),路由器不转发。如果每个网络都放一台 DHCP 服务器又太浪费。办法是在每个网络的路由器上开启 DHCP 中继代理:它收到本网络的 DISCOVER 广播后,把自己这个接口的地址填进报文的 giaddr 字段,以单播转发给另一个网络上的 DHCP 服务器;服务器按 giaddr 判断客户在哪个网络、从对应的地址池里挑地址,回答发给中继代理,再由中继代理转给客户。
- A. 192.168.5.1,0.0.0.0
- B. 192.168.5.1,192.168.5.9
- C. 255.255.255.255,0.0.0.0
- D. 255.255.255.255,192.168.5.9
展开解析
C图中第一个报文是服务器发来的 OFFER(给出 yiaddr = 192.168.5.9),第二个是 H 发出的 REQUEST(请求使用这个地址)。
- REQUEST 发出时 H 还没收到 ACK,还不能使用 192.168.5.9,源地址仍是 0.0.0.0。
- REQUEST 用广播发送,目的地址 255.255.255.255:让所有发过 OFFER 的服务器都知道 H 选了谁。
- A 错目的地址不是服务器的单播地址,REQUEST 是广播。
- B 错目的和源都不对:192.168.5.9 要等 ACK 之后才能用。
- C 对255.255.255.255,0.0.0.0。
- D 错源地址还不能是 192.168.5.9。
DISCOVER、REQUEST:源 0.0.0.0,目的 255.255.255.255;收到 ACK 才有地址。
- DHCP 是应用层协议,用 UDP(不是 TCP,也不是网络层协议),尽管它分配的是网络层地址。
- 客户发 REQUEST 时已经知道要哪个地址了,但还没收到 ACK,源地址仍是 0.0.0.0(2025-36)。
- 受限广播 255.255.255.255 不能被路由器转发,所以 DHCP 服务器与客户不在同一网络时必须有中继代理;中继代理转发时用单播。
- DHCP 分配的地址有租期,不是永久的;租期到了没续上必须停用。
ICMP:网络层的差错报告和询问
问题:IP 只尽力而为,分组丢了、TTL 耗尽了、目的地址不存在……源主机若一无所知,就只能干等。需要有个“回执”机制,把出错的情况告诉源主机——这就是 ICMP(网际控制报文协议)。
ICMP 报文装在 IP 数据报的数据部分(协议字段 = 1),所以 ICMP 由 IP 直接提供服务(2012-33),属于网络层协议。注意:ICMP 不是用来让 IP 变可靠的,它只报告,不纠正、不重传。
| 类别 | 报文类型(类型号) | 什么时候发 |
|---|---|---|
| 差错报告报文 (路由器或目的主机发给源主机) | 终点不可达(3) | 路由器或主机不能交付分组:找不到路由(网络不可达)、目的主机不存在(主机不可达)、目的端口没有进程(端口不可达)、需要分片但 DF = 1 等,用“代码”区分 |
| 源点抑制(4) | 路由器或主机因拥塞丢弃分组,让源点放慢发送速率(2010-36)。新标准已不再使用,但 408 仍考 | |
| 时间超过(11) | ① 路由器把 TTL 减为 0 而丢弃分组;② 目的主机在规定时间内没收齐一个数据报的全部分片,丢弃已收到的分片 | |
| 参数问题(12) | 路由器或目的主机发现首部中有字段的值不正确(例如首部长度字段与实际不符、选项格式错误),丢弃分组 | |
| 改变路由(重定向)(5) | 路由器告诉同一网络上的主机:下次发往某目的地,直接交给另一个更好的路由器(主机刚启动时路由表很简单,靠它逐步学习) | |
| 询问报文 | 回送请求 / 回答(8 / 0) | 测试目的站是否可达、测往返时间(ping) |
| 时间戳请求 / 回答(13 / 14) | 请某台主机或路由器回答当前日期和时间,用于时钟同步和测时间 |
类型号不必背;会认 ping 用的 8 和 0、知道五种差错的名字和触发条件就够。
- 对 ICMP 差错报告报文本身出错,不再发差错报告(否则会无限套娃)。询问报文出错仍可报告。
- 对分片数据报的非第一个分片,不发(第一个分片含端口信息,报一次就够了)。
- 对具有多播地址的数据报,不发(一个多播分组出错,成百上千个接收者都回报,会淹没源主机)。
- 对具有特殊地址(如 127.0.0.0 或 0.0.0.0)的数据报,不发(没法回、也不该回)。
ping 与 traceroute:ICMP 的两个经典应用
ping 测试两台主机之间是否连通:发 ICMP 回送请求,对方回 回送回答,顺便测出往返时间 RTT。ping 是应用层程序,但它直接使用网络层的 ICMP,不经过 TCP 或 UDP——这是“应用直接用网络层”的少见例子。
traceroute(Windows 下叫 tracert)找出从源主机到目的主机经过的每一个路由器。它巧妙地利用了 TTL 和 ICMP 时间超过报文:
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。
- A. 时间超过
- B. 路由重定向
- C. 终点不可达
- D. 源点抑制
展开解析
ATTL 减为 0 → 发送“时间超过”报文。traceroute 正是利用它。
- A 对对:TTL 耗尽发“时间超过”。
- B 错路由重定向是告诉主机下次改走更好的路由器,分组本身并没有被丢弃。
- C 错终点不可达用于找不到路由、端口没有进程等无法交付的情况,不是 TTL 耗尽。
- D 错源点抑制是因拥塞丢弃分组时发的,不是 TTL 减为 0 时发的。
变化点:由“拥塞丢弃”换成“TTL 为 0”。
- A. 目的主机的 MAC 地址
- B. FF-FF-FF-FF-FF-FF
- C. 默认网关的 MAC 地址
- D. 00-00-00-00-00-00
展开解析
BARP 请求以广播发送;ARP 响应才单播回来。
- A 错发 ARP 请求时还不知道目的主机的 MAC,正是要问它,所以只能广播。
- B 对对:ARP 请求广播,响应单播。
- C 错目的主机就在同一局域网,不经过网关;而且请求本来就是广播,不填任何具体的 MAC。
- D 错全 0 不是广播地址;ARP 报文里的目标硬件地址可以填 0,但封装它的以太网帧目的地址要填全 F。
变化点:从“ARP 的功能”换成“ARP 帧怎么发”。
- A. 00-1a-2b-3c-4d-51
- B. 00-a1-b2-c3-d4-61
- C. 00-a1-b2-c3-d4-62
- D. 00-1a-2b-3c-4d-52
展开解析
C第二段 R → H2:源 MAC 为 R 右接口(…d4-61),目的 MAC 为 H2(00-a1-b2-c3-d4-62)。
- A 错…4d-51 是 R 左接口(H1 一侧)的 MAC,是第一段帧的目的地址,不是第二段的。
- B 错…d4-61 是 R 右接口的 MAC,是第二段帧的源地址,不是目的地址。
- C 对对:第二段帧的目的 MAC 是 H2。
- D 错…4d-52 是 H1 的 MAC,只出现在第一段帧里,经 R 转发后已被换掉。
变化点:问的是第二段帧的目的地址。
- A. TCP,客户 68、服务器 67
- B. UDP,客户 67、服务器 68
- C. TCP,客户 67、服务器 68
- D. UDP,客户 68、服务器 67
展开解析
DDHCP 基于 UDP,服务器端口 67,客户端口 68。
- A 错DHCP 不用 TCP:客户还没有 IP 地址,只能广播,TCP 不支持广播。端口号倒是对的。
- B 错传输层对了,但端口写反了:服务器是 67、客户是 68。
- C 错两处都错:DHCP 用 UDP,而且服务器 67、客户 68。
- D 对对:UDP,客户 68、服务器 67。
变化点:由报文地址延伸到 DHCP 的传输层端口。
- A. 查询默认网关的 MAC 地址
- B. 根据 MAC 地址查询自己的 IP 地址
- C. 向 DHCP 服务器申请 IP 地址
- D. 检测自己的 IP 地址是否已被其他主机使用
展开解析
D正常情况下没有人会回答“谁是我自己的 IP”;若有人回答,说明地址冲突。免费 ARP 还可以用来通告自己的新 MAC,让别人更新缓存。B 是早已淘汰的 RARP 的功能。
- A 错查询默认网关的 MAC 时问的是网关的 IP,不是自己的 IP。
- B 错由 MAC 地址查自己的 IP 是早已淘汰的 RARP 的功能;免费 ARP 问的是“谁在用我这个 IP”。
- C 错申请 IP 地址要用 DHCP 的 DISCOVER / REQUEST,免费 ARP 并不向谁申请地址。
- D 对对:有人回答就说明地址冲突。
考点:4.6 节“免费 ARP”。
- A. 0.0.0.0,255.255.255.255
- B. 0.0.0.0,DHCP 服务器的地址
- C. 客户已租用的地址,DHCP 服务器的地址
- D. 客户已租用的地址,255.255.255.255
展开解析
C4 小时正是租期的 0.5 倍(T1)。此时客户已经有合法地址,也知道是哪台服务器分配的,所以用已租地址作源地址、单播给原服务器。到 0.875 倍(T2)还没续上才改为广播(D)。A 是 DISCOVER / 首次 REQUEST 的地址。
- A 错0.0.0.0 → 255.255.255.255 是首次获取地址时 DISCOVER、REQUEST 用的地址;续约时客户已有合法地址。
- B 错源地址用 0.0.0.0 错了:续约时客户已经在用租到的地址,可以用它作源地址。
- C 对对:T1 时用已租地址单播给原服务器。
- D 错广播续约是到 T2(租期的 0.875 倍,7 小时)还没续上时的做法;4 小时(T1)时单播给原服务器。
考点:4.6 节“DHCP 中继代理与租期续约”。
- A. 出错的分组本身是一个 ICMP 差错报告报文
- B. 一个未分片的、承载 TCP 报文段的单播 IP 分组在路由器处 TTL 减为 0
- C. 出错的是分片数据报的第 3 个分片
- D. 出错数据报的目的地址是多播地址
展开解析
BB 是最普通的情况,路由器要向源主机发“时间超过”。A、C、D 正是“不发送 ICMP 差错报告”的四种情况中的三种(另一种是 127.0.0.0、0.0.0.0 等特殊地址)。
- A 错ICMP 差错报告报文本身出错时不再发 ICMP 差错报告,以免报错连锁反应。
- B 对对:普通单播分组 TTL 耗尽,要发“时间超过”。
- C 错分片数据报只对第一个分片发 ICMP 差错报告,后续分片出错不发。
- D 错目的地址是多播地址的数据报出错时不发 ICMP 差错报告。
考点:4.6 节“不发送 ICMP 差错报告的 4 种情况”。
- A. 时间超过
- B. 源点抑制
- C. 改变路由(重定向)
- D. 参数问题
展开解析
A源主机依次发出 TTL = 1、2、3……的分组,第 k 个路由器把 TTL 减为 0 时丢弃分组,并回“时间超过”报文,源主机从报文的源地址得知第 k 跳是谁。
- A 对对:TTL 逐个加 1,各跳回“时间超过”。
- B 错源点抑制是路由器因拥塞丢弃分组时发的,traceroute 不靠它。
- C 错改变路由(重定向)告诉主机换一个更好的下一跳,不会让路径上的路由器逐个回报自己。
- D 错参数问题是首部字段值有错时发的,traceroute 发出的分组首部并没有错。
考点:4.6 节“ping 与 traceroute”。
4.7IPv6
问题:IPv4 只有 232 ≈ 43 亿个地址,2011 年 IANA 就把最后的地址块分完了。NAT 能缓一缓,但它破坏了“每台主机都有全球唯一地址、可以直接互相访问”的设计,也让很多应用变复杂。根本办法是把地址变长——这就是 IPv6。
城市电话从 7 位升到 8 位,号码一下多了 10 倍。IPv6 把地址从 32 位升到 128 位,不是多了 4 倍,而是 296 倍——地球上每粒沙子都能分到很多个地址。哪里不像:电话升位只改号码,IPv6 同时把“面单格式”(首部)也重新设计了,所以 IPv4 和 IPv6 的路由器不能直接互通,需要过渡技术。
IPv6 的主要变化:
- 地址从 32 位扩大到 128 位,地址空间是 IPv4 的 2128 ÷ 232 = 296 倍(不是 96 倍,2023-40)。
- 基本首部固定 40 字节,去掉了可选字段(放到扩展首部里,属于有效载荷),也去掉了首部检验和(链路层和传输层已经检验),路由器处理更快。
- 分片只在源主机进行,路由器不分片;分组太大就丢弃并回 ICMPv6“分组太大”报文。
- 地址类型:单播、多播、任播。没有广播地址,广播用多播实现。
- 支持即插即用(无状态地址自动配置),不再必须用 DHCP;地址解析用邻居发现协议(ICMPv6)代替 ARP。
IPv6 地址的写法:冒号十六进制与零压缩
128 位写成二进制要 128 个 0/1,点分十进制也要写 16 段——都太长。IPv6 用冒号十六进制记法:128 位分成 8 组,每组 16 位写成 4 位十六进制,用冒号隔开。为了更短,再允许两种省略:
- 每组的前导 0 可以省略:0DB8 写成 DB8,0000 写成 0。但组内后面的 0 不能省(DB80 不能写成 DB8)。
- 零压缩:连续若干组全 0 可以用“::”代替。一个地址中 :: 只能出现一次——否则无法确定每个 :: 代表几组 0。
展开解析
- ① 先去前导 0:2001:DB8:0:0:8:800:200C:417A;再把连续的两组 0 换成 :::2001:DB8::8:800:200C:417A。注意 0800 只能写 800,不能写 8。
- ② 中间 6 组全 0 一次压掉:FE80::1。
- ③ 数一数写出来的组:8、D0、123、CDEF、89A 共 5 组,所以 :: 代表 8 − 5 = 3 组 0;每组补足 4 位:0008:0000:0000:0000:00D0:0123:CDEF:089A。
- ④ 2001::25DE::CADE 非法:两个 :: 一共代表 5 组 0,但分不清是 1 + 4、2 + 3、3 + 2 还是 4 + 1。2001:DB80::1 合法,但它展开是 2001:DB80:0:…:1,与 2001:DB8::1(2001:0DB8:…)是两个不同的地址——后缀 0 不能省。
(四个结果都用 Python 的 ipaddress 模块验算过。)
- 前缀沿用 CIDR 斜线记法:2001:DB8::/32 表示前 32 位是网络前缀。
- 最后 32 位嵌入 IPv4 地址时可写成点分十进制,如 ::FFFF:192.168.0.1(IPv4 映射地址)。
三类地址:单播、多播、任播
| 几种特殊的 IPv6 地址 | 写法 | 含义 |
|---|---|---|
| 未指明地址 | ::/128(全 0) | 相当于 IPv4 的 0.0.0.0:主机还没有地址时作源地址,不能作目的地址 |
| 环回地址 | ::1/128 | 相当于 IPv4 的 127.0.0.1 |
| 多播地址 | FF00::/8(以 FF 开头) | 一对多;IPv6 用多播取代了广播 |
| 本地链路单播地址 | FE80::/10 | 只在本链路上有效,路由器不转发,用于即插即用的自动配置 |
| 全球单播地址 | 其余大部分(如 2001:… 开头) | 相当于 IPv4 的公网地址 |
IPv6 基本首部:40 字节、8 个字段
| 字段 | 位数 | 是什么 | 对应 IPv4 的 |
|---|---|---|---|
| 版本 | 4 | 值为 6 | 版本 |
| 通信量类 | 8 | 区分不同类别、优先级的分组 | 区分服务 |
| 流标号 | 20 | “流”是从某源点到某终点、要求同样服务质量(如实时音视频)的一系列分组;同一流的分组流标号相同,路由器可以一视同仁地快速处理 | (IPv4 没有) |
| 有效载荷长度 | 16 | 基本首部后面的字节数(扩展首部 + 数据),不含 40 B 基本首部,最大 65 535 B | 总长度(但 IPv4 的总长度含首部) |
| 下一个首部 | 8 | 没有扩展首部时,指出数据部分是哪个上层协议(6 = TCP,17 = UDP);有扩展首部时,指出第一个扩展首部的类型 | 协议 |
| 跳数限制 | 8 | 每经过一个路由器减 1,减到 0 就丢弃(2023-40) | TTL |
| 源 / 目的地址 | 128 + 128 | 发送方和接收方的 IPv6 地址 | 源 / 目的地址 |
扩展首部:把“不常用的东西”挪出去
IPv4 的选项放在首部里,每个路由器都得检查一遍,很慢。IPv6 把它们做成一个个扩展首部,用“下一个首部”字段串成一条链,放在基本首部和上层数据之间;路由器只看基本首部(逐跳选项扩展首部除外),扩展首部大多只由目的主机处理。常见的六种:逐跳选项、路由选择、分片、鉴别、封装安全有效载荷、目的站选项。
只在源主机分片:路径 MTU 发现
IPv4 的路由器要分片,耗费处理能力,还可能“分片再分片”。IPv6 规定中间路由器一律不分片:分组比下一段链路的 MTU 大,就丢弃,并向源主机发 ICMPv6“分组太大”报文(报文里写明 MTU)。源主机据此把数据切小——必要时自己分片(用分片扩展首部)。IPv6 要求每条链路的 MTU 至少 1280 B,所以源主机发 ≤ 1280 B 的分组总是安全的。
IPv4 与 IPv6 对比
| 项目 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 位 | 128 位(地址空间是 IPv4 的 296 倍) |
| 地址写法 | 点分十进制 | 冒号十六进制,可零压缩(:: 只用一次) |
| 首部长度 | 20~60 B,可变(有首部长度字段) | 基本首部固定 40 B(没有首部长度字段) |
| 选项 | 在首部里 | 移到扩展首部(属于有效载荷) |
| 首部检验和 | 有,每跳重算 | 取消 |
| 分片 | 源主机和路由器都可分片 | 只在源主机分片 |
| 生存时间 | TTL | 跳数限制(Hop Limit) |
| 上层协议 | 协议字段 | 下一个首部字段 |
| 广播 | 有 | 没有(用多播代替) |
| 地址配置 | 手工或 DHCP | 即插即用(无状态自动配置)或 DHCPv6 |
| 地址解析 | ARP | 邻居发现 NDP(基于 ICMPv6) |
从 IPv4 向 IPv6 过渡:双协议栈与隧道
全世界的路由器不可能在同一天全部换成 IPv6,只能逐步过渡,期间两种网络要能互通。
拓展IPv6 也有自己的 ICMP(ICMPv6,下一个首部 = 58),并把 IPv4 里分散的几个功能都并进来:① 邻居发现代替 ARP——主机用多播发“邻居请求”问“谁是这个 IPv6 地址”,目标主机回“邻居通告”;② 路由器发现——主机发“路由器请求”,路由器回“路由器通告”,告诉它本链路的网络前缀;③ 主机拿到前缀后,加上由自己 MAC 地址算出的 64 位接口标识,自己生成全球地址(无状态地址自动配置),这就是“即插即用”;配好后再发一次邻居请求查重(相当于免费 ARP)。④ IGMP 的功能也由 ICMPv6 的多播侦听发现(MLD)承担。
2023-40 一题考了四个点:地址空间倍数(296 倍,不是 96 倍)、基本首部是否可变(IPv4 可变、IPv6 固定 40 B)、过渡技术(双栈 + 隧道)、跳数限制 ≡ TTL。复习时就用上面的对比表逐行过。可能的变化:IPv6 有没有首部检验和(没有)、路由器能否分片(不能)、有没有广播(没有)、:: 能用几次(一次)、哪种地址交给“最近的一个”(任播)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 支持广播地址
- B. 基本首部固定为 40 字节
- C. 首部中没有检验和字段
- D. 路由器不对分组进行分片
展开解析
AIPv6 没有广播地址,用多播代替;其余三项都正确。
- A 选错误:IPv6 没有广播地址,用多播代替。
- B 不选正确:IPv6 基本首部固定 40 字节。
- C 不选正确:IPv6 基本首部取消了首部检验和。
- D 不选正确:IPv6 只由源主机分片,路由器不分片。
变化点:从 IPv4/IPv6 比较换成 IPv6 自身的特点。
- A. 2001:DB8::8:800:200C:417A
- B. 2001:DB8:0:0:8:8:200C:417A
- C. 2001::DB8::8:800:200C:417A
- D. 2001:DB8::8:0800::417A
展开解析
A每组前导 0 可省略;连续全 0 的组用一次 :: 代替。B 把 0800 写成了 8(丢了后面的 0);C、D 用了两次 ::。
- A 对对:去前导 0,连续全 0 组用一次 :: 代替。
- B 错0:0 不压缩也合法,但第 6 组 0800 只能去前导 0 写成 800,写成 8 就丢了后面两个 0,成了另一个地址。
- C 错用了两次 ::,接收方无法知道每个 :: 各代表几组 0,地址有歧义。
- D 错也用了两次 ::,而且 0800 没去前导 0、第 7 组 200C 被第二个 :: 吞掉了。
变化点:考冒号十六进制的写法规则。
- A. ::
- B. ::1
- C. FE80::1
- D. FF02::1
展开解析
B:: 是未指明地址(相当于 0.0.0.0);FE80::/10 是本地链路单播地址;以 FF 开头的是多播地址;::1 是环回地址。
- A 错:: 是未指明地址(全 0),相当于 IPv4 的 0.0.0.0,不是环回地址。
- B 对对:::1 是环回地址。
- C 错FE80::/10 是本地链路单播地址,FE80::1 是链路上的某个接口,不是环回地址。
- D 错以 FF 开头的是多播地址,FF02::1 是本链路上所有结点的多播地址。
考点:4.7 节“几种特殊的 IPv6 地址”。
- A. 跳数限制
- B. 流标号
- C. 下一个首部
- D. 首部检验和
展开解析
DIPv6 取消了首部检验和(链路层和传输层都有检验),也没有首部长度、标识 / 标志 / 片偏移字段。跳数限制相当于 TTL,下一个首部相当于协议字段,流标号是 IPv6 新增的。
- A 错跳数限制是 IPv6 基本首部的字段,作用相当于 IPv4 的 TTL。
- B 错流标号是 IPv6 基本首部新增的字段,用来标识同一个“流”的分组。
- C 错下一个首部是 IPv6 基本首部的字段,相当于 IPv4 的协议字段(或指向扩展首部)。
- D 对对:IPv6 取消了首部检验和。
考点:4.7 节“IPv6 基本首部”。
- A. 把它分片后再转发
- B. 丢弃该分组,并向源主机发送 ICMPv6“分组太大”报文
- C. 把它封装进 IPv4 分组后转发
- D. 截去超长的部分后转发
展开解析
BIPv6 规定只有源主机能分片,中间路由器一律不分片;放不下就丢弃并告诉源主机 MTU 是多少,由源主机调整。
- A 错IPv6 的中间路由器一律不分片,只有源主机能分片。
- B 对对:丢弃并发 ICMPv6“分组太大”。
- C 错封装进 IPv4 是过渡时期隧道技术的做法,用来穿越 IPv4 网络,解决不了分组过长。
- D 错路由器不会截断分组,截掉一部分数据就破坏了分组。
考点:4.7 节“只在源主机分片”。
- A. 单播地址
- B. 多播地址
- C. 任播地址
- D. 广播地址
展开解析
C任播:一对“组中最近的一个”。多播是交付给组内所有成员;IPv6 没有广播地址。
- A 错单播地址标识一个接口,分组只交给这一个确定的接口,不是“一组中最近的一台”。
- B 错多播是交付给组内所有成员,而不是只交给最近的一台。
- C 对对:任播交付给组中最近的一台。
- D 错IPv6 没有广播地址;广播是交付给网络上的所有主机。
考点:4.7 节“三类地址”。
4.8路由算法与路由协议:RIP、OSPF、BGP
问题:4.4 节讲了“有了路由表怎样转发”,可路由表本身从哪里来?小网络可以由管理员一条条手工写;因特网有几十万个网络、几百万台路由器,链路还会随时断开、恢复,只能让路由器自己商量着算出来。路由器之间“怎么商量”的规则就是路由协议,背后的计算方法就是路由算法。
静态路由与动态路由
| 静态路由(非自适应) | 动态路由(自适应) | |
|---|---|---|
| 谁来写 | 管理员手工配置 | 路由器运行路由协议,相互交换信息后自动计算 |
| 网络变化时 | 不会自动调整,要人去改 | 自动重新计算,适应拓扑和流量变化 |
| 开销 | 不占带宽、不耗 CPU,简单可靠 | 交换路由信息占带宽,计算耗 CPU,收敛期间可能出现短暂环路 |
| 适用 | 小型、拓扑稳定的网络;只有一个出口的末端网络(配一条默认路由即可) | 中大型、复杂、经常变化的网络 |
| 例 | 家用路由器指向运营商的默认路由 | RIP、OSPF、BGP |
以 4.4 节图中的 R1 为例,它只有一个出口 S0,完全可以用静态路由。在路由器上配置(以常见的命令格式为例,拓展,格式不必记):
# ip route 目的网络 子网掩码 下一跳 ip route 172.16.0.0 255.255.0.0 10.0.0.2 # 网络路由 ip route 202.118.3.2 255.255.255.255 10.0.0.2 # 特定主机路由 ip route 0.0.0.0 0.0.0.0 10.0.0.2 # 默认路由:其余一律交给 R2
直连的 192.168.1.0/24、192.168.2.0/24 不用配,给接口设置了地址和掩码,路由器就自动知道它们。动态路由按算法又分两大类:
| 距离向量算法(典型 RIP) | 链路状态算法(典型 OSPF) | |
|---|---|---|
| 和谁交换 | 只和相邻路由器 | 向本区域所有路由器洪泛 |
| 交换什么 | 自己的整个路由表(“我到各网络的距离”) | 只有与自己相邻的链路状态(“我和谁相连、代价多少”) |
| 何时交换 | 周期性(RIP 每 30 秒) | 链路状态变化时才发(另有长周期刷新) |
| 每台路由器知道什么 | 只知道“经哪个邻居、多远”,不知道全网拓扑 | 知道全网拓扑(链路状态数据库) |
| 怎么算 | Bellman-Ford:经邻居 X 的距离 = 到 X 的距离 + X 说的距离,取最小 | Dijkstra:以自己为根算最短路径树 |
| 收敛 | 慢;坏消息传得慢,可能出现环路 | 快;没有“坏消息传得慢”的问题 |
距离向量像“问路”:你只问身边的人“到火车站多远”,他们说的也是听别人说的,消息一传十十传百,有人记错了,错误会传很久。链路状态像“每人画一段地图贴到公告栏”:每个人只画自己门口那段路,但所有人都把公告栏上的地图抄一份,拼成完整地图后自己找最短路。哪里不像:现实中拼地图要花很多力气;OSPF 正是因为每台路由器要存全网拓扑、做 Dijkstra,规模大了就要划分区域。
层次路由:自治系统、IGP 与 EGP
问题:如果因特网上的每台路由器都要知道到每一个网络的路由,会怎样?① 路由表大得存不下、查不动;② 所有路由器都和所有路由器交换信息,带宽全被路由信息占满;③ 各单位希望自己决定内部用什么协议、怎么走,也不愿意让外界看到自己的内部结构。办法是分层。
北京的快递分拣中心不需要知道广州每条街怎么走,只要知道“广东的件 → 发广州转运中心”;到了广州,再由广州的中心按区、街道细分。每一级只记自己这一级的事。哪里不像:快递的分级是全国统一规划的;因特网的每个“地区”(自治系统)是独立管理的,内部用什么规则别人管不着。
因特网采用分层次的路由选择协议,把整个因特网划分为许多较小的自治系统 AS:一个 AS 是在单一技术管理机构下的许多网络、IP 地址和路由器,它们使用一种 AS 内部的路由选择协议和共同的度量,对外表现出单一的、一致的路由选择策略(每个 AS 有一个全球唯一的 AS 号)。于是路由选择分成两级:
- AS 内部:用内部网关协议 IGP,目标是找最短 / 最便宜的路,如 RIP、OSPF。各 AS 可以自己选用哪种 IGP。
- AS 之间:用外部网关协议 EGP,目前只有 BGP-4。各 AS 的度量标准不同(有的按跳数、有的按时延),无法比较“谁最短”,所以 BGP 只求可达且遵守各自的策略(如“不经过某国”“走便宜的运营商”)。
- 大的 AS 内部还可以再分一层:OSPF 把一个 AS 划分成若干区域,洪泛只在区域内进行(2026-38)。
展开解析
- 不分层:要记全部 800 个网络(含自己直连的那个),800 项。
- 两级:本区域内 20 项(每台路由器的网络一项),其他 39 个区域各 1 项 → 20 + 39 = 59 项,少了 90% 以上。
- 三级:本区 10 项 + 本组其他 9 个区各 1 项 + 其他 7 个组各 1 项 = 10 + 9 + 7 = 26 项。
规律:分成 n 个区域、每区 k 台(n × k = N)时,表项 ≈ k + n − 1,k 和 n 都接近 √N 时最少(N = 800 时 32 × 25 得 56 项)。代价是:跨区域的分组只能先到对方区域的“入口”,再在区域内走最短路,整体路径不一定是全局最短——用一点“绕路”换来表项和通信量的大幅减少。
(数字已用程序验算。)
| 层次 | 范围 | 协议 | 算法 | 关心什么 | 封装 |
|---|---|---|---|---|---|
| 区域内(可选) | OSPF 的一个区域 | OSPF | 链路状态 | 代价最小 | IP(89) |
| AS 内部 | 一个自治系统 | RIP | 距离向量 | 跳数最少 | UDP(520) |
| OSPF | 链路状态 | 代价最小 | IP(89) | ||
| AS 之间 | 整个因特网 | BGP-4 | 路径向量 | 可达、符合策略 | TCP(179) |
- “IGP / EGP”是类别名:RIP、OSPF 属于 IGP;BGP 属于 EGP。不要把“EGP”只理解为某个具体协议(历史上确有一个协议也叫 EGP,已被 BGP 取代)。
- “AS 内部必须用同一种 IGP”指一个 AS 选一种;不同的 AS 可以用不同的 IGP(图中 AS1 用 RIP、AS2 用 OSPF)。
- 能把一个 AS 划分为多个区域的是 OSPF,RIP 和 BGP 都不能(2026-38)。
RIP:距离向量路由
- 距离 = 跳数:直接连接的网络距离为 1,每经过一个路由器加 1。距离最大为 15,16 表示不可达,所以 RIP 只适用于小型网络。
- 每隔 30 秒,路由器把自己的整个路由表发给相邻路由器(只和邻居交换)。一个 RIP 报文最多带 25 条路由,表大了就分几个报文发。
- RIP 报文封装在 UDP 中(端口 520),所以 RIP 是应用层协议。报文只有两种:请求(刚启动时向邻居要路由表)和响应(周期性或应请求发出的路由表)。
- 3 分钟(180 秒)收不到某邻居的更新,就把经它的路由距离置为 16。
- RIP 选的是跳数最少的路,即使有一条跳数多一点但快得多的路,也不会选它。
- 把 X 表中每一项的距离都加 1(假设到 X 的距离为 1),下一跳都改为 X。
- 对每一项目的网络 N:原表中没有 N → 加入;原表中有 N 且下一跳就是 X → 无条件用新值替换(哪怕变大,因为这是 X 的最新情况);原表中有 N 但下一跳不是 X → 新距离更小才替换,否则不变。
一般的距离向量算法(非 RIP,链路有权重)同理:经邻居 X 到 N 的距离 = 到 X 的链路距离 + X 通告的到 N 的距离,对每个 N 取所有邻居中的最小值(2021-37)。
| R 原来的路由表 | X 发来的 | ||||
|---|---|---|---|---|---|
| 目的网络 | 距离 | 下一跳 | 目的网络 | 距离 | |
| N1 | 3 | B | N1 | 1 | |
| N2 | 4 | X | N2 | 4 | |
| N3 | 2 | C | N3 | 6 | |
| N5 | 5 | X | N4 | 3 | |
| N5 | 16 | ||||
展开解析
第 1 步:X 的每一项距离加 1、下一跳写 X:N1 2、N2 5、N3 7、N4 4、N5 16(16 + 1 仍记 16,不可达)。第 2 步逐项比较:
| 目的网络 | 原来 | 经 X | 依据 | 更新后 |
|---|---|---|---|---|
| N1 | 3,B | 2 | 下一跳不同,2 < 3,更短 → 换 | 2,X |
| N2 | 4,X | 5 | 原下一跳就是 X → 无条件更新(变大也换) | 5,X |
| N3 | 2,C | 7 | 下一跳不同,7 > 2 → 不变 | 2,C |
| N4 | — | 4 | 原来没有 → 加入 | 4,X |
| N5 | 5,X | 16 | 原下一跳就是 X,X 说不可达 → 改为不可达 | 16,X |
N2、N5 两行最容易错:只要原来就是经 X 走的,X 说什么就是什么——因为 R 的这条路本来就依赖 X,X 的情况变了,R 只能跟着变。
| 目的网络 | A 的距离向量 | B 的距离向量 | C 的距离向量 | D 的距离向量 |
|---|---|---|---|---|
| Net1 | 1 | 23 | 20 | 22 |
| Net2 | 12 | 35 | 30 | 28 |
| Net3 | 24 | 18 | 16 | 36 |
| Net4 | 36 | 30 | 8 | 24 |
- A. 9,10,12,6
- B. 9,10,28,20
- C. 9,20,12,20
- D. 9,20,28,20
展开解析
D经邻居 X 到网络 N 的距离 = E 到 X 的链路距离 + X 通告的到 N 的距离;对每个网络取最小值。
| 经 A(+8) | 经 B(+10) | 经 C(+12) | 经 D(+6) | 最小 | |
|---|---|---|---|---|---|
| Net1 | 9 | 33 | 32 | 28 | 9 |
| Net2 | 20 | 45 | 42 | 34 | 20 |
| Net3 | 32 | 28 | 28 | 42 | 28 |
| Net4 | 44 | 40 | 20 | 30 | 20 |
- A 错后三个数 10、12、6 正是 E 到 B、C、D 的链路距离,没有加上邻居到网络的距离。
- B 错Net2 最小是经 A 的 8 + 12 = 20,不是 10。
- C 错Net3 写成 12,只取了 E—C 的链路距离,没加 C 到 Net3 的 16。
- D 对9,20,28,20。
列表:行 = 目的网络,列 = 邻居,格子 = 链路距离 + 通告距离,每行取最小。
坏消息传得慢(计数到无穷):设网络 N 直连在 R1 上,R2 经 R1 到 N(距离 2)。某时刻 R1 到 N 的链路断了,R1 把距离改为 16。可 R1 还没来得及把这个坏消息告诉 R2,就先收到了 R2 的例行通告“我到 N 的距离是 2”——R1 不知道 R2 的这条路正是经过自己的,于是以为“经 R2 能到,距离 3”。接下来两台路由器你来我往:
| 事件 | R1 到 N | R2 到 N |
|---|---|---|
| N 断开,R1 置为 16 | 16 | 2(经 R1) |
| R1 收到 R2 的“2” | 3(经 R2) | 2 |
| R2 收到 R1 的“3”(原下一跳就是 R1,无条件更新) | 3 | 4 |
| R1 收到 R2 的“4”(原下一跳就是 R2,无条件更新) | 5 | 4 |
| ……每次加 2…… | …… | …… |
| R2 收到 R1 的“15” | 15 | 16 |
| R1 收到 R2 的“16” | 16 | 16 |
一共来回 15 次(每次间隔 30 秒,要好几分钟)才都变成 16,这段时间里发往 N 的分组在 R1、R2 之间兜圈子,直到 TTL 耗尽。所以 RIP 好消息传得快、坏消息传得慢(2016-37)。好消息(出现了更短的路)只要一轮通告就传过去了。
- A. 2
- B. 3
- C. 16
- D. 17
展开解析
B先看收敛时的情况:201.1.2.0/25 直接连在 R3 上,R3 的距离为 1;R2、R1 都与 R3 直连,距离都是 2(下一跳 R3)。
- R3 发现网络不可达,把距离改为 16,通告给 R2。R2 经 R3 的路由变为不可达。
- 但 R1 还没收到坏消息,仍在通告“我到该网络的距离是 2”。
- R2 于是改走 R1:2 + 1 = 3。这就是“坏消息传得慢”:R2 以为 R1 有路,其实 R1 的路也经过 R3。
- A 错2 是原来经 R3 的距离,R3 已经通告 16,不能再用。
- B 对3(经 R1)。
- C 错16:只考虑了 R3 的通告,忘了 R1 仍在通告距离 2。
- D 错RIP 的距离最大取 16,没有 17。
RIP 好消息传得快,坏消息传得慢:一处断开,其他路由器会互相“以为对方能到”,距离一点点涨到 16。
链路状态路由:用 Dijkstra 算最短路径
链路状态算法分两步:先让每台路由器都拿到全网一样的拓扑(靠洪泛,见下面的 OSPF),再各自以自己为根跑 Dijkstra 算法(数据结构里求单源最短路径的那个算法)。Dijkstra 的思路:每一轮从“还没确定”的结点里挑一个当前距离最小的,把它“确定”下来,再用它去更新邻居的距离。
展开解析
表中“3,C”表示“当前最短距离 3,前一个结点是 C”;“—”表示已确定。每一步把最小的那个(加粗)确定下来。
| 步骤 | 已确定的集合 | B | C | D | E |
|---|---|---|---|---|---|
| 初始 | {A} | 4,A | 1,A | 7,A | ∞ |
| 1:确定 C | {A, C} | 3,C(1 + 2 < 4) | — | 7,A(1 + 8 = 9 不更小) | 11,C(1 + 10) |
| 2:确定 B | {A, C, B} | — | — | 7,A(3 + 5 = 8 不更小) | 9,B(3 + 6 < 11) |
| 3:确定 D | {A, C, B, D} | — | — | — | 9,B(7 + 3 = 10 不更小) |
| 4:确定 E | 全部 | — | — | — | — |
由“前一个结点”倒推出路径:B ← C ← A;E ← B ← C ← A;D ← A。路由表只关心第一跳:
| 目的 | 最短路径 | 代价 | 下一跳 |
|---|---|---|---|
| B | A → C → B | 3 | C |
| C | A → C | 1 | C |
| D | A → D | 7 | D |
| E | A → C → B → E | 9 | C |
注意 A 到 B 有直连链路(代价 4),但最短路是绕 C 走(3)——链路状态算的是代价最小,不是跳数最少。如果 A—C 链路断了,A 只要把这条链路从拓扑里删掉重跑一遍即可(2026-37 就是这种题)。(结果已用程序验算。)
OSPF:链路状态路由协议
- 路由器用洪泛法向本 AS(本区域)内所有路由器发送信息;发送的是本路由器与相邻路由器的链路状态(与哪些路由器相邻、链路的度量——费用、距离、时延、带宽等);只有链路状态发生变化时才发送(另外每 30 分钟刷新一次)。
- 一条“我和哪些邻居相连、代价多少”的信息叫一个链路状态通告 LSA。所有路由器收到的 LSA 汇总成全网一致的链路状态数据库 LSDB(就是全网拓扑图),各自用 Dijkstra 算法算出以自己为根的最短路径树,构造路由表。更新过程收敛快,没有“坏消息传得慢”的问题。
- OSPF 报文直接用 IP 封装(协议字段 89),不用 UDP 或 TCP(2017-37)。所以 OSPF 自己要负责可靠(每个更新都要确认)。
- 支持把一个 AS 划分为若干区域:洪泛只在区域内进行,减少通信量;区域之间经主干区域(区域 0)连接(2026-38)。
- 其他特点:可以对不同链路设置不同代价;到同一目的有多条代价相同的路径时,可以把通信量分摊到这几条路径上(负载均衡);所有交换都要鉴别,防止伪造;支持可变长度子网划分和 CIDR。
| OSPF 分组 | 作用 |
|---|---|
| 问候(Hello) | 发现和维持邻居关系,每 10 秒发一次;40 秒收不到某邻居的 Hello,就认为它不可达,立即修改链路状态 |
| 数据库描述(DD) | 向邻居给出自己 LSDB 中所有 LSA 的摘要(只是“目录”) |
| 链路状态请求(LSR) | 看了对方的摘要,发现自己缺少或过时的,请求对方发完整内容 |
| 链路状态更新(LSU) | 携带完整的 LSA;洪泛用的就是它 |
| 链路状态确认(LSAck) | 对 LSU 的确认(OSPF 直接用 IP,可靠性要自己保证) |
- A. 3
- B. 4
- C. 5
- D. 6
展开解析
考点4.8 链路状态路由(Dijkstra)4.4 路由聚合
C链路状态算法:R1 掌握全网拓扑,用 Dijkstra 重新算到各路由器的最短路径,再看每个网络从哪个接口出去,最后把接口相同、能合并的网络聚合。
- t0(按拓扑推出):到 R2 经 S1 开销 2;到 R3 经 S2 开销 6(经 R2 要 2 + 5 = 7);到 R4 经 S3 开销 3。路由表:0.0.0.0/0 → S0(Internet),199.10.20.0/27 → S1,199.10.20.32/27 → S2,199.10.20.64/27 → S3,199.10.20.128/25 → S3,服务器所在的直连网络 → S4,共 6 条。
- t1 R1—R2 断开:到 R2 经 R3 为 6 + 5 = 11,经 R4 为 3 + 4 + 5 = 12,选 S2。所以 199.10.20.0/27 改从 S2 出。
- 199.10.20.0/27 和 199.10.20.32/27 现在都从 S2 出,前 26 位相同,聚合为 199.10.20.0/26 → S2。
- 199.10.20.64/27(64~95)和 199.10.20.128/25(128~255)虽然都走 S3,但合不成一个对齐的地址块,不能聚合。
- 最终:0.0.0.0/0 → S0,199.10.20.0/26 → S2,199.10.20.64/27 → S3,199.10.20.128/25 → S3,服务器网络 → S4,共 5 条。
- A 错3:把所有 199.10.20.x 都合成一条,但 .0/26 走 S2、另外两个走 S3,接口不同不能合并。
- B 错4:要么漏了服务器所在网络(S4 直连)那一条,要么把 .64/27 和 .128/25 硬合在一起——它们之间隔着 .96/27,合不成一个块。
- C 对5 条。
- D 错6:这是 t0 时刻的条目数,没有做链路断开后的聚合。
链路变化 → 重新求最短路 → 看每个网络的出接口 → 同接口且能凑成对齐地址块的才聚合。
BGP:路径向量路由
- BGP 用于不同 AS 之间。因特网规模太大、各 AS 的度量标准不同、还要考虑政治和经济策略,所以 BGP 只力求找到一条能到达且比较好的路由(不兜圈子),不追求最佳。
- 每个 AS 选至少一个路由器作为 BGP 发言人(一般就是 AS 的边界路由器)。两个发言人之间先建立 TCP 连接(端口 179),再交换路由信息,所以 BGP 是应用层协议;可靠性由 TCP 保证。
- 交换的是路径向量:到某个网络要经过的一串 AS。首次交换整个路由表,以后只交换变化的部分。
- eBGP 与 iBGP:不同 AS 的发言人之间的 BGP 会话叫 eBGP(外部 BGP);同一个 AS 内部的路由器之间也要运行 BGP,把从外面学来的路由在 AS 内传开,叫 iBGP(内部 BGP)。iBGP 只负责“告诉大家去外面走哪个出口”,AS 内部具体怎么走到那个出口,仍由 IGP 决定。
拓展BGP 怎么在多条可达路由中挑一条?按策略:先看管理员设的本地偏好值,再看 AS 路径长短,再看到出口的 IGP 代价……其中“到出口的 IGP 代价最小优先”叫热土豆路由:像手里捧着烫手的土豆,尽快把分组从离自己最近的出口扔出本 AS,哪怕它在外面的 AS 路径更长。以上都相同时,最后选 BGP 路由器标识符(Router ID)最小的那条。
| RIP | OSPF | BGP | |
|---|---|---|---|
| 类型 | 内部网关协议 | 内部网关协议 | 外部网关协议 |
| 算法 | 距离向量 | 链路状态(Dijkstra) | 路径向量 |
| 封装 | UDP(520) | IP(协议号 89) | TCP(179) |
| 所在层 | 应用层 | 网络层 | 应用层 |
| 和谁交换 | 相邻路由器 | 本 AS(本区域)所有路由器 | 其他 AS 的 BGP 发言人 |
| 交换什么 | 自己的整个路由表 | 与相邻路由器的链路状态(LSA) | 路径向量(首次整个路由表,之后只发变化) |
| 何时交换 | 每 30 秒 | 链路状态变化时(Hello 每 10 秒) | 变化时(KEEPALIVE 周期发) |
| 报文 | 请求、响应 | Hello、DD、LSR、LSU、LSAck | OPEN、UPDATE、KEEPALIVE、NOTIFICATION |
| 路径 | 跳数最少(≤ 15) | 代价最低 | 较好,非最佳(按策略) |
| 能否分区域 | 不能 | 能 | 不能 |
- 所在层次看封装:RIP 用 UDP、BGP 用 TCP,它们的报文是应用层数据,所以属于应用层;OSPF 直接装在 IP 里,属于网络层。但三者的作用都是为网络层生成路由表。
- RIP 的“距离”是跳数,与链路快慢无关;OSPF 的“代价”可以按带宽、时延等由管理员设定。
- RIP 交换“整个路由表”但只发给邻居;OSPF 发的是“自己与邻居的链路状态”,但发给区域内所有路由器——“发给谁”和“发什么”正好相反,最爱拿来出选择题。
- BGP 不保证找到最短路径,只保证可达、无环、符合策略;BGP 发言人之间先建 TCP 连接再交换信息。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。
- A. 3,R2
- B. 4,R2
- C. 5,R3
- D. 6,R3
展开解析
B经 R2 的距离 3 + 1 = 4 < 5,更新为 4,下一跳 R2。
- A 错3 是 R2 到 net1 的距离,经 R2 还要再加 1 跳。
- B 对对:3 + 1 = 4 < 5,改走 R2。
- C 错5(经 R3)比经 R2 的 4 远,应改走 R2。
- D 错6 = 5 + 1:把原来的距离又加了 1;要加 1 的是 R2 的通告(3 + 1 = 4),原有路由不用加。
变化点:由“16 不可达”换成一次正常的距离向量更新。
- A. 4,12,16,8
- B. 3,15,18,10
- C. 4,15,18,10
- D. 4,15,23,10
展开解析
CNet1:min(1 + 3, …) = 4;Net2:min(12 + 3, 35 + 5, 30 + 2, 28 + 7) = 15;Net3:min(27, 23, 18, 43) = 18;Net4:min(39, 35, 10, 31) = 10。
- A 错后三个数 12、16、8 是邻居通告的距离本身(A 到 Net2、C 到 Net3、C 到 Net4),忘了加 E 到邻居的链路距离。
- B 错Net1 写成 3,那只是 E 到 A 的链路距离,没有加 A 到 Net1 的 1。
- C 对对:4、15、18、10。
- D 错Net3 取了经 B 的 18 + 5 = 23;经 C 是 16 + 2 = 18,更短。
变化点:链路距离变了,每个网络的最佳邻居也可能变(Net3 改走 C)。
- A. RIP
- B. OSPF
- C. 以上都不是
- D. BGP
展开解析
DBGP 发言人之间先建立 TCP 连接;RIP 用 UDP,OSPF 直接用 IP。
- A 错RIP 报文封装在 UDP 中(端口 520),是无连接的。
- B 错OSPF 直接封装在 IP 数据报中(协议号 89),不用 TCP。
- C 错BGP 用 TCP(端口 179),所以“以上都不是”不对。
- D 对对:BGP 发言人之间先建 TCP 连接。
变化点:由三个协议的封装换成“谁用 TCP”。
- A. BGP
- B. RIP
- C. OSPF
- D. IGMP
展开解析
ABGP 用于自治系统之间;RIP、OSPF 是内部网关协议;IGMP 是多播组管理协议。
- A 对对:BGP 用于自治系统之间。
- B 错RIP 是内部网关协议,只在一个自治系统内部使用。
- C 错OSPF 也是内部网关协议,可以在 AS 内划分区域,但不用于 AS 之间。
- D 错IGMP 是主机与本地多播路由器之间的组成员管理协议,不是路由协议。
变化点:由“能划分区域的 IGP”换成 EGP。
- A. AS 内部使用内部网关协议,AS 之间使用外部网关协议
- B. 不同的 AS 可以使用不同的内部网关协议
- C. 分层路由可以减小路由表的规模和路由信息的交换量
- D. 分层路由保证分组总是沿全局最短的路径传送
展开解析
D分层以后,跨区域(跨 AS)的分组只能先到对方的“入口”再走最短路,整体不一定最短;BGP 本身也只求可达、不求最短。A、B、C 都正确。
- A 不选正确:AS 内用 IGP(RIP、OSPF),AS 之间用 EGP(BGP)。
- B 不选正确:各 AS 自己决定用哪种内部网关协议,互不影响。
- C 不选正确:分层后每个路由器只需知道本区域的细节,路由表和交换的信息都变少。
- D 选错误:跨 AS 的分组要先到对方的“入口”,整体不一定最短;BGP 也只求可达、不求最短。
考点:4.8 节“层次路由”。
- A. 由管理员手工配置,网络拓扑变化时不能自动调整
- B. 需要相邻路由器之间周期性地交换路由信息
- C. 适用于拓扑经常变化的大型网络
- D. RIP 是一种静态路由选择协议
展开解析
A静态路由简单、无交换开销,但不能自适应,适合小型、稳定的网络(比如只有一个出口的末端网络配一条默认路由)。B、C、D 描述的都是动态路由。
- A 对对:手工配置,拓扑变化时不能自动调整。
- B 错周期性交换路由信息是动态路由(如 RIP)的做法,静态路由没有交换开销。
- C 错拓扑经常变化时静态路由不能自动调整;它适合的是小型、稳定的网络。
- D 错RIP 是动态路由协议(距离向量),会根据邻居的通告自动更新路由。
考点:4.8 节“静态路由与动态路由”。
- A. 链路状态更新(LSU)
- B. 数据库描述(DD)
- C. 问候(Hello)
- D. 链路状态确认(LSAck)
展开解析
CHello 每 10 秒一次,40 秒收不到就认为邻居不可达。DD 交换数据库摘要,LSU 携带并洪泛链路状态,LSAck 确认 LSU。
- A 错LSU(链路状态更新)用来携带并洪泛链路状态,不负责发现邻居。
- B 错DD(数据库描述)在建立邻接时交换数据库摘要,不负责维持邻居关系。
- C 对对:Hello 每 10 秒一次。
- D 错LSAck 用来确认收到的 LSU,不负责发现和维持邻居。
考点:4.8 节“OSPF 的五种分组”。
- A. OPEN
- B. UPDATE
- C. NOTIFICATION
- D. KEEPALIVE
展开解析
DOPEN 建立关系,UPDATE 通告或撤销路由,KEEPALIVE 周期性保活(也用来确认 OPEN),NOTIFICATION 报告差错并关闭连接。
- A 错OPEN 用来与对方建立邻站关系,只在开始时发。
- B 错UPDATE 用来通告新路由或撤销旧路由,不是周期性保活。
- C 错NOTIFICATION 用来报告差错并关闭连接,作用正好相反。
- D 对对:KEEPALIVE 周期性证实邻站关系。
考点:4.8 节“BGP 的四种报文”。
- A. 减少路由表的项数
- B. 缓解两台路由器之间“坏消息传得慢”的环路问题
- C. 加快好消息的传播
- D. 在多条等价路径上分担负载
展开解析
B这就是水平分割:避免 R2 把从 R1 学来的路由又说回给 R1,让 R1 误以为“经 R2 可达”。它只能消除两台路由器之间的环路,三台以上构成的环路仍可能计数到无穷。
- A 错水平分割不删除任何路由项,只是不把某些路由通告回去,路由表项数不变。
- B 对对:这就是水平分割。
- C 错好消息本来就传得快,水平分割针对的是坏消息造成的环路。
- D 错负载分担是在多条等价路径上分配流量,和“不把路由说回给邻居”是两回事。
考点:4.8 节“RIP:坏消息传得慢”。
4.9网络层设备:路由器的组成、路由表与分组转发
路由器的组成与功能
路由器是一台专门做“查表转发”的计算机,有多个输入、输出端口。它由两大部分组成:路由选择部分(控制平面,核心是路由选择处理机)和分组转发部分(数据平面,由输入端口、交换结构、输出端口组成)。
- 路由器是网络层设备,任务是转发分组:根据分组的目的 IP 地址查转发表,送到合适的输出端口。
- 分组到达速率超过处理速率,就在端口排队;队列满了只能丢弃——路由器可以因拥塞丢弃分组。路由器对首部做检验,有错就丢弃,但不保证分组不丢失(2012-37)。
- 路由器隔离冲突域和广播域;链路层设备(网桥、交换机)只看 MAC 地址,物理层设备只转发比特。
| 路由表 | 转发表 | |
|---|---|---|
| 由谁生成 | 路由选择处理机运行路由协议算出来(软件) | 从路由表得出,拷贝到各输入端口(常用硬件实现) |
| 内容 | 目的网络 → 下一跳 IP 地址(还有代价等路由信息) | 目的网络 → 输出端口 + 下一跳的 MAC 地址等,便于直接封装帧 |
| 优化目标 | 便于路由计算和变化时更新 | 便于快速查找 |
讨论路由选择原理时,一般不区分路由表和转发表,统称“路由表”;真题里的“路由表”也都是这个意思。
端口里做什么:输入端口按“物理层收比特 → 数据链路层拆帧(剥掉帧首部和尾部)→ 网络层查转发表、排队”的顺序处理;输出端口反过来:“排队缓存 → 数据链路层封装成新帧 → 物理层发比特”。所以分组每经过一个路由器,帧都要重新封装,MAC 地址随之改变。
交换结构与排队:分组怎样从入口到出口
交换结构负责把分组从输入端口搬到输出端口,是路由器的核心。有三种做法:
- 经内存交换:分组先复制到内存,路由选择处理机查表后再复制到输出端口。一次只能搬一个分组,速率受内存带宽限制(早期的路由器就像一台普通计算机)。
- 经总线交换:输入端口经一条共享总线把分组直接送到输出端口,不用处理机插手;但总线一次只能有一个分组通过,转发速率受总线速率限制。
- 经互连网络交换(如纵横交换结构):输入线和输出线排成网格,交叉点的开关闭合就接通;去往不同输出端口的分组可以同时转发。
- 输入端排队:交换结构的速率跟不上所有输入端口的总速率时,分组在输入端口排队。还会出现线路前部阻塞(HOL 阻塞):排在队首的分组要去的输出端口正忙,它只能等;排在它后面、要去空闲端口的分组也被挡住了。
- 输出端排队:交换结构很快,但多个输入端口的分组同时涌向同一个输出端口,输出链路发不过来,就在输出端口排队。
- 队列满了怎么办:丢弃新来的分组(或按某种策略丢弃已排队的分组)。路由器“因拥塞而丢弃分组”就发生在这里。
2012-37 问路由器的功能:“运行路由协议、设置路由表”(I,控制平面)、“拥塞时合理丢弃分组”(II)、“根据目的地址转发到合适的输出线路”(IV)都对;“对分组头差错校验、确保分组不丢失”(III)错——IP 只尽力交付。可能的变化:问“交换结构有哪几种”“哪种排队会产生 HOL 阻塞”(输入端排队)、“路由表与转发表的区别”。
跟我走一遍:一个分组穿过路由器
考纲的“路由表与路由转发”问的就是:分组进了路由器,到出来为止,路由器一共做了哪几件事、改了哪些字段。用一个具体的例子走一遍。
路由器 R 有 4 个接口,转发表如下。主机 192.168.10.25 发出的一个 IP 分组(目的 172.16.40.7,TTL = 64,DF = 0)从 E0 进入 R。
| 目的网络 | 下一跳 | 接口 |
|---|---|---|
| 192.168.10.0/24 | 直接交付 | E0 |
| 172.16.0.0/16 | 10.0.0.2 | E1 |
| 172.16.32.0/20 | 10.0.1.2 | E2 |
| 0.0.0.0/0 | 10.0.2.2 | E3 |
- 输入端口 · 链路层:收下一帧,检查 FCS;目的 MAC 是 E0 的 MAC(主机发往别的网络时,帧的目的 MAC 就是默认网关的 MAC,4.6 节),于是剥掉帧首部和尾部,把 IP 分组交给网络层。
- 网络层 · 检查首部:首部检验和出错就直接丢弃;TTL 减 1 变成 63(若减到 0,丢弃并向源主机发 ICMP 时间超过报文)。
- 查转发表:172.16.40.7 同时匹配 172.16.0.0/16(前 16 位相同)、172.16.32.0/20(/20 的范围是 172.16.32.0 ~ 172.16.47.255,40 在其中)和默认路由。按最长前缀匹配选 /20 → 下一跳 10.0.1.2,从 E2 转出(4.4 节)。
- 交换结构:把分组从输入端口送到 E2 的输出队列;队列满了就丢弃(这就是“路由器可以因拥塞丢弃分组”)。
- 输出端口 · 重新封装:用 ARP 查到下一跳 10.0.1.2 的 MAC 地址(ARP 缓存里没有就先发 ARP 请求);重写 IP 首部的 TTL 并重算首部检验和;若 E2 链路的 MTU 小于分组总长度,就在这里分片(DF = 1 则丢弃并发 ICMP 终点不可达);最后封装新帧:源 MAC = E2 的 MAC,目的 MAC = 10.0.1.2 的 MAC。
| 字段 | 进 R 时 | 出 R 时 | 为什么 |
|---|---|---|---|
| 源 / 目的 IP | 192.168.10.25 → 172.16.40.7 | 不变 | IP 地址标识两端主机,沿途不改(NAT 路由器除外,4.5 节) |
| TTL | 64 | 63 | 每经过一个路由器减 1 |
| 首部检验和 | 旧值 | 重新计算 | TTL 变了,首部变了 |
| 源 / 目的 MAC | 主机 → E0 | E2 → 10.0.1.2 | 帧只管一段链路,每一跳重新封装 |
换几个目的地址自己试:172.16.50.9 只匹配 /16 → E1;8.8.8.8 只匹配默认路由 → E3;192.168.10.99 → 直接交付,从 E0 发出,目的 MAC 就是那台主机自己的 MAC(四个结果都用程序核对过)。
- 路由器检查的是 IP 首部的检验和;数据部分对不对它不管(传输层的检验和才覆盖数据)。
- 首部检验和出错的分组直接丢弃,不发 ICMP 差错报文——检验和错说明首部在传输中被破坏,连源地址都不可信;检验和正确、但某个字段的值不合理时,才丢弃并发 ICMP 参数问题报文(4.6 节)。
- “路由器保证分组不丢失”是错的:拥塞、TTL 为 0、首部出错、DF = 1 又放不下,都会丢(2012-37 Ⅲ)。
- 查转发表用的是目的 IP 地址;源地址只在需要回 ICMP 报文时才用到。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 运行 OSPF 计算最短路径
- B. 根据转发表把分组送到输出端口
- C. 与邻居交换 RIP 距离向量
- D. 维护 BGP 会话
展开解析
B运行路由协议、计算和维护路由属于控制平面;按转发表转发分组属于数据平面。
- A 错运行 OSPF 算最短路径属于控制平面(路由选择),不是数据平面。
- B 对对:按转发表把分组送到输出端口是数据平面的工作。
- C 错和邻居交换 RIP 距离向量同样是路由选择,属于控制平面。
- D 错维护 BGP 会话、交换路由信息也属于控制平面。
变化点:由“路由器有哪些功能”细分到控制平面和数据平面。
- A. 输出端口队列已满,新到的分组被丢弃
- B. 队首分组要去的输出端口正忙,挡住了后面要去空闲输出端口的分组
- C. 交换结构采用总线方式时,一次只能转发一个分组
- D. 路由表太大,查表速度变慢
展开解析
B线路前部阻塞(HOL)是输入端排队特有的现象;A 是输出端排队溢出,C 是总线交换的限制,D 与排队无关。
- A 错这是输出端口排队溢出造成的丢包,不是输入端的线路前部阻塞。
- B 对对:队首挡住了后面本可以走的分组。
- C 错总线一次只能转发一个分组是总线交换结构的速率限制,不是“队首挡住后面”的现象。
- D 错查表速度慢是处理能力问题,队列里并没有出现队首挡住后面分组的情况。
考点:4.9 节“交换结构与排队”。
4.10IP 组播
考纲原文只有两条:组播的概念、IP 组播地址。所以本节的重点是:组播解决什么问题、和单播 / 广播有什么区别、D 类地址怎样分段、组播 IP 地址怎样映射成以太网 MAC 地址;IGMP 和组播路由只要知道“各管什么”,放在本节最后作拓展。
组播的概念:一对多通信
名称:王道教材和考纲叫“组播”,谢希仁教材叫“多播”(multicast),是同一个东西。下文两种叫法混用。
问题:一场直播有 1000 个观众。用单播,服务器要把同一份视频发 1000 遍,出口带宽要乘以 1000;用广播,所有不想看的主机也被打扰,而且广播过不了路由器。多播(也叫组播)的办法是:源主机只发一份,在网络中需要分岔的路由器上才复制,只送给想收的主机。
- 多播数据报的目的地址是 D 类地址(224.0.0.0 ~ 239.255.255.255),每个 D 类地址标识一个多播组(地址怎样分段、有哪些规矩,见下一个小标题)。
- 多播数据报“尽最大努力交付”,不保证一定交付给组内所有成员,不产生 ICMP 差错报文(所以 ping 一个多播地址收不到“不可达”)。
- 主机可以随时加入、离开某个组;一台主机可以同时属于多个组;源主机不必属于它发往的组。
IP 组播地址:D 类地址与以太网组播 MAC
组播地址用的是 IPv4 的 D 类地址:首字节的前 4 位是 1110,范围 224.0.0.0 ~ 239.255.255.255,一共 228 个。它有几条“规矩”,每一条都是选择题的好材料:
| 地址段 | 用途 | 例子 |
|---|---|---|
| 224.0.0.0 ~ 224.0.0.255 | 本地网络(同一链路)专用,路由器不转发 | 224.0.0.1 本网所有主机;224.0.0.2 本网所有路由器;224.0.0.5 所有 OSPF 路由器;224.0.0.9 所有 RIPv2 路由器 |
| 224.0.1.0 ~ 238.255.255.255 | 可以跨越因特网的组播地址 拓展 | 各种组播应用 |
| 239.0.0.0 ~ 239.255.255.255 | 本地管理(只在一个机构内部用,作用类似私有地址) 拓展 | 企业内部的组播视频 |
- 组播地址只能作目的地址,不能作源地址:发组播的源主机,源地址仍是它自己的单播地址。
- 组播只能用 UDP:TCP 是一对一的连接,没法“一份数据同时交给一组人”,也没法对一群接收者分别做确认和重传。
- OSPF 用 224.0.0.5、RIPv2 用 224.0.0.9 发路由信息——这就是“只发给本网所有路由器”的组播,比广播省事:网上的普通主机不会被打扰。
以太网上的硬件多播:在局域网里,多播分组最终要装进以太网帧。IANA 把以太网地址块 01-00-5E-00-00-00 ~ 01-00-5E-7F-FF-FF 留作多播 MAC 地址,并规定一个简单的映射:
展开解析
- 230.0.0.1:第 2 字节 0 的最高位是 0,低 23 位就是 0.0.1 → 01-00-5E-00-00-01。
- 224.128.64.32:第 2 字节 128 = 1000 0000,最高位的 1 属于被丢掉的 5 位,剩下 000 0000;第 3、4 字节 64 = 0x40、32 = 0x20 → 01-00-5E-00-40-20。
- 前 4 位固定 1110,接下来 5 位任取都映射到同一个 MAC:25 = 32 个。
(三个结果都用程序验算过。)
225.1.2.3 和 233.129.2.3 看上去毫不相干,映射成的 MAC 地址却都是 01-00-5E-01-02-03:它们的低 23 位相同(第 2 字节 1 = 0000 0001、129 = 1000 0001,只差最高位,而最高位正好落在被丢掉的 5 位里)。所以网卡按 MAC 收下帧后,IP 层还要再看一次目的 IP 地址,把不是本组的丢掉——这就是映射“32 对 1”的后果。
- 组播 MAC 的前 25 位固定是 0000 0001 0000 0000 0101 1110 0(即 01-00-5E 后面第一位为 0),所以第 4 字节最大是 7F,不会出现 01-00-5E-80-xx-xx。
- 以太网地址第一个字节的最低位(I/G 位)为 1 表示组地址:01-00-5E 的 01 正是这一位为 1(3.7 节)。
- “组播地址 = D 类地址”说的是 IPv4;IPv6 的组播地址以 FF 开头(4.7 节),IPv6 没有广播地址。
IGMP 与组播路由:各管什么 拓展
考纲 2026 原文没有列 IGMP 和组播路由,这里只讲到“知道它们分别解决什么问题”,不必深究报文格式和算法细节。
IGMP(网际组管理协议):多播路由器要知道“我连着的这个局域网上,有没有主机加入了组 G”,才决定要不要把 G 的分组转发进来。IGMP 就运行在主机和与它直接相连的多播路由器之间。IGMP 报文封装在 IP 数据报中(协议字段 2),属于网络层协议(和 ICMP 一样“用 IP 传送”但属于网络层)。它只管本地:路由器只需知道本网络上有没有某组的成员,不需要知道有几个、是谁。
多播路由选择:多播路由器之间还要用多播路由选择协议,为每个多播组建立一棵多播转发树:从源点出发、覆盖所有有组员的网络、没有环路,分组沿树复制转发。IGMP 解决“谁要收”,多播路由协议解决“怎么送过去”,两者分工不同。
拓展常见的多播路由协议:DVMRP(距离向量多播路由选择协议,就是上图的洪泛与剪除,适合组员密集的情况);PIM-DM(协议无关多播—密集方式,思路同上);PIM-SM(稀疏方式,组员很分散时,先选一个“汇聚点”作为树根,大家都往它那里建共享树,避免到处洪泛);MOSPF(在 OSPF 的基础上扩展)。另外,若源与组员之间隔着不支持多播的路由器,可以用隧道把多播分组封装成单播穿过去。
组播在 2009 ~ 2026 年的真题里一次也没有出过,而它明明白白写在考纲里——这正是“冷点”可能变成新题的地方。按考纲两条,最可能的命题点:① 组播与单播、广播的区别(谁收得到、源发几份、在哪里复制);② D 类地址范围、224.0.0.x 不被路由器转发、组播地址只能作目的地址;③ 组播只能用 UDP;④ 组播 IP → 以太网 MAC 的映射(01-00-5E + 低 23 位,32 对 1),可以出成计算题。IGMP 若出现,多半问“它运行在哪里(主机与本地组播路由器之间)、属于哪一层(网络层)”。本节末尾的变式卡和第 9 篇 9.1 的专项题专门练了这几个点。
选择题练习:考纲补充(尚无真题)
本节的考纲知识点还没有出过真题,下面是按 408 风格自编的练习题(答案位置已轮换)。更多同类题见第 9 篇 9.1 专项。
- A. ICMP
- B. ARP
- C. IGMP
- D. OSPF
展开解析
CIGMP 用于主机与本地多播路由器之间的组成员管理。
- A 错ICMP 用于差错报告和询问(如 ping),不管多播组成员。
- B 错ARP 把 IP 地址解析为 MAC 地址,不能报告组成员关系。
- C 对对:IGMP。
- D 错OSPF 是单播的内部网关路由协议,不用于主机报告组成员。
变化点:延伸到 4.10 节的 IP 多播。
- A. 01-00-5E-02-41-12
- B. 01-00-5E-82-41-12
- C. 01-00-5E-E6-82-41
- D. FF-FF-FF-02-41-12
展开解析
AMAC = 01-00-5E + 0 + IP 的低 23 位。第 2 字节 130 = 1000 0010,最高位属于被丢弃的 5 位,剩 000 0010 = 02;65 = 0x41,18 = 0x12。B 忘了丢掉最高位;C 把首字节也放进去了;D 是广播地址的前缀。
- A 对对:01-00-5E-02-41-12。
- B 错第 2 字节 130 = 1000 0010,最高位属于被丢弃的 5 位,要变成 000 0010 = 02;B 直接写成了 82。
- C 错把 IP 的首字节 230(E6)也放进了 MAC;MAC 只取 IP 的低 23 位,首字节整个不要。
- D 错FF-FF-FF 是广播地址的前缀;IP 多播映射的 MAC 前缀固定是 01-00-5E。
考点:4.10 节“多播地址映射”。
- A. 1
- B. 16
- C. 32
- D. 64
展开解析
CD 类地址固定前缀 1110 之后还有 28 位,只有低 23 位进入 MAC,丢掉的 5 位可以任取,所以 25 = 32 个 IP 对应同一个 MAC。主机收到后要在 IP 层再过滤一次。
- A 错一对一要求 MAC 能容纳全部 28 位可变位,而这里只有 23 位。
- B 错16 = 2⁴,少算了一位:丢掉的是 28 − 23 = 5 位。
- C 对对:2⁵ = 32。
- D 错64 = 2⁶,多算了一位;丢掉的只有 5 位。
考点:4.10 节“多播地址映射”。
- A. IGMP 运行在多播路由器之间,用来建立多播转发树
- B. IGMP 报文封装在 UDP 用户数据报中
- C. IGMP 用于把多播 IP 地址解析为以太网地址
- D. IGMP 让本地多播路由器知道本网络上是否有某个多播组的成员
展开解析
DIGMP 运行在主机与本地多播路由器之间(A 错,建树是多播路由协议的事);IGMP 报文直接封装在 IP 中,协议字段为 2(B 错);地址映射是固定规则,不需要协议(C 错)。
- A 错IGMP 运行在主机与本地多播路由器之间;建立多播转发树是多播路由协议的事。
- B 错IGMP 报文直接封装在 IP 数据报中(协议字段 2),不用 UDP。
- C 错多播 IP 到以太网地址的映射是固定规则(01-00-5E + 低 23 位),不需要协议。
- D 对对:让本地多播路由器知道本网络上有没有某组的成员。
考点:4.10 节“IGMP”。
4.11移动 IP
考纲两条:移动 IP 的概念(几个实体、两个地址)和移动 IP 通信过程(登记、隧道、三角路由)。和组播一样,真题至今没有出过,复习时把下面两个 h4 的图和表各过一遍即可。
移动 IP 的概念与通信过程:换了网络,地址不变
问题:IP 地址里藏着“网络号”,换了网络就得换地址;可正在进行的 TCP 连接是靠(IP 地址,端口)认人的,地址一换连接就断了。笔记本从教学楼走到图书馆、换了一个子网,怎样让别人还能用原来的地址找到它?
你搬到外地读书,朋友仍往你家的老地址寄信。你提前到老家的邮局登记了新地址(转交地址);邮局收到寄给你的信,就套一个新信封寄到新地址(隧道),你拆开就看到原信。你回信则直接从外地寄出,不必绕回老家(三角路由)。哪里不像:现实里朋友收到回信会看到新地址;移动 IP 里你回信的源地址仍写老家地址(永久地址),对方完全不知道你搬过家。
- 移动结点:具有永久 IP 地址的移动设备。归属网络(本地网络):它原来所在的网络。永久地址(归属地址、主地址):它在归属网络中的地址,始终不变,通信对方只用它。
- 归属代理(本地代理):归属网络上替它收分组的实体,通常就是归属网络的路由器。
- 外地网络、外地代理(外部代理):移动结点现在所在的网络和那里的代理,通常是外地网络的路由器。
- 转交地址(辅地址):移动结点在外地网络时使用的临时地址,通常就是外地代理的地址。
- 移动结点在归属网络时,按普通方式收发分组,用不到移动 IP。
- 移动到外地网络后,通过外地代理的通告(或主动请求)得到转交地址,并经外地代理向归属代理登记这个转交地址。
- 通信对方仍按永久地址发送分组。分组到达归属网络后被归属代理截获,归属代理把它整个封装进一个以转交地址为目的地址的新 IP 数据报,经隧道发往外地代理。
- 外地代理拆封,取出原来的数据报交给移动结点。
- 移动结点发给对方的分组,源地址仍是永久地址,经外地代理直接发送给对方,不绕回归属网络。去和回走的路不同,称为三角路由。
- 移动到另一个外地网络时,重新获取转交地址并登记;回到归属网络后,向归属代理注销转交地址。
整个过程对通信对方是透明的:对方始终只知道移动结点的永久地址。
跟我填一遍:每一段 IP 首部里写的是什么地址
移动 IP 的题,最容易考的就是“某一段的分组,源地址、目的地址各是什么”。用具体的地址走一遍:移动结点 MN 的永久地址 131.1.1.5(归属网络 131.1.1.0/24),归属代理 HA 是 131.1.1.1;MN 现在在外地网络,外地代理 FA 的地址 203.0.113.1 就是它的转交地址;通信对方 C 是 58.2.2.9。
| 这一段 | 外层 IP 首部(隧道) | 里层(原来的)IP 首部 | 说明 |
|---|---|---|---|
| ① C → 归属网络 | — | 58.2.2.9 → 131.1.1.5 | C 只知道永久地址,按普通方式发送 |
| ② HA → FA(隧道) | 131.1.1.1 → 203.0.113.1 | 58.2.2.9 → 131.1.1.5(原样装在里面) | HA 截获后封装,外层目的地址 = 转交地址 |
| ③ FA → MN | — | 58.2.2.9 → 131.1.1.5 | FA 拆封,在外地网络上直接交付给 MN |
| ④ MN → C | — | 131.1.1.5 → 58.2.2.9 | 源地址仍是永久地址,直接发给 C,不经过 HA(三角路由) |
从头到尾,C 看到的始终是 131.1.1.5;转交地址只出现在隧道的外层首部里,只有 HA 和 FA 知道。
| 移动 IP | DHCP | NAT | |
|---|---|---|---|
| 解决什么 | 换了网络仍用原地址通信,连接不断 | 新主机自动拿到一个地址 | 多台主机共用少量公网地址 |
| 主机的地址 | 永久地址不变,另有转交地址 | 每到一个网络换一个地址 | 内网私有地址,出去时被替换 |
| 对方看到的地址 | 永久地址 | 新地址 | NAT 路由器的公网地址 |
| 关键动作 | 登记、隧道封装 / 拆封 | DISCOVER / OFFER / REQUEST / ACK | 改源地址和源端口 |
移动 IP 在真题里还没有出过。最可能的考法:① 名词对应——永久地址(归属地址)、转交地址、归属代理、外地代理各是什么;② 通信对方发给移动结点的分组按什么地址发、被谁截获、谁封装谁拆封;③ 移动结点回复时的源地址、要不要经过归属代理(不经过,三角路由);④ 与 DHCP、NAT 的区别。判别方法:对方眼里只有永久地址,转交地址只活在隧道里。
- 转交地址通常是外地代理的地址,不是移动结点自己在外地网络里的地址(教材的“外地代理转交地址”方式)。
- 归属代理、外地代理通常就是归属网络、外地网络的路由器。
- 封装是 HA 做的,拆封是 FA 做的;MN 回复时不需要隧道。
- 移动 IP 解决的是网络层的“换网后地址不变”;同一个 Wi-Fi 网络里换个 AP(同一个子网)不需要移动 IP。
选择题练习:考纲补充(尚无真题)
本节的考纲知识点还没有出过真题,下面是按 408 风格自编的练习题(答案位置已轮换)。更多同类题见第 9 篇 9.1 专项。
- A. 归属代理
- B. 外地代理
- C. 通信对方所在网络的路由器
- D. 外地网络的 DHCP 服务器
展开解析
A对方按永久地址发送,分组先到归属网络,被归属代理截获并封装,经隧道发往转交地址(外地代理),外地代理拆封后交给移动结点。
- A 对对:归属代理截获后经隧道发往转交地址。
- B 错外地代理是隧道的终点,负责拆封并交给移动结点;分组先到归属网络,被归属代理截获。
- C 错通信对方网络的路由器只按永久地址把分组正常转发出去,它不知道移动结点已经移动。
- D 错外地网络的 DHCP 服务器只给本地主机分配地址,不参与移动 IP 的转发。
考点:4.11 节“移动 IP”的通信过程。
- 一个 IP 首部的前 4 字节是 45 00 05 DC,首部长度和总长度各是多少?
答案
首字节 0x45:版本 4,首部长度 5 × 4 = 20B;总长度 0x05DC = 1500B。 - 总长度 2000B(首部 20B)的数据报经过 MTU = 620B 的链路,分几片?最后一片的片偏移是多少?
答案
每片最多 (620 − 20) = 600B 数据(600 是 8 的倍数)。1980 = 600 + 600 + 600 + 180,共 4 片;最后一片片偏移 1800 ÷ 8 = 225,总长度 200,MF = 0。 - 求 10.10.201.99/19 的网络地址和广播地址。
答案
/19 落在第 3 字节,块大小 32;201 向下取到 32 的倍数是 192 → 网络地址 10.10.192.0;192 + 31 = 223 → 广播地址 10.10.223.255。 - 把 202.1.0.0/24、202.1.1.0/24、202.1.2.0/24、202.1.3.0/24 聚合。
答案
第 3 字节 0~3 = 000000xx,共同前缀 16 + 6 = 22 位 → 202.1.0.0/22。 - 主机 A 要给另一个网络上的主机 B 发 IP 分组,A 用 ARP 解析谁的 MAC 地址?
答案
默认网关(本网络路由器接口)的 MAC 地址。 - RIP、OSPF、BGP 分别直接封装在什么协议里?
答案
RIP → UDP;OSPF → IP;BGP → TCP。 - R 收到邻居 X 的 RIP 表项 <N, 3>,R 原来到 N 的路由是 <N, 5, 下一跳 Y>,更新后是什么?若原来是 <N, 2, 下一跳 X> 呢?
答案
第一种:经 X 为 4 < 5,改为 <N, 4, X>。第二种:下一跳就是 X,无条件更新为 <N, 4, X>(距离变大也要换)。 - 拥塞控制和流量控制有什么区别?
答案
拥塞控制是全局性的,防止过多数据注入网络,涉及所有主机和路由器;流量控制是点对点的,只让发送方别把接收方淹没。 - 移动 IP 中,通信对方发给移动结点的分组按什么地址发?谁把它送到移动结点所在的外地网络?
答案
按永久地址发。归属代理截获后,把它封装进以转交地址为目的地址的数据报,经隧道发给外地代理,外地代理拆封后交给移动结点。 - IPv6 中相当于 IPv4 的 127.0.0.1 和 0.0.0.0 的地址分别是什么?
答案
环回地址 ::1;未指明地址 ::(全 0)。 - 主机 H1 的 ARP 表为空,它要给另一个网络上的 H2 发 IP 分组。H1 发出的第一个以太网帧的目的 MAC 是什么?封装这个 IP 分组的帧的目的 MAC 又是什么?
答案
第一个帧是解析默认网关的 ARP 请求,广播,目的 MAC = FF-FF-FF-FF-FF-FF;封装 IP 分组的帧的目的 MAC 是默认网关(路由器接口)的 MAC。 - DHCP 客户在租期过半(T1)时发的 REQUEST 是单播还是广播?源 IP 地址是什么?
答案
单播,发给原来的 DHCP 服务器;源 IP 是已经租到的地址(不再是 0.0.0.0)。到 0.875 倍租期(T2)还没续上才改为广播。 - 哪 4 种情况不发送 ICMP 差错报告报文?
答案
① 对 ICMP 差错报告报文本身;② 对分片数据报的非第一个分片;③ 对多播地址的数据报;④ 对 127.0.0.0、0.0.0.0 等特殊地址的数据报。 - traceroute 怎样知道路径上第 3 个路由器的地址?
答案
发一个 TTL = 3 的分组,它在第 3 个路由器处 TTL 减为 0 被丢弃,该路由器向源主机回 ICMP 时间超过报文,报文的源地址就是它的地址。 - 把 FE80::2AA:FF:FE9A:4CA2 写成完整形式。
答案
写出来的有 FE80、2AA、FF、FE9A、4CA2 共 5 组,:: 代表 3 组 0:FE80:0000:0000:0000:02AA:00FF:FE9A:4CA2。 - 层次路由中,AS 内部和 AS 之间分别用哪类协议?RIP、OSPF、BGP 中能把一个 AS 划分成多个区域的是哪个?
答案
AS 内部用内部网关协议 IGP(RIP、OSPF),AS 之间用外部网关协议 EGP(BGP-4)。能划分区域的只有 OSPF。 - 多播地址 239.255.0.1 映射成什么以太网地址?
答案
第 2 字节 255 = 1111 1111,最高位丢掉,剩 111 1111 = 7F;后两字节 00、01 → 01-00-5E-7F-00-01。 - 移动 IP 中,移动结点回复通信对方时,IP 分组的源地址填什么?这个分组要经过归属代理吗?
答案
源地址填永久地址;直接发给对方,不经过归属代理(三角路由)。 - SDN 的核心思想是什么?路由由谁计算,交换机做什么?
答案
控制平面与数据平面分离:控制器集中计算路由,通过南向接口(如 OpenFlow)下发流表;交换机只按流表转发分组(数据平面),不再各自运行路由协议。 - ICMP 差错报告报文有哪 5 类?TTL 减为 0 时发哪一类?
答案
终点不可达、源点抑制、时间超过、参数问题、改变路由(重定向)。TTL 减为 0 时发“时间超过”,traceroute 就是利用它。 - BGP 为什么只求找到一条较好的路由,而不追求最佳路由?
答案
因特网规模太大,各 AS 的度量标准不同,选路还要考虑政治、经济、安全等策略,没法统一算出“最短”;所以 BGP 只求能到达、比较好(不兜圈子),采用路径向量交换“经过哪些 AS”。 - 路由器的交换结构有哪三种?哪一种能让多个分组同时通过?
答案
经内存、经总线、经互连网络(如纵横交换)。前两种一次只能搬一个分组;纵横交换在各分组去往不同输出端口时可以并行转发。
一页总结与必会题型
| 主题 | 核心结论 | 必背数字 | 真题 |
|---|---|---|---|
| 功能 | 转发(数据平面,每个分组)vs 路由选择(控制平面,全网);数据报服务尽最大努力交付;SDN 控制器经南向接口下发流表 | — | 2022-37、2012-37 |
| IPv4 首部 | 首 4 总 1 片 8;TTL 每跳减 1;检验和只检首部、每跳重算;分片只在目的主机重组 | 首部 20~60 B;总长 ≤ 65 535;协议 1 / 6 / 17 / 89 | 2021-36、2018-47、2011-47、2012-47 |
| 编址 | 按位与求网络地址;块大小法;可分配 2h − 2;变长划分用二叉树 | 私有 10/8、172.16/12、192.168/16;A 类 126 个网络 | 2012-39、2017-38、2019-37、2021-35 等 11 道 |
| 转发 | 直连 → 直接交付;否则最长前缀匹配;都不中走默认路由;下一跳 = 相邻路由器接口;聚合须恰好对齐 | /32 主机路由、/0 默认路由 | 2015-38、2018-38、2009-47、2013-47 |
| NAT | 出去改源、回来改目的;NAPT 连端口一起改,传输层检验和也重算;外网访问内网要静态映射 | — | 2016-38、2023-38、2025-37、2020-47 |
| ARP / DHCP / ICMP | ARP 解析“这一段的下一站”;DHCP 前两个客户报文 0.0.0.0 → 255.255.255.255;ICMP 差错发给源主机 | ARP 类型 0x0806;DHCP UDP 67 / 68;T1 = 0.5、T2 = 0.875 | 2012-38、2018-37、2025-36、2010-36、2012-33、2015-47 |
| IPv6 | 128 位;基本首部固定 40 B;无检验和;只在源主机分片;无广播;:: 只用一次 | 空间 296 倍;最小 MTU 1280 | 2023-40 |
| 路由 | 层次路由:AS 内 IGP、AS 间 EGP;RIP 距离向量(坏消息传得慢);OSPF 链路状态(Dijkstra、可分区域);BGP 路径向量(只求可达) | RIP:UDP 520、30 s、16 不可达;OSPF:IP 89、Hello 10 s;BGP:TCP 179 | 2010-35、2016-37、2017-37、2021-37、2026-37、2026-38、2014-42、2024-47 |
| 路由器 | 路由器不保证不丢分组;过一个路由器:IP 地址不变,TTL − 1、检验和重算、MAC 换成本段的 | 查转发表用目的 IP + 最长前缀匹配 | 2012-37 |
| IP 组播 | 组播只能作目的、只能用 UDP、不发 ICMP 差错;224.0.0.x 不转发;IGMP 在主机与本地组播路由器之间(拓展) | D 类 224~239;01-00-5E + 低 23 位,32 对 1 | (尚无) |
| 移动 IP | 对方只用永久地址;HA 截获并封装、FA 拆封;MN 回复不经 HA(三角路由) | 转交地址通常 = 外地代理地址 | (尚无) |
- 给 IP 地址 + 掩码(或 /n),求网络地址、广播地址、可分配地址范围和个数(4.3 块大小法)。
- 定长划分求子网数 / 每子网主机数;变长划分给出各子网地址块(4.3 VLSM)。
- 查路由表(最长前缀匹配)、路由聚合、按拓扑填路由表(4.4)。
- 给 MTU 和总长度,求各分片的总长度、片偏移、MF(4.2)。
- 从十六进制抓包里读出首部长度、总长度、协议、地址、TTL(4.2)。
- 经过 NAT 前后分组的源 / 目的地址和端口(4.5)。
- 一次通信中 ARP 解析谁、各段帧的 MAC 地址;DHCP 各报文的地址(4.6)。
- RIP 收到邻居表后更新路由表;坏消息传得慢(4.8)。
- 链路状态下用 Dijkstra 求最短路径,链路变化后重算并聚合(4.8)。
- 各路由协议的封装(UDP / IP / TCP)与所在层次(4.8 层次路由)。
4.✎本篇真题闯关(40 题)
本篇各小节挂的真题全部在这里,按小节排好。可以展开后一道道做,也可以用弹窗模式连续做。做题记录(对/错)只保存在你这台电脑的浏览器里,小节标题下的题号会随之变绿或变红。
传输层:从“主机到主机”到“进程到进程”,TCP 怎样做到可靠
网络层把分组送到了目的主机,但主机上同时跑着浏览器、QQ、下载软件……传输层用端口号把数据交给正确的进程。它有两个协议:UDP 简单、快,不保证送到;TCP 建立连接,用序号、确认、重传保证可靠,用滑动窗口做流量控制,用慢开始、拥塞避免、快重传、快恢复做拥塞控制。选择题最爱考序号和确认号的计算、三次握手四次挥手、拥塞窗口的变化;综合题(2016-41、2023-47、2026-47)会把它们串起来。
本篇地图:先看全貌,再逐节攻克
传输层的内容看起来是“两个协议”,其实可以挂在一个问题上:IP 只负责把分组尽力送到对方主机,不保证不丢、不乱、不重复——那么应用程序收到的数据怎样才能“一个字节都不差”?UDP 的回答是“不管,交给应用自己”;TCP 的回答是一整套机制:先建立连接(5.4),给每个字节编号并要求确认、丢了就重传(5.5),对方忙不过来就少发(流量控制,5.5),网络堵了也少发(拥塞控制,5.6)。
| 小节 | 选择题 | 综合题(大题) | 一句话说清考什么 |
|---|---|---|---|
| 5.1 端口、复用分用 | (1) | 抓包题读端口 | 分用看目的端口;熟知端口号;套接字 |
| 5.2 UDP | 3 | — | UDP 提供哪些服务;首部 4 个字段;检验和反码求和 |
| 5.3 TCP 首部 | 1 | 2011-47、2012-47 读 TCP 首部 | 首部 20~60 B;序号、确认号、窗口的单位都是字节 |
| 5.4 连接管理 | 6 | 2026-47 | 握手各报文的 SYN / ACK / seq / ack;挥手的状态;释放连接的时间 |
| 5.5 可靠传输与流量控制 | 6 | 2016-41、2026-47 | 确认号怎么算;“还能发多少”;快重传的时刻 |
| 5.6 拥塞控制 | 7 | 2016-41、2023-47 | 超时 / 3 个重复确认后 cwnd 与 ssthresh;数 RTT;发送窗口取小 |
5.1 栏的(1)表示 2018-39 同时挂在 5.1 和 5.2。
- 5.1 → 5.2(约 1.5 小时):先弄清“端口是给进程编号”,再学最简单的 UDP,顺便练熟反码求和。
- 5.3 → 5.4(约 3 小时):TCP 首部的序号、确认号是后面所有计算的基础;握手、挥手要能默画时序图并写出每个报文的字段。
- 5.5 → 5.6(约 4 小时):发送窗口“三指针”和 cwnd 逐轮表是两个必会的工具,每个都要亲手做三道题以上。
- 最后做第 7 篇 t6 TCP 综合题(约 2 小时),把三个机制串起来。
5.1传输层的功能、端口与套接字
为什么还要一层:从“主机到主机”到“进程到进程”
问题:你的电脑同时开着浏览器、微信和一个下载软件。一个 IP 分组到达了,网络层只知道“它是发给这台电脑的”——那么它该交给浏览器、微信还是下载软件?另外,IP 会丢分组、会让分组乱序,浏览器显示网页时却要求一个字节都不能错,谁来补这个窟窿?
快递员(网络层)只负责把包裹送到楼号(IP 地址)。楼里的收发室(传输层)看包裹上的房间号(端口号),把它送到具体的住户(进程)手里;住户寄出的包裹也先交到收发室,由收发室统一交给快递员。有的收发室还提供“挂号”服务(TCP):每件都登记编号、对方签收后回执,丢了重寄;有的只提供“平信”服务(UDP):贴上房间号就交出去,不管送没送到。
哪里不像:楼里的房间号是固定的,而客户进程的端口号往往是临时分配的,用完就收回;同一个进程也可以同时占用几个端口。
- 网络层提供主机之间的逻辑通信;传输层提供应用进程之间的逻辑通信,称为端到端通信。
- 传输层只存在于主机(端系统)中。路由器只有下三层,转发分组时根本不看传输层首部(NAT 路由器是例外,它会改端口号)。
- 传输层的主要功能:① 复用与分用(用端口区分进程);② 差错检测(检验和覆盖首部和数据,而 IP 只检验首部);③ TCP 还提供可靠传输、流量控制、拥塞控制和连接管理。
- 传输层向上屏蔽了下面网络的细节:不管底下是什么拓扑、经过多少路由器,应用进程看到的都是一条“端到端的逻辑通信信道”。TCP 让这条信道看起来可靠,UDP 则是一条不可靠的信道。
传输层有两个主要协议:UDP(用户数据报协议)和 TCP(传输控制协议)。它们的数据单位分别叫 UDP 用户数据报和 TCP 报文段(segment)。两者的详细对比放在本篇最后的 5.6 对比表,学完 TCP 再看更有体会。
| 网络层(IP) | 传输层(TCP / UDP) | |
|---|---|---|
| 通信的两端 | 主机 ↔ 主机 | 进程 ↔ 进程 |
| 靠什么找对方 | IP 地址 | IP 地址 + 端口号(套接字) |
| 在哪里运行 | 主机和所有路由器 | 只在主机 |
| 差错检验 | 只检验首部 | 首部 + 数据(含伪首部) |
| 可靠性 | 尽最大努力交付 | TCP 可靠;UDP 尽最大努力 |
| 数据单位 | IP 数据报(分组) | TCP 报文段 / UDP 用户数据报 |
传输层的两种服务:无连接(UDP)与面向连接(TCP)
问题:同样是把数据交给另一台主机上的进程,网页、文件要求“一个字节都不能错、顺序不能乱”,而查一个域名、看直播只求“快”,丢一点也能接受。传输层怎样同时满足这两种需求?——提供两种服务,让应用自己挑。
面向连接像打电话:先拨号、对方接起(建立连接),再说话(传数据),说完挂断(释放连接);说的话一句接一句,对方听漏了会让你重说。无连接像寄明信片:写上地址就投进邮筒,不用先问对方在不在,每张明信片各走各的,丢了也没人告诉你。
哪里不像:真正的电话会占用一条线路(电路交换);TCP 的“连接”却只是两台主机里各自记着的一组状态(序号、窗口、缓存),中间的路由器根本不知道这条连接存在,报文段照样一个个独立选路——这一点正是常考的陷阱。
教材说法:传输层向应用层提供两种服务。
- 面向连接的服务(TCP):通信分三个阶段——建立连接、数据传送、释放连接;提供可靠、按序、无重复的字节流传输,还有流量控制和拥塞控制。代价是首部大(20 ~ 60 B)、要握手、要维护状态。
- 无连接的服务(UDP):不建立连接,有数据就直接发;尽最大努力交付(不确认、不重传、不保证按序),只做差错检测(检验和出错就丢弃)。好处是首部只有 8 B、没有握手时延,还支持一对多、多对多通信。
| 无连接(UDP) | 面向连接(TCP) | |
|---|---|---|
| 通信前 | 不建立连接 | 三次握手建立连接 |
| 可靠性 | 尽最大努力交付 | 可靠:确认 + 重传 + 按序 |
| 数据的边界 | 面向报文(应用交多少发多少) | 面向字节流(会拆分、合并) |
| 流量 / 拥塞控制 | 没有 | 有 |
| 通信对象 | 一对一、一对多、多对多 | 只能一对一(点对点) |
| 首部 | 8 B | 20 ~ 60 B |
| 典型应用 | DNS 查询、DHCP、TFTP、SNMP、RIP、实时音视频 | HTTP、FTP、SMTP、POP3、TELNET、BGP |
- “TCP 是面向连接的,所以同一条 TCP 连接的报文段一定沿同一条路径传输。”——错。网络层仍是数据报服务,每个 IP 分组独立选路,可能走不同的路、乱序到达;TCP 在接收端按序号重新排好再交给应用。
- “UDP 不可靠,所以 UDP 不检查差错。”——错。UDP 有检验和(覆盖伪首部、首部和数据),检出错误就丢弃;它只是不负责让发送方重发。
- “面向连接就一定可靠。”——错。这是两件事:网络层的虚电路是面向连接的,却不一定可靠;802.11 是无连接的,却对每帧确认。只是在传输层,TCP 恰好“面向连接 + 可靠”,UDP 恰好“无连接 + 不可靠”(见 1.4 各层协议一览)。
- “应用用 UDP 就不可能可靠传输。”——错。可靠性可以由应用层自己做(TFTP 就自己确认、重传;HTTP/3 的 QUIC 也跑在 UDP 上)。
直接问服务类型的题不多,但它是很多题的“第一步判断”:2018-33 问哪个应用层协议可以使用传输层的无连接服务(DNS);2015-33、2009-40 问邮件、FTP 用的传输层协议;2025-39 用“UDP 一问一答只要 1 个 RTT、TCP 要先握手多 1 个 RTT”出计算题。判别方法:看到“一问一答、报文短、广播、还没有 IP 地址、实时性”想 UDP;看到“文件、网页、邮件、要求可靠”想 TCP。失效的情况:DNS 也可以用 TCP(应答超过 512 B、区域传送),所以题目问“只能用”时要小心。
- TCP 的“连接”是逻辑连接,只存在于两端主机;它与电路交换的“物理连接”、网络层虚电路的“沿途每个结点都记住的连接”都不同。
- 无连接 ≠ 无差错检测;面向连接 ≠ 一定按同一路径传输。
- 传输层的服务是给应用进程用的;网络层的服务(IP 只提供无连接的数据报服务)是给传输层用的,两层的服务类型不必相同。
端口号:给进程编的“房间号”
操作系统用进程号(PID)标识进程,但不同操作系统的进程号格式不同,而且每次启动都会变——拿它当“地址”没法让对方知道。所以 TCP/IP 用一个与操作系统无关的协议端口号(简称端口)来标识应用进程。
- 端口号 16 位,取值 0 ~ 65535,共 216 = 65536 个。
- 端口号只有本地意义:它只标识本主机上的进程。两台主机上的 80 端口毫无关系;要在因特网上找到一个进程,必须“IP 地址 + 端口号”一起给出。
- TCP 和 UDP 的端口号是各自独立的:TCP 的 53 号端口和 UDP 的 53 号端口可以属于不同进程。
为什么服务器要用固定的熟知端口?因为通信总是由客户发起的:客户必须事先知道服务器在哪个端口“等着”,就像大家都知道报警电话是 110。而服务器回信时,只要看客户发来的报文段里的源端口就行,所以客户端口可以临时选。
| 应用 | 端口 | 传输层 | 记忆方法 / 考点 |
|---|---|---|---|
| FTP | 21(控制) 20(数据,主动模式) | TCP | 两个连接:控制连接在整个会话期间一直保持,数据连接每传一个文件建一次(6.3 节) |
| SSH | 22 | TCP | 加密的远程登录,紧挨着 FTP |
| TELNET | 23 | TCP | 明文远程登录 |
| SMTP | 25 | TCP | 发邮件(客户 → 服务器、服务器 → 服务器) |
| DNS | 53 | UDP(查询) TCP(区域传送) | 一问一答用 UDP;应答超过 512 B 或主从服务器同步数据库时用 TCP |
| DHCP | 67(服务器) 68(客户) | UDP | 客户还没有 IP 地址,只能广播,不可能先建 TCP 连接(4.6 节) |
| TFTP | 69 | UDP | 简单文件传送,自己做确认重传 |
| HTTP | 80 | TCP | HTTP/3 改用基于 UDP 的 QUIC(拓展) |
| POP3 | 110 | TCP | 收邮件(下载到本地) |
| IMAP | 143 | TCP | 收邮件(在服务器上管理) |
| SNMP | 161 / 162 | UDP | 网管:161 收请求,162 收陷阱(trap)报文 |
| BGP | 179 | TCP | 路由协议里唯一用 TCP 的(4.8 节) |
| HTTPS | 443 | TCP | HTTP + TLS 加密 |
| RIP | 520 | UDP | 路由协议用 UDP 的那个 |
- 20 多号是“老牌 TCP 服务”:FTP 20/21、SSH 22、TELNET 23、SMTP 25,依次递增。
- DNS 53、DHCP 67/68、TFTP 69、SNMP 161、RIP 520 都用 UDP——共同点是“一问一答、报文短”或“还没有地址”。
- 80 → 443:HTTP 加密后换到 443;110 → 143:收邮件从 POP3 换成 IMAP。
复用与分用:两级“分拣”
复用(multiplexing):发送方的多个应用进程可以共用同一个传输层协议(TCP 或 UDP)传送数据——每个进程交下来的数据都加上带有端口号的首部,再一起交给 IP。分用(demultiplexing):接收方的传输层剥去首部后,根据目的端口号把数据交付给正确的进程。
其实分用分两级完成:IP 先看 IP 首部的协议字段(6 = TCP,17 = UDP)决定交给哪个传输层协议;TCP / UDP 再看目的端口决定交给哪个进程。这正好对应 1.4 节讲的服务访问点(SAP):网络层的 SAP 是协议字段,传输层的 SAP 是端口。
套接字:IP 地址 + 端口号
端口只有本地意义,要在整个因特网上唯一地标识一个进程(准确说是进程通信的一个端点),需要把 IP 地址和端口号拼在一起,叫套接字(socket):
每一条 TCP 连接唯一地被通信两端的两个套接字(即“源 IP、源端口、目的 IP、目的端口”这四元组)所确定。同一个套接字可以出现在多条连接里——Web 服务器的 (59.1.1.10 : 80) 同时和成千上万个客户连着,只要另一端不同,就是不同的连接。
在服务器 S 上抓到一个 TCP 报文段,首部前 4 个字节是 C3 51 00 50。
- TCP 首部的前 2 字节是源端口,后 2 字节是目的端口(UDP 也一样)。
- 源端口 0xC351 = 12 × 4096 + 3 × 256 + 5 × 16 + 1 = 50001:在 49152 ~ 65535 里,是客户的短暂端口。
- 目的端口 0x0050 = 80:熟知端口,HTTP。
- 结论:这是客户发给 Web 服务器的报文段。服务器回的报文段,源端口和目的端口正好对调(80 → 50001)。
更细一点(拓展,Kurose 教材的说法):UDP 的分用只看目的 IP + 目的端口,来自不同客户的数据报都交给同一个 UDP 套接字;TCP 服务器为每条连接创建一个新的套接字,分用时要看四元组。408 的口径简化为“分用看目的端口号”。
2018-39 问“接收方 UDP 分用时依据哪个字段”——目的端口号。命题角度还有:熟知端口号属于哪个范围、某个应用用 TCP 还是 UDP、端口号几位、一条 TCP 连接由什么确定。综合题里端口号常和 NAT 一起出现(2020-47:NAPT 要改源端口)。判别口诀:“交给谁”看目的,“谁发的”看源——网络层看 IP 地址,传输层看端口。
- 端口号是传输层的概念,写在 TCP / UDP 首部里,IP 首部里没有端口。
- “端口”在链路层设备(交换机端口)、路由器(接口)里指的是硬件接口,和传输层的协议端口完全是两回事。
- 客户端口不必是 49152 以上——很多操作系统用 1024 以上的任意空闲端口;考题说“短暂端口”时按 49152 ~ 65535 答。
- DNS 主要用 UDP,但不是只用 UDP;DHCP 只用 UDP。
选择题变式:考纲补充
5.1 还没有以它为主的真题。下面是针对考纲知识点自编的题,做完看“考点”回到对应的讲解。
- A. 端口号长度为 16 位
- B. 端口号只有本地意义,不同主机上相同的端口号互不相干
- C. 熟知端口号的范围是 0 ~ 1023
- D. TCP 和 UDP 的同一个端口号必须分配给同一个应用进程
展开解析
DTCP 和 UDP 的端口号各自独立,TCP 的 53 号端口和 UDP 的 53 号端口可以属于不同进程。A、B、C 都正确。
- A 不选正确:端口号 16 位,取值 0 ~ 65535。
- B 不选正确:端口号只标识本主机上的进程,两台主机上的 80 端口毫无关系。
- C 不选正确:熟知端口号是 0 ~ 1023,留给最常用的服务器程序。
- D 选错误:TCP 和 UDP 的端口号各自独立,TCP 53 和 UDP 53 可以属于不同进程。
考点:5.1 节“端口号:给进程编的房间号”。
- A. 双方的端口号
- B. 双方的 IP 地址
- C. 双方的 IP 地址和端口号(四元组)
- D. 目的 IP 地址和目的端口号
展开解析
C一条 TCP 连接由两端的套接字(源 IP、源端口、目的 IP、目的端口)唯一确定。只看端口号(A)区分不了来自不同主机的同一客户端口;所有连接的目的 IP 和目的端口(D)都相同。
- A 错只看端口号区分不了来自不同主机的同一客户端口(两台主机都可能用 50001)。
- B 错只看 IP 地址区分不了同一台主机开的多条连接(如浏览器的两个标签页)。
- C 对对:四元组唯一确定一条连接。
- D 错所有连接的目的 IP 和目的端口都是服务器的 (S, 80),完全相同,靠它们区分不了。
考点:5.1 节“套接字:IP 地址 + 端口号”。
5.2UDP:首部与检验和
UDP 为什么存在:快、轻、不建连接
问题:查一个域名的 IP 地址,只需要发一个问题、收一个回答。如果先花一个 RTT 建 TCP 连接、最后再花时间释放连接,时间就翻了几倍。视频通话时,迟到 1 秒的画面已经没用了,重传它反而会拖累后面的画面。这类应用更需要的是“快”,而不是“一个字节都不丢”。
写好地址和房间号,投进邮筒就走(无连接)。每张明信片独立投递,一张就是一张,邮局不会把两张合成一张,也不会把一张裁成两半(面向报文)。丢了邮局不负责,也不会通知你(尽最大努力交付)。哪里不像:明信片被雨水弄花了你未必看得出,而 UDP 有检验和,能发现“内容被改了”,发现后直接扔掉。
UDP 只在 IP 的数据报服务之上增加了很少一点功能:复用分用和差错检测(2014-39)。它的特点:
- 无连接:发送前不建立连接,没有握手的时延;发送方和接收方都不需要维护连接状态。
- 尽最大努力交付,即不保证可靠:检验和发现错误就丢弃,没有确认、没有重传。需要可靠的应用要在应用层自己做(如 TFTP、QUIC)。
- 面向报文:应用层交下来多长的报文,UDP 就照样加上首部发出去,不合并、不拆分,保留报文的边界。因此应用要选择合适的报文大小:太长了 IP 要分片,太短了首部开销比例大。
- 没有拥塞控制:网络拥塞时发送速率也不降低,适合实时应用(但可能加剧拥塞)。
- 支持一对一、一对多、多对一、多对多的交互通信(可以广播、多播;TCP 只能一对一)。
- 首部开销小:只有 8 字节(TCP 至少 20 字节)。
UDP 报文太长会怎样:UDP 不拆分报文,一个 3000 B 的用户数据报交给 IP,经过 MTU = 1500 B 的以太网时由 IP 分片(4.2 节)。任何一片丢失,目的主机都无法重组,整个用户数据报作废,而 UDP 又不重传——所以 DNS 等基于 UDP 的应用都尽量把报文控制在 512 B 左右,避免分片。
UDP 首部:8 字节、4 个字段
| 字段 | 是什么 | 怎么考 |
|---|---|---|
| 源端口 | 发送进程的端口;需要对方回信时填写,不需要时可全 0 | 分用不看它(2018-39 的干扰项) |
| 目的端口 | 接收进程的端口 | 分用的依据;目的端口没有对应进程时,接收方丢弃数据报并发 ICMP“端口不可达”(traceroute 就利用了这一点) |
| 长度 | UDP 用户数据报的总长度(首部 + 数据),单位字节 | 最小 8;最大 65535,但再扣掉 IP 首部 20 B,数据最多 65535 − 20 − 8 = 65507 B |
| 检验和 | 检测整个用户数据报(连同伪首部)在传输中有没有出错 | 计算方法见下;在 IPv4 中是可选的,全 0 表示“没算” |
跟我算:从 IP 首部推出 UDP 长度。抓到一个 IP 分组,首部第 1 字节 0x45(首部长度 5 × 4 = 20 B),总长度字段 0x0024 = 36 B,协议字段 17。那么 UDP 用户数据报长度 = 36 − 20 = 16 B(UDP 首部里的长度字段也应是 16),其中数据 16 − 8 = 8 B。抓包题里两个长度字段对得上,正好可以互相验证。
UDP 的面向报文和 TCP 的面向字节流,是两者最根本的区别之一,看图最清楚:
伪首部:检验和多管一件事
计算 UDP 检验和时,要在 UDP 用户数据报前面临时加一个 12 字节的伪首部。它取自 IP 首部的几个字段,只参与计算,既不向下传送,也不向上递交。
为什么要伪首部?UDP 首部里只有端口号,没有 IP 地址。把源、目的 IP 地址和协议号也算进检验和,接收方就能顺便核对“这个数据报确实是发给我的、确实是交给 UDP 的”——万一 IP 层把它误投到别的主机或别的协议,检验和就对不上。(代价是:NAT 改了 IP 地址,就必须重算 UDP / TCP 的检验和,4.5 节讲过。)
先用 4 位的小数字体会:算 1101 + 0110。
- 普通二进制相加:1101 + 0110 = 10011,结果有 5 位,最高位溢出了一个 1。
- 回卷:把溢出的 1 加回到最低位:0011 + 1 = 0100。
- 如果这就是全部数据,检验和 = 0100 取反 = 1011。
- 接收方把三个数(含检验和)全加起来:1101 + 0110 + 1011 = 1 1110,回卷 1110 + 1 = 1111,全 1 → 没发现错误。
为什么要“回卷”?4 位数满 16 进 1,把这个 1 加回最低位,相当于“满 15 归零”——反码求和其实就是除以 15(16 位时是 65535)取余数的加法:13 + 6 = 19,19 除以 15 余 4,正好是 0100。所以它和相加的顺序无关,可以先分组求和再合起来,也可以全部加完再一次性回卷(溢出几就加几)。
十六进制手算小技巧:一位十六进制 = 4 位二进制;逐位相加满 16 进 1(A = 10 … F = 15)。
检验和:跟我算一遍
- 发送方:检验和字段先填 0;在数据报前加上伪首部;数据是奇数个字节时末尾临时补一个全 0 字节(也不发送)。
- 把所有内容按 16 位一组做二进制反码求和(相加,最高位的进位回卷到最低位)。
- 把结果取反,填入检验和字段,丢掉伪首部和补的 0,发送。
- 接收方:同样加上伪首部(和需要时补的 0),把所有 16 位字连同检验和一起反码求和。结果全 1(取反后全 0)→ 没发现错误,交付;否则丢弃(可以上交应用并附上出错警告,但一般是直接丢弃)。
跟我算
第 1 步:确定长度。UDP 长度 = 8 + 3 = 11 = 0x000B。数据是奇数个字节,末尾补 00,凑成 4869、2100 两个字。
第 2 步:把要相加的 16 位字列出来(检验和字段先写 0000):
| 来源 | 内容 | 16 位字(十六进制) | 小计 |
|---|---|---|---|
| 伪首部 | 源 IP 192.168.1.10、目的 IP 192.168.1.1 | C0A8 010A C0A8 0101 | 18377 |
| 全 0 字节 + 协议号 17 | 0011 | ||
| UDP 长度 11 | 000B | ||
| UDP 首部 | 源端口 50000、目的端口 7、长度 11、检验和 0 | C350 0007 000B 0000 | C362 |
| 数据 | “Hi!” + 补的 00 | 4869 2100 | 6969 |
第 3 步:相加。18377 + C362 + 6969 = 2B042(十六进制)。结果超过 4 位十六进制,高位溢出了 2。
第 4 步:回卷。B042 + 2 = B044。
第 5 步:取反。B044 = 1011 0000 0100 0100,逐位取反 = 0100 1111 1011 1011 = 4FBB。检验和字段填 4FBB。
第 6 步:接收方验算。12 个字里把 0000 换成 4FBB 再相加:2B042 + 4FBB = 2FFFD,回卷 FFFD + 2 = FFFF,全 1,没有错。如果传输中 “H”(48)错成了 “I”(49),同样的计算得到 0100,不是全 1,接收方丢弃这个数据报。
UDP 规定检验和字段全 0 表示“发送方没有计算检验和”。万一真算出来是 0000 怎么办?例如所有字相加正好是 1234 + EDCB = FFFF,取反得 0000——这时发送 FFFF。在反码运算里 0000 和 FFFF 都表示“零”,接收方照常验算:1234 + EDCB + FFFF = 1 FFFE,回卷得 FFFF,全 1,照样通过。
- A. 0001 1111 0111 1011
- B. 0001 1111 0111 1100
- C. 1110 0000 1000 0011
- D. 1110 0000 1000 0100
展开解析
C反码求和:普通二进制相加,最高位的进位回卷加到最低位;全部加完后取反。
- 1011 1001 1011 0110 + 0110 0101 1100 0101 = 1 0001 1111 0111 1011(17 位,最高位进位 1)。
- 进位回卷:0001 1111 0111 1011 + 1 = 0001 1111 0111 1100。
- 取反:1110 0000 1000 0011。
- A 错只做了普通加法,丢掉了进位,也没有取反。
- B 错0001 1111 0111 1100 是相加、回卷之后的中间结果:回卷做了,但漏了最后一步取反(取反后才是 1110 0000 1000 0011)。
- C 对1110 0000 1000 0011。
- D 错丢掉进位后直接取反(A 的反码),漏了回卷加 1。
三步:相加 → 进位回卷 → 取反。接收方把检验和也加进去,结果全 1 才算无错。
这道题的四个选项正好对应四种“半途而废”:A 只做了加法(丢了进位、没取反),B 回卷了但没取反,D 丢了进位直接取反,只有 C 三步都做了。按 B9B6 + 65C5 = 1 1F7B → 回卷 1F7C → 取反 E083 = 1110 0000 1000 0011 验证一遍。
UDP 的 3 道选择题:2014-39 问 UDP 提供的服务(无连接、复用分用;能检错 ≠ 可靠);2018-39 问分用的字段;2024-39 考反码求和的计算。可能的变化:伪首部有哪些字段、有多长、发不发送;检验和覆盖哪些部分(伪首部 + 首部 + 数据);为什么全 0 要改存全 1;UDP 长度字段的含义;UDP 能否广播 / 多播。检验和的计算题一律用“相加 → 回卷 → 取反”三步,选项里的错误答案通常就是漏掉其中一步。
- IP 首部检验和只检验首部;UDP / TCP 检验和检验伪首部 + 首部 + 数据。
- 伪首部 12 B,不发送,也不计入 UDP 长度;补的全 0 字节也不发送。
- UDP 检验和在 IPv4 中可选(全 0 = 不用),TCP 检验和是必须的;IPv6 中 UDP 检验和也变成必须(因为 IPv6 首部没有检验和了,拓展)。
- 接收方验算的结果是全 1(不是全 0)才算正确;有的书说“取反后为 0”,是同一回事。
- 检验和只能发现错误,不能纠错,也不是百分之百能发现(两个错误互相抵消时就漏检)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 源端口
- B. 目的端口
- C. 长度
- D. 序号
展开解析
DUDP 首部只有 4 个字段:源端口、目的端口、长度、检验和。序号是 TCP 的。
- A 不选源端口是 UDP 首部的第一个字段(16 位),需要回信时填写。
- B 不选目的端口是 UDP 首部的字段,分用就靠它。
- C 不选长度是 UDP 首部的字段,表示首部加数据的总长度。
- D 选序号是 TCP 首部的字段,UDP 首部里没有,选它。
变化点:由“UDP 提供什么服务”换成“UDP 首部有什么”。
- A. FCDAH
- B. 0325H
- C. 0324H
- D. FCDBH
展开解析
AF0F0H + 1234H = 1 0324H,进位回卷得 0325H,取反得 FCDAH。
- A 对对:F0F0H + 1234H = 1 0324H,回卷 0325H,取反 FCDAH。
- B 错0325H 是相加、回卷后的中间结果,漏了最后一步取反。
- C 错0324H 只做了普通加法,丢掉了进位,也没有取反。
- D 错FCDBH 是丢掉进位直接取反(0324H 取反),漏了回卷加 1。
变化点:换一组数,步骤不变:相加 → 回卷 → 取反。
- A. 源 IP 地址
- B. 源端口号
- C. 目的 IP 地址
- D. 协议号
展开解析
B伪首部 12B:源 IP、目的 IP、全 0 字节、协议号 17、UDP 长度。端口号在 UDP 首部里,不在伪首部中。
- A 不选源 IP 地址是伪首部的第一个字段(取自 IP 首部)。
- B 选端口号在 UDP 首部里,不在伪首部中,选它。
- C 不选目的 IP 地址是伪首部的字段,用来核对数据报确实是发给本机的。
- D 不选协议号(UDP 为 17)是伪首部的字段,它前面还有一个全 0 字节。
变化点:由“分用看哪个字段”延伸到伪首部。
- A. 全 0
- B. 全 1
- C. 不填写,省略检验和字段
- D. 重新选择源端口后再计算
展开解析
BUDP 规定检验和字段全 0 表示“没有计算检验和”。算出全 0 时改填全 1:反码运算中全 0 和全 1 都表示零,接收方照常验算仍能通过。
- A 错填全 0 会被接收方理解为“发送方没有计算检验和”,不再验算。
- B 对对:改填全 1。
- C 错检验和字段是 UDP 首部固定的 2 字节,不能省略。
- D 错换源端口没有必要:反码运算中全 1 也表示零,直接改填全 1 就行。
考点:5.2 节“算出全 0 要存全 1”。
5.3TCP 的特点与报文段首部
TCP 的五个特点
问题:IP 会丢分组、会让分组乱序、会重复交付,可网页、文件、邮件要求一个字节都不能错。TCP 就是在这样一个“不可靠的网络”之上,造出一条“可靠的管道”。
打电话前要先拨号、对方接起来(建立连接),只能你们两个人说(点对点),两个人可以同时说话(全双工),挂电话也要互相说“再见”(释放连接)。再加上一本账:你说的每一个字都编了号,对方要报“我听到第几个字了”,没听到的你就重说(可靠)。哪里不像:电话线是真的接通了一条线路(电路交换),而 TCP 连接只是两端各自记着一些状态的逻辑连接,中间的路由器根本不知道这条“连接”存在。
- 面向连接:通信前先建立连接(三次握手),通信后释放连接(四次挥手)。
- 点对点:每条 TCP 连接只能有两个端点,所以 TCP 不支持广播和多播。
- 可靠交付:通过 TCP 连接传送的数据无差错、不丢失、不重复、按序到达。
- 全双工:两个方向可以同时传数据;双方都设有发送缓存和接收缓存。
- 面向字节流:把应用交下来的数据看成一串无结构的字节,每个字节都有序号;一个报文段装多少字节,由 TCP 根据对方的接收窗口和网络拥塞情况决定(见上一节的图)。
TCP 首部:逐字段读懂
TCP 的全部功能都体现在首部字段里。首部前 20 字节固定,后面是长度可变的选项(最长 40 字节),所以首部长度为 20 ~ 60 字节,必须是 4 字节的整数倍。
| 字段 | 是什么 | 怎么考 |
|---|---|---|
| 源端口、目的端口 | 各 16 位,与 UDP 相同 | 抓包题从这里认出 HTTP(80)、FTP(21)等 |
| 序号 seq(32 位) | 本报文段所发送数据的第一个字节的序号。序号范围 0 ~ 232 − 1,用完后从 0 重新开始(模 232) | seq = 301、带 100 B 数据 → 这些字节编号 301 ~ 400,下一个报文段 seq = 401 |
| 确认号 ack(32 位) | 期望收到对方下一个报文段数据的第一个字节的序号。ack = N 表示到 N − 1 为止的所有数据都已正确收到 | ack = 对方 seq + 对方数据长度;中间缺数据就停在缺口处(累积确认,5.5 节) |
| 数据偏移(4 位) | 即首部长度:TCP 报文段的数据部分离报文段起点有多远。单位 4 字节 | 最小 5(20 B),最大 15(60 B);首部字节 0x50 的高 4 位 5 → 20 B。“首部长度 32 B” → 填 8 |
| 保留(6 位) | 今后使用,目前置 0 | 新标准用掉了其中几位做拥塞通知(拓展),考试按 6 位保留答 |
| 6 个控制位 | URG、ACK、PSH、RST、SYN、FIN,各 1 位 | 下面单独讲;握手挥手各报文的标志位是选择题高频点 |
| 窗口(16 位) | 发送本报文段一方的接收窗口:从本报文段的确认号算起,我还能接收多少字节 | 它是给对方的“发送许可”;最大 65535 B(不用窗口扩大选项时) |
| 检验和(16 位) | 检验首部 + 数据,计算方法同 UDP,伪首部协议号为 6 | TCP 的检验和是必须的(UDP 可选) |
| 紧急指针(16 位) | URG = 1 时有效,指出本报文段中紧急数据有多少字节(紧急数据放在数据部分的最前面) | 见下文的例子 |
| 选项 | MSS、窗口扩大、时间戳、SACK 等 | MSS 指数据部分的最大长度,不含 TCP 首部 |
跟我读一个 TCP 首部(抓包题的基本功)
C3 51 00 50 00 00 27 11 00 00 13 89 50 18 FF FF 7E 21 00 00
(1) 这是谁发给谁的?(2) 序号、确认号是多少?哪些控制位为 1?(3) 携带了多少字节数据?服务器对它的确认号应是多少?
跟我读
| 字节 | 内容 | 字段与换算 |
|---|---|---|
| 0 ~ 1 | C3 51 | 源端口 = 0xC351 = 50001(客户的短暂端口) |
| 2 ~ 3 | 00 50 | 目的端口 = 0x0050 = 80(HTTP) |
| 4 ~ 7 | 00 00 27 11 | 序号 = 0x2711 = 2 × 4096 + 7 × 256 + 1 × 16 + 1 = 10001 |
| 8 ~ 11 | 00 00 13 89 | 确认号 = 0x1389 = 4096 + 3 × 256 + 8 × 16 + 9 = 5001 |
| 12 | 50 | 0101 0000:高 4 位是数据偏移 5 → 首部 5 × 4 = 20 B(没有选项);低 4 位是保留位 |
| 13 | 18 | 0001 1000:最高 2 位是保留位,低 6 位依次是 URG ACK PSH RST SYN FIN = 0 1 1 0 0 0 → ACK = 1,PSH = 1 |
| 14 ~ 15 | FF FF | 窗口 = 65535 B(客户告诉服务器:我还能收 65535 字节) |
| 16 ~ 17 | 7E 21 | 检验和(接收方连同伪首部验算用) |
| 18 ~ 19 | 00 00 | 紧急指针 0(URG = 0,本来也无效) |
(1) 客户(端口 50001)发给 Web 服务器(端口 80),是一个携带 HTTP 请求数据的报文段(PSH = 1:请对方尽快交给应用)。
(2) seq = 10001,ack = 5001(客户已经收到服务器发来的、编号到 5000 为止的全部数据)。
(3) IP 总长度 0x0228 = 552 B,减去 IP 首部 20 B 和 TCP 首部 20 B,数据 = 512 B,编号 10001 ~ 10512。服务器的确认号 = 10001 + 512 = 10513,这也是客户下一个报文段的序号。
| 十六进制 | 二进制(低 6 位:U A P R S F) | 含义 | 出现在 |
|---|---|---|---|
| 02 | 00 0000 10 | SYN | 第一次握手 |
| 12 | 00 0100 10 | SYN + ACK | 第二次握手 |
| 10 | 00 0100 00 | ACK | 第三次握手、纯确认、大多数数据段 |
| 18 | 00 0110 00 | ACK + PSH | 交互式数据(HTTP 请求、键盘输入) |
| 11 | 00 0100 01 | FIN + ACK | 挥手的 FIN |
| 14 | 00 0101 00 | RST + ACK | 拒绝连接 / 异常终止 |
记法:从低位往高位,FIN = 1、SYN = 2、RST = 4、PSH = 8、ACK = 0x10、URG = 0x20,几个标志同时为 1 就把数加起来。
六个控制位与紧急指针
| 控制位 | 置 1 的含义 | 典型场景 / 考点 |
|---|---|---|
| SYN | 同步序号:这是连接请求(SYN = 1,ACK = 0)或连接接受(SYN = 1,ACK = 1)报文段 | 只出现在前两次握手;不带数据也消耗 1 个序号 |
| ACK | 确认号字段有效 | 连接建立后的所有报文段 ACK 都为 1;只有第一次握手的 SYN 报文段 ACK = 0 |
| FIN | 本方数据已发完,请求释放(本方向的)连接 | 不带数据也消耗 1 个序号 |
| RST | 连接出现严重差错(主机崩溃等),必须释放连接再重建;也用来拒绝非法报文段或拒绝打开连接 | 对一个没有进程监听的端口发 SYN,会收到 RST;RST 报文段不需要确认,连接立即作废 |
| PSH | 推送:请接收方尽快把数据交付给应用,不必等缓存填满 | 交互式应用(敲一个命令就想马上看到结果) |
| URG | 本报文段有紧急数据,应尽快传送;紧急指针字段有效 | 例如用户中途要取消一个正在运行的程序(Ctrl + C) |
PSH 和 URG 别混:PSH 是“这批数据请尽快交给应用”,数据仍按顺序排队,只是接收方不必等缓存攒满;URG 是“这里有要插队的数据”,紧急数据要放在报文段数据的最前面,发送方应尽快发送,接收方的应用可以先处理它。一个管“交付时机”,一个管“优先级”。
紧急指针跟我算:一个报文段 seq = 1001,携带 100 字节数据,URG = 1、紧急指针 = 20。紧急数据放在数据部分最前面,共 20 字节,即编号 1001 ~ 1020;1021 ~ 1100 是普通数据。注意:即使窗口为 0,紧急数据也可以发送;紧急指针只说明紧急数据在哪里结束,接收方怎么处理由应用决定。
选项、MSS 与传输效率
TCP 最初只有一个选项 MSS,后来陆续增加了几个。每个选项都是“类型 + 长度 + 值”的格式,最后用填充补齐到 4 字节的整数倍。
| 选项 | 作用 | 要点 |
|---|---|---|
| MSS(最大报文段长度) | 告诉对方:我能接收的报文段中,数据部分最长多少字节 | 只在 SYN 报文段中出现;默认 536 B。以太网 MTU 1500 − IP 首部 20 − TCP 首部 20 = 1460 B |
| 窗口扩大 | 把 16 位的窗口值左移 S 位(S ≤ 14) | 窗口最大可达 65535 × 214 ≈ 1 GB;只在 SYN 中协商 |
| 时间戳 | ① 精确测量往返时间 RTT;② 防止序号绕回(PAWS) | 高速网络中序号很快用完一圈,时间戳帮助区分新旧报文段 |
| SACK(选择确认) | 报告“收到了哪些不连续的字节块” | 拓展,见 5.5 节 |
MSS 为什么不能太大也不能太小?太小:每个报文段至少 40 B 首部(TCP 20 + IP 20),有效数据比例太低;太大:IP 层要分片,任何一片丢失整个报文段都要重传。最理想的是让一个 TCP 报文段刚好装满一个链路层帧而不分片。
以太网帧的数据部分最多 1500 B(MTU)。TCP 用 MSS = 1460 B 发送时,一帧从外到内是:以太网首部 14 B + IP 首部 20 B + TCP 首部 20 B + 数据 1460 B + 帧检验序列 4 B = 1518 B。真正的应用数据占 1460 ÷ 1518 ≈ 96.2%;若再算上每帧前面的前导码 8 B 和帧间最小间隔 12 B,则为 1460 ÷ 1538 ≈ 94.9%。反过来,若每个报文段只带 1 字节数据,效率就惨不忍睹——这正是后面 Nagle 算法要解决的问题。
传输效率 = 应用层数据 ÷ 整个报文。题目问“最大”效率,就取首部最短的情况:
- UDP:首部固定 8 B → 12 ÷ (12 + 8) = 60%。
- TCP:首部最短 20 B → 12 ÷ (12 + 20) = 37.5%;若问最小效率,按首部 60 B 算:12 ÷ 72 ≈ 16.7%。
- 变化:若把 IP 首部(20 B)也算进去,UDP 为 12 ÷ 40 = 30%,TCP 为 12 ÷ 52 ≈ 23.1%。审题时看清“以谁为分母”。
- A. 37.5%,16.7%
- B. 37.5%,37.5%
- C. 60.0%,16.7%
- D. 60.0%,37.5%
展开解析
D传输效率 = 应用层数据 ÷ 整个报文段。“最大”效率就取首部最短的情况。
- UDP 首部固定 8B:12 ÷ (12 + 8) = 60%。
- TCP 首部最短 20B:12 ÷ (12 + 20) = 37.5%。
- A 错UDP 用了 37.5%(把 UDP 首部当成 20B);TCP 的 16.7% = 12 ÷ 72,是按最长首部 60B 算的,那是最小效率。
- B 错B 的 TCP 37.5% 对了,UDP 却也写 37.5% = 12 ÷ 32:把 UDP 首部当成了 TCP 的 20B;UDP 首部固定 8B,应为 12 ÷ 20 = 60%。
- C 错C 的 UDP 60% 对了,TCP 16.7% = 12 ÷ 72 是按最长首部 60B 算的最小效率;题目问最大效率,要取最短首部 20B:12 ÷ 32 = 37.5%。
- D 对60.0%,37.5%。
UDP 首部 8B;TCP 首部 20~60B;IP 首部 20~60B。
窗口只有 16 位:一个 RTT 最多只能发 65535 B。若 RTT = 100 ms,则吞吐量最多 65535 × 8 ÷ 0.1 ≈ 5.24 Mb/s——哪怕链路有 1 Gb/s 也用不上。窗口扩大选项就是为此设计的。(2016-41(3) 求“平均数据传输速率”用的也是“一个 RTT 发一个窗口”的思路。)
序号只有 32 位:232 B = 4 GB。在 1 Gb/s 的链路上,232 × 8 ÷ 109 ≈ 34.4 秒序号就用完一圈,比报文段可能在网络中存活的时间(MSL,常取 2 分钟)还短,旧报文段可能与新报文段序号相同——时间戳选项(PAWS)就是用来区分它们的。在 10 Mb/s 的链路上则要约 57 分钟才绕一圈,不成问题。
选择题直接考首部的只有 2021-39(首部长度 → 传输效率),但首部字段是 5.4~5.6 所有计算的基础:序号、确认号按字节编号,窗口以字节为单位,数据偏移以 4 字节为单位。综合题 2011-47、2012-47 给出十六进制抓包,要求从 TCP 首部读出端口、序号、标志位——按上面“跟我读”的表格逐字节切即可。可能的变化:问 SYN / FIN 是否消耗序号、哪个标志位在连接建立后恒为 1、首部最长多少、MSS 是否包含首部。
- TCP 的序号是给字节编的,不是给报文段编的(链路层的 GBN / SR 才给帧编号)。
- 首部里的“窗口”是发送这个报文段的一方的接收窗口,是给对方看的;不是自己的发送窗口。
- 三个“单位”别混:IP 首部长度 4 B、IP 片偏移 8 B、TCP 数据偏移 4 B。
- MSS 不含首部:MSS = 1000 B 的报文段,整个报文段至少 1020 B。
- 纯 ACK(不带数据、不带 SYN / FIN)不消耗序号,它的 seq 就是“下一个要发的字节的编号”。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 71.4%,50.0%
- B. 71.4%,25.0%
- C. 50.0%,50.0%
- D. 80.0%,50.0%
展开解析
AUDP:20 ÷ (20 + 8) ≈ 71.4%;TCP 最短首部 20B:20 ÷ 40 = 50%。
- A 对对:20 ÷ 28 ≈ 71.4%,20 ÷ 40 = 50%。
- B 错TCP 的 25% = 20 ÷ 80,是按最长首部 60B 算的最小效率;题目问最大效率,取最短首部 20B。
- C 错UDP 也按 20B 首部算了;UDP 首部固定 8B,20 ÷ 28 ≈ 71.4%。
- D 错80% = 20 ÷ 25,相当于把 UDP 首部算成了 5B;UDP 首部固定 8B。
变化点:数据从 12B 改为 20B。
- A. 2001 ~ 2050
- B. 2051 ~ 2200
- C. 2001 ~ 2200
- D. 2050 ~ 2200
展开解析
A紧急数据放在数据部分的最前面,紧急指针 50 表示共 50 字节:2001 ~ 2050;其后的 2051 ~ 2200 是普通数据。
- A 对对:紧急数据在最前面,共 50 字节。
- B 错2051 ~ 2200 是紧急数据之后的普通数据;紧急数据放在数据部分的最前面。
- C 错2001 ~ 2200 是全部 200 字节数据,紧急指针 50 只标出了其中前 50 字节。
- D 错把紧急指针当成了紧急数据的起点;紧急指针表示紧急数据的长度,紧急数据从 2001 开始。
考点:5.3 节“六个控制位与紧急指针”。
- A. 8 B
- B. 16 B
- C. 32 B
- D. 64 B
展开解析
C数据偏移以 4 字节为单位:1000(二进制)= 8,首部长度 8 × 4 = 32 B,其中固定部分 20 B、选项 12 B。
- A 错8 是数据偏移字段的值,单位是 4 字节,还要乘 4。
- B 错16 = 8 × 2:单位当成了 2 字节;数据偏移以 4 字节为单位,8 × 4 = 32B。
- C 对对:8 × 4 = 32B。
- D 错64 = 8 × 8:单位当成了 8 字节(那是 IP 片偏移的单位);TCP 数据偏移以 4 字节为单位。
考点:5.3 节“TCP 首部:逐字段读懂”。
5.4TCP 连接管理:三次握手、四次挥手
TCP 连接的建立和释放是每一次 TCP 通信必经的过程。建立连接要解决三个问题:① 让双方都确知对方存在、并且愿意通信;② 协商参数(MSS、窗口扩大、是否用 SACK 等);③ 双方各自分配资源(缓存、变量、传输控制块 TCB),并把初始序号告诉对方。主动发起连接的一方叫客户,被动等待连接的一方叫服务器。
三次握手
- 服务器先创建传输控制块 TCB,进入 LISTEN,等待客户的连接请求。
- 第一次:客户发连接请求报文段,SYN = 1,选一个初始序号 seq = x,进入 SYN-SENT(同步已发送)。
- 第二次:服务器同意,发回确认:SYN = 1、ACK = 1,ack = x + 1,并选自己的初始序号 seq = y,进入 SYN-RCVD(同步已收到)。
- 第三次:客户收到后再发确认:ACK = 1,seq = x + 1,ack = y + 1,进入 ESTABLISHED;服务器收到后也进入 ESTABLISHED。
- SYN = 1 的报文段(第一、二次握手)不能携带数据,但要消耗掉一个序号。FIN 报文段也一样:即使不带数据,也消耗一个序号。
- ACK 报文段(第三次握手)可以携带数据;如果不携带数据,就不消耗序号。所以第三次握手的 seq = x + 1,紧接着发的第一个数据字节的序号仍是 x + 1。
- 为什么 SYN、FIN 要占一个序号?因为它们必须被对方确认,而 TCP 的确认是按序号进行的:ack = x + 1 的意思就是“序号 x(那个 SYN)我收到了”。纯 ACK 不需要被确认,所以不占序号。
口径:RFC 并不禁止 SYN 报文段携带数据(例如 TCP Fast Open),但王道、谢希仁教材和历年真题都按“SYN 不能携带数据”作答。
客户 A 选初始序号 1200,服务器 B 选初始序号 4600。握手后 A 发送 500 字节数据。
| 报文段 | 方向 | SYN | ACK | seq | ack | 为什么 |
|---|---|---|---|---|---|---|
| ① | A → B | 1 | 0 | 1200 | (无效) | A 的初始序号 |
| ② | B → A | 1 | 1 | 4600 | 1201 | 1200 被 SYN 占用,期望下一个是 1201 |
| ③ | A → B | 0 | 1 | 1201 | 4601 | 4600 被 B 的 SYN 占用;③ 不带数据,不占序号 |
| 数据 | A → B | 0 | 1 | 1201 | 4601 | ③ 没占序号,数据仍从 1201 开始,编号 1201 ~ 1700 |
| 确认 | B → A | 0 | 1 | 4601 | 1701 | B 不发数据,seq 一直停在 4601 |
若 ③ 本身就带上这 500 字节,则 ③ 的 seq = 1201、ack = 4601,下一个数据段从 1701 开始——结果一样。
- A.(SYN = 0,ACK = 0,seq = 11221,ack = 11221)
- B.(SYN = 1,ACK = 1,seq = 11220,ack = 11220)
- C.(SYN = 1,ACK = 1,seq = 11221,ack = 11221)
- D.(SYN = 0,ACK = 0,seq = 11220,ack = 11220)
展开解析
C乙同意建立连接,回的是第二次握手:SYN = 1、ACK = 1,确认号 = 甲的初始序号 + 1 = 11221;自己的初始序号 seq 由乙任意选取。
- A 错SYN、ACK 都必须为 1。
- B 错确认号应为 11220 + 1 = 11221(SYN 消耗一个序号)。
- C 对SYN = 1,ACK = 1,ack = 11221;seq = 11221 是乙随意选的一个初始序号,可以。
- D 错SYN、ACK 都为 0,确认号也不对。
第二次握手:SYN = 1,ACK = 1,ack = x + 1,seq = y(任选)。
- A. 2018
- B. 2019
- C. 2046
- D. 2047
展开解析
D第三次握手是甲对乙的 SYN 的确认,确认号 = 乙的初始序号 + 1 = 2046 + 1 = 2047。
- A 错2018 是甲自己的初始序号(第一次握手的 seq)。
- B 错2019 是第二次握手中乙给甲的确认号。
- C 错2046 是乙的初始序号,忘了加 1。
- D 对2047。
确认号永远是“对方的序号 + 对方占用的长度”;SYN 占 1。
- 服务器主机可达,但目的端口上没有进程在监听:服务器回 RST(上一节的图)。
- 目的主机或网络不可达:路由器回 ICMP 终点不可达报文。
- SYN 或 SYN + ACK 丢失:客户超时重传 SYN,重试若干次(间隔逐次加倍)仍不成功就放弃,应用得到“连接超时”的错误。
为什么是三次,不是两次
直觉上,“A 请求、B 同意”两次就够了。问题出在网络会延迟报文段:A 早先发出的一个连接请求在某个结点滞留了很久,等它终于到达 B 时,A 早就不想用它了。
第三次握手还有一个作用:同步双方的初始序号。第二次握手只确认了 A 的序号 x 被 B 收到;B 的序号 y 是否被 A 收到,要靠第三次握手的 ack = y + 1 来确认。双方都知道“自己的初始序号对方已经知道了”,后面的数据才能正确编号和确认。
- ① 丢失:A 超时重传 SYN。
- ② 丢失:A 等不到确认,超时重传 SYN;B 等不到第三次握手,也会超时重传 SYN + ACK。
- ③ 丢失:B 超时重传 SYN + ACK。但若 A 已经开始发数据(ACK = 1、ack = y + 1),B 收到数据段时就知道连接已建立。
SYN 洪泛攻击
服务器在收到第一次握手时就为连接分配资源,进入 SYN-RCVD,等第三次握手。这种“握了一半”的连接叫半连接。攻击者利用这一点:用伪造的源 IP 地址发大量 SYN,却从不完成第三次握手。
防御办法:缩短 SYN-RCVD 的等待时间、加大半连接队列、用防火墙过滤可疑 SYN;拓展 SYN cookie:服务器收到 SYN 时先不分配资源,而是把连接信息(对方地址、端口等)经过加密运算编进自己的初始序号 y 里发回去;只有收到 ack = y + 1 的合法第三次握手时,才根据 y 还原信息、真正分配资源——伪造地址的攻击者收不到 y,也就完不成握手。
四次挥手
TCP 是全双工的,两个方向要分别关闭。一方发 FIN 只表示“我没有数据要发了”,对方仍可以继续发——所以要四次:每个方向一个 FIN、一个 ACK。
- 第一次:A 的应用通知 TCP 关闭,A 发 FIN = 1、seq = u 的报文段,进入 FIN-WAIT-1(终止等待 1)。
- 第二次:B 收到 FIN,立即回确认 ack = u + 1,进入 CLOSE-WAIT(关闭等待),并通知自己的应用。A 收到确认后进入 FIN-WAIT-2,等 B 的 FIN。此时连接处于半关闭:A → B 方向已关,B → A 方向还开着。
- 第三次:B 的数据发完后,发 FIN = 1、ACK = 1、seq = w、ack = u + 1,进入 LAST-ACK(最后确认)。
- 第四次:A 收到 FIN 后回 ACK = 1、seq = u + 1、ack = w + 1,进入 TIME-WAIT(时间等待),等 2MSL 后进入 CLOSED。B 收到这个确认就进入 CLOSED。
建立连接时,服务器收到 SYN 后,“同意”(ACK)和“我的初始序号”(SYN)可以同时给出,所以第二次握手把 SYN 和 ACK 合在一个报文段里。释放连接时,B 收到 A 的 FIN 只说明“A 不再发了”,B 自己可能还有数据没发完:B 要先回 ACK,等自己的应用把数据发完、决定关闭时才能发 FIN——ACK 和 FIN 之间隔着一段不确定的时间,一般不能合并,于是成了四次。B 正好没有数据要发时,二者也可以合并(下面 2022-39 的“至少”就是这种情况)。
接着上面的例子:A 的 500 字节(1201 ~ 1700)已被确认;B 一直没发数据。现在 A 先关闭,B 在收到 FIN 后又发了 300 字节的处理结果,然后关闭。
| 报文段 | 方向 | 标志 | seq | ack | 为什么 |
|---|---|---|---|---|---|
| ① | A → B | FIN、ACK | 1701 | 4601 | A 的数据到 1700 为止,FIN 占 1701 |
| ② | B → A | ACK | 4601 | 1702 | FIN 占了 1701,期望 1702 |
| 数据 | B → A | ACK | 4601 | 1702 | B 的 300 字节编号 4601 ~ 4900(② 是纯 ACK,不占序号) |
| 确认 | A → B | ACK | 1702 | 4901 | A 在 FIN-WAIT-2 中照样确认数据 |
| ③ | B → A | FIN、ACK | 4901 | 1702 | B 的 FIN 占 4901 |
| ④ | A → B | ACK | 1702 | 4902 | A 进入 TIME-WAIT |
验算数据量:A 发了 FIN 序号 − (SYN 序号 + 1) = 1701 − 1201 = 500 字节;B 发了 4901 − 4601 = 300 字节(2020-39 就是这个公式)。
- A. 4002
- B. 4001
- C. 4000
- D. 3999
展开解析
CSYN 占用序号 1000,数据从 1001 开始编号;FIN 的序号 5001 表示数据的最后一个字节是 5000。
- 数据字节:1001 ~ 5000。
- 共 5000 − 1001 + 1 = 4000 字节。
- A 错4002:多算了 SYN 和 FIN 两个序号。
- B 错4001 = 5001 − 1000:把 SYN 占用的那个序号也算成了数据。
- C 对4000。
- D 错3999 = 5000 − 1001:用末字节减首字节时忘了 + 1;数据占 1001 ~ 5000,共 5000 − 1001 + 1 = 4000 字节。
数据量 = FIN 的序号 − (SYN 的序号 + 1)。
- A. CLOSE_WAIT
- B. TIME_WAIT
- C. FIN_WAIT_1
- D. FIN_WAIT_2
展开解析
B主动关闭方(客户)的状态:发 FIN → FIN-WAIT-1;收到 ACK → FIN-WAIT-2;收到对方 FIN 并回 ACK → TIME-WAIT;等 2MSL → CLOSED。
- A 错CLOSE-WAIT 是被动关闭方(服务器)收到 FIN 并回 ACK 后的状态。
- B 对TIME-WAIT。
- C 错FIN-WAIT-1 是客户刚发出 FIN 时的状态。
- D 错FIN-WAIT-2 是客户收到对自己 FIN 的 ACK 后的状态。
主动方:FIN-WAIT-1 → FIN-WAIT-2 → TIME-WAIT → CLOSED;被动方:CLOSE-WAIT → LAST-ACK → CLOSED。
半关闭有实际用处:比如客户把一个计算任务的全部输入上传给服务器后,就发 FIN 表示“输入完了”;服务器读到输入结束,才开始计算,算完把结果发回,再发自己的 FIN。如果“我发完”就等于“整个连接断开”,服务器就没法把结果送回来了。
TIME-WAIT 为什么要等 2MSL
MSL(最长报文段寿命):一个报文段在网络中能存活的最长时间,超过就被丢弃。RFC 793 建议 2 分钟,实际常用 30 秒、1 分钟等。A 发完最后一个 ACK 后不立即关闭,而是等 2MSL,理由有两个:
- 保证最后一个 ACK 能到达 B。这个 ACK 可能丢失,B 收不到就会超时重传 FIN;A 还在 TIME-WAIT,就能收到重传的 FIN、重发 ACK 并重新计时。如果 A 已经关闭,就不会理睬重传的 FIN,B 永远无法正常关闭。
- 防止“已失效的报文段”出现在新连接中。等 2MSL,本连接持续期间产生的所有报文段都会从网络中消失,下一个用同样四元组建立的新连接就不会收到上一个连接的旧报文段。
“至少”的情况:B 收到 FIN 时自己也没有数据要发,立即把 ACK 和 FIN 合成一个报文段发回(第 2、3 次挥手合并)。忽略发送时延,从 A 发 FIN 算起:
| 时刻 | 事件 |
|---|---|
| 0 | A 发 FIN,进入 FIN-WAIT-1 |
| 0.5 RTT | B 收到,立即发 ACK + FIN,进入 LAST-ACK |
| 1 RTT | A 收到,发最后的 ACK,进入 TIME-WAIT |
| 1.5 RTT | B 收到最后的 ACK,B 关闭 |
| 1 RTT + 2MSL | A 关闭 |
2022-39:RTT = 50 ms,MSL = 800 ms → A 关闭于 50 + 1600 = 1650 ms,B 关闭于 75 ms。
- A. 850ms,50ms
- B. 1650ms,50ms
- C. 850ms,75ms
- D. 1650ms,75ms
展开解析
D“至少”:S 收到 C 的 FIN 后立即把 ACK 和 FIN 一起发回(第 2、3 次挥手合并)。
- 0:C 发 FIN。25ms:S 收到,立即发 ACK + FIN。
- 50ms(1 RTT):C 收到,发出最后的 ACK,进入 TIME-WAIT,再等 2MSL = 1600ms → C 在 1650ms 关闭。
- 75ms(1.5 RTT):S 收到最后的 ACK → S 在 75ms 关闭。
- A 错C 只等了 1 个 MSL;S 应在收到最后的 ACK(75ms)时关闭,不是 50ms。
- B 错C 对了,S 的时间少算了半个 RTT。
- C 错S 对了,C 只等了 1 个 MSL。
- D 对1650ms,75ms。
主动方:1 RTT + 2MSL;被动方:1.5 RTT。
H 向服务器发送 7000 B,MSS = 1000 B,RTT = 20 ms,MSL = 1 s,慢开始门限很大,接收窗口足够大,忽略发送时延。H 数据发完、全部被确认后首先断开连接。求从 H 请求建立连接到 H 进入 CLOSED 至少要多久。
| 时刻 | 事件 | cwnd |
|---|---|---|
| 0 | H 发 SYN | — |
| 1 RTT | 收到 SYN + ACK;发第三次握手的 ACK,同时发第 1 个数据段(第三次握手可以携带数据) | 1 |
| 2 RTT | 第 1 段被确认;发第 2、3 段 | 2 |
| 3 RTT | 第 2、3 段被确认;发第 4 ~ 7 段(共 7 段,全部发完) | 4 |
| 4 RTT | 第 4 ~ 7 段被确认;H 发 FIN | — |
| 5 RTT | 收到服务器的 ACK + FIN,发最后的 ACK,进入 TIME-WAIT | — |
| 5 RTT + 2MSL | H 进入 CLOSED | — |
总时间 = 5 × 20 ms + 2 × 1 s = 2.1 s。服务器则在 5.5 RTT = 110 ms 时关闭。套用到 2024-38(3000 B = 3 段:1 + 2,数据只用 2 个 RTT):4 RTT + 2MSL = 0.04 s + 60 s = 60.04 s。
口径:真题把“报文传输结束”理解为数据全部被确认,然后才发 FIN(所以不选 60.03 s)。数轮次时,“第 k 轮发出的段在下一个 RTT 时刻被确认”。
- A. 30.03s
- B. 30.04s
- C. 60.03s
- D. 60.04s
展开解析
D分三段计时(忽略发送时延)。
- 建立连接:SYN 发出到收到 SYN + ACK,1 RTT。第三次握手的 ACK 可以和第一个数据段一起发。
- 传数据:3000B = 3 个 MSS。慢开始 cwnd = 1:第 1 轮发 1000B,第 2 轮 cwnd = 2 发 2000B,共 2 RTT。
- 释放连接:H 发 FIN,服务器立即回 ACK + FIN,1 RTT 后 H 回最后的 ACK,进入 TIME-WAIT 等 2MSL。
- 合计 4 RTT + 2MSL = 0.04s + 60s = 60.04s。
- A 错30.03s = 3 RTT + 1MSL:TIME-WAIT 只等了 1 个 MSL,数据传输也少算了 1 RTT。
- B 错30.04s = 4 RTT + 1MSL:RTT 部分算对了,但 TIME-WAIT 要等 2MSL = 60s,只等了 1 个 MSL。
- C 错60.03s = 3 RTT + 2MSL:数据只算了 1 RTT,忽略了慢开始从 cwnd = 1 开始。
- D 对60.04s。
建立 1 RTT + 数据(按慢开始数轮次)+ 释放 1 RTT + 2MSL。
TCP 有限状态机:11 个状态一张图
前面的握手、挥手图都是“按时间”画的;状态机则是“按状态”画的:每个方框是一个状态,每条箭头写着“收到什么 / 发出什么”。客户和服务器走的是图中两条不同的主路径。
客户进程处于 CLOSED,还没有连接。
应用请求连接(主动打开),TCP 发出 SYN(seq = x),进入 SYN-SENT。
收到服务器的 SYN + ACK,回一个 ACK(第三次握手),进入 ESTABLISHED,可以收发数据了。
数据发完,应用请求关闭(主动关闭),发 FIN,进入 FIN-WAIT-1。
收到对 FIN 的确认,进入 FIN-WAIT-2。这时处于半关闭:自己不再发数据,但还要接收并确认对方的数据。
收到对方的 FIN,回 ACK,进入 TIME-WAIT(2021-38 问的就是这一步)。
等待 2MSL 后进入 CLOSED,连接彻底释放。
服务器进程创建传输控制块,被动打开,进入 LISTEN,等待连接请求。
收到 SYN,回 SYN + ACK,进入 SYN-RCVD。SYN 洪泛攻击就是让大量“半连接”停在这里。
收到第三次握手的 ACK,进入 ESTABLISHED。
收到客户的 FIN,回 ACK,进入 CLOSE-WAIT,并通知应用“对方不会再发数据了”;自己仍可以继续发数据。
应用的数据发完,请求关闭,发 FIN,进入 LAST-ACK。
收到最后的 ACK,立即进入 CLOSED——被动关闭的一方不用等 2MSL。
A 发 FIN,进入 FIN-WAIT-1。
B 收到 FIN 时自己也没有数据要发,把 ACK 和 FIN 合成一个报文段发回。A 收到 FIN + ACK,回 ACK,直接进入 TIME-WAIT,跳过了 FIN-WAIT-2。
等 2MSL 后关闭。2022-39、2024-38 算“至少”时间走的就是这条路:A 在 1 RTT 时进入 TIME-WAIT。
双方几乎同时请求关闭,各自发出 FIN,都进入 FIN-WAIT-1。
还没等到对自己 FIN 的确认,先收到了对方的 FIN:回 ACK,进入 CLOSING(双方都在关闭)。
收到对自己 FIN 的确认,进入 TIME-WAIT。
等 2MSL 后关闭。这种情况下两边都要经历 TIME-WAIT。
| 当前状态 | 收到 / 发生 | 发出 | 进入 | 谁走这条 |
|---|---|---|---|---|
| CLOSED | 应用主动打开 | SYN | SYN-SENT | 客户 |
| CLOSED | 应用被动打开 | — | LISTEN | 服务器 |
| LISTEN | SYN | SYN + ACK | SYN-RCVD | 服务器 |
| SYN-SENT | SYN + ACK | ACK | ESTABLISHED | 客户 |
| SYN-RCVD | ACK | — | ESTABLISHED | 服务器 |
| ESTABLISHED | 应用关闭 | FIN | FIN-WAIT-1 | 主动关闭方 |
| ESTABLISHED | FIN | ACK | CLOSE-WAIT | 被动关闭方 |
| FIN-WAIT-1 | 对 FIN 的 ACK | — | FIN-WAIT-2 | 主动关闭方 |
| FIN-WAIT-1 | FIN + ACK | ACK | TIME-WAIT | 主动关闭方 |
| FIN-WAIT-1 | FIN(同时关闭) | ACK | CLOSING | 双方 |
| FIN-WAIT-2 | FIN | ACK | TIME-WAIT | 主动关闭方 |
| CLOSING | 对 FIN 的 ACK | — | TIME-WAIT | 双方 |
| TIME-WAIT | 2MSL 计时到 | — | CLOSED | 主动关闭方 |
| CLOSE-WAIT | 应用关闭 | FIN | LAST-ACK | 被动关闭方 |
| LAST-ACK | 对 FIN 的 ACK | — | CLOSED | 被动关闭方 |
| SYN-SENT | SYN(同时打开,拓展) | SYN + ACK | SYN-RCVD | 双方 |
| 任何状态 | RST | — | CLOSED(LISTEN 方回到 LISTEN) | — |
- 带 WAIT 的有 4 个:主动方 FIN-WAIT-1、FIN-WAIT-2、TIME-WAIT;被动方 CLOSE-WAIT。
- “等什么”:FIN-WAIT-1 等对自己 FIN 的确认;FIN-WAIT-2 等对方的 FIN;CLOSE-WAIT 等自己的应用说“关吧”;LAST-ACK 等最后一个确认;TIME-WAIT 等时间(2MSL)。
- 只有主动关闭的一方经过 TIME-WAIT;只有被动打开的一方经过 LISTEN 和 SYN-RCVD。
保活计时器与 RST:连接的“异常结束”
问题:客户和服务器建立了连接,客户突然断电了。服务器上这条连接会一直占着资源吗?
TCP 用保活计时器(keepalive timer)解决:服务器每收到一次客户的数据,就重新设置保活计时器(通常 2 小时)。若 2 小时内没收到客户的任何数据,服务器就发一个探测报文段,以后每隔 75 秒发一个;若一连 10 个探测报文段都没有响应,服务器就认为客户出了故障,关闭这个连接。前后共约 2 小时 + 10 × 75 秒(12.5 分钟)。
另一种异常结束是 RST:一方发现连接出了严重问题(例如收到一个不属于任何连接的报文段、应用异常退出),直接发 RST,连接立即作废,不经过四次挥手、也不进入 TIME-WAIT。
| TCP 的计时器 | 作用 | 在哪一节 |
|---|---|---|
| 重传计时器(RTO) | 报文段发出后超时未确认就重传 | 5.5 |
| 持续计时器 | 收到零窗口通知后启动,到期发零窗口探测报文段,防止死锁 | 5.5 |
| 保活计时器 | 长时间没有数据时探测对方是否还在 | 本节 |
| 时间等待计时器(2MSL) | 主动关闭方在 TIME-WAIT 状态等待 | 本节 |
- 握手报文段的字段(2011-39、2019-39):画出三次握手,确认号一律是“对方序号 + 1”。陷阱选项常把 seq 和 ack 写成一样,或忘了加 1。
- 数据量(2020-39):FIN 序号 − (SYN 序号 + 1)。
- 状态(2021-38):按状态机写出主动方 FIN-WAIT-1 → FIN-WAIT-2 → TIME-WAIT → CLOSED,被动方 CLOSE-WAIT → LAST-ACK → CLOSED。
- 时间(2022-39、2024-38):“至少”就合并第 2、3 次挥手、第三次握手捎带数据;数据按慢开始数轮次;主动方最后加 2MSL。
综合题 2026-47 把握手次数、确认号、挥手次数、最后一个报文段的 seq / ack 一起考了,见第 7 篇 t6。可能的新考法:SYN 洪泛攻击利用的是哪个状态(SYN-RCVD)、哪一方经历 TIME-WAIT、保活计时器的作用、RST 的用途。
- 第二次握手的 seq 是服务器自己随机选的,和客户的序号没有关系;只有 ack 和客户有关。
- 第三次握手可以携带数据;若携带了数据,就要消耗相应的序号。
- TIME-WAIT 在主动关闭方,不一定是客户——服务器先关闭时,TIME-WAIT 在服务器。
- CLOSE-WAIT 是被动方收到 FIN 后的状态,不是“等着关闭的主动方”。
- 挥手的第 2、3 次可以合并成一个报文段(被动方没有数据要发时),此时只需要“三次挥手”,但教材和题目的标准答案仍说“四次挥手”。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. (SYN = 0,ACK = 1,seq = 5001,ack = 5001)
- B. (SYN = 1,ACK = 1,seq = 5000,ack = 5000)
- C. (SYN = 1,ACK = 1,seq = 8000,ack = 5001)
- D. (SYN = 1,ACK = 0,seq = 8000,ack = 5001)
展开解析
C第二次握手:SYN = 1、ACK = 1,ack = 5000 + 1 = 5001,seq 由乙任选。
- A 错第二次握手 SYN 必须为 1;SYN = 0 的段不是对连接请求的同意。
- B 错确认号应为 5000 + 1 = 5001(SYN 消耗一个序号),写成 5000 错了。
- C 对对:SYN = 1、ACK = 1、ack = 5001,seq 由乙任选。
- D 错ACK 必须为 1,确认号字段才有效;ACK = 0 时写 ack = 5001 也不起作用。
变化点:换一个初始序号,并把“乙的 seq 与甲无关”放进正确选项。
- A. 5001
- B. 5002
- C. 4999
- D. 5000
展开解析
D数据从 3001 开始,到 8000 结束:8001 − 3001 = 5000。
- A 错5001 = 8001 − 3000:把 SYN 占用的那个序号也算成了数据。
- B 错5002 多算了 SYN 和 FIN 两个序号(从 3000 数到 8001)。
- C 错4999 = 8000 − 3001:末字节减首字节时忘了 + 1;3001 ~ 8000 共 5000 字节。
- D 对对:8001 − 3001 = 5000。
变化点:换一组序号,公式:FIN 序号 − (SYN 序号 + 1)。
- A. 1100ms,150ms
- B. 600ms,100ms
- C. 1100ms,100ms
- D. 600ms,150ms
展开解析
AC:1 RTT + 2MSL = 100 + 1000 = 1100ms;S:1.5 RTT = 150ms。
- A 对对:C 1100ms,S 150ms。
- B 错C 只等了 1 个 MSL(100 + 500),S 也少算了半个 RTT。
- C 错C 对了,但 S 要在收到最后的 ACK(1.5 RTT = 150ms)时关闭,写成 100ms 少了半个 RTT。
- D 错S 对了,但 C 的 TIME-WAIT 要等 2MSL = 1000ms,只等了 1 个 MSL。
变化点:换一组 RTT 和 MSL。
- A. CLOSE-WAIT
- B. LAST-ACK
- C. TIME-WAIT
- D. FIN-WAIT-2
展开解析
B被动关闭方:收到 FIN、回 ACK → CLOSE-WAIT;发出自己的 FIN → LAST-ACK;收到最后的 ACK → CLOSED。
- A 错CLOSE-WAIT 是服务器收到客户 FIN、回 ACK 之后的状态,发出自己的 FIN 后就离开它了。
- B 对对:发出 FIN 后进入 LAST-ACK。
- C 错TIME-WAIT 只有主动关闭的一方(这里是客户)才经历。
- D 错FIN-WAIT-2 是主动关闭方(客户)收到对自己 FIN 的确认后的状态。
变化点:由主动方的状态换成被动方。
- A. LISTEN 状态
- B. SYN-RCVD 状态
- C. SYN-SENT 状态
- D. CLOSE-WAIT 状态
展开解析
B服务器收到 SYN 后回 SYN + ACK、为连接分配资源,进入 SYN-RCVD 等待第三次握手;攻击者伪造源地址,第三次握手永远不会到来,这些“半连接”占满队列。
- A 错LISTEN 是服务器等待连接请求的初始状态,收到 SYN 后就离开它了。
- B 对对:半连接停在 SYN-RCVD。
- C 错SYN-SENT 是发起连接的一方(客户)发出 SYN 后的状态,不在服务器上。
- D 错CLOSE-WAIT 是被动关闭方收到 FIN 后的状态,属于连接释放,不是半连接。
考点:5.4 节“SYN 洪泛攻击”。
- A. 服务器
- B. 客户
- C. 服务器和客户都要经历
- D. 服务器和客户都不经历
展开解析
ATIME-WAIT 属于主动关闭的一方(先发 FIN 的一方),与谁是客户无关。这里服务器主动关闭,客户是被动方,经历 CLOSE-WAIT、LAST-ACK。
- A 对对:主动关闭的服务器经历 TIME-WAIT。
- B 错客户是被动关闭方,经历 CLOSE-WAIT、LAST-ACK,不经历 TIME-WAIT。
- C 错只有主动关闭的一方经历 TIME-WAIT(双方同时关闭除外),这里只有服务器。
- D 错主动关闭方一定要经历 TIME-WAIT,等 2MSL 才关闭。
考点:5.4 节“TCP 有限状态机”。
- A. 计算超时重传时间
- B. 打破零窗口时双方互相等待的死锁
- C. 控制 TIME-WAIT 状态的等待时间
- D. 在长时间没有数据往来时,探测对方是否已经故障
展开解析
D服务器 2 小时收不到客户的数据,就每隔 75 秒发一个探测报文段,连续 10 个无响应就关闭连接。B 是持续计时器的作用,C 是 2MSL 计时器,A 是重传计时器。
- A 错计算超时重传时间、控制重传的是重传计时器,不是保活计时器。
- B 错打破零窗口时双方互相等待的死锁的是持续计时器。
- C 错控制 TIME-WAIT 等待时间的是 2MSL 计时器(时间等待计时器)。
- D 对对:长时间无数据时探测对方是否故障。
考点:5.4 节“保活计时器与 RST”。
- A. 客户不能再接收服务器的数据
- B. 服务器仍可以向客户发送数据,客户仍要对这些数据进行确认
- C. 连接已经完全释放
- D. 服务器不能再发送数据,只能发送 FIN
展开解析
B这时连接处于半关闭:客户 → 服务器方向已关闭,服务器 → 客户方向仍然打开。客户在 FIN-WAIT-2 状态照样接收并确认数据。
- A 错客户只关闭了自己的发送方向,处于 FIN-WAIT-2,仍要接收服务器的数据。
- B 对对:半关闭,服务器 → 客户方向仍然打开。
- C 错服务器还没发 FIN,服务器 → 客户方向仍然打开,连接处于半关闭,没有完全释放。
- D 错服务器只是确认了客户的 FIN,自己还可以继续发数据,发完才发 FIN。
考点:5.4 节“四次挥手”中的半关闭。
5.5TCP 可靠传输与流量控制
问题:IP 交给 TCP 的分组可能出错、丢失、乱序、重复。TCP 要让应用看到的字节流和发送方写进去的一模一样。它用四样工具对付四种问题:
| IP 可能出的问题 | TCP 的对策 |
|---|---|
| 出错 | 检验和:发现出错就丢弃,当作丢失处理(不发否认,等发送方重传) |
| 丢失 | 确认 + 重传:超时没收到确认就重传(超时重传);收到 3 个重复确认就提前重传(快重传) |
| 乱序 | 序号:接收方按序号把失序到达的数据先缓存,凑齐了再按序交给应用 |
| 重复 | 序号:已经收到过的字节再来一次就丢弃(但仍要发确认) |
这些机制都建立在以字节为单位的滑动窗口之上,原理和第 3 篇的连续 ARQ(GBN、SR)一脉相承,区别是 TCP 按字节编号、采用累积确认,对失序的报文段通常先缓存而不是丢弃(像 SR),超时只重传最早未确认的那一个报文段。
序号、确认号与累积确认
- 我的 seq = 对方上一次给我的 ack(对方说“我期望你下一个字节是几号”)。
- 我的 ack = 对方的 seq + 对方的数据长度(对方的数据按序收到时)。
- 中间有缺口时,ack 停在缺口的第一个字节,后面收到的先缓存。
例(2013-39):甲收到乙的段(seq = 1913,ack = 2046,100 字节)→ 甲接下来发的段 seq = 2046,ack = 1913 + 100 = 2013。
累积确认:确认号 N 表示“N − 1 及以前的字节全部收到了”。好处是确认丢了也不要紧:只要后面一个更大的确认到达,前面的就都被确认了。下面跟着一个例子走一遍(每个报文段 100 字节):
- 推迟确认:接收方可以不必每收到一个报文段就确认,而是稍等一会儿(不超过 0.5 秒),一次确认多个,减少确认报文段的数量;但对连续收到的满长报文段,至少每隔一个就要确认一次。
- 捎带确认:接收方自己也有数据要发时,把确认号放在自己的数据报文段里一起发,不单独发确认。
- 408 的计算题若不特别说明,都按“每收到一个报文段就确认一次”处理。
- A. 500
- B. 700
- C. 800
- D. 1000
展开解析
D第一段序号 200、300 字节,占 200 ~ 499;第二段序号 500、500 字节,占 500 ~ 999。两段都收到,确认号 = 最后一个字节 + 1 = 1000。
- A 错500 是第二段的序号,只确认了第一段。
- B 错700 = 200 + 500,漏了第一段的 300 字节。
- C 错800 = 300 + 500,是数据总量,不是序号,忘了起点 200。
- D 对1000。
确认号 = 起始序号 + 按序收到的总字节数。
- A. 300
- B. 500
- C. 1200
- D. 1400
展开解析
考点5.5 累积确认
B先倒推各段序号:第 3 段 900,第 2 段 900 − 400 = 500,第 1 段 500 − 300 = 200。
- 乙按序收到第 1 段(200 ~ 499),第 2 段(500 ~ 899)缺失。
- 确认号 = 期望的下一个字节 = 500。第 3 段先缓存。
- A 错300 是第 1 段的数据长度,不是序号。
- B 对500。
- C 错1200 是三段数据的总长度,不是序号。
- D 错1400 = 900 + 500:好像第 2 段也收到了。TCP 是累积确认,中间有缺口就停在缺口处。
累积确认:缺哪个字节,确认号就是哪个。
- A. 2046、2012
- B. 2046、2013
- C. 2047、2012
- D. 2047、2013
展开解析
B乙的段 seq = 1913、ack = 2046、100 字节数据。
- 乙说“期望收到 2046”→ 甲接下来发的段 seq = 2046。
- 乙这段数据占 1913 ~ 2012,甲收到后确认号 = 2012 + 1 = 2013。
- A 错2012 是收到的最后一个字节,确认号要再加 1。
- B 对2046,2013。
- C 错C 是 2047、2012:两个数都错了一位——序号直接取对方的确认号 2046,不必加 1;确认号是对方最后一个字节 2012 再加 1 = 2013。
- D 错序号 2047 多加了 1:对方期望的正是 2046。
我的 seq = 对方的 ack;我的 ack = 对方的 seq + 对方的数据长度。
以字节为单位的滑动窗口
发送方维持一个发送窗口:窗口内的字节可以连续发出去而不必等确认;窗口外的字节不允许发。窗口用三个指针描述:
- P1(窗口后沿)= 最新收到的确认号。后沿只会前移(收到新确认),不会后退。
- P2 = 下一个要发送的字节的序号。P1 ~ P2 − 1 是“已发送、未确认”,它们必须留在发送缓存里,以备重传。
- P3(窗口前沿)= P1 + 发送窗口大小。前沿通常前移;对方缓存满了、窗口通告变小时可能不动;TCP 标准强烈不赞成前沿往回缩。
跟着三步看窗口怎样“滑动”(每格 100 字节;B 通告 rwnd = 500,A 的拥塞窗口足够大):
- 窗口后沿 = 最新收到的确认号。
- 发送窗口 = min(对方通告的 rwnd,自己的 cwnd)。收到新确认时若处于慢开始,cwnd 要先加 1 个 MSS(2025-38)。
- 窗口前沿 = 确认号 + 发送窗口 − 1;已经发到哪里了(下一个要发的序号),就从那里一直可以发到前沿。
2010-39:窗口 = min(4000, 2000) = 2000,从刚确认的位置算起;第 2 个段的 1000 B 还没确认、占着窗口 → 还能发 1000 B。2021-40:窗口 501 ~ 1000,其中 501 ~ 700 已在 t0 发出 → 还能发 701 ~ 1000。
- A. 1000
- B. 2000
- C. 3000
- D. 4000
展开解析
A发送窗口 = min(cwnd, rwnd) = min(4000, 2000) = 2000B,从刚确认的位置算起。
- 甲发了两个 1000B 的段,只收到第一个的确认,第二个段的 1000B 还在窗口里“已发送未确认”。
- 还能发 2000 − 1000 = 1000B。
- A 对1000。
- B 错2000:没有减去已发送未确认的 1000B。
- C 错3000 = 4000 − 1000:用了拥塞窗口,忽略了接收窗口的限制。
- D 错4000 = cwnd:既没和 rwnd = 2000 取小,也没减去已发送未确认的 1000B。
还能发 = min(cwnd, rwnd) − 已发送未确认。
- A. 501 ~ 1000
- B. 601 ~ 1100
- C. 701 ~ 1000
- D. 801 ~ 1100
展开解析
考点5.5 发送窗口
C乙的确认号 501:501 以后的字节乙都还没确认(包括甲在 t0 发的那 200 字节)。窗口从 501 开始,大小 500B。
- 发送窗口:501 ~ 1000。
- 其中 501 ~ 700 已在 t0 发出、尚未确认。
- 还能发 701 ~ 1000。
- A 错501 ~ 1000 是整个窗口,其中 501 ~ 700 已经发过了。
- B 错601 是乙自己数据的序号,与甲的发送窗口无关。
- C 对701 ~ 1000。
- D 错起点和终点都不对:下一个该发的是 701,窗口前沿是 1000。
窗口 = [ack,ack + rwnd − 1];再扣掉已发出的部分。
- A. 2
- B. 3
- C. 4
- D. 5
展开解析
At0 起甲发出 2001 和 3001 两个段,窗口 2000B 用满了。t1 收到 ack_seq = 3001,确认了第一个段。
- cwnd = 2000B < 阈值 8000B,处于慢开始:每收到一个新确认,cwnd 加 1 个 MSS → 3000B。
- 发送窗口 = min(3000, 4000) = 3000B,从 3001 开始:3001 ~ 6000。
- 3001 ~ 4000 那个段已发出未确认;还能发 4001 ~ 6000,共 2000B = 2 个段。
- A 对2 个。
- B 错3:没有减去已发送未确认的 3001 段(或者只看了接收窗口 4000B:3001 + 4000 − 4001 = 3000B,忽略了拥塞窗口)。
- C 错4:把接收窗口 4000B 整个当成了还能发的量。
- D 错5 个段 = 5000B,要从 4001 一直发到 9000;可就算只看接收窗口,前沿也只到 3001 + 4000 − 1 = 7000,最多 3 段,再受 cwnd = 3000B 限制只剩 2 段,5 段不可能。
先更新 cwnd(慢开始每个新 ACK 加 1 MSS),再取 min(cwnd, rwnd),最后减去在途数据。
接收窗口:接收方也有一个窗口,大小等于接收缓存中还空着的部分。按序收到但还没被应用读走的数据、失序到达而暂存的数据,都占着接收缓存。接收方把这个窗口值写进确认报文段的“窗口”字段通告给发送方,这就是下面要讲的流量控制。
超时重传:重传时间 RTO 怎么定
问题:重传计时器设多长?太短,确认还在路上就重传了,白白增加网络负担;太长,真丢了也要干等很久。而 TCP 连接的往返时间 RTT 差别很大(同一个局域网里几毫秒,跨洋几百毫秒),还会随网络负载变化——所以 RTO 不能是常数,要根据测到的 RTT 随时调整。
期末成绩 = 平时 × 30% + 考试 × 70% 是加权平均。RTT 的平滑也一样:新的平均值 = 旧平均 × 7/8 + 新样本 × 1/8。新样本只占 1/8 的分量,所以偶尔一个特别大或特别小的样本不会让平均值大起大落;但如果样本持续变大,平均值也会一点点跟上去。
为什么要加 4 倍偏差:RTT 忽大忽小(偏差大)时,RTO 要留更多余量,否则稍慢一点的确认就会被误判为丢失。
跟我算
| 测量 | RTTS | RTTD | RTO |
|---|---|---|---|
| 第 1 次(40 ms) | 取样本值 = 40 | 样本的一半 = 20 | 40 + 4 × 20 = 120 ms |
| 第 2 次(48 ms) | 7/8 × 40 + 1/8 × 48 = 35 + 6 = 41 | 3/4 × 20 + 1/4 × |41 − 48| = 15 + 1.75 = 16.75 | 41 + 4 × 16.75 = 108 ms |
再练一个只算 RTTS 的:旧 RTTS = 30 ms,新样本 26 ms → 0.875 × 30 + 0.125 × 26 = 26.25 + 3.25 = 29.5 ms(不是简单平均 28 ms)。
口径说明:上面按教材的写法,先算新的 RTTS,再用新 RTTS 算 RTTD(谢希仁教材习题 5-41 的答案就是这样算的)。RFC 6298 的次序相反——先用旧 RTTS 更新 RTTD,再更新 RTTS,本例会得到 RTTD = 17、RTO = 109 ms(拓展)。408 至今没有考过 RTTD 的数值计算。
Karn 算法:计算加权平均 RTTS 时,只要报文段重传了,就不采用它的往返时间样本。但这样又有新问题:如果网络时延突然变大,报文段一直超时重传,RTO 就永远得不到更新。修正的 Karn 算法:报文段每重传一次,就把 RTO 加倍(如 108 → 216 → 432 ms);直到某个报文段不用重传就收到确认,才重新按公式计算 RTO。
冗余 ACK 与快重传
超时重传要等 RTO,往往几百毫秒。能不能早一点发现丢失?能——接收方每收到一个失序的报文段,就立即对已按序收到的数据发出重复确认(冗余 ACK)。发送方一旦连续收到 3 个重复确认,就知道那个报文段很可能丢了,不等计时器超时立即重传,这就是快重传。
为什么要等 3 个,而不是 1 个?因为 IP 可能让报文段乱序到达:M3 比 M2 先到一点点也会产生 1 个重复确认,并不代表 M2 丢了。连续 3 个重复确认才比较有把握。快重传之后,发送方还要调整拥塞窗口(快恢复),见 5.6 节。
- A. t1
- B. t2
- C. t3
- D. t4
展开解析
考点5.5 快重传
C快重传:连续收到 3 个重复确认,就立即重传,不等超时。
- t0 收到的 ack_seq = 100 是第一次(原始确认)。
- t1、t2、t3 收到的三个 ack_seq = 100 是第 1、2、3 个重复确认。
- t3 时刻凑满 3 个重复确认,立即重传 seq = 100 的段。
- A 错t1 只是第 1 个重复确认。
- B 错t2 只是第 2 个重复确认。
- C 对t3。
- D 错t4 是超时重传的时刻,支持快重传时不用等到这里。
“重复确认”不算第一次那个:一共收到 4 个相同的 ack 时重传。
拓展 选择确认 SACK:累积确认只能说“1001 以前都收到了”,没法说“2001 ~ 5000 我也收到了”,于是发送方重传时可能把已经收到的也重发一遍。SACK 选项让接收方报告收到的不连续字节块的边界(如 “2001 ~ 5000”),发送方只重传真正缺的部分。SACK 要在建立连接时双方协商同意才能使用,一个首部最多报告 4 个字节块。
TCP 的可靠传输像 GBN 还是 SR
第 3 篇学过链路层的两种连续 ARQ。TCP 的做法是两者的“混合”,选择题偶尔会考这种对比:
| GBN(回退 N 帧) | SR(选择重传) | TCP | |
|---|---|---|---|
| 编号对象 | 帧 | 帧 | 字节 |
| 确认方式 | 累积确认 | 逐个确认 | 累积确认(可选 SACK) |
| 失序到达 | 丢弃 | 缓存 | 通常缓存(标准没有规定,实际都缓存) |
| 超时重传什么 | 出错帧及其后已发的所有帧 | 只重传超时的那一帧 | 只重传最早未确认的那个报文段 |
| 接收窗口 | 1 | > 1 | 由接收缓存的空闲空间决定(rwnd) |
| 窗口大小 | 固定 | 固定 | 动态:min(rwnd, cwnd) |
- 按序到达一个报文段、前面的都已确认:可以等一会儿(推迟确认,最多 0.5 秒),看下一个报文段来不来,好一起确认。
- 按序到达、而且还有一个在等推迟确认的:立即发一个累积确认,两个一起确认。
- 失序到达(前面有缺口):立即发重复确认,指出缺口的第一个字节——快重传就靠它。
- 到达的报文段补上了缺口(部分或全部):立即确认。
流量控制:让发送方别把接收方淹没
问题:服务器的网卡很快,可接收方的应用程序忙着别的事,迟迟不从接收缓存里读数据。发送方若还照常猛发,接收缓存满了,后来的数据只能丢掉,白白重传。
接收缓存是杯子,应用读数据是有人在喝。倒水的人(发送方)看不见杯子,只能听喝水的人喊“还能倒 200 毫升”(rwnd)。喝得慢,杯子剩的空间就小,喊的数也小;喊“0”就得停。哪里不像:喊话(确认报文段)要在网络里走一段时间,而且可能丢失——所以才需要后面的持续计时器。
流量控制(flow control)就是让发送方的发送速率不要太快,使接收方来得及接收。TCP 用滑动窗口实现:接收方在每个确认报文段的窗口字段里通告自己的接收窗口 rwnd(= 接收缓存的空闲空间),发送方的发送窗口不能超过 rwnd。
零窗口与持续计时器
- 接收方通告 rwnd = 0 后,发送方停止发送数据(紧急数据和零窗口探测除外)。
- 接收方腾出空间后,会发一个“窗口更新”的确认报文段。但不带数据的确认报文段不会被确认,丢了也没人重传——这正是死锁的来源。
- 所以发送方收到零窗口通知就启动持续计时器(persistence timer)。计时器到时,就发一个零窗口探测报文段(只带 1 字节数据);接收方必须确认它,并在确认里给出当前的窗口值。窗口仍为 0,就重设计时器(间隔逐次加倍);窗口不为 0,死锁就打破了。
糊涂窗口综合征:接收方的应用每次只读 1 个字节,接收方就通告 rwnd = 1,发送方于是发一个只带 1 字节数据的报文段——这个报文段有 40 字节首部,效率只有 1 ÷ 41 ≈ 2.4%。如此反复,网络里全是“小包”。解决:接收方等缓存空出至少一个 MSS 或一半空间时,才通告窗口(在此之前通告 0);发送方也不要发太小的报文段。
Nagle 算法(发送方):应用逐个字节交给 TCP 时,先发第一个字节,后面到来的字节先攒在缓存里;等收到前一个报文段的确认,或攒够一个 MSS(或发送窗口的一半)时,再把攒下的一起发出。网络慢时自动攒多一些,网络快时发得勤一些。
- 确认号(2009-38、2011-40、2013-39):按“三条规则”算;遇到缺口停在缺口。
- 还能发多少(2010-39、2021-40、2025-38):画三指针,min(cwnd, rwnd) 再减在途数据;2025-38 还要先按慢开始更新 cwnd。
- 快重传的时刻(2019-38,挂在 5.6):第 3 个重复确认到达时,第一个正常确认不算。
- rwnd 的变化(2015-39,挂在 5.6):数据不被取走,rwnd = 缓存 − 已存入的数据。
还没考过、但在考纲里的:RTO 的计算、Karn 算法、持续计时器的作用、零窗口探测报文段的长度、推迟确认和捎带确认。本节末尾的变式卡专门练了这几个点。
- TCP 对出错的报文段不发否认,直接丢弃,靠超时或重复确认触发重传。
- 重复确认的个数从第 2 个相同的 ack 算起:“收到 3 个重复确认”= 一共收到 4 个相同的 ack。
- 发送窗口 ≠ 接收窗口:发送窗口还受 cwnd 限制,而且 rwnd 的通知要经过网络传过来,有时延。
- 流量控制是端到端、点对点的,只涉及发送方和接收方;拥塞控制是全局的(5.6)。
- 持续计时器针对“零窗口死锁”,保活计时器针对“对方失联”,别混。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 1200
- B. 1300
- C. 1500
- D. 1501
展开解析
C1000 + 200 + 300 = 1500。
- A 错1200 是第二个段的序号,只确认了第一个段。
- B 错1300 = 1000 + 300,漏了第一个段的 200 字节。
- C 对对:1000 + 200 + 300 = 1500。
- D 错确认号是期望收到的下一个字节:最后一个字节是 1499,确认号 1500,不必再加 1。
变化点:换一组数。
- A. 1000
- B. 1500
- C. 1900
- D. 1200
展开解析
D倒推:第 2 段序号 1500 − 300 = 1200,第 1 段 1200 − 200 = 1000。第 2 段缺失,确认号停在 1200。
- A 错1000 是第 1 段的序号;第 1 段已正确收到,确认号要越过它到 1200。
- B 错1500 是第 3 段的序号;第 2 段(1200 ~ 1499)缺失,累积确认不能越过缺口。
- C 错1900 是三段都收到后的确认号(1500 + 400);第 2 段丢了,第 3 段只能先缓存。
- D 对对:确认号停在缺口 1200。
变化点:换一组数,仍是“缺哪个字节,确认号就是哪个”。
- A. 1500,3200
- B. 1501,3200
- C. 1500,3199
- D. 3200,1500
展开解析
A甲的 seq = 乙的 ack = 1500;甲的 ack = 3000 + 200 = 3200。
- A 对对:seq = 1500,ack = 3200。
- B 错甲的序号就是乙期望的 1500,不必再加 1。
- C 错3199 是乙这段数据的最后一个字节,确认号要再加 1:3200。
- D 错序号和确认号写反了:甲的 seq 来自乙的 ack(1500),甲的 ack 来自乙的 seq + 数据长度(3200)。
变化点:换一组数。
- A. 1000
- B. 2000
- C. 3000
- D. 5000
展开解析
B发送窗口 = min(6000, 3000) = 3000,扣掉已发未确认的 1000,还能发 2000B。
- A 错1000 是原题 2010-39(rwnd = 2000)的结果;这里 rwnd = 3000,窗口 3000 减在途 1000 剩 2000。
- B 对对:min(6000, 3000) − 1000 = 2000。
- C 错3000 是整个发送窗口 min(6000, 3000),没减去已发未确认的 1000B。
- D 错5000 = 6000 − 1000:用了拥塞窗口,忽略了接收窗口 3000 的限制。
变化点:拥塞窗口和接收窗口都换了。
- A. 1001 ~ 2000
- B. 1401 ~ 2400
- C. 1401 ~ 2000
- D. 1001 ~ 1400
展开解析
C窗口 1001 ~ 2000,其中 1001 ~ 1400 已发,还能发 1401 ~ 2000。
- A 错1001 ~ 2000 是整个窗口,其中 1001 ~ 1400 已经在 t0 发出。
- B 错把窗口从 1401 起算了;窗口要从确认号 1001 起算,前沿是 1001 + 1000 − 1 = 2000。
- C 对对:1401 ~ 2000。
- D 错1001 ~ 1400 是 t0 已发出、还没被确认的数据,不是还可以发的。
变化点:换一组数,窗口从确认号算起。
- A. 26ms
- B. 28ms
- C. 30.5ms
- D. 29.5ms
展开解析
DRTTS = (1 − 1/8) × 30 + 1/8 × 26 = 26.25 + 3.25 = 29.5ms。28ms 是两者的简单平均,不是加权平均。
- A 错26ms 直接用了新样本,没有做加权平均。
- B 错28ms 是新旧两个值的简单平均(各占 1/2);新样本只占 1/8。
- C 错30.5 = 7/8 × 30 + 1/8 × 34:把新样本的偏差方向弄反了;26 < 30,平均值应该变小。
- D 对对:26.25 + 3.25 = 29.5ms。
考点:5.5 节“超时重传与快重传”中的 RTTS 公式。
- A. 重传报文段的往返时间样本也要计入加权平均往返时间
- B. 每重传一次,超时重传时间 RTO 减半
- C. 计算加权平均往返时间时不采用重传报文段的样本;报文段每重传一次,RTO 加倍
- D. RTO 固定不变,与往返时间无关
展开解析
C重传后收到的确认分不清对应哪一次发送,所以不采样(A 错);但不采样会让 RTO 得不到更新,于是规定每重传一次 RTO 加倍(B、D 错)。
- A 错重传后收到的确认分不清对应哪一次发送,样本不可信,Karn 算法规定不采用。
- B 错每重传一次 RTO 加倍,不是减半;减半只会让重传更频繁、网络更堵。
- C 对对:不采样,RTO 加倍。
- D 错RTO 要随测得的 RTT 动态调整,不是固定值。
考点:5.5 节“超时重传:重传时间 RTO 怎么定”。
- A. 防止接收方“窗口变大”的通知丢失后双方互相等待
- B. 测量往返时间
- C. 检测接收方主机是否已经关机
- D. 让旧连接的报文段从网络中消失
展开解析
A不带数据的确认报文段丢了没人重传;持续计时器到时发零窗口探测报文段,逼接收方回一个带当前窗口值的确认,打破死锁。C 是保活计时器,D 是 TIME-WAIT 的作用。
- A 对对:防止窗口更新报文丢失后的死锁。
- B 错测量往返时间靠的是确认的到达时刻(或时间戳选项),不需要持续计时器。
- C 错检测对方主机是否故障是保活计时器的作用。
- D 错让旧连接的报文段从网络中消失是 TIME-WAIT 等 2MSL 的作用。
考点:5.5 节“零窗口与持续计时器”。
- A. 60 ms
- B. 90 ms
- C. 120 ms
- D. 30 ms
展开解析
B第一次测量时 RTTS 取样本值 30 ms,RTTD 取样本值的一半 15 ms,RTO = 30 + 4 × 15 = 90 ms。
- A 错60 = 30 + 2 × 15:偏差只乘了 2;公式是 RTT_S + 4 × RTT_D。
- B 对对:30 + 4 × 15 = 90ms。
- C 错120ms 对应 RTT_D = 22.5ms(30 + 4 × 22.5);第一次测量时 RTT_D 取样本值的一半 15ms。
- D 错30ms 直接把样本值当成了 RTO,没有加 4 倍偏差留余量。
考点:5.5 节 RTO 的计算。
5.6TCP 拥塞控制
拥塞:网络里的“堵车”
问题:接收方的缓存很大、rwnd 很大,发送方就可以放开猛发吗?不行——中间的路由器和链路是大家共用的。如果每台主机都只看对方的 rwnd 拼命发,路由器的队列很快排满,分组被大量丢弃,各主机又纷纷重传,网络越来越堵,真正送到的数据反而越来越少(4.1 节的负载—吞吐量曲线)。
车队出发时先放 1 辆车上路,平安到达就放 2 辆、4 辆、8 辆(慢开始);车多到一定程度就小心点,每趟只多放 1 辆(拥塞避免);一旦听说前面严重堵车(超时),马上只放 1 辆,从头试;如果只是听说个别车被耽误(3 个重复确认),就把车队规模砍一半,再慢慢加(快恢复)。哪里不像:司机没人统一指挥,每个发送方都是自己根据“丢没丢包”来猜网络堵不堵。
拥塞:对网络中某一资源的需求超过了它所能提供的可用部分,网络性能变坏。拥塞控制就是防止过多的数据注入网络,使路由器和链路不致过载。
| 流量控制 | 拥塞控制 | |
|---|---|---|
| 目的 | 别把接收方淹没 | 别把网络堵死 |
| 范围 | 点对点(端到端) | 全局性,涉及所有主机、路由器 |
| 谁说了算 | 接收方通告 rwnd | 发送方自己估计 cwnd |
| 依据 | 接收缓存的空闲空间 | 是否出现超时、重复确认(丢包) |
发送方为每条连接维持一个拥塞窗口 cwnd,它的大小取决于网络的拥塞程度,并且动态变化。只要没出现拥塞,cwnd 就增大一些,以便多发;一出现拥塞(或可能出现),cwnd 就减小。发送方怎么知道拥塞了?靠丢包:超时,或收到 3 个重复确认(现代网络传输差错极少,丢包几乎都是路由器队列溢出造成的)。
另设一个慢开始门限 ssthresh:cwnd < ssthresh 时用慢开始;cwnd ≥ ssthresh 时用拥塞避免(RFC 规定门限减半时不小于 2 个 MSS,408 题目一般不涉及这个下限)。408 的题目通常以 MSS 为单位、以“轮次”(一个 RTT)为单位计算,并假设接收方每个报文段都确认、发送方总有数据要发、rwnd 足够大(题目另有说明时除外)。
联系 4.1 节:拥塞控制分开环和闭环两类。TCP 的拥塞控制是典型的闭环控制——发送方监测网络状态(是否丢包)、把它当作反馈、据此调整 cwnd;它不依赖路由器发通知。(ICMP 的“源点抑制”报文就是一种由路由器发出的通知,实际网络中已经废弃;但考试仍把它算在 ICMP 五类差错报告里,4.6 节。)
四个算法
| 算法 | 什么时候 | cwnd 怎么变 |
|---|---|---|
| 慢开始 | 连接刚建立,或超时之后;cwnd < ssthresh | 从 1 开始,每收到一个对新数据的确认加 1 个 MSS,即每轮翻倍:1、2、4、8……(翻倍会超过 ssthresh 时只增到 ssthresh) |
| 拥塞避免 | cwnd ≥ ssthresh | 每轮只加 1(加法增大,线性增长) |
| 超时 | 重传计时器超时:网络很可能严重拥塞 | ssthresh = cwnd ÷ 2,cwnd = 1,重新慢开始 |
| 快重传 + 快恢复 | 收到 3 个重复确认:只是个别报文段丢失,网络并不太堵 | 立即重传丢失的报文段;ssthresh = cwnd ÷ 2,cwnd = 新的 ssthresh,接着拥塞避免 |
| 超时 | 收到 3 个重复确认 | |
|---|---|---|
| 说明什么 | 连后面报文段的确认都没回来:网络可能严重拥塞 | 后面的报文段都到了,只是个别报文段丢失:拥塞不严重 |
| 怎样重传 | 超时重传 | 快重传(不等计时器) |
| ssthresh | cwnd ÷ 2 | cwnd ÷ 2 |
| cwnd | 1 | 新的 ssthresh |
| 接下来 | 慢开始 | 拥塞避免 |
拥塞避免的“每轮加 1”同样可以按确认来算:每收到一个确认,cwnd 增加 MSS × MSS ÷ cwnd。例如 cwnd = 4 个 MSS 时,每个确认加 1/4,一轮收回 4 个确认,正好加 1。
名字容易误导:“慢开始”的“慢”是指 cwnd 从 1 开始、一开始注入网络的数据少,增长其实是指数级的,最快;“拥塞避免”只是让 cwnd 增长得慢一些,不能完全避免拥塞。
cwnd 逐轮表:跟我算三道
“第 n 轮的 cwnd”指第 n 个 RTT 里发送时用的窗口;“经过 n 个 RTT 后的 cwnd”“第 n 个 RTT 的段都被确认时的 cwnd”指这一轮的确认全部回来之后的值,等于第 n + 1 轮发送时用的窗口。2009-39 问的是后者(4 个 RTT 后为 9),2015-39 问的也是后者(4 个 RTT 后 cwnd = 16)。做题前先把题目问的是哪一个圈出来。
跟我算
| 轮次 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cwnd | 1 | 2 | 4 | 8 | 16 | 17 | 18 | 19 | 20 | 1 | 2 | 4 | 8 | 10 | 11 |
| 阶段 | 慢开始 | 拥塞避免(16 起每轮 + 1) | 超时:ssthresh = 10,慢开始 | 拥塞避免 | |||||||||||
关键两步:① 超时时 ssthresh = 20 ÷ 2 = 10,cwnd = 1;② 第 13 轮 cwnd = 8,翻倍是 16,超过了新门限 10,所以第 14 轮只到 10,之后每轮加 1。
跟我算
快重传 + 快恢复:ssthresh = 20 ÷ 2 = 10,cwnd = 10,直接拥塞避免:第 10 ~ 13 轮依次为 10、11、12、13。比较例 1:同一时刻出事,超时后第 13 轮 cwnd 只有 8,重复确认后已经是 13——这就是“快恢复”的“快”。
上面的小工具已按例 1 设置(“超时发生在第 9 轮末”表示第 9 轮发出的数据出现超时)。把超时轮次清成 0、在“3 个重复确认”里填 9,就得到例 2。
每轮翻倍:1 → 2 → 4 → 8 → 16,从 1 到 2k 要 k 轮,k = log2(2k)。从 a 到 b(b 是 a 的 2 的幂倍)要 log2(b ÷ a) 轮:4 → 64 是 log216 = 4 轮。每轮加 1:从 a 到 b 要 b − a 轮。
跟我算
至少:ssthresh ≥ 64,一直慢开始:4 → 8 → 16 → 32 → 64,4 个 RTT = 40 ms(2017-39 同理:1 → 32 KB 用 5 个 RTT = 25 ms)。
最长:ssthresh ≤ 4,一直拥塞避免,每轮加 1:64 − 4 = 60 个 RTT = 600 ms(2020-38 同理:8 → 32 要 24 个 RTT = 48 ms)。
超时后恢复到 W:ssthresh = W ÷ 2,从 1 慢开始到 W ÷ 2 要 log2(W ÷ 2) 轮,再拥塞避免到 W 要 W ÷ 2 轮。W = 16:3 + 8 = 11 个 RTT(2022-38);W = 32:4 + 16 = 20 个 RTT。
- A. 7KB
- B. 8KB
- C. 9KB
- D. 16KB
展开解析
C超时:ssthresh = 16 ÷ 2 = 8KB,cwnd = 1KB。
- 第 1、2、3 个 RTT 后(慢开始):2、4、8KB,达到门限 8。
- 第 4 个 RTT 后(拥塞避免,加 1):9KB。
- A 错7KB 不在任何一步上:超时后 4 个 RTT 末的 cwnd 依次是 2、4、8、9KB(慢开始到门限 8 后每轮加 1);7 = 1 + 2 + 4 只是前 3 轮发送量之和,不是窗口。
- B 错8KB:只数了 3 个 RTT。
- C 对9KB。
- D 错16KB:慢开始一直翻倍,忽略了门限变成 8。
超时后:门限减半,cwnd 回到 1;到门限后每轮加 1。
- A. 10KB
- B. 12KB
- C. 14KB
- D. 15KB
展开解析
A超时:ssthresh = 8 ÷ 2 = 4KB,cwnd = 1KB。
- 10 个 RTT 的 cwnd:2、4(到门限),5、6、7、8、9、10、11、12。
- 乙的接收窗口始终 10KB → 发送窗口 = min(12, 10) = 10KB。
- A 对10KB。
- B 错12KB 是拥塞窗口,忘了受接收窗口限制。
- C 错14KB:10 个 RTT 后 cwnd 只有 12KB,何况还要受 rwnd = 10KB 限制。
- D 错15KB 比接收窗口 10KB 还大,发送窗口 = min(cwnd, rwnd) 不可能超过 10KB;何况 10 个 RTT 后 cwnd 只有 12KB。
问“发送窗口”,最后一步一定和 rwnd 比。
- A. 1KB
- B. 8KB
- C. 16KB
- D. 32KB
展开解析
A新连接从慢开始(门限 32KB 很大):4 个 RTT 依次发 1、2、4、8KB,共 15KB,全部存进乙的 16KB 缓存且不被取走。
- 4 个 RTT 后 cwnd = 16KB。
- 乙的缓存只剩 16 − 15 = 1KB → rwnd = 1KB。
- 发送窗口 = min(16, 1) = 1KB。
- A 对1KB。
- B 错8KB 是第 4 轮发送时的 cwnd。
- C 错16KB 是 4 个 RTT 后的 cwnd,也是乙缓存的总大小,但缓存已经快满了。
- D 错32KB 是初始门限 ssthresh:4 个 RTT 内 cwnd 只增到 16KB,而且乙的缓存只剩 1KB,发送窗口 = min(16, 1) = 1KB。
数据不被取走,rwnd = 缓存 − 已存入的数据。
- A. 25ms
- B. 30ms
- C. 160ms
- D. 165ms
展开解析
A“至少”:一直处于慢开始,每个 RTT 翻倍(接收缓存 64KB 足够大,不限制)。
- 1 → 2 → 4 → 8 → 16 → 32KB,共 5 次翻倍。
- 5 × 5ms = 25ms。
- A 对25ms。
- B 错30ms = 6 × 5ms:多算了 1 个 RTT(1 → 32KB 只翻倍 5 次),可能把建立连接的握手也算了进去,但题目从“连接建立成功”起计时。
- C 错160ms = 32 × 5ms:相当于每个 RTT 只多发 1KB、从 0 数到 32KB(就算从 1KB 线性加到 32KB 也要 31 个 RTT = 155ms),都不是“至少”;“至少”要一直慢开始翻倍,只要 5 个 RTT。
- D 错165ms = 33 × 5ms:在 C 的线性数法上又多算了 1 个 RTT(比如把握手也算进来),而题目从“连接建立成功”起计时;“至少”只要 5 个 RTT = 25ms。
从 1 到 2k 需要 k 个 RTT。
- A. 4ms
- B. 8ms
- C. 24ms
- D. 48ms
展开解析
D问“最长”时间:假设 ssthresh ≤ 8KB,cwnd 从 8KB 起一直处于拥塞避免,每个 RTT 只加 1KB。
- 8 → 32 需要 24 个 RTT。
- 24 × 2ms = 48ms。
- A 错4ms = 2 个 RTT:一直慢开始(8 → 16 → 32),这是最短时间。
- B 错8ms = 4 个 RTT:一直慢开始只要 2 个 RTT(8 → 16 → 32,即 A 的 4ms),一直拥塞避免要 24 个 RTT(48ms);“最长”取后者,4 个 RTT 既不是最短也不是最长。
- C 错24ms:把 24 个 RTT 当成了 24ms,忘了乘 RTT = 2ms。
- D 对48ms。
最长 → 全程加法增大;最短 → 全程翻倍。
- A. 4 RTT
- B. 5 RTT
- C. 11 RTT
- D. 16 RTT
展开解析
C超时:ssthresh = 8KB,cwnd = 1KB。
- 慢开始:1 → 2 → 4 → 8,用 3 个 RTT。
- 拥塞避免:8 → 9 → … → 16,用 8 个 RTT。
- 共 11 RTT。
- A 错4 RTT:1 → 16 一直翻倍,忽略了门限变成 8。
- B 错5 RTT 相当于把 1、2、4、8、16 这 5 个值数成了 5 个 RTT(从 1 翻倍到 16 只要 4 次),而且同样忽略了门限已降为 8;超时后要 3(慢开始 1 → 8)+ 8(拥塞避免 8 → 16)= 11 个 RTT。
- C 对11 RTT。
- D 错16 RTT:既没用慢开始,又多数了一轮——即使从 1 开始每轮只加 1,到 16 也只要 15 个 RTT;正确过程是先慢开始 1 → 8 用 3 个 RTT,再拥塞避免 8 → 16 用 8 个 RTT,共 11 个。
超时后恢复到原窗口 W:log2(W/2) 个 RTT 慢开始 + W/2 个 RTT 拥塞避免。
AIMD 与快恢复的两种写法
拥塞避免阶段“每轮加 1”,出现拥塞时“门限减半”,合起来叫 AIMD(Additive Increase Multiplicative Decrease,加法增大、乘法减小)。如果网络里只有 3 个重复确认这种“轻微拥塞”,cwnd 会画出一条锯齿线:
早期的 TCP Tahoe 没有快恢复:收到 3 个重复确认也是快重传之后 cwnd = 1、重新慢开始。TCP Reno 加上了快恢复。快恢复有两种写法:教材和 408 真题用 cwnd = 新 ssthresh;RFC 5681 用 cwnd = ssthresh + 3 个 MSS,理由是“收到 3 个重复确认,说明有 3 个报文段已经离开网络、到了接收方缓存里”。做 408 的题一律用 cwnd = ssthresh。
路由器也可以配合:主动队列管理(AQM,如随机早期检测 RED)在队列快满但还没满时就随机丢弃少量分组,让部分 TCP 连接提前减速,避免队列溢出时所有连接同时超时、一齐回到慢开始(全局同步)。
- 超时后数轮次(2009-39、2022-38):先写 ssthresh = cwnd ÷ 2、cwnd = 1,再逐轮列表;翻倍越过门限时只到门限。
- 发送窗口取小(2014-38、2015-39):cwnd 算完最后一步和 rwnd 比;rwnd 会因为数据不被取走而变小。
- 至少 / 最长时间(2017-39、2020-38):至少 → 全程翻倍;最长 → 全程加 1。别忘了乘 RTT。
- 快重传的时刻(2019-38,讲在 5.5)。
综合题 2016-41(接收缓存 20 KB 被填满的过程 + 平均速率)、2023-47(FTP 上传文件:每轮 cwnd、总时间)把握手、窗口、拥塞控制串在一起,见第 7 篇 t6。这个方法失效的情形:题目说“推迟确认(每两个段确认一次)”时,慢开始不再是每轮翻倍;题目给的 rwnd 比 cwnd 小时,发送窗口被 rwnd 卡住,cwnd 再大也发不出去(2026-47)。
- 题目问“发送窗口”时,最后一定要和 rwnd 取较小值(2014-38:cwnd 已到 12,但 rwnd = 10,发送窗口 10)。
- rwnd 会变:接收方缓存里的数据不被取走,rwnd 越来越小(2015-39)。
- 问“最长时间”时,假设 ssthresh 很小、一直线性增长;问“至少”时,尽量走慢开始(2017-39、2020-38)。
- 超时后第一轮 cwnd = 1,数 RTT 时从这一轮开始算:16 超时后,1 → 2 → 4 → 8 用 3 个 RTT,8 → 16 再用 8 个 RTT,共 11 个(2022-38)。
- 发送窗口被 rwnd 卡住时,慢开始的 cwnd 不再“每轮翻倍”:它是每回来一个确认加 1,这一轮只发了几个段、就只加几(2026-47(2):收到第二个确认时 cwnd = 3 MSS;5.5 节“缓存 20 KB”的例子)。拥塞避免阶段则按教材口径“每轮加 1”。
综合题示范:把握手、窗口、拥塞控制串起来
TCP 综合题(2016-41、2023-47、2026-47)的共同套路:先算握手的确认号,再逐轮列 cwnd 和发送窗口,然后数 RTT 算时间,最后写挥手报文段的字段。下面这道自编题把这些步骤全走一遍,做法和真题完全一样。
(1) H 收到的第二次握手报文段中,确认号是多少?
(2) H 收到确认号为多少的确认段时,cwnd 首次达到慢开始门限?
(3) 列出每一轮的 cwnd、发送窗口和实际发送的段数。从第几轮起发送窗口受接收窗口限制?
(4) 从 H 发出 SYN 到 H 确认文件全部被 S 收到,需要多少时间?以“第一个数据段发出到全部被确认”计,平均传输速率是多少?
(5) H 发出的 FIN 段的序号是多少?若 S 收到后立即把 ACK 和 FIN 合并发回,H 最后发出的确认段的 seq 和 ack 各是多少?
跟我做
(1) 第二次握手确认 H 的 SYN:ack = 1000 + 1 = 1001。文件数据从 1001 开始编号,到 51000 结束,共 50 个段。
(2) 慢开始阶段每收到一个新确认,cwnd 加 1:cwnd 从 1 到 8 要收到 7 个确认,即第 7 个段(1001 + 6000 = 7001 ~ 8000)的确认。确认号 = 8001。此后进入拥塞避免,每轮加 1。
| 轮次 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| cwnd(MSS) | 1 | 2 | 4 | 8 | 9 | 10 | 11 | 12 |
| 发送窗口 = min(cwnd, 10) | 1 | 2 | 4 | 8 | 9 | 10 | 10 | 10 |
| 实际发送段数 | 1 | 2 | 4 | 8 | 9 | 10 | 10 | 6(只剩 6 段) |
| 累计 | 1 | 3 | 7 | 15 | 24 | 34 | 44 | 50 |
(3) 见上表。第 7 轮 cwnd = 11 > rwnd = 10,从第 7 轮起发送窗口被接收窗口卡在 10。(第 7、8 轮处于拥塞避免,cwnd 按“每轮加 1”的教材口径计;即使按“每个确认加 1/cwnd”细算,发送窗口仍是 10,答案不变。)
(4) 握手 1 个 RTT;第 1 轮的数据随第三次握手在 10 ms 时发出,第 k 轮在 k × 10 ms 发出,第 8 轮的段在 90 ms 被确认。共 90 ms。平均速率 = 50 000 × 8 bit ÷ 80 ms = 5 Mb/s。
(5) 数据最后一个字节是 51000,FIN 的序号 = 51001。S 不发数据,它的 SYN 占 5000,以后的报文段 seq 都是 5001;S 回的 ACK + FIN:seq = 5001,ack = 51002。H 最后的确认段:seq = 51002,ack = 5002。
- (2) 型问题按“每个确认加 1”数,不是按轮数:第 n 个段的确认让 cwnd 变成 n + 1。
- 发送窗口每一轮都要和 rwnd 比;rwnd 如果随缓存被填满而变小(2016-41),要逐轮重算。
- 最后一轮只发剩下的段,不要按窗口大小把文件“发多了”。
- 不发数据的一方,其后所有报文段的 seq 都是“初始序号 + 1”;FIN 也占一个序号,所以对 FIN 的确认号要再加 1。
TCP 与 UDP 全面对比:应用为什么这样选
| UDP | TCP | |
|---|---|---|
| 连接 | 无连接,没有握手时延 | 面向连接(三次握手建立,四次挥手释放) |
| 可靠性 | 尽最大努力交付;检验和发现错误就丢弃 | 可靠:无差错、不丢失、不重复、按序 |
| 数据单位 | 面向报文:不合并、不拆分,保留边界 | 面向字节流:按字节编号,怎么分段由 TCP 决定 |
| 通信方式 | 一对一、一对多、多对一、多对多(可广播、多播) | 只能一对一(点对点),全双工 |
| 首部 | 8 字节 | 20 ~ 60 字节 |
| 流量 / 拥塞控制 | 没有,速率由应用决定 | 有(rwnd、cwnd) |
| 检验和 | IPv4 中可选 | 必须 |
| 状态 | 不维护连接状态,服务器能同时服务更多客户 | 每条连接都要维护缓存、序号、计时器等状态 |
| 应用 | 传输层 | 为什么 |
|---|---|---|
| DNS 查询 | UDP | 一问一答、报文短:建连接的时间比查询本身还长;丢了应用重发一次即可(区域传送用 TCP) |
| DHCP | UDP | 客户还没有 IP 地址,只能广播,而 TCP 不支持广播 |
| SNMP、RIP、TFTP | UDP | 报文短、周期性发送,或由应用自己做简单的确认重传 |
| IP 电话、视频会议、直播 | UDP(常加 RTP) | 实时性第一:迟到的数据没用,宁可丢一点也不能等重传;不希望网络拥塞时被迫降速 |
| HTTP/1.1、HTTP/2、HTTPS | TCP | 网页、文件一个字节都不能错 |
| FTP、SMTP、POP3、IMAP、SSH、TELNET | TCP | 文件、邮件、命令要求可靠、按序 |
| BGP | TCP | 路由信息量大,要可靠传送;TCP 连接还能顺便检测邻站是否在线 |
| HTTP/3 | UDP(QUIC) | 拓展:在 UDP 之上自己实现可靠传输和拥塞控制,减少握手时延、避免一个丢包卡住所有数据 |
“UDP 比 TCP 快”要说准确:UDP 并不会让比特在链路上跑得更快,传播时延和发送时延对两者是一样的。UDP 省掉的是建立连接的握手时延、等待重传的时延和拥塞控制强迫的降速,首部也小一些。如果网络很好、几乎不丢包,一条已经建立好的 TCP 连接传大文件,速率并不比 UDP 慢。
一句话判断:要可靠、量大、不急 → TCP;要快、量小、能容忍丢失或要广播 → UDP。用 UDP 的应用如果也需要可靠,就在应用层自己做(确认、重传、编号)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 12KB
- B. 16KB
- C. 17KB
- D. 13KB
展开解析
D门限 12KB,cwnd:1 → 2 → 4 → 8 → 12(到门限)→ 13。
- A 错12KB 是第 4 个 RTT 后到达门限的值,第 5 个 RTT 还要拥塞避免加 1。
- B 错16KB 是慢开始 8 → 16 翻倍越过了门限;门限是 24 ÷ 2 = 12,翻倍只能到 12。
- C 错17KB 是在越过门限的 16 上又加了 1;正确是到 12 后再加 1 得 13。
- D 对对:2、4、8、12、13。
变化点:超时时的窗口和经过的 RTT 数都变了;8 翻倍到 16 超过门限,只能到 12。
- A. 8KB
- B. 5KB
- C. 10KB
- D. 12KB
展开解析
A门限 5KB:2、4、5、6、7、8、9、10 → cwnd = 10KB;发送窗口 = min(10, 8) = 8KB。
- A 对对:cwnd 到 10KB,与 rwnd = 8KB 取小。
- B 错5KB 是新门限 10 ÷ 2,不是 8 个 RTT 后的窗口;之后还要拥塞避免一路加上去。
- C 错10KB 是 8 个 RTT 后的 cwnd,忘了和接收窗口 8KB 取小。
- D 错12KB 多数了 2 个 RTT(8 个 RTT 后 cwnd 只有 10KB),而且还要与 rwnd = 8KB 取小。
变化点:又是“cwnd 超过了 rwnd”,最后一步取小。
- A. 5 RTT
- B. 20 RTT
- C. 16 RTT
- D. 32 RTT
展开解析
B门限 16:1 → 16 用 4 个 RTT,16 → 32 线性增长用 16 个 RTT,共 20 RTT。
- A 错5 RTT 是从 1 一直翻倍到 32(2⁵ = 32),忽略了门限已降为 16。
- B 对对:慢开始 4 个 RTT + 拥塞避免 16 个 RTT。
- C 错16 RTT 只算了拥塞避免 16 → 32 那一段,漏了慢开始 1 → 16 的 4 个 RTT。
- D 错32 RTT 是不用慢开始、每轮只加 1 的数法(1 → 32 也只要 31 个 RTT);正确是 4 + 16 = 20。
变化点:超时时的窗口从 16KB 改为 32KB。
- A. 收到第 1 个重复确认
- B. 收到 2 个重复确认
- C. 收到 3 个重复确认
- D. 重传计时器超时
展开解析
C收到 3 个重复确认就立即重传,不必等超时。
- A 错1 个重复确认可能只是报文段乱序到达,不能说明丢失。
- B 错2 个重复确认也还不够把握,规定要 3 个。
- C 对对:3 个重复确认。
- D 错等计时器超时是超时重传;快重传的意义就是不等超时。
变化点:由图读时刻换成规则本身。
- A. 12 MSS,1 MSS
- B. 24 MSS,12 MSS
- C. 12 MSS,15 MSS
- D. 12 MSS,12 MSS
展开解析
D快恢复:ssthresh = cwnd ÷ 2 = 12,cwnd = 新的 ssthresh = 12,接着拥塞避免。A 是超时后的处理;C 是 RFC 5681 的“+3”写法,408 不采用。
- A 错12、1 是超时后的处理(cwnd = 1、重新慢开始);收到 3 个重复确认执行快恢复,cwnd 不回到 1。
- B 错门限没有减半:ssthresh 应为 24 ÷ 2 = 12,24 是原来的 cwnd。
- C 错15 = 12 + 3 是 RFC 5681 的“+3”写法;408 的教材和真题用 cwnd = 新 ssthresh = 12。
- D 对对:ssthresh = cwnd = 12。
考点:5.6 节“四个算法”。
- A. SMTP
- B. HTTP/1.1
- C. DHCP
- D. BGP
展开解析
CDHCP 客户还没有 IP 地址,要靠广播找服务器,只能用 UDP(端口 67 / 68)。SMTP、HTTP/1.1、BGP 都用 TCP。
- A 错SMTP 用 TCP 的 25 端口传送邮件,要求可靠。
- B 错HTTP/1.1 用 TCP(端口 80),网页要可靠传送。
- C 对对:DHCP 用 UDP 67 / 68。
- D 错BGP 发言人之间用 TCP 连接(端口 179)交换路由信息。
考点:5.6 节“TCP 与 UDP 全面对比”。
- A. 发送窗口取接收窗口与拥塞窗口中的较小者
- B. 流量控制是全局性的,涉及网络中所有路由器
- C. 拥塞窗口由接收方在确认报文段中通告
- D. 只要接收窗口足够大,发送方就不会引起网络拥塞
展开解析
A发送窗口 = min(rwnd, cwnd)。流量控制是点对点的(B 错);接收方通告的是 rwnd,cwnd 是发送方自己估计的(C 错);接收方能收得下不等于网络扛得住(D 错)。
- A 对对:发送窗口 = min(rwnd, cwnd)。
- B 错流量控制是点对点的,只涉及发送方和接收方;全局性的是拥塞控制。
- C 错接收方通告的是接收窗口 rwnd;拥塞窗口 cwnd 由发送方根据丢包情况自己估计。
- D 错接收方收得下不等于网络扛得住,发得太快照样会把中间路由器堵塞,所以还要拥塞控制。
考点:5.6 节“拥塞:网络里的堵车”。
- UDP 分用时看哪个字段?TCP 呢?
答案
都看目的端口号(TCP 连接还要结合双方的 IP 和端口,即四元组)。 - 用反码求和算 0x8F3A 与 0x9C21 的检验和。
答案
0x8F3A + 0x9C21 = 0x12B5B,进位回卷得 0x2B5C,取反得 0xD4A3。 - UDP 伪首部有多长?包括哪些字段?发不发送?
答案
12 字节:源 IP、目的 IP、全 0 字节、协议号 17、UDP 长度。只用于计算检验和,不发送。 - 一个 TCP 首部的第 12、13 字节是 0x80、0x12,首部多长?这是什么报文段?
答案
0x80 高 4 位 = 8 → 首部 32 B(有 12 B 选项)。0x12 低 6 位 = 010010 → ACK = 1、SYN = 1,是第二次握手的报文段(选项里通常有 MSS)。 - TCP 首部长度可变,接收方靠哪个字段知道数据部分从第几个字节开始?若该字段为 6,数据部分前面有几字节选项?
答案
靠数据偏移(首部长度)字段,单位 4 字节。6 × 4 = 24 B 首部,其中固定部分 20 B,选项 4 B(例如一个 MSS 选项)。 - 客户 SYN 的 seq = 100,服务器 SYN 的 seq = 300,客户第三次握手不带数据,接着发第一个 500 字节的数据段,它的 seq 和 ack 各是多少?
答案
seq = 101(第三次握手不带数据不消耗序号),ack = 301。 - 为什么建立连接要三次握手?
答案
防止已失效的连接请求报文段突然又传到服务器,服务器误以为是新请求而建立连接、白白等待;同时让双方都确认自己的初始序号已被对方收到。 - 服务器先发 FIN 关闭连接,哪一方会进入 TIME-WAIT?哪一方会进入 CLOSE-WAIT?
答案
主动关闭的服务器进入 TIME-WAIT;客户是被动关闭方,进入 CLOSE-WAIT。TIME-WAIT 跟着“主动关闭”走,不跟着“客户”走。 - TIME-WAIT 为什么是 2MSL?
答案
保证最后一个 ACK 丢失时对方重传的 FIN 还能收到并重发 ACK(ACK 最多走 1 个 MSL,重传的 FIN 最多再走 1 个 MSL);让本连接的旧报文段在网络中全部消失。 - SYN 洪泛攻击让服务器的大量连接停在哪个状态?
答案
SYN-RCVD(半连接):服务器回了 SYN + ACK,却永远等不到第三次握手。 - 第一次测得 RTT 样本 60 ms,求 RTO。第二次样本 76 ms 后,RTTS 是多少?(α = 1/8)
答案
第一次:RTTS = 60,RTTD = 30,RTO = 60 + 120 = 180 ms。第二次:RTTS = 7/8 × 60 + 1/8 × 76 = 52.5 + 9.5 = 62 ms。 - 发送方收到 ack 分别为 2001、3001、3001、3001、3001 的 5 个确认,它在收到第几个确认时快重传?重传哪个序号?
答案
第 2 个确认 ack = 3001 是对新数据的正常确认,第 3、4、5 个才是重复确认,所以在收到第 5 个确认时重传 seq = 3001 的报文段。 - 乙通告 rwnd = 3000B,甲 cwnd = 5000B,最新确认号 1001,甲已发到 2500(下一个要发 2501),还能发多少字节?
答案
发送窗口 min(3000, 5000) = 3000,窗口 1001 ~ 4000;已发到 2500,还能发 2501 ~ 4000,共 1500 字节。 - 接收方通告零窗口后,若随后的“窗口更新”报文段丢失,TCP 靠什么避免双方永远等待?
答案
持续计时器:发送方收到零窗口通知就启动它,到时发送零窗口探测报文段(1 字节),接收方的确认会带上当前窗口值。 - cwnd = 20 时收到 3 个重复确认,之后 3 个 RTT 内都正常,cwnd 变成多少?若是超时呢(ssthresh 原来很大)?
答案
重复确认:ssthresh = cwnd = 10,之后 11、12、13 → 13。超时:ssthresh = 10,cwnd = 1,之后 2、4、8 → 8。 - 拥塞控制和流量控制都会限制发送窗口,二者分别由谁决定?
答案
流量控制由接收方通告的 rwnd 决定(接收缓存的空闲空间);拥塞控制由发送方自己估计的 cwnd 决定。发送窗口 = min(rwnd, cwnd)。 - DHCP 为什么用 UDP 而不用 TCP?
答案
客户还没有 IP 地址,必须用广播找服务器;TCP 只支持点对点连接,不能广播,而且建连接要先有地址。 - 一个 IP 分组首部长度字段为 5、总长度为 0x0030,协议字段为 17。其中 UDP 的数据部分有多少字节?
答案
IP 总长 48 B − IP 首部 20 B = UDP 用户数据报 28 B;再减去 UDP 首部 8 B,数据 20 B。 - 主动关闭方在 TIME-WAIT 期间又收到对方重传的 FIN,该怎么做?
答案
重发一个 ACK,并重新开始 2MSL 计时——这正是 TIME-WAIT 存在的第一个理由。 - 某报文段 FIN = 1、seq = 7001、不携带数据,对方对它的确认号是多少?
答案
FIN 占一个序号,确认号 = 7001 + 1 = 7002。 - “同一条 TCP 连接上的报文段一定沿同一条路径到达,所以不会乱序。”这句话错在哪里?
答案
TCP 的连接只存在于两端主机,网络层仍是无连接的数据报服务,每个 IP 分组独立选路,可能乱序到达;是 TCP 在接收端按序号重新排序,才让应用看到有序的字节流(5.1 两种服务)。 - 客户 SYN 的 seq = 5000,第三次握手的报文段同时携带了 200 字节数据。这个报文段的 seq 是多少?客户下一个报文段的 seq 是多少?
答案
SYN 占序号 5000,第三次握手的 seq = 5001,它携带的数据编号 5001 ~ 5200;下一个报文段 seq = 5201。若第三次握手不带数据,它不占序号,下一个报文段仍从 5001 开始。 - 一条 TCP 连接的两个端点是什么?只给出两台主机的 IP 地址,能确定一条 TCP 连接吗?
答案
端点是套接字(IP 地址 : 端口号),一条连接由两端的套接字(四元组)唯一确定。只给 IP 地址不行:同一对主机之间可以同时有多条连接,要靠端口号区分。
一页总结与必会题型
| 主题 | 核心结论 | 必背数字 | 真题 |
|---|---|---|---|
| 端口 | 传输层 = 进程到进程(端到端);分用看目的端口;一条 TCP 连接由四元组确定 | 端口 16 位;熟知 0 ~ 1023;短暂 49152 ~ 65535 | 2018-39 |
| UDP | 无连接、不可靠、面向报文、无拥塞控制;检验和含 12 B 伪首部,相加 → 回卷 → 取反 | 首部 8 B;协议号 17;全 0 = 不检验 | 2014-39、2018-39、2024-39 |
| TCP 首部 | 序号、确认号、窗口以字节计;数据偏移以 4 B 计;SYN、FIN 各占 1 个序号 | 首部 20 ~ 60 B;协议号 6;MSS 1460 | 2021-39、2011-47、2012-47 |
| 连接管理 | 握手:确认号 = 对方序号 + 1;挥手:主动方 FIN-WAIT-1 → 2 → TIME-WAIT,被动方 CLOSE-WAIT → LAST-ACK;“至少”时间:合并挥手、捎带数据 | TIME-WAIT 2MSL;保活 2 h、75 s、10 次 | 2011-39、2019-39、2020-39、2021-38、2022-39、2024-38、2026-47 |
| 可靠传输与流量控制 | 累积确认停在缺口;还能发 = min(cwnd, rwnd) − 在途;3 个重复确认快重传;零窗口靠持续计时器 | RTO = RTTS + 4RTTD;α = 1/8、β = 1/4 | 2009-38、2010-39、2011-40、2013-39、2021-40、2025-38 |
| 拥塞控制 | 慢开始翻倍(不越过门限)、拥塞避免加 1;超时 → 门限减半、cwnd = 1;3 个重复确认 → 门限减半、cwnd = 门限 | 恢复到 W:log2(W/2) + W/2 个 RTT | 2009-39、2014-38、2015-39、2017-39、2019-38、2020-38、2022-38、2016-41、2023-47 |
- UDP / TCP 检验和的反码求和(5.2)。
- 从十六进制 TCP 首部读出端口、序号、确认号、首部长度、标志位(5.3)。
- 传输效率:数据 ÷(数据 + 首部),分清首部取最短还是最长、算不算 IP 首部(5.3)。
- 三次握手、四次挥手各报文段的 SYN / ACK / FIN、seq、ack;由 SYN 和 FIN 的序号求数据量(5.4)。
- 主动方、被动方在挥手过程中的状态(5.4 状态机)。
- 从建立连接到关闭(或到释放)的时间:握手 + 数据轮次 + 挥手 + 2MSL(5.4)。
- 多段数据、丢段时的确认号;双向通信时的 seq / ack(5.5)。
- “还能发多少”:三指针 + min(cwnd, rwnd)(5.5)。
- 快重传在第几个确认时发生(5.5)。
- cwnd 逐轮表:超时、3 个重复确认、至少 / 最长时间、与 rwnd 取小(5.6)。
- TCP 综合题:握手确认号 → 逐轮 cwnd 与发送窗口 → 总时间与平均速率 → 挥手报文段字段(5.6 综合题示范)。
5.✎本篇真题闯关(27 题)
本篇各小节挂的真题全部在这里,按小节排好。可以展开后一道道做,也可以用弹窗模式连续做。做题记录(对/错)只保存在你这台电脑的浏览器里,小节标题下的题号会随之变绿或变红。
应用层:DNS、FTP、电子邮件、HTTP,以及“打开一个网页”的全过程
应用层协议规定应用进程之间怎样交换报文:报文的类型和格式、各字段的含义、什么时候发。408 考的应用层协议只有四个——DNS、FTP、电子邮件(SMTP、POP3、IMAP)、HTTP。选择题考它们用什么传输层协议、什么端口、查询方式和连接方式;计算题考 DNS 查询次数和 HTTP 的 RTT 个数。最后一节把前面五篇串起来:一台新主机打开一个网页,依次用到哪些协议——这是综合题的高频背景(2011-47、2021-47)。
本篇地图:先看全貌,再逐节攻克
应用层的每个协议都可以用同一组问题来学:它解决什么问题?用 TCP 还是 UDP、哪个端口?谁发起、怎么交互(时序图)?报文长什么样?把这四问答清楚,选择题就不会丢分;计算题只有两类——DNS 查几次、HTTP 要几个 RTT。
| 小节 | 选择题 | 综合题 | 一句话说清考什么 |
|---|---|---|---|
| 6.1 应用模型 | 2 | — | C/S 与 P2P 的特点;UDP / TCP 请求要几个 RTT |
| 6.2 DNS | 4 | 2021-47 | 递归 / 迭代各发几次;用 UDP;查询时间 |
| 6.3 FTP | 2 | 2023-47(连接) | 控制连接与数据连接;20 / 21 是谁的端口 |
| 6.4 电子邮件 | 5 | — | 哪一段用 SMTP / POP3;SMTP 只能传 7 位 ASCII |
| 6.5 HTTP | 5 | 2011-47 | RTT 个数;报文首部的含义;Cookie |
| 6.6 全过程 | (1) | 2015-47、2020-47、2021-47 | 依次用到哪些协议;各帧 / 分组的地址 |
- 6.1 → 6.2(约 2 小时):DNS 的“查几次、要多久”是计算题,迭代时序图要会画。
- 6.3 → 6.4(约 1.5 小时):FTP、邮件主要是概念,抓住“谁连谁、用什么端口、推还是拉”。
- 6.5(约 2 小时):HTTP 的 RTT 计算是重点,报文和状态码会读即可。
- 6.6(约 1 小时):把 DHCP、ARP、DNS、TCP、HTTP 串成一张时序图,为第 7 篇 t7 打底。
| 协议 | 做什么 | 传输层 / 端口 | 模式 | 连接与状态 |
|---|---|---|---|---|
| DNS | 域名 → IP 地址 | UDP 53(区域传送用 TCP) | C/S | 一问一答 |
| FTP | 文件传送 | TCP 21(控制)、20(主动模式数据) | C/S | 控制连接持续、数据连接非持续;有状态;带外 |
| SMTP | 发送邮件(推) | TCP 25 | C/S | 带内,命令和邮件在同一连接 |
| POP3 / IMAP | 读取邮件(拉) | TCP 110 / 143 | C/S | IMAP 在服务器保存状态 |
| HTTP | 取网页等 Web 对象 | TCP 80(HTTPS 443) | C/S | 无连接、无状态;1.1 默认持续连接 |
| DHCP | 分配 IP 地址等配置 | UDP 67 / 68 | C/S | 4.6 节 |
| TELNET / SSH | 远程登录 | TCP 23 / 22 | C/S | SSH 加密 |
| SNMP | 网络管理 | UDP 161 / 162 | C/S | 了解 |
应用层协议规定的是:交换的报文有哪些类型(请求、响应)、报文的语法(有哪些字段、怎样描述)、字段的语义(含义)、何时发送和怎样响应。它是网络应用的一部分,但不是全部——浏览器、邮件客户端这些程序里只有一小块在“说协议”。
6.1网络应用模型:C/S 与 P2P
客户 / 服务器与对等模型
C/S 像食堂:窗口(服务器)一直开着,地点固定,学生(客户)主动去打饭,学生之间不互相打饭;人一多窗口就排长队。P2P 像大家各带一道菜的聚餐:每个人既吃别人的菜,也把自己的菜分给别人;来的人越多,菜反而越多。哪里不像:P2P 网络里“带来的菜”是数据的副本,分出去自己并不少。
| 客户 / 服务器(C/S) | 对等(P2P) | |
|---|---|---|
| 角色 | 服务器总是打开、有固定地址(熟知端口),被动等待;客户主动发起 | 每个结点既是客户也是服务器,地位对等 |
| 客户之间 | 不直接通信 | 直接交换数据 |
| 可扩展性 | 用户越多服务器越忙,服务器是瓶颈和单点故障 | 用户越多,提供服务的结点也越多,可扩展性好 |
| 管理 | 集中管理,容易控制 | 分散,难管理、安全性差 |
| 例子 | Web、FTP、电子邮件、DNS | BT 下载、P2P 流媒体、区块链 |
拓展 文件分发时间:服务器上传速率 us,要把大小为 F 的文件发给 N 个用户,每个用户下载速率至少 d、上传速率 u。C/S 时服务器要上传 N 份:DC/S = max(NF ÷ us,F ÷ d);P2P 时总上传能力是 us + Nu:DP2P = max(F ÷ us,F ÷ d,NF ÷ (us + Nu))。跟我算:F = 1000 Mb,us = 100 Mb/s,d = 50 Mb/s,u = 10 Mb/s,N = 100:C/S 要 max(1000, 20) = 1000 s;P2P 要 max(10, 20, 100000 ÷ 1100) ≈ 90.9 s。N 增到 1000 时,C/S 涨到 10000 s,P2P 只到 99 s——这就是“分发大文件时 P2P 通常更快”(2019-40 的 D 项)。
- A. 在 P2P 模型中,结点之间具有对等关系
- B. 在客户/服务器(C/S)模型中,客户与客户之间可以直接通信
- C. 在 C/S 模型中,主动发起通信的是客户,被动通信的是服务器
- D. 在向多用户分发一个文件时,P2P 模型通常比 C/S 模型所需时间短
展开解析
B本题选错误的叙述。C/S 模型中客户只与服务器通信,客户与客户之间不能直接通信(例如两个浏览器不能直接互访)。
- A 正确P2P 中各结点地位对等,既是客户又是服务器。
- B 错误C/S 中客户之间不直接通信。
- C 正确客户主动发起,服务器被动等待。
- D 正确P2P 中每个下载者也同时上传,分发大文件通常更快。
C/S:客户找服务器;P2P:大家互相找。
用 UDP 还是 TCP:一次请求要几个 RTT
用 UDP:请求一去、应答一回,1 RTT。用 TCP:先三次握手 1 RTT(第三次握手可以捎带请求),再请求 + 应答 1 RTT,至少 2 RTT。这就是 DNS 这类“一问一答”的应用选 UDP 的原因(5.6 节的应用选择表)。
- A. 8ms,8ms
- B. 8ms,16ms
- C. 16ms,8ms
- D. 16ms,16ms
展开解析
BUDP 不用建立连接:请求 + 应答 = 1 RTT = 8ms。TCP:三次握手 1 RTT(第三次握手捎带请求),请求 + 应答 1 RTT,共 2 RTT = 16ms。
- A 错TCP 忽略了建立连接的 1 RTT。
- B 对8ms,16ms。
- C 错C 是 16ms、8ms:两个值颠倒了——需要先握手的是 TCP(2 RTT = 16ms),UDP 一问一答只要 1 RTT = 8ms。
- D 错UDP 无连接,不需要先花 1 RTT 建立连接。
UDP 1 RTT;TCP 至少 2 RTT(握手 + 请求响应)。
2019-40:C/S 中客户只和服务器通信,客户之间不能直接通信;P2P 中每个下载者也在上传,向很多用户分发同一个文件通常比 C/S 快。2025-39:一问一答的服务,UDP 只要 1 RTT,TCP 要先握手再请求,至少 2 RTT(第三次握手可以捎带请求)。可能的新考法:C/S 的瓶颈在服务器(用户越多越慢);P2P 结点既是客户又是服务器;分发时间 DC/S = max(NF ÷ us, F ÷ d)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 每个结点既可以是客户也可以是服务器
- B. 结点之间可以直接交换数据
- C. 适合大文件的分发
- D. 用户越多,服务器负担越重
展开解析
DP2P 中下载者同时也在上传,用户越多提供服务的结点也越多,没有“中心服务器负担越重”的问题——那是 C/S 的缺点。
- A 不选正确:P2P 中每个结点既可以请求服务,也可以提供服务。
- B 不选正确:P2P 结点之间直接交换数据,不经中心服务器转发。
- C 不选正确:下载者同时也在上传,分发大文件比 C/S 快。
- D 选错误:P2P 用户越多,提供服务的结点也越多;“服务器负担越重”是 C/S 的缺点。
变化点:由 C/S 的错误说法换成 P2P。
- A. 10ms,20ms
- B. 10ms,10ms
- C. 20ms,20ms
- D. 10ms,30ms
展开解析
AUDP 一问一答 1 RTT = 10ms;TCP 握手 1 RTT + 请求应答 1 RTT = 20ms。
- A 对对:UDP 10ms,TCP 20ms。
- B 错TCP 忽略了三次握手的 1 RTT;第三次握手可以捎带请求,但握手本身省不掉。
- C 错UDP 无连接,不需要先花 1 RTT 建连,一问一答只要 10ms。
- D 错TCP 多算了 1 个 RTT:第三次握手可以捎带请求,握手 1 RTT + 请求应答 1 RTT = 20ms。
变化点:换一个 RTT。
- A. 每个结点只能作为客户
- B. 结点之间必须通过中心服务器转发数据
- C. 参与的结点越多,系统总的上传能力越强
- D. 不能用于文件分发
展开解析
CP2P 中每个结点既是客户又是服务器,下载者同时也在上传,所以规模越大总服务能力越强。
- A 错P2P 中每个结点既是客户也是服务器,不是只能作客户。
- B 错P2P 结点之间直接交换数据;必须经中心服务器的是 C/S 的通信方式。
- C 对对:结点越多,总上传能力越强。
- D 错P2P 恰恰最适合文件分发(如 BT 下载),参与的结点越多分发越快。
考点:6.1 节“客户 / 服务器与对等模型”。
6.2域名系统 DNS
问题:人记得住 www.pku.edu.cn,网络层只认 202.112.7.13 这样的 IP 地址;而且网站换了服务器、IP 变了,用户不该需要知道。DNS 就是因特网的“电话簿”:一个分布式的数据库,把域名解析为 IP 地址。DNS 是应用层协议,查询报文通常用 UDP,端口 53(2018-33)。
你想找“北京大学计算机学院张老师”。先问本单位的门卫(本地域名服务器);门卫不知道,就去问“全国总台”(根):“北大在哪?”总台说“去问教育系统(edu.cn)”;教育系统说“去问北大(pku.edu.cn)”;北大传达室终于告诉你张老师的电话。门卫把答案记在小本上(缓存),下次有人再问就不必跑一圈。哪里不像:门卫只记一段时间,过期就要重新问(生存时间 TTL)。
层次域名空间
域名采用层次结构,各级之间用“.”隔开,从右往左级别降低:www.cs.pku.edu.cn 中 cn 是顶级域名,edu 是二级,pku 是三级,cs 是四级,www 是主机名。每一级只要求在上一级内不重名,所以全世界的域名都唯一。
四类域名服务器与“区”
一台服务器装不下全世界的域名,DNS 把名字空间切成许多区(zone):一个区是由一个服务器负责管辖的范围,可以是一个域,也可以只是域的一部分(如 pku.edu.cn 可以把 cs.pku.edu.cn 单独划为一个区)。负责一个区的服务器就是这个区的权限域名服务器。
| 服务器 | 知道什么 / 做什么 | 考点 |
|---|---|---|
| 根域名服务器 | 最高层,知道所有顶级域名服务器的地址;本地服务器自己解析不了时首先求助根 | 全世界只有 13 个“名字”(a ~ m.root-servers.net),但每个都有大量镜像(任播,4.7 节),实际有上千台 |
| 顶级域名服务器 | 管理在本顶级域名下注册的所有二级域名,回答“下一步问谁” | com、cn 等 |
| 权限域名服务器 | 负责一个区,保存区内主机名到 IP 的映射,能给出最终答案 | “问到哪一级为止”= 问到能解析出该主机的权限服务器 |
| 本地域名服务器 | 离用户最近(每个单位、每个 ISP 都有),主机发出的 DNS 查询首先发给它;代主机去查,并缓存结果 | 主机配置里的“首选 DNS”;严格说不属于上面的层次结构 |
递归查询与迭代查询
按时间顺序画出来(主机解析 www.abc.com,所有缓存为空,本地服务器迭代):
查询次数与时间:跟我算
跟我算
最长:本地服务器缓存全空,依次问根、com、abc.com:3 × 20 = 60 ms;然后 TCP 握手 1 RTT = 20 ms;HTTP 请求 + 响应 1 RTT = 20 ms。共 100 ms。
最短:本地服务器(或 H 自己)缓存里就有 www.abc.com 的 IP,DNS 时间 0;TCP + HTTP = 2 × 20 = 40 ms。
2020-40 是同一个模型,RTT 换成 10 ms:最短 20 ms、最长 50 ms。
- A. 一条、一条
- B. 一条、多条
- C. 多条、一条
- D. 多条、多条
展开解析
考点6.2 递归查询
A递归查询:被问的服务器负责替提问者把答案找回来。主机问本地服务器 1 次;本地服务器(缓存为空)问根 1 次,之后由根、顶级……一级级代问,结果原路返回。
- A 对一条、一条。
- B 错本地服务器发多条是迭代查询的情况。
- C 错主机只向本地服务器发一次请求。
- D 错D 是多条、多条,两处都错:递归方式下主机只向本地服务器发 1 条请求,本地服务器也只向根发 1 条,之后由根、顶级服务器逐级代问。
递归:每个人只问一次,由下家负责到底;迭代:提问者自己挨个问。
- A. 0,3
- B. 1,3
- C. 0,4
- D. 1,4
展开解析
C201.1.1.1 是 H1~H4 的本地域名服务器。
- 最少:它的缓存里已有 www.abc.xyz.com 的记录,直接回答,发出 0 次查询。
- 最多:缓存全空,依次问根(得到 com 服务器)、com(得到 xyz.com 服务器)、xyz.com(得到 abc.xyz.com 服务器)、abc.xyz.com(得到 www 的地址),共 4 次。
- A 错最多少算了一级:www 的地址要由 abc.xyz.com 的权限服务器给出。
- B 错缓存命中时一次都不用发,最少是 0。
- C 对0,4。
- D 错D 的最多 4 次对了,但最少写成 1:本地服务器缓存里已有 www.abc.xyz.com 的记录时直接回答,一次查询都不用发,最少是 0。
最多次数 = 域名的级数(从根数到能解析主机的那一级);最少 0(缓存)。
- A. 10ms,40ms
- B. 10ms,50ms
- C. 20ms,40ms
- D. 20ms,50ms
展开解析
DH 与本地域名服务器同在局域网,这段时延忽略。
- 最短:H 或本地服务器缓存中有 www.abc.com 的地址,不用查 Internet 上的服务器;TCP 握手 1 RTT + HTTP 请求响应 1 RTT = 20ms。
- 最长:缓存全空,本地服务器依次迭代询问根、com、abc.com 共 3 RTT;再加握手和请求响应 2 RTT,共 5 RTT = 50ms。
- A 错最短漏了 TCP 握手;最长 40ms 比正确值少 1 个 RTT。
- B 错最短 10ms 漏了 TCP 握手。
- C 错最长 40ms 少算 1 个 RTT:3 次迭代查询 + 握手 + 请求响应一共 5 个 RTT。
- D 对20ms,50ms。
总时间 = DNS 迭代次数 × RTT + TCP 握手 1 RTT + HTTP 1 RTT。
- A. FTP
- B. DNS
- C. SMTP
- D. HTTP
展开解析
B“无连接服务”就是 UDP。四个协议中只有 DNS 使用 UDP(端口 53):查询报文短,一问一答,不值得先建连接。
- A 错FTP 用 TCP(21、20)。
- B 对DNS 用 UDP。
- C 错SMTP 用 TCP(25)。
- D 错HTTP 用 TCP(80)。
用 UDP 的应用层协议:DNS、DHCP、SNMP、RIP、TFTP。
高速缓存:每个域名服务器(以及主机)都缓存最近解析过的记录,并给每条记录设置生存时间 TTL;过期就删除,以免地址变了还用旧的。有缓存时可以大大减少查询,最好情况下一次也不用查。本地服务器还常缓存顶级域名服务器的地址,所以实际上很少需要问根。
资源记录:DNS 数据库里存的是什么
权限域名服务器里存的不只是“主机名 → IP”,而是一条条资源记录(RR),格式为(名字,值,类型,生存时间)。常用类型:
| 类型 | 名字 → 值 | 例子 | 用在哪里 |
|---|---|---|---|
| A | 主机名 → IPv4 地址 | www.abc.com → 5.6.7.8 | 最常用的“域名解析” |
| AAAA | 主机名 → IPv6 地址 | www.abc.com → 2001:db8::8 | IPv6(4.7 节) |
| NS | 域 → 负责该域的权限域名服务器的主机名 | abc.com → dns.abc.com | 迭代查询中“你去问谁”的依据 |
| CNAME | 别名 → 规范主机名 | www.abc.com → web1.abc.com | 一台主机多个名字;CDN 常用 |
| MX | 邮件域 → 邮件服务器的主机名 | abc.com → mail.abc.com | 发邮件给 x@abc.com 时,SMTP 先查 MX 找对方邮件服务器 |
| PTR | IP 地址 → 主机名(反向解析) | 8.7.6.5.in-addr.arpa → www.abc.com | 由 IP 反查域名 |
2016-40 题干里说“规范域名为 www.abc.xyz.com”,“规范”二字正是相对于 CNAME 的“别名”而言的。
拓展 DNS 报文与“递归”标志
DNS 的查询和应答用同一种报文格式:12 字节首部,后面是问题、回答、授权、附加四个部分(后三部分装的都是资源记录)。
DNS 还有两个常见用法:负载均衡——一个热门域名对应多条 A 记录(多台服务器),DNS 每次按不同顺序返回,把访问分散开;反向解析——由 IP 地址查域名,用 PTR 记录(如邮件服务器检查对方 IP 是否有合法域名,以过滤垃圾邮件)。
- 传输层(2018-33):DNS 用 UDP(无连接);FTP、SMTP、HTTP 都用 TCP。
- 查询报文数(2010-40、2016-40):递归时每一级只发 1 条;迭代时本地服务器问几级发几条,缓存命中 0 条。
- 时间(2020-40):DNS 迭代次数 × RTT + TCP 握手 + HTTP 请求响应。
可能的新考法:根 / 权限服务器的作用;资源记录类型(MX 给邮件服务器、CNAME 是别名);DNS 缓存的作用与 TTL;DNS 什么时候用 TCP(区域传送、应答超过 512 B)。
- 本地域名服务器不在根、顶级、权限的层次里,它是“代主机去问”的那一台。
- “迭代”的服务器只返回下一步问谁,不代问;“递归”的服务器代问到底,再把结果返回。
- DNS 查询次数不一定是 4:要按域名的层数和缓存情况数。
- 域名大小写不敏感;一台主机可以有多个域名,一个域名也可以对应多个 IP(负载均衡)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 0,4
- B. 0,5
- C. 1,5
- D. 1,6
展开解析
B最少:本地缓存命中,0 次。最多:依次问根、cn、edu.cn、pku.edu.cn、cs.pku.edu.cn,共 5 次。
- A 错最多 4 次是 www.abc.xyz.com 的层数(2016-40);mail.cs.pku.edu.cn 多一级,要问 5 次。
- B 对对:最少 0 次,最多根、cn、edu.cn、pku.edu.cn、cs.pku.edu.cn 共 5 次。
- C 错缓存里有记录时本地服务器直接回答,一次都不用发,最少是 0。
- D 错最少应为 0;最多 6 次是把主机名 mail 也当成了一级要问的服务器。
变化点:域名多了一级,最多次数加 1。
- A. 一条,一条
- B. 多条,一条
- C. 一条,多条
- D. 多条,多条
展开解析
C主机只问本地服务器一次;本地服务器迭代地依次问根、顶级、权限服务器,发出多条。
- A 错一条、一条是全部递归的情况(2010-40);本地服务器改为迭代后要逐个去问根、顶级、权限服务器。
- B 错主机向本地服务器是递归查询,只发一条;发多条的是本地服务器。
- C 对对:主机一条,本地服务器多条。
- D 错主机只发一条:递归查询下,本地服务器负责把答案查回来,主机不用再问别人。
变化点:“全部递归”换成“本地服务器迭代”。
- A. 20ms,80ms
- B. 40ms,80ms
- C. 20ms,100ms
- D. 40ms,100ms
展开解析
D最短 2 RTT = 40ms;最长 3 次迭代 + 握手 + 请求响应 = 5 RTT = 100ms。
- A 错最短漏了一个 RTT(TCP 握手、HTTP 各 1 个,共 40ms);最长也少算了 1 个 RTT。
- B 错最短对了;最长是 5 个 RTT(3 次迭代 + 握手 + 请求响应)= 100ms,80ms 少了 1 个 RTT。
- C 错最长对了;最短至少要 TCP 握手 1 RTT + HTTP 1 RTT = 40ms,20ms 漏了握手。
- D 对对:最短 40ms,最长 100ms。
变化点:RTT 翻倍,结果都翻倍。
- A. MX 记录
- B. A 记录
- C. CNAME 记录
- D. PTR 记录
展开解析
AMX 记录给出一个邮件域对应的邮件服务器主机名;再查该主机名的 A 记录得到 IP。CNAME 是别名,PTR 用于反向解析。
- A 对对:MX 记录给出邮件域的邮件服务器。
- B 错A 记录给的是主机名对应的 IPv4 地址;要先由 MX 记录查出邮件服务器的主机名,再查它的 A 记录。
- C 错CNAME 记录给的是别名对应的规范主机名,不说明哪台是邮件服务器。
- D 错PTR 记录用于由 IP 地址反查域名,方向正好相反。
考点:6.2 节“资源记录”。
- A. 它保存了因特网上所有主机的 IP 地址
- B. 本地域名服务器无法解析时首先求助于它,它知道所有顶级域名服务器的地址
- C. 主机发出的 DNS 查询首先发给它
- D. 全世界只有 13 台物理服务器
展开解析
B根只知道顶级域名服务器在哪;主机的查询首先发给本地域名服务器;13 是根服务器的“名字”个数,每个都有大量镜像。
- A 错根服务器只知道顶级域名服务器的地址,并不保存所有主机的 IP 地址(那要逐级去问)。
- B 对对:本地服务器解析不了时先问根,根知道所有顶级域名服务器的地址。
- C 错主机发出的 DNS 查询首先发给本地域名服务器,本地服务器解析不了才去问根。
- D 错13 是根服务器“名字”的个数(a ~ m),每个都有大量镜像(任播),实际有上千台。
考点:6.2 节“四类域名服务器与区”。
6.3文件传送协议 FTP
两条连接:控制连接与数据连接
FTP 提供交互式的文件访问和传送:列目录、上传、下载、改名、删除,还能在不同操作系统、不同文件格式之间传文件。它使用 TCP,采用 C/S 方式,最大的特点是使用两条 TCP 连接:
- 控制连接:客户连服务器的 21 端口,在整个会话期间一直保持打开,传送命令(USER、PASS、LIST、RETR 下载、STOR 上传、QUIT 等)和应答。
- 数据连接:每传送一个文件(或一次目录列表)建立一次,传完就关闭。FTP 服务器要为每个会话记住当前目录、登录用户等状态,所以 FTP 是有状态的(HTTP 无状态)。
数据连接由谁发起,分两种模式:
- 客户与服务器 21 端口三次握手,控制连接建立;服务器回 220 欢迎信息。
- 客户在控制连接上发 USER、PASS 登录(这就是 2023-47 说的“登录时建立的是控制连接”)。
- 客户发 PORT 告知自己的数据端口,再发 LIST:服务器从 20 端口连过来,建立第 1 条数据连接,传完目录列表就关闭。
- 客户再发 PORT、RETR file.txt:服务器建立第 2 条数据连接,传文件,传完关闭。
- 客户发 QUIT,服务器回 221,控制连接最后释放。
整个会话 1 条控制连接、2 条数据连接;控制连接从头开到尾(持续),数据连接用一次关一次(非持续)。
- A. 建立在 TCP 之上的控制连接
- B. 建立在 TCP 之上的数据连接
- C. 建立在 UDP 之上的控制连接
- D. 建立在 UDP 之上的数据连接
展开解析
AFTP 使用 TCP;命令和应答在控制连接(服务器 21 端口)上传送,文件在数据连接上传送。
- A 对建立在 TCP 之上的控制连接。
- B 错数据连接传的是文件内容,不是命令。
- C 错C 的“控制连接”对了,但 FTP 的两条连接都建立在 TCP 上(控制连接连服务器 21 端口),不用 UDP。
- D 错D 两处都错:FTP 不用 UDP,而且命令走的是控制连接,不是数据连接。
FTP:命令走 21(控制连接,全程保持),文件走 20(数据连接,一次一建)。
- A. 数据连接在每次数据传输完毕后就关闭
- B. 控制连接在整个会话期间保持打开状态
- C. 服务器与客户端的 TCP 20 端口建立数据连接
- D. 客户端与服务器的 TCP 21 端口建立控制连接
展开解析
C本题选错误的叙述。20 是服务器一方的端口:主动模式下,服务器用自己的 20 端口去连接客户指定的临时端口,而不是连接客户的 20 端口;被动模式下连 20 端口都不用。
- A 正确A 说得对:数据连接是非持续的,每传完一个文件(或一次目录列表)就关闭,下一次再新建。
- B 正确控制连接在整个会话期间保持打开。
- C 错误客户端的数据端口是临时端口,不是 20。
- D 正确客户连服务器的 21 端口建立控制连接。
21、20 都是服务器端的熟知端口;客户端用临时端口。
2009-40 问命令走哪条连接(TCP 上的控制连接);2017-40 的陷阱是“服务器与客户端的 TCP 20 端口建立数据连接”——20 是服务器自己的端口,不是客户端的。综合题 2023-47 问“控制连接是持久的还是非持久的、登录时建立的是哪条连接”(控制连接持久、数据连接非持久、登录建立控制连接)。可能的新考法:主动 / 被动模式各由谁发起;为什么说 FTP 是带外的;FTP 是否有状态。
- 21 端口、20 端口都是服务器上的;客户用的是临时端口。
- 被动模式下服务器也不用 20 端口,而是临时开一个端口。
- FTP 用 TCP;“简单文件传送协议” TFTP 才用 UDP(69 端口),它只有读、写两种操作,常用于无盘工作站、设备升级。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 客户主动连接服务器指定的临时端口
- B. 服务器从 20 端口主动连接客户
- C. 客户主动连接服务器的 21 端口
- D. 服务器从 21 端口主动连接客户
展开解析
A被动模式下服务器打开一个临时端口并告诉客户,由客户主动去连;主动模式才是服务器从 20 端口连客户。
- A 对对:客户连服务器在 PASV 应答里给出的临时端口。
- B 错服务器从 20 端口主动连客户是主动模式(PORT)的做法。
- C 错21 端口是控制连接用的;被动模式下客户连的是服务器在 PASV 应答里给出的临时端口。
- D 错两种模式都没有“服务器从 21 端口连客户”:21 只用于控制连接,而且由客户发起。
变化点:主动模式换成被动模式。
- A. 建立在 TCP 之上的控制连接
- B. 建立在 TCP 之上的数据连接
- C. 建立在 UDP 之上的控制连接
- D. 建立在 UDP 之上的数据连接
展开解析
B命令和应答走控制连接,文件内容走数据连接,两者都建立在 TCP 之上。
- A 错控制连接传送的是命令和应答,文件内容走数据连接。
- B 对对:文件走 TCP 上的数据连接。
- C 错FTP 不用 UDP,控制连接建立在 TCP 上,而且文件也不走控制连接。
- D 错FTP 不用 UDP,数据连接也建立在 TCP 上。
变化点:“传递命令”换成“传送文件”。
- A. 由服务器用 20 端口主动连接客户
- B. 与控制连接共用同一条 TCP 连接
- C. 使用 UDP 传送
- D. 由客户主动连接服务器临时打开的端口
展开解析
D被动模式下服务器只“开门等待”,由客户发起数据连接;主动模式才是服务器用 20 端口连客户。FTP 的两条连接都用 TCP。
- A 错服务器用 20 端口主动连客户是主动模式(PORT)。
- B 错FTP 的命令和数据分别走两条连接(带外传送),数据连接不与控制连接共用。
- C 错FTP 的两条连接都用 TCP,不用 UDP。
- D 对对:由客户主动连服务器临时打开的端口。
考点:6.3 节“主动模式与被动模式”。
6.4电子邮件:SMTP、POP3、IMAP、MIME
组成:用户代理、邮件服务器、两类协议
你把信投进自家附近的邮局(发送方邮件服务器),邮局之间负责转运到对方的邮局(接收方邮件服务器),信就放在对方的信箱里;对方什么时候有空,自己去邮局取(拉)。寄信、转运是“推”(SMTP),取信是“拉”(POP3 / IMAP)。哪里不像:邮件服务器之间是直接建立 TCP 连接送达的,不像邮政那样经过中间转运站。
- 三个组成部分:用户代理(邮件客户端软件,如 Outlook、Foxmail,负责写、读、显示)、邮件服务器(收发邮件、报告投递结果,全天运行)、邮件协议。所有邮件协议都用 TCP(2015-33)。
- 电子邮件地址的格式:用户名@邮件服务器的域名,如 bob@b.com。发送方邮件服务器先用 DNS 查 b.com 的 MX 记录,找到对方邮件服务器(6.2 节)。
SMTP:发信的三个阶段
SMTP(简单邮件传送协议,TCP 25)负责发送:把邮件从用户代理推到邮件服务器,或在邮件服务器之间推送;不能用来从服务器取邮件(2013-40)。它是 C/S 方式:发送方是 SMTP 客户,接收方邮件服务器是 SMTP 服务器。SMTP 的命令和应答都是可读的 ASCII 文本:
- SMTP 只能传送 7 位 ASCII 码文本(2018-40):图片、视频、可执行文件、中文都要先用 MIME 编码。
- 邮件服务器之间直接建 TCP 连接传送;对方服务器暂时连不上,邮件留在发送方服务器的队列里,稍后重试。
- Alice 的用户代理把照片按 MIME(base64)编码成 ASCII,加上首部(To、Subject……),用 SMTP 交给 a.com 的邮件服务器(TCP 25)。
- a.com 的邮件服务器把信放进发送队列;用 DNS 查 b.com 的 MX 记录,得到 mail.b.com 及其 IP。
- a.com 邮件服务器作为 SMTP 客户,直接与 mail.b.com 的 25 端口建 TCP 连接,按三个阶段把信送过去;mail.b.com 把它放进 Bob 的邮箱。
- Bob 的用户代理用 POP3(110)或 IMAP(143)连上 mail.b.com,取回这封信,再按 MIME 解码出照片。
四段里:第 1、3 段是 SMTP(推),第 4 段是 POP3 / IMAP(拉),第 2 段的 DNS 用 UDP。若 Bob 用网页邮箱,第 4 段改成 HTTP。
I. 只支持传输 7 比特 ASCII 码内容 II. 支持在邮件服务器之间发送邮件
III. 支持从用户代理向邮件服务器发送邮件 IV. 支持从邮件服务器向用户代理发送邮件
- A. 仅 I、II 和 III
- B. 仅 I、II 和 IV
- C. 仅 I、III 和 IV
- D. 仅 II、III 和 IV
展开解析
A逐条判断。
- I 对:SMTP 只能传 7 位 ASCII 码,其他内容要先用 MIME 编码。
- II 对:邮件服务器之间用 SMTP。
- III 对:用户代理发信给邮件服务器用 SMTP。
- IV 错:邮件服务器 → 用户代理是“取信”,用 POP3 或 IMAP。
- A 对仅 I、II 和 III。
- B 错B 选了错误的 IV(邮件服务器 → 用户代理是取信,用 POP3 / IMAP),又漏了正确的 III(用户代理发信给邮件服务器用 SMTP)。
- C 错C 选了错误的 IV,又漏了正确的 II:邮件服务器之间转发邮件用的正是 SMTP。
- D 错D 选了错误的 IV,又漏了正确的 I:SMTP 只能传 7 位 ASCII 码,非 ASCII 内容要先用 MIME 编码。
SMTP 只“推”,不负责把邮件交到收件人的用户代理。
- A. JPEG 图形
- B. MPEG 视频
- C. EXE 文件
- D. ASCII 文本
展开解析
DSMTP 只能传送 7 位 ASCII 码文本。图像、视频、可执行文件都是二进制数据,要先经 MIME 编码成 ASCII 才能传。
- A 错JPEG 图形是二进制,需要 MIME 转换。
- B 错MPEG 视频也是二进制数据,含大量不属于 7 位 ASCII 的字节,要先用 MIME(如 base64)编码才能交给 SMTP。
- C 错EXE 可执行文件同样是二进制数据,必须先经 MIME 编码成 ASCII,SMTP 才能传。
- D 对ASCII 文本可直接传送。
SMTP 只认 7 位 ASCII;其余一律 MIME。
| SMTP | HTTP | |
|---|---|---|
| 方向 | 推:发送方主动把邮件推给接收方服务器 | 拉:浏览器主动把对象从服务器拉回来 |
| 内容编码 | 只能 7 位 ASCII,其他内容靠 MIME | 可以直接传任意二进制数据 |
| 多个对象 | 一封邮件的所有部分(正文、附件)放在一个报文里 | 每个对象(页面、图片)分别用一个响应报文 |
| 相同点 | 都用 TCP 持续连接;命令和应答都是可读的 ASCII 文本;都有“状态码”式的回答 | |
POP3 与 IMAP:取信
| POP3(TCP 110) | IMAP(TCP 143) | |
|---|---|---|
| 邮件放在哪 | 下载到本机,通常“下载后删除”(也可设为保留) | 一直保存在服务器上 |
| 能做什么 | 读取、删除;一条 TCP 连接中可以取多封邮件(2025-40) | 在服务器上建文件夹、移动邮件;可以只下载首部或一部分;按条件搜索 |
| 多设备 | 在一台电脑下载后,另一台看不到 | 手机、电脑看到的一致 |
| 状态 | 会话之间不保存状态 | 服务器保存用户的状态信息 |
| 方向 | 都只负责“邮件服务器 → 用户代理”(拉),都不能发送邮件 | |
基于万维网的电子邮件:用浏览器收发邮件(网页邮箱)时,浏览器与邮件服务器之间用 HTTP,邮件服务器之间仍用 SMTP。
I. 支持用户代理从邮件服务器读取邮件 II. 支持用户代理向邮件服务器发送邮件
III. 支持邮件服务器之间发送与接收邮件 IV. 支持一条 TCP 连接收取多封邮件
- A. I、IV
- B. II、III
- C. I、II、III
- D. I、III、IV
展开解析
A逐条判断。
- I 对:POP3 用于用户代理从邮件服务器读取邮件。
- II 错:发送邮件用 SMTP。
- III 错:邮件服务器之间用 SMTP。
- IV 对:一次 POP3 会话在同一条 TCP 连接上可以取多封邮件。
- A 对I、IV。
- B 错II、III 都是 SMTP 的功能。
- C 错C 的 I 对,但选了错误的 II、III(用户代理发信、服务器之间转发都用 SMTP),又漏了正确的 IV。
- D 错D 的 I、IV 对,但多选了 III:邮件服务器之间发送和接收邮件用的是 SMTP,不是 POP3。
POP3 只做一件事:用户代理从服务器拉邮件。
- A. 无连接不可靠的数据传输服务
- B. 无连接可靠的数据传输服务
- C. 有连接不可靠的数据传输服务
- D. 有连接可靠的数据传输服务
展开解析
DPOP3 运行在 TCP 之上(端口 110),TCP 提供面向连接的可靠服务。
- A 错无连接不可靠是 UDP 的服务。
- B 错TCP/IP 传输层没有“无连接可靠”的服务。
- C 错C 的“有连接”对了,但 POP3 所用的 TCP 有确认、重传,是可靠的,不是“不可靠”。
- D 对有连接可靠。
所有邮件协议(SMTP、POP3、IMAP)都用 TCP。
电子邮件的格式与 MIME
一封电子邮件分为信封和内容两部分,内容又分首部和主体(中间空一行)。用户写好首部和主体后,邮件系统自动从首部提取信息写到信封上。首部最重要的几行:To:(收件人的电子邮件地址,可以有多个)、Subject:(主题)、From:(发件人,通常由邮件系统自动填入)、Cc:(抄送)。
MIME(通用因特网邮件扩充)解决 SMTP 只能传 7 位 ASCII 的问题,它没有改动也没有取代 SMTP,只是在邮件首部增加了几行说明、并把非 ASCII 内容编码成 ASCII:
| MIME 增加的首部 | 作用 |
|---|---|
| MIME-Version | MIME 的版本(没有这一行就是普通的纯文本邮件) |
| Content-Type | 邮件主体的数据类型,如 text/plain、image/jpeg、video/mpeg、multipart/mixed(带附件) |
| Content-Transfer-Encoding | 主体的传送编码方式,如 7 位 ASCII、quoted-printable、base64 |
| Content-Description、Content-Id | 可读的说明、邮件的唯一标识 |
拓展 base64 跟我算:把 3 个字节(24 位)切成 4 组 6 位,每组 0 ~ 63 对应一个可打印字符(A ~ Z 是 0 ~ 25,a ~ z 是 26 ~ 51,0 ~ 9 是 52 ~ 61,“+”“/”是 62、63)。“Man”= 01001101 01100001 01101110 → 010011 010110 000101 101110 = 19、22、5、46 → TWFu。编码后长度变为原来的 4/3。quoted-printable 则只把少数非 ASCII 字节写成“=XX”,适合主要是英文、偶有特殊字符的文本。
发送方用户代理把非 ASCII 内容按 MIME 编码成 ASCII 交给 SMTP;接收方用户代理再按 MIME 解码。所以 MIME 的工作在用户代理里完成,邮件服务器之间传的仍是 7 位 ASCII。
- A. SMTP、SMTP、SMTP
- B. POP3、SMTP、POP3
- C. POP3、SMTP、SMTP
- D. SMTP、SMTP、POP3
展开解析
D①用户代理 → 邮件服务器:推,用 SMTP;②邮件服务器 → 邮件服务器:推,用 SMTP;③用户 2 从自己的邮件服务器取信:拉,用 POP3(或 IMAP)。
- A 错③不能用 SMTP,SMTP 只负责发送(推)。
- B 错B 的 ②(SMTP)、③(POP3)对了,错在 ①:用户 1 把邮件交给自己的邮件服务器是“推”,要用 SMTP;POP3 只能从服务器取信。
- C 错①用了 POP3,③用了 SMTP,两处都反了。
- D 对SMTP、SMTP、POP3。
发(推)用 SMTP,收(拉)用 POP3 / IMAP。
核心只有一张图:推用 SMTP、拉用 POP3 / IMAP、浏览器用 HTTP、全都在 TCP 上。2012-40 填三段协议;2013-40、2025-40 判断 SMTP、POP3 能做什么;2015-33 问 POP3 用的传输服务;2018-40 问 SMTP 能直接传什么。可能的新考法:IMAP 与 POP3 的区别;MIME 是否取代 SMTP;网页邮件哪一段用 HTTP;发邮件前怎样找到对方邮件服务器(DNS 的 MX 记录)。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. SMTP、SMTP、POP3
- B. HTTP、HTTP、POP3
- C. HTTP、SMTP、POP3
- D. HTTP、SMTP、SMTP
展开解析
C浏览器与邮件服务器之间用 HTTP;邮件服务器之间用 SMTP;Outlook 取信用 POP3(或 IMAP)。
- A 错第一阶段用户用的是浏览器(网页邮箱),浏览器与邮件服务器之间用 HTTP,不是 SMTP。
- B 错邮件服务器之间转发邮件用 SMTP;HTTP 只用于浏览器和网页邮箱服务器之间。
- C 对对:HTTP、SMTP、POP3。
- D 错Outlook 从服务器取信是“拉”,用 POP3 或 IMAP;SMTP 只能“推”。
变化点:第一个阶段换成网页邮箱。
- A. POP3 用于邮件服务器之间转发邮件
- B. POP3 和 IMAP 都使用 UDP
- C. IMAP 用于用户代理发送邮件
- D. IMAP 允许用户在服务器上管理邮件文件夹
展开解析
DPOP3、IMAP 都用于读取邮件、都基于 TCP;IMAP 的邮件保存在服务器上,可以在服务器上建文件夹管理。
- A 错邮件服务器之间转发邮件用 SMTP;POP3 用于用户代理从服务器读取邮件。
- B 错POP3(110)和 IMAP(143)都基于 TCP,不用 UDP。
- C 错IMAP 是读取邮件的协议;用户代理发送邮件用 SMTP。
- D 对对:IMAP 的邮件留在服务器上,可以建文件夹管理。
变化点:SMTP 换成 POP3/IMAP。
- A. 由 MIME 把内容编码为 ASCII 后交给 SMTP 传送
- B. 改用 POP3 传送
- C. 改用 UDP 传送
- D. 由 DNS 转换编码
展开解析
ASMTP 只能传 7 位 ASCII;MIME 在不改动 SMTP 的前提下对非 ASCII 内容编码。
- A 对对:MIME 编码成 ASCII,再交给 SMTP。
- B 错POP3 是读取邮件的协议,不能用来发信,也不负责内容编码。
- C 错电子邮件协议都用 TCP;换成 UDP 既不可靠,也解决不了 SMTP 只能传 7 位 ASCII 的限制。
- D 错DNS 只做域名解析,不做内容编码转换。
变化点:由“哪些内容能直接传”换成“其他内容怎么传”。
- A. MIME 取代了 SMTP
- B. MIME 是用户代理从邮件服务器读取邮件的协议
- C. 用 Content-Type 首部说明邮件主体的数据类型
- D. 使用 MIME 后,邮件服务器之间可以直接传送任意二进制数据
展开解析
CMIME 没有改动、也没有取代 SMTP,只是在邮件首部加几行说明(MIME-Version、Content-Type、Content-Transfer-Encoding 等),并把非 ASCII 内容编码成 ASCII;邮件服务器之间传的仍是 7 位 ASCII。读取邮件用 POP3/IMAP。
- A 错MIME 没有改动也没有取代 SMTP,邮件仍由 SMTP 传送。
- B 错读取邮件的协议是 POP3、IMAP;MIME 只是邮件内容的格式和编码规定。
- C 对对:Content-Type 说明主体的数据类型。
- D 错MIME 把非 ASCII 内容编码成 ASCII,邮件服务器之间传的仍是 7 位 ASCII,不是任意二进制。
考点:6.4 节“电子邮件的格式与 MIME”。
- A. IMAP 用于发送邮件,POP3 用于接收邮件
- B. IMAP 允许用户在服务器上管理邮件文件夹,并可以只下载邮件的一部分
- C. POP3 和 IMAP 都使用 UDP
- D. IMAP 不能在多台设备上同步查看邮件
展开解析
B两者都是“拉”取邮件的协议、都用 TCP(110 / 143);IMAP 把邮件留在服务器上,所以多设备看到的一致。
- A 错IMAP 和 POP3 都是“拉”取邮件的协议;发送邮件用 SMTP。
- B 对对:IMAP 在服务器上管理文件夹,可只下载一部分。
- C 错POP3(110)和 IMAP(143)都用 TCP,不用 UDP。
- D 错IMAP 把邮件留在服务器上,正好能在多台设备上同步查看;不能同步的是“下载后删除”的 POP3。
考点:6.4 节“POP3 与 IMAP”。
6.5万维网 WWW 与 HTTP
URL、HTML 与 HTTP 的分工
万维网(WWW)是一个分布式的超媒体系统,三个关键技术各管一件事:URL 回答“资源在哪”,HTML 回答“页面长什么样”,HTTP 回答“怎么把它取过来”。
- HTTP 使用 TCP(端口 80),但 HTTP 本身是无连接(通信前不需要先建立 HTTP 连接)和无状态(服务器不记得曾经服务过的客户,同一个页面请求两次,服务器都当作新请求处理)的。
- 浏览器打开一个网页的大致过程:解析 URL → DNS 查主机的 IP → 建 TCP 连接 → 发 HTTP 请求 → 服务器返回 HTML 文件 → 浏览器解析 HTML,再请求其中引用的图片、脚本等对象 → 显示。
非持续连接与持续连接:RTT 怎么数
| 方式 | 做法 | 取 1 个页面 + N 个引用对象 |
|---|---|---|
| 非持续连接(HTTP/1.0) | 每个对象单独建立一条 TCP 连接,传完就关闭 | 串行:(N + 1) × 2 RTT;浏览器开 N 条并行连接:2 + 2 = 4 RTT |
| 持续连接、非流水线 | 同一条连接传多个对象,但收到上一个响应才发下一个请求 | 2 RTT + N × 1 RTT |
| 持续连接、流水线(HTTP/1.1 默认) | 不等响应就连续发出多个请求 | 2 RTT + 约 1 RTT |
跟我算
- 非持续、串行:6 个对象 × 2 RTT = 12 RTT = 240 ms。
- 非持续、并行(取到页面后同时开 5 条连接):页面 2 RTT + 图像 2 RTT = 4 RTT = 80 ms。
- 持续、非流水线:握手 1 + 页面 1 + 图像 5 = 7 RTT = 140 ms。
- 持续、流水线:握手 1 + 页面 1 + 图像一起 1 = 3 RTT = 60 ms。
为什么页面必须先单独取:浏览器要先拿到 HTML,才知道里面引用了哪些对象。
题目若给了 MSS 和文件大小,还要考虑 TCP 的慢开始:服务器的 cwnd 从 1 开始,每轮翻倍。2022-40 中服务器先用 cwnd = 1 发完 1 MSS 的页面,cwnd 变为 2;3 MSS 的图像再按 2、1 分两轮发完,所以总共 1(握手)+ 1(页面)+ 2(图像)= 4 RTT。
跟我算
- DNS:已知 com 服务器,只需问 com、abc.com 两次:2 RTT。
- TCP 握手:1 RTT(第三次握手捎带页面请求)。
- 页面 1 MSS,cwnd = 1,一轮发完:1 RTT;收到确认后 cwnd = 2。
- 图像 6 MSS:第一轮 cwnd = 2 发 2 个,第二轮 cwnd = 4 发剩下 4 个:2 RTT。
合计 2 + 1 + 1 + 2 = 6 RTT = 90 ms。和 2022-40 比,多了 DNS 的 2 RTT,图像的轮数也要按慢开始数。
- A. 30ms
- B. 40ms
- C. 50ms
- D. 60ms
展开解析
BHTTP/1.1 持续连接,全部内容用同一条 TCP 连接;服务器的拥塞窗口从 1 MSS 开始慢开始。
- 第 1 个 RTT:三次握手,第三次握手捎带对 news408.html 的请求。
- 第 2 个 RTT:服务器以 cwnd = 1 发出 html(1 MSS);H 收到后解析出图像,立即请求图像。
- 第 3 个 RTT:cwnd = 2,发出图像的 2 MSS。
- 第 4 个 RTT:cwnd = 4,发出剩下的 1 MSS。共 4 RTT = 40ms。
- A 错30ms:把 3 MSS 的图像当成一轮发完,忽略了 cwnd 从小到大增长。
- B 对40ms。
- C 错50ms:若图像另建一条 TCP 连接(非持续),要多 1 RTT 握手且 cwnd 重新从 1 开始:1 + 1 + 1 + 2 = 5 RTT。HTTP/1.1 默认持续连接,不必如此。
- D 错60ms = 6 RTT:比最慢的合理做法(图像另建一条连接、cwnd 重新从 1 开始,C 的 5 RTT)还多 1 个 RTT;HTTP/1.1 持续连接“至少”只要 4 RTT。
给了 MSS 和文件大小,就按慢开始数轮:1、2、4……个 MSS。
- A. 4
- B. 9
- C. 14
- D. 16
展开解析
DHTTP/1.0 非持续连接、不能并行:每个对象都要单独建立 TCP 连接(1 RTT)再请求响应(1 RTT),一个接一个进行。
- 对象数 = 1 个 Web 页 + 7 个图像 = 8。
- 8 × 2 RTT = 16 RTT。
- A 错4:这是允许并行连接时的结果——页面 2 RTT,7 个图像同时取再 2 RTT。
- B 错9:这是持续连接、非流水线的结果——握手 1 + 页面 1 + 图像 7。
- C 错14 = 7 × 2:漏了 Web 页本身。
- D 对16。
非持续串行:(N + 1) × 2;持续非流水线:2 + N;持续流水线:2 + 1;非持续并行:2 + 2。
| HTTP/1.0 | HTTP/1.1 | |
|---|---|---|
| 默认连接 | 非持续(Connection: close) | 持续(keep-alive),默认使用流水线 |
| Host 首部 | 可以没有 | 必须有:一台服务器托管多个网站时靠它区分 |
| 缓存控制 | Expires、If-Modified-Since | 增加 Cache-Control、ETag 等,控制更细 |
| 方法 | GET、HEAD、POST | 增加 PUT、DELETE、OPTIONS 等 |
HTTP 报文:逐行读懂
HTTP 报文是面向文本的,每一行都是可读的 ASCII 字符,以回车换行(CRLF)结束。请求报文和响应报文都由三部分组成:开始行、首部行、实体主体,首部行和实体主体之间空一行。
| 方法 | 意义 | 要点 |
|---|---|---|
| GET | 请求读取 URL 标志的信息 | 最常用;参数可以附在 URL 后面(?a=1) |
| HEAD | 请求读取 URL 标志的信息的首部 | 不返回实体主体,用来检查链接是否有效、对象是否修改过 |
| POST | 给服务器添加信息(如提交表单、上传) | 数据放在实体主体里 |
| PUT | 在指明的 URL 下存储一个文档 | 上传 / 替换整个资源 |
| DELETE | 删除指明的 URL 所标志的资源 | — |
| OPTIONS、TRACE、CONNECT | 查询选项、回环测试、用于代理 | 了解 |
| 状态码 | 类别 | 常见的 |
|---|---|---|
| 1xx | 通知信息(收到了,正在处理) | 100 Continue |
| 2xx | 成功 | 200 OK |
| 3xx | 重定向(还要再做点什么) | 301 永久移走(新地址在 Location 首部)、302 临时移走、304 Not Modified(缓存的副本仍可用,见下) |
| 4xx | 客户的差错 | 400 请求有语法错、403 禁止访问、404 Not Found |
| 5xx | 服务器的差错 | 500 服务器内部错误、503 暂时无法服务;做网关或代理的服务器从上游收到无效响应时回 502,等上游超时回 504 |
记法:1 收到、2 成功、3 转走、4 你错、5 我错。首部 Connection: close 表示用完就关闭(非持续连接);Connection: keep-alive 表示持续连接;Host 写服务器的域名(一台服务器可以托管多个网站,靠它区分)。
HTTP/1.1 301 Moved Permanently Location: https://www.abc.com/index.html Connection: keep-alive Content-Length: 0
状态码 301:对象已永久移走,新地址在 Location 首部里(这里是改用 HTTPS);浏览器会自动再向新地址发一次请求——又多了 TCP 握手(新端口 443)和 TLS 握手的时间。keep-alive:服务器愿意保持这条连接;Content-Length: 0:没有实体主体。
GET /index.html HTTP/1.1 Host: www.test.edu.cn Connection: Close Cookie: 123456下列叙述中,错误的是( )。
- A. 该浏览器请求浏览 index.html
- B. index.html 存放在 www.test.edu.cn 上
- C. 该浏览器请求使用持续连接
- D. 该浏览器曾经浏览过 www.test.edu.cn
展开解析
C本题选错误的叙述。Connection: Close 表示本次请求完成后关闭连接,即非持续连接;请求持续连接应写 keep-alive。
- A 正确请求行 GET /index.html:请求的是 index.html。
- B 正确Host 首部说明对象所在的主机是 www.test.edu.cn。
- C 错误Close 是非持续连接。
- D 正确Cookie 是该网站以前在响应中发给浏览器的,带着它说明曾经访问过。
Connection:close 非持续,keep-alive 持续。请求带 Cookie → 以前来过。
Cookie:让无状态的 HTTP“记住”你
Cookie 的范围与期限:服务器在 Set-Cookie 里可以指定有效期(不指定则关闭浏览器就失效)以及适用的域名、路径;浏览器只把 Cookie 发回给设置它的那个网站,一个网站读不到别的网站的 Cookie。Cookie 只是存在客户端的一小段文本(识别码),不是程序。
Cookie 的典型用途:用户跟踪、记住登录状态、购物车、个性化推荐(2026-40)。请求报文里带 Cookie,说明浏览器以前访问过这个站点(2015-40 的 D 项)。缺点是涉及隐私:网站能据此记录用户的浏览习惯。
- A. 用户跟踪
- B. 个性化推荐
- C. 构建虚拟购物车
- D. 缩短 web 对象的响应时间
展开解析
DCookie 用来让无状态的 HTTP“记住”用户:服务器发给浏览器一个识别码,浏览器以后每次访问都带上。
- A 是用户跟踪:靠识别码把同一用户的多次访问联系起来。
- B 是个性化推荐:根据记录的偏好定制内容。
- C 是虚拟购物车:跨页面记住放进购物车的商品。
- D 不是缩短 Web 对象的响应时间靠的是代理服务器(Web 缓存)等;Cookie 反而让请求首部变长。
Cookie 解决“无状态”;Web 缓存解决“慢”。
Web 缓存(代理服务器)与条件 GET
问题:全校几千人每天都打开同一个新闻网站的首页,每次都从千里之外的服务器取一遍,既慢又浪费学校的出口带宽。Web 缓存(代理服务器)把最近请求过的对象保存在本地:浏览器把请求先发给代理,代理有就直接返回,没有再去源服务器取、顺便存一份。
可缓存的对象可能已经过期。代理不想每次都重新下载整个对象,就发条件 GET:在请求首部加上 If-Modified-Since(自从某时以来改过吗);没改过,源服务器只回一个不带实体主体的 304 Not Modified。
跟我算:缓存省了多少出口带宽。某单位每秒平均发出 20 个 Web 请求,对象平均大小 1 Mb,出口链路 25 Mb/s。不用缓存时出口链路利用率 = 20 × 1 ÷ 25 = 80%,排队时延会很大;装一台代理服务器,命中率 40%,只有 60% 的请求要走出口:0.6 × 20 × 1 ÷ 25 = 48%。花一台服务器的钱,比把出口链路升级划算得多。
浏览器自己也有缓存,原理相同。这正是“缩短 Web 对象的响应时间”的技术——2026-40 里它是 Web 缓存的用途,而不是 Cookie 的用途。
拓展 HTTPS、HTTP/2、HTTP/3 与 CDN
HTTPS = HTTP + TLS(传输层安全协议),默认端口 443。TCP 连接建好后,先做一次 TLS 握手,双方协商出一个只有自己知道的会话密钥,之后的 HTTP 报文都加密传送;服务器还要出示由权威机构(CA)签发的数字证书,证明“我真的是 www.abc.com”。
- HTTP/2:仍用 TCP;报文改成二进制帧,一条 TCP 连接上可以多路复用多个请求 / 响应(不必排队等前一个),并压缩首部、允许服务器主动推送。但一个 TCP 报文段丢失,整条连接上的所有请求都要等它重传(队头阻塞)。
- HTTP/3:改用基于 UDP 的 QUIC 协议——在 UDP 之上自己实现可靠传输、拥塞控制和加密,把建连接和 TLS 握手合并(通常 1 RTT,再次连接甚至 0 RTT),各请求的数据流互不阻塞。这是“应用自己在 UDP 上做可靠传输”的典型例子(5.6 节)。
- CDN(内容分发网络):网站把图片、视频等内容复制到分布在各地的边缘服务器上;用户解析域名时,DNS(常借助 CNAME 记录)把他引到离他最近、负载最轻的边缘服务器,就近取内容。和 Web 缓存一样是“把内容搬到离用户近的地方”。
- RTT 个数(2022-40、2024-40,以及 2020-40 的后半段):先看是否持续、是否流水线、是否并行,再看要不要算慢开始。
- 读报文(2015-40):Connection: close = 非持续;带 Cookie = 来过;Host = 文件所在的主机。
- Cookie(2026-40):用户跟踪、购物车、推荐;“缩短响应时间”是缓存的事。
- 访问网页用到的协议(2014-40,见 6.6)。
可能的新考法:状态码类别(304、404);HEAD 与 GET 的区别;条件 GET 的首部;HTTPS 的端口与作用;HTTP/3 用 UDP。
- HTTP 用 TCP 是“有连接”的,但 HTTP 协议本身无连接、无状态——两件事不矛盾。
- HTTP/1.1 默认持续连接;HTTP/1.0 默认非持续连接。
- “非持续连接”时每个对象都要 1 RTT 握手;持续连接只握手一次。
- 304 不是错误,是“用你缓存里的就行”;4xx 才是客户的错。
选择题变式:真题换个条件再做一遍
每道题都由一道真题改动一两个条件而来。先做本节的真题,再做这里的变式,最后看“变化点”:改了什么、答案为什么跟着变。最后标“考纲补充”的,是针对还没考过的考纲知识点自编的题,看“考点”回到对应的讲解。
- A. 3
- B. 9
- C. 4
- D. 16
展开解析
B握手 1 + 页面 1 + 7 个图像各 1 = 9。
- A 错3 是持续连接、流水线的结果(握手 + 页面 + 7 个图像一起 1 个 RTT);非流水线要一个一个请求。
- B 对对:1 + 1 + 7 = 9。
- C 错4 是非持续连接但允许并行连接的结果;题目是持续连接、非流水线。
- D 错16 是非持续连接、串行(HTTP/1.0)的结果:8 个对象各 2 RTT。
变化点:非持续串行(16)换成持续非流水线(9);持续流水线则为 3。
- A. 40ms
- B. 60ms
- C. 50ms
- D. 70ms
展开解析
C握手 1 RTT;html 1MSS(cwnd = 1)1 RTT;图像按 cwnd = 2、4 分两轮发 6MSS,还剩 1MSS 再一轮:共 1 + 1 + 3 = 5 RTT = 50ms。
- A 错40ms 是原题图像 3MSS 时的结果;图像变成 7MSS 后要按 cwnd = 2、4、8 发三轮。
- B 错60ms 多算了一轮:图像 7MSS 在 cwnd = 2、4 两轮发完 6MSS,第三轮发剩下的 1MSS 就完了,共 5 RTT。
- C 对对:1 + 1 + 3 = 5 RTT = 50ms。
- D 错70ms 相当于 7 个 RTT,好像图像每个 MSS 各算一轮;慢开始下 7MSS 只要 3 轮。
变化点:图像变大,慢开始要多一轮。
- A. 浏览器请求使用非持续连接
- B. 浏览器一定曾经访问过该网站
- C. 服务器必须关闭连接
- D. 浏览器请求使用持续连接
展开解析
Dkeep-alive 表示持续连接;没有 Cookie 不能断定访问过。
- A 错Connection: keep-alive 正是请求持续连接;请求非持续连接要写 close。
- B 错没有 Cookie 首部行,不能断定访问过;带 Cookie 才说明以前访问过(2015-40)。
- C 错keep-alive 是希望保持连接,服务器不必在响应后关闭连接。
- D 对对:keep-alive 表示持续连接。
变化点:Close 换成 keep-alive。
- A. 浏览器所在主机的 Cookie 文件中
- B. DNS 服务器
- C. 代理服务器的缓存中
- D. 路由器中
展开解析
ACookie 由服务器生成,保存在用户主机(浏览器管理的 Cookie 文件)中,服务器端数据库中也有对应记录。
- A 对对:保存在用户主机的 Cookie 文件中。
- B 错DNS 服务器只保存域名与 IP 地址的映射,不保存网站发给用户的 Cookie。
- C 错代理服务器缓存的是 Web 对象,不保存给每个用户的 Cookie 识别码。
- D 错路由器只在网络层转发分组,不保存应用层的 Cookie。
变化点:由 Cookie 的用途延伸到它存在哪里。
- A. 200 OK
- B. 301 Moved Permanently
- C. 304 Not Modified
- D. 404 Not Found
展开解析
C条件 GET 带 If-Modified-Since 首部;没改过就回 304,且不带实体主体,代理直接用缓存的副本。
- A 错200 OK 会连同整个对象一起返回;对象没改过时只回 304,不带实体主体。
- B 错301 表示对象已永久移到新地址;这里对象还在原处,只是没有改过。
- C 对对:304 Not Modified。
- D 错404 表示对象不存在;这里对象存在,只是没有改过。
考点:6.5 节“Web 缓存与条件 GET”。
- A. HEAD
- B. GET
- C. POST
- D. PUT
展开解析
AHEAD 只返回首部,不返回实体主体;GET 返回整个对象;POST 向服务器提交数据;PUT 存储文档。
- A 对对:HEAD 只返回首部。
- B 错GET 会返回整个对象(实体主体),题目只要首部信息。
- C 错POST 用于向服务器提交数据(如表单),不是读取首部。
- D 错PUT 用于在指明的 URL 下存储文档,也不是读取首部。
考点:6.5 节“HTTP 报文”中的方法表。
- A. 服务器内部错误
- B. 请求成功
- C. 对象已永久移走
- D. 请求的对象在服务器上不存在
展开解析
D4xx 是客户的差错,404 是“找不到”;5xx 是服务器的差错,3xx 是重定向,2xx 是成功。
- A 错服务器内部错误是 500(5xx 是服务器的差错)。
- B 错请求成功是 200(2xx 表示成功)。
- C 错对象已永久移走是 301(3xx 是重定向)。
- D 对对:404 Not Found。
考点:6.5 节“HTTP 报文”中的状态码表。
- A. HTTPS 的默认端口是 443
- B. HTTPS 在 HTTP 与 TCP 之间加入了 TLS 进行加密
- C. HTTP/3 基于 UDP 之上的 QUIC 协议
- D. HTTP/3 仍然依靠 TCP 的拥塞控制
展开解析
DHTTP/3 不用 TCP,可靠传输和拥塞控制都由 QUIC 在 UDP 之上自己实现。
- A 不选正确:HTTPS 默认端口 443(HTTP 是 80)。
- B 不选正确:HTTPS = HTTP + TLS,TLS 位于 HTTP 和 TCP 之间负责加密。
- C 不选正确:HTTP/3 基于 QUIC,QUIC 运行在 UDP 之上。
- D 选错误:HTTP/3 不用 TCP,可靠传输和拥塞控制都由 QUIC 在 UDP 之上自己实现。
考点:6.5 节“HTTPS、HTTP/2、HTTP/3 与 CDN”(拓展)。
6.6融合:一台新主机打开一个网页的全过程
一张时序图串起五篇
设一台主机刚接入校园网,用户在浏览器中输入 http://www.abc.com/index.html。所有缓存(ARP、DNS)都是空的,DNS 服务器和 Web 服务器都不在本网络。按时间顺序:
| 步 | 做什么 | 协议与封装 | 关键地址 |
|---|---|---|---|
| 1 | 获取 IP 地址等配置 | DHCP → UDP → IP → 以太网帧 | DISCOVER、REQUEST:源 IP 0.0.0.0,目的 IP 255.255.255.255;帧目的 MAC 全 F(广播)。得到本机 IP、掩码、默认网关、DNS 服务器地址 |
| 2 | 找默认网关的 MAC | ARP(直接封装在帧中) | DNS 服务器若不在本网络,DNS 查询要交给网关,所以先 ARP 解析网关 IP;请求广播,响应单播 |
| 3 | 把域名解析为 IP | DNS → UDP(53)→ IP | 目的 IP = 本地域名服务器;本地服务器按需向根、顶级、权限服务器迭代查询 |
| 4 | 建立 TCP 连接 | TCP 三次握手 | 目的 IP = Web 服务器,目的端口 80;源端口为客户临时端口。帧的目的 MAC 仍是网关(跨网络) |
| 5 | 请求与响应 | HTTP → TCP → IP | GET 请求可捎带在第三次握手中;沿途每个路由器查路由表转发、改写帧的 MAC;经过 NAT 时改源 IP 和端口 |
| 6 | 取引用对象、释放连接 | HTTP、TCP 四次挥手 | 持续连接可以复用同一条 TCP 连接;最后主动关闭方进入 TIME-WAIT |
跟我填一遍:每个帧、每个分组的地址。设 DHCP 分给 H 的地址是 10.0.0.5,网关 R 的内网接口 10.0.0.1(MAC 记作 MAC-R),本地 DNS 服务器 202.1.1.1,Web 服务器 61.1.1.80;H 的 MAC 记作 MAC-H,H 选的临时端口 50001 / 50002。
| 帧(H 发出) | 源 MAC | 目的 MAC | 源 IP | 目的 IP | 源端口 → 目的端口 |
|---|---|---|---|---|---|
| DHCP DISCOVER | MAC-H | FF-FF-FF-FF-FF-FF | 0.0.0.0 | 255.255.255.255 | UDP 68 → 67 |
| ARP 请求(问 10.0.0.1) | MAC-H | FF-FF-FF-FF-FF-FF | (ARP 不经 IP、不用端口) | ||
| DNS 查询 | MAC-H | MAC-R | 10.0.0.5 | 202.1.1.1 | UDP 50001 → 53 |
| TCP SYN | MAC-H | MAC-R | 10.0.0.5 | 61.1.1.80 | TCP 50002 → 80 |
| HTTP GET(随第三次握手) | MAC-H | MAC-R | 10.0.0.5 | 61.1.1.80 | TCP 50002 → 80 |
要点:只要目的主机不在本网络,帧的目的 MAC 一律是默认网关的 MAC,而 IP 分组的目的地址始终是最终目的主机;若 10.0.0.5 是私有地址,分组出 NAT 路由器时源 IP 和源端口会被改写(4.5 节)。
- 某一步用到哪些协议、按什么顺序(应用层 → 传输层 → 网络层 → 链路层逐层封装)。
- 某个帧、某个分组的源 / 目的 MAC 地址和 IP 地址各是什么:IP 端到端不变,MAC 逐段改写;NAT 前后 IP 改变。
- 一共要几个 RTT:DNS 迭代次数 + TCP 握手 + HTTP 请求响应(+ 慢开始的轮数)。
- 抓包数据中找字段:以太网帧首部 14B(目的 MAC 6、源 MAC 6、类型 2),IP 首部从第 15 字节开始,TCP 首部紧跟 IP 首部(第 7 篇题型 t3、t7 详细训练)。
- A. PPP
- B. ARP
- C. UDP
- D. SMTP
展开解析
D访问网页可能用到:接入链路的 PPP(拨号接入)、解析网关 MAC 的 ARP、DNS 所用的 UDP,以及 TCP、HTTP、IP 等。SMTP 只在发送邮件时使用。
- A 可能通过 PPP 接入 ISP 时会用到。
- B 可能要把分组交给默认网关,需 ARP 解析网关的 MAC。
- C 可能访问网站先要用 DNS 把域名解析成 IP 地址,DNS 查询通常封装在 UDP 中(端口 53),所以可能用到 UDP。
- D 不可能浏览网页不发邮件,用不到 SMTP。
浏览网页:DHCP、ARP、DNS(UDP)、TCP、HTTP、IP、链路层协议。
选择题 1 道:2014-40 问访问网页“不可能”用到的协议——PPP(拨号上网时的链路层)、ARP(找下一跳的 MAC)、UDP(DNS 查询用它)都可能用到,只有发邮件的 SMTP 用不到。以这张图为背景的综合题有 2011-47(抓包读地址、ARP、HTTP 的 RTT 个数、NAT 改哪些字段)、2015-47(DHCP 可分配范围、ARP 第一帧、网关配错)、2020-47(两级 NAT)、2021-47(DNS 的逐层封装、交换表、H2 收到的广播帧),做法见第 7 篇 t7。
选择题变式:考纲补充
6.6 没有以它为主的选择题真题。下面是针对“一次访问全过程”自编的题,做完看“考点”回到对应的讲解。
- A. ARP
- B. DNS
- C. DHCP
- D. HTTP
展开解析
C还没有 IP 地址,先用 DHCP 获取地址、默认网关和 DNS 服务器地址;之后才是 ARP(找网关 MAC)、DNS、TCP、HTTP。
- A 错ARP 用来找网关的 MAC,要先知道网关的 IP 地址,而网关地址也要从 DHCP 获得。
- B 错DNS 查询要先知道 DNS 服务器的地址、自己也要有 IP 地址,这些都要先从 DHCP 获得。
- C 对对:先用 DHCP 获取地址。
- D 错HTTP 要先有 IP 地址、解析出服务器地址、建好 TCP 连接,排在最后。
考点:6.6 节“一张时序图串起五篇”。
- A. S 的 MAC 地址,S 的 IP 地址
- B. 默认网关的 MAC 地址,S 的 IP 地址
- C. 默认网关的 MAC 地址,默认网关的 IP 地址
- D. 广播地址,S 的 IP 地址
展开解析
BIP 地址端到端不变,始终是 S;帧只负责这一段链路,下一站是默认网关,所以目的 MAC 是网关的。
- A 错S 在另一个网络,帧到不了它;帧的目的 MAC 是这一段的下一站——默认网关。
- B 对对:目的 MAC 是网关,目的 IP 是 S。
- C 错目的 IP 写成了网关:IP 地址端到端不变,始终是最终目的 S。
- D 错这是单播帧,交给默认网关;只有 ARP 请求等才用广播地址。
考点:6.6 节“跟我填一遍:每个帧、每个分组的地址”。
- DNS、FTP、SMTP、POP3、HTTP、DHCP 各用什么传输层协议、什么端口?
答案
DNS:UDP 53;FTP:TCP 21(控制)、20(数据,主动模式);SMTP:TCP 25;POP3:TCP 110;HTTP:TCP 80;DHCP:UDP 67(服务器)/ 68(客户)。 - C/S 模型中客户之间能直接通信吗?向很多用户分发同一个大文件,C/S 和 P2P 哪个快?
答案
不能,客户只与服务器通信。P2P 通常更快:用户越多,参与上传的结点越多。 - 本地域名服务器用迭代查询解析 mail.cs.pku.edu.cn,缓存全空,它最多发几次查询?
答案
根、cn、edu.cn、pku.edu.cn、cs.pku.edu.cn 共 5 次(问到能解析出 mail 这台主机的权限服务器为止)。 - 根域名服务器知道什么?它能直接告诉你 www.abc.com 的 IP 吗?
答案
它知道所有顶级域名服务器的地址。一般不能直接给出 www.abc.com 的 IP,只能告诉本地服务器“去问 com 服务器”。 - 给 bob@b.com 发邮件时,发送方邮件服务器怎样知道对方邮件服务器是哪台主机?
答案
用 DNS 查询 b.com 的 MX 记录,得到对方邮件服务器的主机名,再查它的 A 记录得到 IP 地址。 - FTP 被动模式下,数据连接由谁发起?连的是服务器的哪个端口?
答案
由客户发起,连服务器在 PASV 应答里告知的临时端口(不是 20)。 - 用户在网页上写邮件发给朋友,朋友用 Outlook 收信,依次用到哪些协议?
答案
浏览器 → 发送方邮件服务器:HTTP;发送方 → 接收方邮件服务器:SMTP;接收方邮件服务器 → Outlook:POP3 或 IMAP。 - SMTP 发信分哪三个阶段?传送邮件内容用哪条命令?
答案
连接建立、邮件传送、连接释放。MAIL FROM 给发件人,RCPT TO 给收件人,DATA 之后传邮件内容,以单独一行的“.”结束。 - POP3 和 IMAP 最主要的区别是什么?
答案
POP3 一般把邮件下载到本机(下载后删除);IMAP 把邮件一直保存在服务器上,可以在服务器上管理文件夹、只下载部分内容,多设备看到的一致。 - RTT = 20ms,页面引用 3 个小图像,HTTP/1.1 持续连接非流水线,不计发送时间,取完全部内容至少要多久?流水线呢?
答案
非流水线:握手 1 + 页面 1 + 图像 3 = 5 RTT = 100ms。流水线:1 + 1 + 1 = 3 RTT = 60ms。 - 不支持并行连接的 HTTP/1.0 浏览器,取一个引用了 4 个图像的页面至少几个 RTT?
答案
5 个对象,每个 2 RTT,共 10 RTT。 - 响应状态码 304 和 404 各表示什么?
答案
304 Not Modified:对象没改过,用缓存里的副本(对条件 GET 的回答);404 Not Found:请求的对象不存在(客户的差错)。 - 为什么说 HTTP 无状态,却能实现“记住我”?
答案
HTTP 协议本身不保存客户信息;Cookie 由服务器生成、浏览器保存,每次请求时带上,服务器再据此在后台数据库中查到用户。 - HTTPS 的默认端口是多少?HTTP/3 的传输层用什么?
答案
HTTPS 是 443(HTTP + TLS,运行在 TCP 上);HTTP/3 用基于 UDP 的 QUIC。 - 一台新主机开机后访问网页,它发出的第一个帧属于哪个协议?目的 MAC 是什么?
答案
DHCP 的 DISCOVER(封装在 UDP、IP 中),帧的目的 MAC 是广播地址 FF-FF-FF-FF-FF-FF。 - DNS 域名服务器分哪四类?主机的 DNS 查询首先发给哪一类?根域名服务器有多少个?
答案
根域名服务器、顶级域名服务器、权限域名服务器、本地域名服务器;主机的查询首先发给本地域名服务器(它代主机去问,严格说不在前三级的层次里)。根服务器有 13 个“名字”(a ~ m),每个都有大量镜像。 - HTTP 请求报文由哪几部分组成?响应报文的第一行叫什么、包括什么?
答案
请求行(方法、URL、版本)、首部行、空行、实体主体;响应报文的开始行叫状态行(版本、状态码、短语)。
一页总结与必会题型
| 主题 | 核心结论 | 必背数字 | 真题 |
|---|---|---|---|
| 应用模型 | C/S:服务器固定,客户之间不通信;P2P:对等,规模大时分发更快;UDP 请求 1 RTT,TCP 至少 2 RTT | — | 2019-40、2025-39 |
| DNS | 主机 → 本地递归;本地 → 根 / 顶级 / 权限迭代;问几级发几次,缓存命中 0 次;资源记录 A、NS、CNAME、MX | UDP 53 | 2010-40、2016-40、2018-33、2020-40 |
| FTP | 控制连接一直开,数据连接每个文件一次;主动模式服务器连客户,被动模式客户连服务器;带外、有状态 | TCP 21(控制)、20(主动模式数据) | 2009-40、2017-40 |
| 电子邮件 | 推 SMTP、拉 POP3 / IMAP、网页邮件用 HTTP;SMTP 只传 7 位 ASCII,MIME 编码其他内容 | 25、110、143 | 2012-40、2013-40、2015-33、2018-40、2025-40 |
| HTTP | 无连接、无状态,靠 Cookie 记人;非持续 2 RTT / 对象,持续 + 流水线最快;条件 GET 得 304 | TCP 80;HTTPS 443 | 2014-40、2015-40、2022-40、2024-40、2026-40 |
| 全过程 | DHCP → ARP → DNS → TCP → HTTP;IP 不变、MAC 逐段换 | — | 2011-47、2015-47、2020-47、2021-47 |
6.✎本篇真题闯关(20 题)
本篇各小节挂的真题全部在这里,按小节排好。可以展开后一道道做,也可以用弹窗模式连续做。做题记录(对/错)只保存在你这台电脑的浏览器里,小节标题下的题号会随之变绿或变红。
大题满分训练营:7 类综合题逐类击破
前六篇按知识讲,这一篇按题型讲。2009—2026 年计算机网络一共考了 19 道综合题(每年一道,2014 年两道),拆开看只有 7 类。每一类都按同一个顺序教:这类题长什么样 → 做它必须会的几件事 → 解题模板 → 一道真题完整示范(连答题卡怎么写都给出) → 常见丢分点 → 自编模拟大题 → 条件一变答案怎么变。每类配两道自编模拟大题,部分类别附“预测小题”(考纲有、真题还没考过的点);最后一节是三套计网部分的整卷模拟(8 道选择题 + 1 道综合题)。
7.1先弄清楚:计网大题怎么考、怎么给分
408 的第 47 题(2014 年是第 42、43 题,2016 年是第 41 题)是计算机网络综合题,9 分左右,一般 3~5 个小问。它几乎总是给一张网络拓扑图(或一段抓包数据、一张时序图),然后在这个场景里问:地址怎么分、路由表怎么写、分组的地址怎么变、窗口和时间怎么算。
计网大题像一次“跟踪快递”:给你一张地图(拓扑图),告诉你每个站点的地址(IP、MAC),然后问你一个包裹从 A 到 B 的路上,每一站换了什么标签(MAC 地址、TTL、NAT 后的源地址)、走了多久(RTT、传播时延)、一次能发多少(窗口)。地图读懂了,题就做了一半。
阅卷是怎么给分的
- 按得分点给分。路由表题一般“每条路由 2 分,目的网络、前缀长度、下一跳、接口各 0.5 分”(2013-47 评分说明);计算题分成“算出单个量”“列出式子”“得出结果”几步。只写结果不写过程,往往拿不满。
- 理由要写到“点子”上。例如“能否访问 Internet”,要写出“默认网关配成了 DHCP 服务器的地址,分组交不到路由器”,只写“网关错了”可能扣分。
- 罗列不给分。“需要修改哪些字段”若把 IP 首部所有字段都列一遍,不给分(2011-47 评分说明)。
答题卡上的五条规矩
- 先读图,再读题。把图上每个接口的地址抄到草稿纸上,先算出每个接口所在的网络(地址 & 掩码),标出哪些设备是路由器、交换机、集线器。
- 地址写全。网络地址写成“点分十进制 + 前缀”或“地址 + 掩码”两种都行,但不能缺;MAC 地址写全 6 个字节;十六进制数据要注明(加 H 或写 0x)。
- 路由表按题给的表结构写,每一行都填满:直连网络下一跳写“直接交付”(或“—”),不能写本路由器自己的地址。
- 计算题先写公式再代数。“发送时延 = 帧长 ÷ 速率 = 1518 × 8 ÷ 10Mbps = 1214.4μs”。单位写清:B 与 bit、ms 与 μs、K 在存储中是 1024、在速率中是 1000(题目另有说明时以题目为准)。
- “是/否、能/不能”一定跟一句理由。题目写着“说明理由”的,没有理由的答案一般只给一半分。
✗ 容易丢分的写法
(2009-47 第 2 问)
202.118.1.0 E1
202.118.1.128 E2
202.118.3.2 L0
0.0.0.0 L0
问题:没写掩码,特定主机路由和默认路由都认不出来;没写下一跳。
✓ 得分点齐全的写法
202.118.1.0 / 255.255.255.128 / 直接交付 / E1
202.118.1.128 / 255.255.255.128 / 直接交付 / E2
202.118.3.2 / 255.255.255.255 / 202.118.2.2 / L0
0.0.0.0 / 0.0.0.0 / 202.118.2.2 / L0
7 类题型 × 18 年分布
下表每一格是那一年考的那道题(题号),点一下直接弹出题目和满分解答。一道题跨两类时两格都标出(虚线框的是“次要归类”)。IP 地址规划与路由表、一次访问的全过程、TCP 是出现最多的三类;2017 年以后几乎每年都把两三类揉在一道题里。
| 题型 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ① IP 地址规划、路由表与路由聚合 | ||||||||||||||||||
| ② 路由算法与路由协议 | ||||||||||||||||||
| ③ 报文首部分析 | ||||||||||||||||||
| ④ 局域网 | ||||||||||||||||||
| ⑤ 链路层可靠传输 | ||||||||||||||||||
| ⑥ TCP | ||||||||||||||||||
| ⑦ 一次访问的全过程 |
这一篇怎么用
- 每类开头写了先要读哪几节,先把那几节的例题做一遍。
- 读“必须会的几件事”和“解题模板”,把模板抄在自己的本子上。
- 跟着“完整示范”走一遍,重点看绿色的“答题卡这样写”——这是考场上真正要写下来的内容。
- 点小节标题下的红色题号,先在纸上自己做完,再看解答对照;做完自评,题号会变绿或变红,方便二刷。
- 真题做完再做本类的模拟大题(虚线框,按 408 风格自编)和“条件一变答案怎么变”,检验是否真的会了。
- 每类还有模拟大题 2,换一个角度再考一遍;部分类别后附预测小题——考纲里有、真题还没以大题形式考过的点,按大题的问法先练一遍。
7.2① IP 地址规划、路由表与路由聚合
先读:4.3 IPv4 地址与子网 4.4 路由表与聚合 4.2 分片
这类题长什么样
给一张拓扑:几台路由器,每个接口标了地址,局域网只写“局域网 1、局域网 2”或给出需求。问你怎么分地址、路由表怎么写、某个分组走哪个口。这是计网大题的“老主力”:2009、2013、2014、2018 年都以它为主,2025 年第 3 问也是它。
| 常见问法 | 考过的地方 |
|---|---|
| 按主机数划分子网,给出各子网地址(定长或变长) | 2009-47(1),2018-47(1),2025-47(3) |
| 子网的广播地址、子网地址、还能接多少台主机 | 2018-47(1) |
| 写出某路由器的路由表(直连、间接、特定主机、默认路由) | 2009-47(2),2013-47(1),2014-43(1) |
| 用路由聚合使路由项最少 | 2009-47(3),2013-47(1),2014-43(1) |
| 某目的地址的分组从哪个接口转发(最长前缀匹配) | 2013-47(2),2014-43(2) |
| TTL 还剩多少、分片(最大片数据、片数、片偏移) | 2014-43(2),2018-47(2) |
| 路由器之间用什么协议交换路由信息 | 2013-47(3) |
做这类题必须会的 5 件事
① 由主机数定前缀。需要 N 个可分配地址 → 主机位 n 满足 2n − 2 ≥ N → 前缀 32 − n。常用:≥ 120 → /25(126);≥ 60 → /26(62);≥ 30 → /27(30);≥ 500 → /23(510);两个路由器之间的点对点链路 → /30(2)。
② 变长划分先大后小、按块对齐。把大地址块画成一条数轴,先放最大的子网(起点必须是它块大小的倍数),再放次大的……题目若已固定某个子网(如 H 的地址落在哪个子网),先把它放上去,再排其余的。
③ 路由表四种行。
| 路由类型 | 目的网络 / 掩码 | 下一跳 | 接口 |
|---|---|---|---|
| 直连网络 | 该网络地址 / 该网络掩码 | 直接交付(或“—”) | 连着它的那个口 |
| 间接(经别的路由器) | 目的网络 / 掩码(能聚合就聚合) | 相邻路由器在共同网络上的接口地址 | 通向那个相邻路由器的口 |
| 特定主机路由 | 主机地址 / 255.255.255.255 | 同上 | 同上 |
| 默认路由(到互联网) | 0.0.0.0 / 0.0.0.0 | 通往外网的相邻路由器接口 | 同上 |
④ 聚合:同一个下一跳才能合。把要合的网络写成二进制找共同前缀;合出来的块若多包进了别的网络,要看那部分是否另有更长前缀的路由(2013-47:194.17.20.0/23 包进了 E0 的 194.17.20.128/25,但它有 /25 的直连路由,所以没问题)。
⑤ 转发与 TTL。多条匹配取最长前缀;分组每经过一个路由器 TTL 减 1(主机不减);输出链路 MTU 小于分组长度且 DF = 0 时分片,每片数据取 8 的倍数。
解题模板
- 标网络。把图上每个接口地址 & 掩码,写出它所在的网络;两个路由器之间的链路也是一个网络。
- 分地址(如果要分)。主机数 → 前缀 → 在数轴上从大到小对齐放好,写出每个子网的网络地址/前缀,必要时写出可分配范围。
- 列去处。站在要写表的那台路由器上,把所有目的网络按“从哪个口出去、下一跳是谁”分组。
- 合并与补充。同一下一跳的网络尝试聚合;题目要求时加特定主机路由(/32)和默认路由(/0)。
- 填表。按题给表头逐列填,下一跳写相邻路由器在共同网络上的地址,直连写“直接交付”。
- 回答转发类问题。把目的地址逐行与表匹配,取最长前缀;数途经路由器个数得 TTL。
某网络拓扑如下图所示,路由器 R1 通过接口 E1、E2 分别连接局域网 1、局域网 2,通过接口 L0 连接路由器 R2,并通过路由器 R2 连接域名服务器与互联网。R1 的 L0 接口的 IP 地址是 202.118.2.1;R2 的 L0 接口的 IP 地址是 202.118.2.2,L1 接口的 IP 地址是 130.11.120.1,E0 接口的 IP 地址是 202.118.3.1;域名服务器的 IP 地址是 202.118.3.2。
R1 和 R2 的路由表结构为:
| 目的网络 IP 地址 | 子网掩码 | 下一跳 IP 地址 | 接口 |
|---|
(1) 将 IP 地址空间 202.118.1.0/24 划分为 2 个子网,分别分配给局域网 1、局域网 2,每个局域网需分配的 IP 地址数不少于 120 个。请给出子网划分结果,说明理由或给出必要的计算过程。
(2) 请给出 R1 的路由表,使其明确包括到局域网 1 的路由、局域网 2 的路由、域名服务器的主机路由和互联网的路由。
(3) 请采用路由聚合技术,给出 R2 到局域网 1 和局域网 2 的路由。
先在纸上自己做一遍,再点这里展开满分解答
考点4.3 子网划分4.4 路由表、特定主机路由、默认路由、聚合训练营 ①
- 202.118.1.0/24 一共 256 个地址,要平分给两个局域网,每个至少 120 个可分配地址。
- R1 的 E1、E2 直连两个局域网;R1 的其他去处(域名服务器、互联网)都要经 L0 交给 R2,下一跳是 R2 的 L0:202.118.2.2。
- 路由表四列:目的网络、子网掩码、下一跳、接口。直连网络的下一跳写“直接交付”(或留空)。
先由主机数定主机位:2n − 2 ≥ 120 → n = 7;前缀 = 32 − 7 = 25。/24 借 1 位,正好两个子网。
每个局域网需要不少于 120 个地址,27 − 2 = 126 ≥ 120,而 26 − 2 = 62 < 120,所以主机号取 7 位,子网号 32 − 24 − 7 = 1 位,子网掩码 255.255.255.128(/25)。
局域网 1:202.118.1.0/25(可分配 202.118.1.1 ~ 202.118.1.126);局域网 2:202.118.1.128/25(可分配 202.118.1.129 ~ 202.118.1.254)。(两者对调也对。)
四类路由各一条:两个直连网络、一条特定主机路由(掩码全 1)、一条默认路由(0.0.0.0/0)。
| 目的网络 IP 地址 | 子网掩码 | 下一跳 IP 地址 | 接口 |
|---|---|---|---|
| 202.118.1.0 | 255.255.255.128 | 直接交付 | E1 |
| 202.118.1.128 | 255.255.255.128 | 直接交付 | E2 |
| 202.118.3.2 | 255.255.255.255 | 202.118.2.2 | L0 |
| 0.0.0.0 | 0.0.0.0 | 202.118.2.2 | L0 |
特定主机路由的掩码是 255.255.255.255(与目的地址相与后仍是它本身,前缀最长、最优先);互联网用默认路由,掩码 0.0.0.0。下一跳不能写成 R1 自己的 202.118.2.1。
202.118.1.0/25 与 202.118.1.128/25 前 24 位相同,聚合为 202.118.1.0/24;R2 到它们都经 L0 发给 R1。
| 目的网络 IP 地址 | 子网掩码 | 下一跳 IP 地址 | 接口 |
|---|---|---|---|
| 202.118.1.0 | 255.255.255.0 | 202.118.2.1 | L0 |
- 主机数 → 主机位 n(2n − 2 ≥ 需求)→ 前缀 32 − n → 按块大小对齐排地址。
- 路由表四类:直连(直接交付)、间接(下一跳 = 相邻路由器在共同网络上的接口)、特定主机(/32)、默认(/0)。
- 下一跳写成本路由器自己的接口地址。
- 聚合时把下一跳不同的网络合在一起;或聚合后网络地址没有把主机位清零(写成 202.118.1.128/24)。
- “还能接多少台主机”忘了减去路由器接口占用的地址(2018-47)。
- 特定主机路由写成 /24 掩码;默认路由写成 255.255.255.255。
- 分片时每片数据不是 8 的倍数;片偏移没除以 8。
模拟大题:一个 /22 分给三个部门(按 408 风格自编)
某单位申请到地址块 202.100.64.0/22。路由器 R1 的 E0、E1、E2 接口分别连接研发部、生产部、行政部的局域网,三个部门分别需要至少 500、200、100 个 IP 地址;R1 的 S0 接口通过一条点对点链路连接 ISP 的路由器 R2,R2 的另一端连接 Internet。点对点链路的地址也从该地址块中分配,且放在地址块的最末端。
(1) 请为三个部门和点对点链路分配子网(给出网络地址和前缀长度),要求地址块的剩余空间尽可能大且连续。
(2) 设 R1 的 S0 接口地址为该点对点链路的第一个可用地址,R2 的为第二个。请给出 R1 的路由表(目的网络、子网掩码、下一跳、接口)。
(3) R2 到该单位所有网络的路由应如何写(一条)?
(4) 若 R2 收到一个目的地址为 202.100.66.200 的分组,R1 从哪个接口转发它?若 R2 发出时 TTL = 64,该分组到达目的主机时 TTL 为多少?
先在纸上自己做一遍,再点这里展开满分解答
研发部 ≥ 500:29 − 2 = 510,需 /23;生产部 ≥ 200:28 − 2 = 254,需 /24;行政部 ≥ 100:27 − 2 = 126,需 /25;点对点链路 2 个地址,需 /30。
按从大到小、块对齐分配:研发部 202.100.64.0/23(64.0 ~ 65.255);生产部 202.100.66.0/24;行政部 202.100.67.0/25;点对点链路放在最末端:202.100.67.252/30。剩余 202.100.67.128 ~ 202.100.67.251,连续可用。
链路 202.100.67.252/30 的可用地址为 .253、.254,R1 的 S0 = 202.100.67.253,R2 = 202.100.67.254。
| 目的网络 | 子网掩码 | 下一跳 | 接口 |
|---|---|---|---|
| 202.100.64.0 | 255.255.254.0 | 直接交付 | E0 |
| 202.100.66.0 | 255.255.255.0 | 直接交付 | E1 |
| 202.100.67.0 | 255.255.255.128 | 直接交付 | E2 |
| 202.100.67.252 | 255.255.255.252 | 直接交付 | S0 |
| 0.0.0.0 | 0.0.0.0 | 202.100.67.254 | S0 |
所有网络都在 202.100.64.0/22 内,且都经 R1:目的网络 202.100.64.0/22(掩码 255.255.252.0),下一跳 202.100.67.253。
202.100.66.200 属于 202.100.66.0/24(生产部),R1 从 E1 直接交付。途经 R1 一个路由器(R2 发出时的 TTL 已是它转发后的值),到达时 TTL = 64 − 1 = 63。
“R2 发出时 TTL = 64”指离开 R2 时的值,之后只有 R1 再减 1。若题目说“源主机发出时 TTL = 64”,就要数源主机到目的主机途经的所有路由器。
模拟大题 2:等分子网、聚合与“路由环路”(按 408 风格自编)
某单位分到地址块 211.70.16.0/24,准备等分成 4 个子网,前 3 个依次给 LAN1、LAN2、LAN3,第 4 个暂时留空。R1 的 E0 连 LAN1、E1 连 LAN2,S0(10.0.0.1)经点对点链路 10.0.0.0/30 连 R2 的 S0(10.0.0.2),这条链路的 MTU = 1006B;R2 的 E0 连 LAN3,S1(202.1.1.2)连 ISP 的路由器(202.1.1.1)。各路由器的局域网接口取所在子网的第一个可用地址。LAN3 中有 Web 服务器 211.70.16.130。
(1) 给出 LAN1 ~ LAN3 的网络地址、可分配地址范围和广播地址。每个子网最多还能接多少台主机?
(2) 写出 R2 的路由表,要求路由项最少(目的网络、子网掩码、下一跳、接口)。
(3) ISP 路由器只用一条路由指向该单位,应怎样写?此时若 ISP 收到目的地址为 211.70.16.200 的分组,会发生什么?R2 怎样改进?
(4) Web 服务器向 LAN1 中的主机发送一个总长 4000B 的 IP 分组(首部 20B,DF = 0)。R2 转发时分几片?写出各片的总长度、片偏移和 MF。若服务器发出时 TTL = 64,到达目的主机时 TTL 是多少?
先在纸上自己做一遍,再点这里展开满分解答
/24 等分 4 份 → 借 2 位,前缀 /26,每块 64 个地址:
| 子网 | 网络地址 | 可分配范围 | 广播地址 |
|---|---|---|---|
| LAN1 | 211.70.16.0/26 | .1 ~ .62 | 211.70.16.63 |
| LAN2 | 211.70.16.64/26 | .65 ~ .126 | 211.70.16.127 |
| LAN3 | 211.70.16.128/26 | .129 ~ .190 | 211.70.16.191 |
每个子网 26 − 2 = 62 个可分配地址,扣掉路由器接口 1 个,最多还能接 61 台主机。
“还能接多少台”要减去路由器接口(2018-47 就在这里扣分)。
| 目的网络 | 子网掩码 | 下一跳 | 接口 |
|---|---|---|---|
| 211.70.16.128 | 255.255.255.192 | 直接交付 | E0 |
| 211.70.16.0 | 255.255.255.128 | 10.0.0.1 | S0 |
| 10.0.0.0 | 255.255.255.252 | 直接交付 | S0 |
| 202.1.1.0 | 255.255.255.252 | 直接交付 | S1 |
| 0.0.0.0 | 0.0.0.0 | 202.1.1.1 | S1 |
LAN1(.0/26)和 LAN2(.64/26)下一跳都是 R1,且正好拼成 211.70.16.0/25,聚合成一条。
ISP:目的网络 211.70.16.0/24(255.255.255.0),下一跳 202.1.1.2。
211.70.16.200 落在留空的第 4 个子网。ISP 按 /24 交给 R2;R2 表中只有默认路由能匹配,又把它交回 ISP——分组在 ISP 与 R2 之间来回兜圈,每过一次 TTL 减 1,减到 0 时被丢弃,路由器向源主机发 ICMP 时间超过报文。
改进:R2 增加一条 211.70.16.192/26(或整个 211.70.16.0/24)的“丢弃”路由——按最长前缀匹配,LAN1 ~ LAN3 的分组仍走更长的前缀,只有发往空闲地址的分组被直接丢弃。
聚合能省路由项,但聚合块里若有“没人用”的地址,就要想到这种环路。
每片数据最多 ⌊(1006 − 20) ÷ 8⌋ × 8 = 984B;原数据 4000 − 20 = 3980B = 4 × 984 + 44,分 5 片:
| 片 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 总长度 | 1004 | 1004 | 1004 | 1004 | 64 |
| 片偏移 | 0 | 123 | 246 | 369 | 492 |
| MF | 1 | 1 | 1 | 1 | 0 |
途经 R2、R1 两个路由器,到达时 TTL = 64 − 2 = 62。
片偏移以 8B 为单位:984 ÷ 8 = 123。MTU 1006 不是“整齐”的数,先减首部、再向下取 8 的倍数。
举一反三:条件一变,答案怎么变
| 在哪道题上改 | 条件改成 | 答案怎么变 |
|---|---|---|
| 2009-47(1) | 两个局域网各需不少于 60 个地址 | 看答案主机位 6,前缀 /26:可取 202.118.1.0/26 和 202.118.1.64/26(或其他对齐的 /26);聚合时两个 /26 相邻才能合成 /25。 |
| 2009-47(1) | 局域网 1 需 200 个、局域网 2 需 50 个 | 看答案/24 不够分:200 需要 /24(254),50 需要 /26,合计超过 256 个地址——无法满足,要说明理由。 |
| 2009-47(2) | 去掉到域名服务器的特定主机路由 | 看答案域名服务器的分组会走默认路由,下一跳同样是 202.118.2.2,结果不变,只是少一行。 |
| 2013-47(1) | R3 下的网络改为 194.17.22.0/24 | 看答案194.17.20.0/25 与 194.17.22.0/24 不相邻,不能合成一个块而不包进无关地址;R2 需要分别写两条经 S1 的路由,共 4 条。 |
| 2014-43(2) | R2—R4 链路费用改为 8 | 看答案到 R4:经 R2 为 3 + 8 = 11,经 R3 为 2 + 6 = 8,改走 R3。192.1.7.0/24 的下一跳变为 10.1.1.10(L1),不能再与 192.1.6.0/24 聚合,路由表变成 4 条;TTL 仍为 64 − 3 = 61(R1、R3、R4)。 |
| 2018-47(2) | 技术部 MTU 改为 576B | 看答案每片数据 ⌊(576 − 20) ÷ 8⌋ × 8 = 552B;1480 ÷ 552 → 3 片(552、552、376),片偏移 0、69、138。 |
7.3② 路由算法与路由协议:Dijkstra、RIP、BGP
先读:4.8 路由算法与 RIP/OSPF/BGP 4.4 路由表
这类题长什么样
给出链路状态信息或拓扑和费用,让你用 Dijkstra 求最短路径(2014-42,与数据结构“图”交叉);或者给出几个自治系统,问 RIP/OSPF 的选择、RIP 的收敛时间、BGP 的会话和选路(2024-47)。
| 常见问法 | 考过的地方 |
|---|---|
| 按 Dijkstra 依次给出到各网络的最短路径和费用 | 2014-42(3) |
| 设计存储链路状态信息的数据结构(邻接表) | 2014-42(2) |
| 根据最短路径写路由表、算 TTL、LSI 要增加什么 | 2014-43 |
| RIP 与 OSPF 怎么选;RIP 最多多少跳 | 2024-47(1)(2) |
| RIP 多久才能让所有路由器学到某条路由 | 2024-47(3) |
| BGP 用 eBGP 还是 iBGP、用什么报文、按什么选路 | 2024-47(4)(5),2013-47(3) |
做这类题必须会的 4 件事
① Dijkstra 表格法。从源点出发,每一步在“未确定”的结点里选当前距离最小的确定下来,再用它更新邻居的距离;答题时按确定的先后列出“目的、路径、费用”。到网络的费用 = 到它所连路由器的距离 + 直连费用。
② RIP 的“一次交换只走一跳”。初始距离向量只含直连网络。一个网络离某路由器 k 跳,这个路由器要在第 k 次交换后才学到它;若交换周期 30s、从第 1 次交换(0s)算起,需要 (k − 1) × 30s。RIP 距离 ≤ 15,16 为不可达,所以大网络选 OSPF。
③ BGP 三件事。不同 AS 的边界路由器之间是 eBGP 会话,同一 AS 内传递外部路由用 iBGP;路由用 UPDATE 报文通告;BGP 报文用 TCP 传。无策略时先选 AS 路径最短的,再选离自己最近的出口(“热土豆”)。
④ TTL。经过 k 个路由器要减 k,TTL 至少设为 k + 1 才能到达。
解题模板
- 把表或图变成带权图。列出每条链路的两端和费用、每个路由器的直连网络和费用。
- Dijkstra 列表。表头:步骤、确定的结点、到各结点的当前距离;每步圈出最小值。
- 从最短路径树得路由。到每个网络的“第一跳”就是路由表的下一跳;下一跳相同的网络再聚合。
- 协议题对号入座。AS 内:RIP(小、跳数)或 OSPF(大、链路状态、可分区);AS 间:BGP(eBGP/iBGP、UPDATE、TCP)。
某网络中的路由器运行 OSPF 路由协议,题 42 表是路由器 R1 维护的主要链路状态信息(LSI),题 42 图是根据题 42 表及 R1 的接口名构造出来的网络拓扑。
| R1 的 LSI | R2 的 LSI | R3 的 LSI | R4 的 LSI | 备注 | ||
|---|---|---|---|---|---|---|
| Router ID | 10.1.1.1 | 10.1.1.2 | 10.1.1.5 | 10.1.1.6 | 标识路由器的 IP 地址 | |
| Link1 | ID | 10.1.1.2 | 10.1.1.1 | 10.1.1.6 | 10.1.1.5 | 所连路由器的 Router ID |
| IP | 10.1.1.1 | 10.1.1.2 | 10.1.1.5 | 10.1.1.6 | Link1 的本地 IP 地址 | |
| Metric | 3 | 3 | 6 | 6 | Link1 的费用 | |
| Link2 | ID | 10.1.1.5 | 10.1.1.6 | 10.1.1.1 | 10.1.1.2 | 所连路由器的 Router ID |
| IP | 10.1.1.9 | 10.1.1.13 | 10.1.1.10 | 10.1.1.14 | Link2 的本地 IP 地址 | |
| Metric | 2 | 4 | 2 | 4 | Link2 的费用 | |
| Net1 | Prefix | 192.1.1.0/24 | 192.1.6.0/24 | 192.1.5.0/24 | 192.1.7.0/24 | 直连网络 Net1 的网络前缀 |
| Metric | 1 | 1 | 1 | 1 | 到达直连网络 Net1 的费用 | |
题 42 表 R1 所维护的 LSI
题 42 图 R1 构造的网络拓扑
(1) 本题中的网络可抽象为数据结构中的哪种逻辑结构?
(2) 针对题 42 表中的内容,设计合理的链式存储结构,以保存题 42 表中的链路状态信息(LSI)。要求给出链式存储结构的数据类型定义,并画出对应题 42 表的链式存储结构示意图(示意图中可仅以 ID 标识结点)。
(3) 按照迪杰斯特拉(Dijkstra)算法的策略,依次给出 R1 到达题 42 图中子网 192.1.x.x 的最短路径及费用。
先在纸上自己做一遍,再点这里展开满分解答
考点4.8 OSPF 与 Dijkstra训练营 ②(本题与数据结构“图”交叉)
- 4 个路由器是顶点;Link 是带权的边:R1—R2 费用 3,R1—R3 费用 2,R2—R4 费用 4,R3—R4 费用 6。
- 每个路由器挂一个直连网络,费用 1:R1—192.1.1.0/24,R2—192.1.6.0/24,R3—192.1.5.0/24,R4—192.1.7.0/24。
图(带权无向图)。
用邻接表:每个路由器一个表头结点,后面挂一串“弧结点”,弧结点要么表示一条到其他路由器的链路(ID、本地 IP、费用),要么表示一个直连网络(前缀、掩码、费用)。
typedef struct { // 到另一个路由器的链路
unsigned int id; // 所连路由器的 Router ID
unsigned int ip; // 本地接口 IP
int metric; // 费用
} Link;
typedef struct { // 直连网络
unsigned int prefix, mask;
int metric;
} Net;
typedef struct ArcNode { // 弧结点
int flag; // 1 = 链路,2 = 直连网络
union { Link link; Net net; } info;
struct ArcNode *next;
} ArcNode;
typedef struct HNode { // 表头结点:一个路由器
unsigned int routerId;
ArcNode *first;
struct HNode *next; // 也可以把表头放在数组里(邻接表)
} HNode;
示意图:R1 → [Link 10.1.1.2, 3] → [Link 10.1.1.5, 2] → [Net 192.1.1.0/24, 1];R2 → [Link 10.1.1.1, 3] → [Link 10.1.1.6, 4] → [Net 192.1.6.0/24, 1];R3 → [Link 10.1.1.6, 6] → [Link 10.1.1.1, 2] → [Net 192.1.5.0/24, 1];R4 → [Link 10.1.1.5, 6] → [Link 10.1.1.2, 4] → [Net 192.1.7.0/24, 1]。
评分说明:只要采用可行的链式结构(邻接表、表头数组 + 两类结点链表等)并能保存表中全部信息,图示与定义一致即可给分。
| 步骤 | 目的网络 | 最短路径 | 费用 |
|---|---|---|---|
| 1 | 192.1.1.0/24 | 直接到达 | 1 |
| 2 | 192.1.5.0/24 | R1 → R3 → 192.1.5.0/24 | 3 |
| 3 | 192.1.6.0/24 | R1 → R2 → 192.1.6.0/24 | 4 |
| 4 | 192.1.7.0/24 | R1 → R2 → R4 → 192.1.7.0/24 | 8 |
到 R4 有两条路:经 R2 为 3 + 4 = 7,经 R3 为 2 + 6 = 8,取 7,再加直连网络费用 1 得 8。结果要按费用不减的次序给出(这就是 Dijkstra 的求解顺序)。
- Dijkstra 表格法:每一步从未确定的结点中选当前距离最小的,确定它,再用它更新邻居。
- 到网络的费用 = 到该网络所连路由器的最短距离 + 直连费用。
- Dijkstra 结果没有按费用不减的顺序给出;到网络的费用忘了加直连的 1。
- RIP 收敛时间多算一个周期:初始交换本身就把直连网络告诉了邻居。
- 把 iBGP、eBGP 说反;说 BGP 用 UDP。
模拟大题:链路断开前后的最短路径(按 408 风格自编)
某自治系统内 5 台路由器运行 OSPF,拓扑及链路费用如下图所示。Rk(k = 1 ~ 5)各直连一个网络 172.16.k.0/24,直连费用均为 1。
(1) 按 Dijkstra 算法的执行顺序,依次给出 R1 到 R2 ~ R5 的最短路径和费用。
(2) 写出 R1 到其他 4 个网络的路由(目的网络、下一跳路由器),下一跳相同的在不多包含地址的前提下尽量聚合。
(3) 172.16.1.0/24 中的主机向 172.16.5.0/24 中的主机发送 TTL = 32 的分组,到达时 TTL 是多少?
(4) 若 R3—R5 链路断开,R1 到 R4、R5 的最短路径和费用变为多少?R1 的路由表中哪些项要改变?
先在纸上自己做一遍,再点这里展开满分解答
| 步骤 | 确定的结点 | 最短路径 | 费用 |
|---|---|---|---|
| 1 | R3 | R1 → R3 | 1 |
| 2 | R2 | R1 → R2 | 2 |
| 3 | R5 | R1 → R3 → R5 | 4 |
| 4 | R4 | R1 → R3 → R5 → R4 | 5 |
(到 R2:直达 2,经 R3 为 1 + 2 = 3,取 2;到 R4:经 R2 为 2 + 5 = 7,经 R3 直达为 1 + 8 = 9,经 R3、R5 为 1 + 3 + 1 = 5,取 5。)
172.16.2.0/24 → 下一跳 R2;172.16.3.0/24 → R3;172.16.4.0/23(聚合 4、5 两个网络)→ R3。172.16.3.0/24 与 172.16.4.0/23 虽然下一跳相同,但合成一个块会多包进无关地址,不再合并。
路径 R1 → R3 → R5,经过 3 个路由器,到达时 TTL = 32 − 3 = 29。
到 R4:经 R2 为 2 + 5 = 7,经 R3 为 1 + 8 = 9,最短 R1 → R2 → R4,费用 7;到 R5:只能经 R4,R1 → R2 → R4 → R5,费用 8。
R1 路由表中 172.16.4.0/23(原下一跳 R3)改为下一跳 R2;172.16.3.0/24 仍经 R3 不变。
模拟大题 2:RIP 收到邻居的距离向量之后(按 408 风格自编)
某自治系统内运行 RIP。路由器 R4 的邻居是 R1、R2、R3,R4 当前的路由表如下:
| 目的网络 | 距离 | 下一跳 |
|---|---|---|
| N1 | 7 | R1 |
| N2 | 2 | R2 |
| N3 | 5 | R2 |
| N4 | 4 | R3 |
现在 R4 收到 R2 发来的距离向量:N1 距离 2,N2 距离 4,N3 距离 7,N5 距离 3。
(1) 写出 R4 更新后的路由表,并说明每一项为什么这样变。
(2) 之后 R2 通告 N3 的距离为 16,R4 怎么处理?再之后 R3 通告 N3 的距离为 4,R4 又怎么处理?
(3) RIP 每 30s 交换一次路由信息。某个新网络接到 R2 上,从 R2 第一次通告它(记为 0s)开始,离 R2 有 3 段链路的路由器 Rx 最早何时学到这个网络?Rx 中它的距离是多少?
(4) 什么是 RIP 的“坏消息传得慢”?RIP 为什么把距离 16 规定为不可达?
先在纸上自己做一遍,再点这里展开满分解答
先把 R2 通告的每个距离加 1(经过 R2 要多走一跳):N1 3、N2 5、N3 8、N5 4,再逐项比较:
| 目的网络 | 距离 | 下一跳 | 理由 |
|---|---|---|---|
| N1 | 3 | R2 | 经 R2 为 3,比原来的 7 短,替换 |
| N2 | 5 | R2 | 原下一跳就是 R2,以 R2 的最新消息为准,即使变长也要更新 |
| N3 | 8 | R2 | 同上,下一跳相同,更新为 8 |
| N4 | 4 | R3 | R2 没有通告 N4,不变 |
| N5 | 4 | R2 | 原表没有,新增 |
最常错的是 N2、N3:以为“变长了就不理”。下一跳相同时必须照新消息改——R2 说路变远了,经 R2 的路就是变远了。
R2 通告 N3 = 16:下一跳相同,R4 把 N3 改为 16(不可达),下一跳 R2。
R3 通告 N3 = 4:经 R3 为 5,比 16 短,改为 N3,5,R3。
每交换一次,消息只能往外传一段链路。离 R2 1 段的路由器在第 1 次交换(0s)后学到,2 段的在第 2 次(30s)后,3 段的 Rx 在第 3 次交换后学到,最早 60s。
R2 到直连网络的距离为 1,每过一个路由器加 1,Rx 中的距离为 4。
某网络断开后,相邻路由器可能仍从对方收到“经我可达”的旧消息,互相把距离加 1 地传来传去,要很多轮交换才知道它不可达(“好消息传得快、坏消息传得慢”)。RIP 把 16 规定为不可达,相当于给这种“数到无穷”设了上限,同时也限制了 RIP 只适合小网络(最多 15 跳)。
可以补一句:水平分割、毒性逆转等办法能缓解,但不能完全消除这个问题。
举一反三:条件一变,答案怎么变
| 在哪道题上改 | 条件改成 | 答案怎么变 |
|---|---|---|
| 2014-42(3) | R1—R2 费用改为 5 | 看答案192.1.1.0/24:1;192.1.5.0/24:3(经 R3);192.1.6.0/24:经 R2 为 5 + 1 = 6,经 R3、R4 为 2 + 6 + 4 + 1 = 13,取 6;192.1.7.0/24:经 R2 为 5 + 4 + 1 = 10,经 R3 为 2 + 6 + 1 = 9,改走 R1 → R3 → R4,费用 9。 |
| 2024-47(2) | AS3 内最多经过 10 个路由器 | 看答案初始 TTL 至少 11。 |
| 2024-47(3) | 网络 210.2.4.0/24 改为挂在 R12 上 | 看答案R11、R13 离 R12 一跳,R14、R15、R16 各两跳(R12—R11—R14、R12—R13—R15、R12—R13—R16),第 2 次交换后都学到,至少 30s。 |
| 2024-47(5) | 经 R13 的 AS 路径改为 AS4 AS10 AS12 AS19 | 看答案经 R11 的路径最短(3 个 AS),R14、R15 的下一跳都选 R11。 |
| 2013-47(3) | 问 R2 与 R3 之间 | 看答案同一 AS 内,用内部网关协议(如 RIP,封装在 UDP 中;或 OSPF,直接封装在 IP 中)。 |
预测小题:OSPF 分区域(层次路由)
考纲写着“层次路由”,OSPF 的区域划分是它最典型的例子,真题还没以大题形式考过,下面按大题的问法练一遍。先读 4.8。
某自治系统运行 OSPF,划分为主干区域 0 和区域 1、区域 2(如图)。R3 同时属于区域 0 和区域 1,R4 同时属于区域 0 和区域 2;R5 在主干区域内,并用 BGP 与其他自治系统交换路由。
(1) 哪些是区域边界路由器?哪些是主干路由器?哪个是自治系统边界路由器?
(2) R1 发出的链路状态通告会洪泛到哪些路由器?R1 知不知道区域 2 内部的详细拓扑?
(3) R1 所连网络中的主机向 R7 所连网络发分组(按跳数最少),依次经过哪些路由器?
(4) 把一个自治系统划分成多个区域有什么好处?OSPF 报文封装在什么里面传送?
先在纸上自己做一遍,再点这里展开满分解答
区域边界路由器:R3、R4(各连两个区域);主干路由器:主干区域里的 R3、R4、R5;自治系统边界路由器:R5(与其他 AS 交换路由)。
只在区域 1 内洪泛:R2、R3 收到(R3 不把它原样传进主干)。R1 不知道区域 2 的详细拓扑,只从 R3 得到区域外网络的汇总信息(“到某网络、费用多少”)。
区域间的分组必须经过主干区域:R1 → R2 → R3 → R4 → R6 → R7。
链路状态只在区域内洪泛,交换的信息量小;每个路由器的链路状态数据库小,算最短路径快;层次清楚,网络规模可以做大。OSPF 报文直接封装在 IP 数据报中(协议字段 89),不用 TCP 或 UDP。
和 RIP 对比着记:RIP 用 UDP(端口 520)、只和邻居交换整个路由表;OSPF 用 IP、向区域内所有路由器洪泛“与自己相邻的链路状态”。
7.4③ 报文首部分析:从十六进制抓包里读地址、序号和 TTL
先读:3.7 以太网帧 4.2 IP 首部 5.3 TCP 首部 5.4 三次握手
这类题长什么样
题目给一段十六进制数据(一个以太网帧的前若干字节,或若干个 IP 分组的前 40 字节),再附上帧、IP 首部、TCP 首部的结构图,问你里面的地址、端口、序号、标志、TTL 是多少,推出发生了什么。2011、2012 年考过,是“拿图对着数”的题,只要偏移数对,几乎不会错。
| 常见问法 | 考过的地方 |
|---|---|
| 目的 / 源 IP 地址、默认网关的 MAC 地址是什么 | 2011-47(1) |
| 哪几个分组是某主机发的、哪几个完成了三次握手 | 2012-47(1) |
| 哪几个分组需要填充(以太网最短帧) | 2012-47(1) |
| 对方已收到多少字节(确认号 − 起始序号) | 2012-47(2) |
| 经过了多少个路由器(TTL 之差,用标识找同一分组) | 2012-47(3) |
| 经过路由器 / NAT 时要改哪些字段 | 2011-47(4) |
| 用什么协议确定目的 MAC、HTTP 需要几个 RTT | 2011-47(2)(3) |
做这类题必须会的 4 件事
① 三层首部的字节地图。以 IP 分组起点为第 0 字节:
| 层 | 字节 | 内容 |
|---|---|---|
| 以太网帧(在 IP 之前) | 帧 0 ~ 5 | 目的 MAC |
| 帧 6 ~ 11 | 源 MAC | |
| 帧 12 ~ 13 | 类型(08 00 = IPv4,08 06 = ARP);帧第 14 字节起是 IP 分组 | |
| IP 首部 | 0 | 版本 + 首部长度(45 = IPv4,20B) |
| 2 ~ 3 | 总长度(字节) | |
| 4 ~ 5 | 标识(找“同一个分组”用它) | |
| 6 ~ 7 | 标志 + 片偏移(40 00 = DF 置 1) | |
| 8 | TTL | |
| 9 | 协议(06 = TCP,11 = UDP,01 = ICMP) | |
| 10 ~ 11 | 首部检验和 | |
| 12 ~ 15 / 16 ~ 19 | 源 IP / 目的 IP | |
| TCP 首部(首部长度 × 4 之后) | 0 ~ 1 / 2 ~ 3 | 源端口 / 目的端口(00 50 = 80) |
| 4 ~ 7 | 序号 | |
| 8 ~ 11 | 确认号 | |
| 12 | 高 4 位:数据偏移(×4 = TCP 首部长度) | |
| 13 | 标志:02 = SYN,12 = SYN + ACK,10 = ACK,18 = ACK + PSH,11 = ACK + FIN |
② 十六进制 → 点分十进制:每字节单独换:c0 a8 00 08 = 192.168.0.8;40 aa 62 20 = 64.170.98.32。
③ 从数据推事件。SYN 的 seq + 1 = 对方 ack;数据量 = 最新确认号 − 数据起始序号;TTL 之差 = 途经路由器数;总长度 < 46 → 以太网需要填充。
④ 转发时改什么。普通路由器:TTL − 1、重算首部检验和(需要分片时再改总长度、标志、片偏移)。NAT 路由器:另改源 IP(出方向)或目的 IP(入方向),NAPT 还改端口,TCP/UDP 检验和也要重算。
解题模板
- 先画竖线切字段。在题目数据上按“帧首部 14B | IP 首部 | TCP 首部 | 数据”画竖线,每行 16 字节时特别注意行尾换行处。
- 每个分组做一张小表:总长度、标识、TTL、源、目的、端口、seq、ack、标志。
- 按问题查表:方向看源 IP,握手看标志,数据量看序号差,路由器数看 TTL 差(用标识对应同一分组)。
- 答案带上原始数据:写“第 31~34 字节 40 aa 62 20,即 64.170.98.32”,阅卷一眼可见。
主机 H 通过快速以太网连接 Internet,IP 地址为 192.168.0.8,服务器 S 的 IP 地址为 211.68.71.80。H 与 S 使用 TCP 通信时,在 H 上捕获的其中 5 个 IP 分组如题 47-a 表所示。
| 编号 | IP 分组的前 40 字节内容(十六进制) |
|---|---|
| 1 | 45 00 00 30 01 9b 40 00 80 06 1d e8 c0 a8 00 08 d3 44 47 50 0b d9 13 88 84 6b 41 c5 00 00 00 00 70 02 43 80 5d b0 00 00 |
| 2 | 45 00 00 30 00 00 40 00 31 06 6e 83 d3 44 47 50 c0 a8 00 08 13 88 0b d9 e0 59 9f ef 84 6b 41 c6 70 12 16 d0 37 e1 00 00 |
| 3 | 45 00 00 28 01 9c 40 00 80 06 1d ef c0 a8 00 08 d3 44 47 50 0b d9 13 88 84 6b 41 c6 e0 59 9f f0 50 f0 43 80 2b 32 00 00 |
| 4 | 45 00 00 38 01 9d 40 00 80 06 1d de c0 a8 00 08 d3 44 47 50 0b d9 13 88 84 6b 41 c6 e0 59 9f f0 50 18 43 80 e6 55 00 00 |
| 5 | 45 00 00 28 68 11 40 00 31 06 06 7a d3 44 47 50 c0 a8 00 08 13 88 0b d9 e0 59 9f f0 84 6b 41 d6 50 10 16 d0 57 d2 00 00 |
题 47-a 表(IP 分组头和 TCP 段头结构见图 4-2、图 5-1)
(1) 题 47-a 表中的 IP 分组中,哪几个是由 H 发送的?哪几个完成了 TCP 连接建立过程?哪几个在通过快速以太网传输时进行了填充?
(2) 根据题 47-a 表中的 IP 分组,分析 S 已经收到的应用层数据字节数是多少?
(3) 若题 47-a 表中的某个 IP 分组在 S 发出时的前 40 字节如题 47-b 表所示,则该 IP 分组到达 H 时经过了多少个路由器?
| 来自 S 的分组 | 45 00 00 28 68 11 40 00 40 06 ec ad d3 44 47 50 ca 76 01 06 13 88 a1 08 e0 59 9f f0 84 6b 41 d6 50 10 16 d0 b7 d6 00 00 |
|---|
题 47-b 表
先在纸上自己做一遍,再点这里展开满分解答
考点4.2 IP 首部5.3 TCP 首部5.4 三次握手3.7 以太网最短帧与填充训练营 ③
| 编号 | 总长度 | TTL | 源 → 目的 | seq | ack | 标志 |
|---|---|---|---|---|---|---|
| 1 | 0x30 = 48 | 0x80 | H → S | 846b 41c5 | — | SYN |
| 2 | 0x30 = 48 | 0x31 | S → H | e059 9fef | 846b 41c6 | SYN、ACK |
| 3 | 0x28 = 40 | 0x80 | H → S | 846b 41c6 | e059 9ff0 | ACK(SYN = 0) |
| 4 | 0x38 = 56 | 0x80 | H → S | 846b 41c6 | e059 9ff0 | ACK、PSH,带 16B 数据 |
| 5 | 0x28 = 40 | 0x31 | S → H | e059 9ff0 | 846b 41d6 | ACK |
所有分组的 IP 首部检验和都能验算通过(反码求和得 FFFF),说明上面的数字抄得没错。
源 IP 地址(第 13~16 字节)为 c0 a8 00 08(192.168.0.8)的是 H 发出的:1、3、4 号。
1 号 SYN = 1、ACK = 0,seq = 846b41c5H;2 号 SYN = 1、ACK = 1,ack = 846b41c6H;3 号 ACK = 1、SYN = 0,ack = e0599ff0H。1、2、3 号完成了三次握手。
以太网帧的数据部分最少 46B,总长度只有 40B(0x28)的 3、5 号分组需要填充。
H 的数据从序号 846b41c6H 开始(3、4 号的 seq);S 发出的 5 号分组确认号为 846b41d6H,说明 S 已收到 846b41c6H ~ 846b41d5H 的数据,共 846b41d6H − 846b41c6H = 10H = 16 字节。(与 4 号分组总长 56B − 20B − 20B = 16B 一致。)
先找出是哪一个分组:标识字段(第 5~6 字节)都是 68 11 → 就是 5 号。再比 TTL。
题 47-b 表分组的标识为 6811H,与 5 号分组相同,是同一个分组。S 发出时 TTL = 40H = 64,H 收到时 TTL = 31H = 49,每经过一个路由器 TTL 减 1,共经过 64 − 49 = 15 个路由器。
两表中该分组的目的 IP 不同(S 发出时是 ca 76 01 06 = 202.118.1.6,到 H 时是 192.168.0.8),目的端口也不同(a1 08 → 0b d9):H 用私有地址,中途经过了 NAT。找对应分组要看标识,不能看地址。
- 判断方向看源 IP;判断握手看 SYN/ACK 位和 seq/ack;判断填充看总长度是否 < 46B。
- 数据量 = 对方确认号 − 自己起始序号;路由器数 = TTL 之差。
- 把行首的字节计数(0000、0010……)当成数据。
- 数偏移时忘了以太网首部 14B,或把 IP 首部长度当作固定 20B 而题中其实有选项。
- “经过了多少个路由器”用地址找分组——经过 NAT 后地址变了,要用标识找。
- 罗列所有字段当作“需要修改的字段”。
模拟大题:一个 SYN 帧里能读出什么(按 408 风格自编)
主机 H 通过 NAT 路由器 R 接入 Internet,R 的内网接口 MAC 为 00-0f-e2-11-22-33,外网地址为 58.19.24.3。在 H 上捕获到一个以太网帧(不含前导码和 CRC)如下:
0000 00 0f e2 11 22 33 00 1e 4f 2a 9c 01 08 00 45 00 0010 00 30 4a 2c 40 00 40 06 1b ac c0 a8 0a 17 ca 26 0020 40 0a c3 5a 00 50 1a 2b 3c 4d 00 00 00 00 70 02 0030 fa f0 99 1b 00 00 02 04 05 b4 01 01 04 02
(1) H 的 MAC 地址和 IP 地址各是什么?该帧要发往哪个 IP 地址的哪个端口?对方运行的很可能是什么应用?
(2) 这个 TCP 段是三次握手的第几次?若对方接受连接,回复的 TCP 段中 SYN、ACK 的值和确认号是多少?该段选项中通告的 MSS 是多少?
(3) 该 IP 分组的首部长度、总长度、TTL 各是多少?途中能否被分片?
(4) R 采用 NAPT,把 H 的端口映射为 6001。R 转发该分组时,IP 首部和 TCP 首部中哪些字段会改变?改成什么(检验和只需说明是否重算)?
先在纸上自己做一遍,再点这里展开满分解答
- 帧 0~5:00-0f-e2-11-22-33(R 的内网接口);6~11:00-1e-4f-2a-9c-01(H);12~13:08 00 → IPv4。
- IP:45(20B)00 | 00 30(48)| 4a 2c | 40 00(DF = 1)| 40(TTL 64)06(TCP)| 1b ac | c0 a8 0a 17 | ca 26 40 0a。
- TCP:c3 5a(50010)| 00 50(80)| 1a 2b 3c 4d(seq)| 00 00 00 00 | 70(首部 28B)02(SYN)| fa f0 | 99 1b | 00 00 | 选项 02 04 05 b4(MSS = 1460)01 01 04 02。
源 MAC(帧第 7~12 字节)00-1e-4f-2a-9c-01 是 H 的 MAC;源 IP(IP 首部第 13~16 字节)c0 a8 0a 17 = 192.168.10.23。
目的 IP ca 26 40 0a = 202.38.64.10,目的端口 00 50 = 80,对方很可能是 Web(HTTP)服务器。
标志字节 02:SYN = 1、ACK = 0,是第一次握手,seq = 1a2b3c4dH。对方回复 SYN = 1、ACK = 1,确认号 = 1a2b3c4dH + 1 = 1a2b3c4eH。选项 02 04 05 b4 表示 MSS = 05b4H = 1460 字节。
首部长度 5 × 4 = 20B,总长度 0030H = 48B(TCP 首部 7 × 4 = 28B,不带数据),TTL = 40H = 64。标志字段 40 00 中 DF = 1,不允许分片(它只有 48B,本来也不需要)。
IP 首部:源 IP 由 c0 a8 0a 17 改为 3a 13 18 03(58.19.24.3);TTL 由 40H 改为 3fH;首部检验和重算(改为 95 55)。
TCP 首部:源端口由 c3 5a(50010)改为 17 71(6001);检验和重算(伪首部中的源 IP 和源端口都变了,改为 bd ae)。其余字段不变。
括号中的检验和已用程序验算:改动后的首部按反码求和结果为全 1。
模拟大题 2:三个分片的 IP 首部(按 408 风格自编)
主机 H(以太网,MTU = 1500B)向服务器发送了一个较大的 UDP 数据报。在 H 的出口处捕获到 3 个 IP 分组,它们的首部(各 20B,十六进制)如下:
分片 1:45 00 05 dc 1c 46 20 00 3f 11 3c 0f c0 a8 01 0a cb 00 71 09 分片 2:45 00 05 dc 1c 46 20 b9 3f 11 3b 56 c0 a8 01 0a cb 00 71 09 分片 3:45 00 02 38 1c 46 01 72 3f 11 5e 41 c0 a8 01 0a cb 00 71 09
(1) 三个分组是否属于同一个数据报?依据是什么?源、目的 IP 地址和上层协议各是什么?
(2) 每个分片的 MF、片偏移(以字节计)和数据部分长度各是多少?哪一片是最后一片?
(3) 原 IP 数据报的总长度是多少?UDP 用户数据有多长?
(4) 途中有一段 MTU = 576B 的链路。哪些分片还要再分片?写出再分片后各片的总长度、片偏移(以 8B 为单位)和 MF。
(5) 这些分片在哪里重组?若它们到达目的主机前经过 3 个路由器,到达时 TTL 是多少?
先在纸上自己做一遍,再点这里展开满分解答
- 45:版本 4、首部 5 × 4 = 20B;05 dc / 02 38:总长度 1500 / 568;1c 46:标识。
- 标志 + 片偏移 2 字节:20 00 = 0010 0000 0000 0000 → MF = 1、偏移 0;20 b9 = 0010 0000 1011 1001 → MF = 1、偏移 0b9H = 185;01 72 = 0000 0001 0111 0010 → MF = 0、偏移 172H = 370。
- 3f:TTL 63;11:协议 17(UDP);接着 2 字节检验和;c0 a8 01 0a = 192.168.1.10;cb 00 71 09 = 203.0.113.9。
三者标识都是 1c46H,源 IP、目的 IP、协议也都相同,属于同一个数据报。源 IP 192.168.1.10,目的 IP 203.0.113.9,协议字段 11H = 17,上层是 UDP。
| 分片 | MF | 片偏移 | 数据长度 |
|---|---|---|---|
| 1 | 1 | 0 × 8 = 0 | 1500 − 20 = 1480B |
| 2 | 1 | 185 × 8 = 1480 | 1480B |
| 3 | 0 | 370 × 8 = 2960 | 568 − 20 = 548B |
MF = 0 的分片 3 是最后一片。偏移首尾相接(0 → 1480 → 2960),没有缺片。
数据共 1480 + 1480 + 548 = 3508B,原数据报总长 = 3508 + 20 = 3528B;UDP 首部 8B,用户数据 3508 − 8 = 3500B。
UDP 首部只在第 1 片里,后面的分片没有 UDP 首部——所以路由器无法按端口过滤后续分片。
分片 3 总长 568B ≤ 576B,不用再分。分片 1、2 各 1500B,每片数据最多 ⌊(576 − 20) ÷ 8⌋ × 8 = 552B,1480 = 552 + 552 + 376,各分 3 片:
| 总长度 | 片偏移 | MF | |
|---|---|---|---|
| 分片 1 → 1a、1b、1c | 572、572、396 | 0、69、138 | 1、1、1 |
| 分片 2 → 2a、2b、2c | 572、572、396 | 185、254、323 | 1、1、1 |
再分片时 MF 要“继承”:分片 1、2 本身 MF = 1,它们切出来的最后一片 MF 仍是 1;片偏移从原分片的偏移接着算(185 + 69 = 254)。
只在目的主机重组,路由器不重组。TTL = 3fH = 63,经过 3 个路由器,到达时为 60。
题中三个首部检验和已用程序验算(verify/09/p7_train.py):把含检验和的 10 个 16 位字反码求和,结果为 FFFFH。
举一反三:条件一变,答案怎么变
| 在哪道题上改 | 条件改成 | 答案怎么变 |
|---|---|---|
| 2011-47(3) | HTTP/1.1 持续连接、流水线方式 | 看答案请求页面 1 RTT,5 个图像的请求连续发出,再 1 RTT,共 2 个 RTT。 |
| 2011-47(3) | HTTP/1.0 非持续连接、串行,从建立 TCP 连接算起 | 看答案每个对象 2 RTT(握手 + 请求响应),6 个对象共 12 个 RTT。 |
| 2011-47(4) | R 不是 NAT 路由器,出口 MTU = 400B | 看答案源地址不变;但总长 495B > 400B 且 DF = 1(40 00),不能分片,R 丢弃分组并向源主机发 ICMP 终点不可达(需要分片但 DF 置位)。 |
| 2012-47(2) | 5 号分组的确认号为 846b4226H | 看答案846b4226H − 846b41c6H = 60H = 96 字节。 |
| 2012-47(3) | H 收到时 TTL 为 2cH | 看答案40H − 2cH = 14H = 20 个路由器。 |
| 2012-47(1) | 4 号分组总长度改为 0x2e | 看答案46B 正好是以太网数据部分的最小值,不需要填充;需要填充的仍只有 3、5 号。 |
预测小题:IPv6 地址与分片
IPv6 在选择题里考过特点,大题还没考过它的首部和分片。先读 4.7。
(1) 把 IPv6 地址 2001:0db8:0000:0000:0008:0800:200c:417a 写成最简形式。ff02::1 是哪一类地址?
(2) IPv6 基本首部多长?与 IPv4 首部相比取消了哪些字段?
(3) 某源主机经路径 MTU = 1280B 的路径发送 3000B 的上层数据(除分片首部外没有其他扩展首部,分片首部 8B)。每片的数据部分最多多长?分几片?各片的 IPv6 分组总长是多少?若途中某路由器发现分组太大,它怎么处理?
先在纸上自己做一遍,再点这里展开满分解答
每组去掉前导 0,连续的全 0 组用 :: 代替(只能用一次):2001:db8::8:800:200c:417a。ff02::1 以 ff 开头,是组播地址(本链路上的所有结点)。
基本首部固定 40B。取消了:首部长度(固定了)、首部检验和、与分片有关的标识 / 标志 / 片偏移(移到分片扩展首部)、选项(改用扩展首部)。
每片数据 ≤ 1280 − 40 − 8 = 1232B,且是 8 的倍数(1232 = 154 × 8),可取 1232B。3000 = 1232 + 1232 + 536,分 3 片;各片总长 = 40 + 8 + 数据 = 1280B、1280B、584B。
IPv6 只由源点分片,途中路由器不分片:分组太大时丢弃它,并向源点发 ICMPv6“分组太大”差错报文,源点据此调小分片。
IPv4 的路由器可以分片(DF = 0 时),IPv6 的路由器不能——选择题最爱考这一句。
7.5④ 局域网:设备选择、冲突域与广播域、CSMA/CD、DHCP、802.11
先读:3.5 CSMA/CD 3.6 802.11 地址 3.9 设备与冲突域、广播域 4.6 DHCP
这类题长什么样
一张局域网拓扑,有几个位置标着“设备 1、设备 2”让你选(路由器、交换机、集线器),再问冲突和广播的范围、CSMA/CD 的时间和距离、DHCP 报文怎么走、无线帧的地址。2010、2019、2022 年考过。
| 常见问法 | 考过的地方 |
|---|---|
| 设备 x 应选路由器、交换机还是集线器 | 2019-47(1),2022-47(1) |
| 哪些设备的接口要配 IP、配什么 | 2019-47(2) |
| 检测到冲突的最短 / 最长时间、最远距离 | 2010-47(1),2022-47(2) |
| 停等方式下的有效数据率 | 2010-47(2) |
| 广播分组 / 广播帧能被谁收到 | 2019-47(4),2022-47(3) |
| DHCP 报文类型、目的 MAC | 2022-47(3) |
| 802.11 帧的地址 1、2、3 | 2022-47(4) |
做这类题必须会的 4 件事
① 由“域”的关系反推设备。不同网络(不同子网 / 不同广播域)之间 → 路由器;同一广播域、不同冲突域 → 交换机;同一冲突域 → 集线器。只有路由器(和主机)接口需要 IP 地址。
② CSMA/CD 的三个时间。检测冲突最短 τ、最长 2τ;最短帧发送时间 ≥ 2 ×(传播时延 + 中间设备时延);由此求最远距离或最短帧长。
③ 广播的传播范围。链路层广播帧(ARP 请求、DHCP 发现)在整个广播域内泛洪,路由器挡住;IP 广播地址(主机号全 1)同样只在本网络。
④ 802.11 三个地址。地址 1 = 这一跳的接收者,地址 2 = 这一跳的发送者,地址 3 = AP 另一侧的那个(发往 AP 时是最终目的,从 AP 发出时是最初源)。
解题模板
- 标子网。每台主机地址 & 掩码,分出几个网络;网络之间必然是路由器。
- 标域。用题目给的“同一广播域 / 冲突域”关系确定交换机和集线器。
- 时间和距离题:先求 τ(或最短帧时间的一半),再减设备时延,最后乘传播速度。
- “谁能收到”:先判断是广播还是单播;广播看广播域,单播看交换机表是否已学到。
- 无线帧:画出这一跳的收、发双方,再按地址 1、2、3 填。
某网络拓扑如下图所示,R 为路由器,S 为以太网交换机,AP 是 802.11 接入点,路由器的 E0 接口和 DHCP 服务器的 IP 地址配置如图中所示;H1 与 H2 属于同一个广播域,但不属于同一个冲突域;H2 和 H3 属于同一个冲突域;H4 和 H5 已经接入网络,并通过 DHCP 动态获取了 IP 地址。现有路由器、100BaseT 以太网交换机和 100BaseT 集线器(Hub)三类设备各若干台。
(1) 设备 1 和设备 2 应该分别选择哪类设备?
(2) 若信号传播速度为 2 × 108m/s,以太网最小帧长为 64B,信号通过设备 2 时会产生额外的 1.51μs 的时间延迟,则 H2 与 H3 之间可以相距的最远距离是多少?
(3) 在 H4 通过 DHCP 动态获取 IP 地址过程中,H4 首先发送了 DHCP 报文 M,M 是哪种 DHCP 报文?路由器 E0 接口能否收到封装 M 的以太网帧?S 向 DHCP 服务器转发的封装 M 的以太网帧的目的 MAC 地址是什么?
(4) 若 H4 向 H5 发送一个 IP 分组 P,则 H5 收到的封装 P 的 802.11 帧的地址 1、地址 2 和地址 3 分别是什么?
先在纸上自己做一遍,再点这里展开满分解答
考点3.9 冲突域与广播域3.5 CSMA/CD 最远距离4.6 DHCP3.6 802.11 地址训练营 ④
H1、H2 同一广播域但不同冲突域 → 设备 1 隔离冲突域而不隔离广播域,是 100BaseT 以太网交换机;H2、H3 同一冲突域 → 设备 2 不隔离冲突域,是 100BaseT 集线器。
100BaseT 速率 100Mbps,最小帧 64B 的发送时间 = 512bit ÷ 100Mbps = 5.12μs,它应不小于往返时延,所以单程时延 ≤ 2.56μs。
单程时延 = 传播时延 + 集线器时延 1.51μs,传播时延 ≤ 2.56 − 1.51 = 1.05μs。
最远距离 = 1.05μs × 2 × 108m/s = 210m。
M 是 DHCP 发现报文(DHCPDISCOVER)。它以广播帧发送,E0 接口与 H4 在同一广播域,能收到封装 M 的帧。S 向 DHCP 服务器转发的这个帧目的 MAC 仍是广播地址 FF-FF-FF-FF-FF-FF。
H4 与 H5 同在一个 BSS,帧经 AP 转发。H5 收到的是 AP 发出的帧(来自 AP):地址 1 = 接收者 H5 00-11-11-11-11-E1,地址 2 = 发送者 AP 00-11-11-11-11-C1,地址 3 = 源站 H4 00-11-11-11-11-D1。
- “同一广播域、不同冲突域” → 交换机;“同一冲突域” → 集线器;“不同广播域” → 路由器。
- 最远距离:最短帧时间 ÷ 2 − 设备时延,再乘传播速度。
- 最远距离忘了减集线器时延,或减的是往返两次(单程只经过一次)。
- 有效数据率用 1518B 而不是 1500B;漏掉确认帧的发送时间。
- 认为路由器接口收不到广播帧——同一广播域内的路由器接口也会收到,只是不转发。
模拟大题:一个楼层的有线 + 无线网络(按 408 风格自编)
某楼层网络如下图所示。路由器 R 的 E0(192.168.10.1/24)连交换机 S1,E1(192.168.20.1/24)连交换机 S2。S1 的一个端口连 100BaseT 集线器 Hub,Hub 连主机 H1、H2;S1 的另一个端口直接连 H3。S2 连主机 H4 和无线接入点 AP,笔记本 L1 通过 AP 接入。已知 AP、L1、H4 的 MAC 地址分别为 00-aa-00-00-00-01、00-bb-00-00-00-01、00-cc-00-00-00-04。信号传播速度 2 × 108m/s,以太网最短帧长 64B,信号经过 Hub 产生 0.56μs 的时延。设各交换机已学到所有主机的端口。
(1) H1 向 H3 发送一个单播帧,在物理层上哪些主机能收到这个帧的信号?
(2) H1 与 H2 之间理论上可以相距的最远距离是多少?
(3) H1 刚开机、ARP 表为空,访问 H4 时发出的第一个帧是什么帧?哪些主机和路由器接口能收到它?
(4) L1 向 H4 发送一个 IP 分组,L1 发出的 802.11 帧的地址 1、地址 2、地址 3 分别是什么?H4 收到的以太网帧的源 MAC 地址是什么?
先在纸上自己做一遍,再点这里展开满分解答
Hub 把 H1 的信号从所有端口转发,H2 和 S1 都收到;S1 已学到 H3 的端口,只从该端口转发,H3 收到。所以除 H1 外,H2、H3 能收到。
最短帧发送时间 = 512bit ÷ 100Mbps = 5.12μs,单程时延不能超过 2.56μs;减去 Hub 时延 0.56μs,传播时延 ≤ 2μs,最远距离 = 2μs × 2 × 108m/s = 400m。
H4 在另一个网络(192.168.20.0/24),H1 要把分组交给默认网关 192.168.10.1,第一个帧是查询网关 MAC 的 ARP 请求帧(目的 MAC 全 F)。它在 192.168.10.0/24 这个广播域内泛洪:H2、H3 和 R 的 E0 接口能收到;路由器不转发广播,H4、L1 收不到。
L1 与 H4 同在 192.168.20.0/24,分组经 AP 直接交给 H4。L1 发往 AP 的帧:地址 1 = AP 00-aa-00-00-00-01,地址 2 = L1 00-bb-00-00-00-01,地址 3 = 目的 H4 00-cc-00-00-00-04。
AP 把 802.11 帧转换成以太网帧时,源 MAC 仍是 L1 的 00-bb-00-00-00-01(AP 是链路层设备,不改写源地址)。
模拟大题 2:一帧一帧地看交换机学习(按 408 风格自编)
某实验室网络如下图所示,全部是 10BaseT(10Mbps)。交换机 S1、S2 的交换表初始为空,各主机的 ARP 表中已有彼此的 MAC 地址(不会发 ARP)。随后依次发送 4 个单播帧:① H1 → H5;② H5 → H1;③ H3 → H4;④ H4 → H3。
(1) H1 ~ H6 分属几个冲突域?几个广播域?
(2) 对每个帧,指出除发送方外哪些主机的网卡能收到它;写出 4 个帧发完后 S1、S2 的交换表。
(3) 若 H3、H4 同时发帧发生冲突,按二进制指数退避,第 3 次冲突后最长要等多久再重传?第 12 次冲突后 r 从多大的范围中选?第 1 次冲突后,两站又选到相同 r(再次冲突)的概率是多少?
(4) 现要按端口划分 VLAN,把 H1、H3、H5 划入 VLAN 10,H2、H4、H6 划入 VLAN 20,能否做到?为什么?
先在纸上自己做一遍,再点这里展开满分解答
交换机每个端口是一个冲突域,集线器不隔离冲突:{H1}、{H2}、{H3、H4}、{H5}、{H6},主机分属 5 个冲突域。交换机、集线器都不隔离广播,只有 1 个广播域。
| 帧 | 交换机怎么处理 | 收到的主机 |
|---|---|---|
| ① H1 → H5 | S1 记下 H1@1,不知 H5,从 2、3、4 泛洪;S2 记下 H1@1,不知 H5,从 2、3 泛洪 | H2、H3、H4、H5、H6(只有 H5 收下) |
| ② H5 → H1 | S2 记下 H5@2,已知 H1@1,只从 1 转发;S1 记下 H5@4,已知 H1@1,只从 1 转发 | H1 |
| ③ H3 → H4 | Hub 把信号送给 H4 和 S1 的端口 3;S1 记下 H3@3,不知 H4,从 1、2、4 泛洪;S2 记下 H3@1,从 2、3 泛洪 | H4、H1、H2、H5、H6 |
| ④ H4 → H3 | Hub 送给 H3 和 S1 的端口 3;S1 记下 H4@3,H3 也在端口 3(进来的端口),丢弃不转发 | H3 |
交换表:S1 = {H1:1,H5:4,H3:3,H4:3};S2 = {H1:1,H5:2,H3:1}。(S2 从没收到过 H4 发的帧,表里没有 H4。)
帧 ③ 的目的 H4 其实就在 Hub 上,但 S1 此时还不认识 H4,照样泛洪——“交换机只学源地址”。
10Mbps 以太网争用期 = 512bit ÷ 10Mbps = 51.2μs。第 3 次冲突后 r ∈ {0, 1, …, 7},最长等 7 × 51.2 = 358.4μs。第 12 次冲突后 k = min(12, 10) = 10,r ∈ {0, 1, …, 1023}(16 次仍失败则放弃并报告上层)。第 1 次冲突后 r ∈ {0, 1},两站选到同一个值的概率为 1/2。
不能。H3、H4 经集线器接在 S1 的同一个端口 3 上,按端口划分 VLAN 时同一端口只能属于同一个 VLAN,H3、H4 不能分进两个 VLAN(除非把 Hub 换成交换机,让它们各占一个端口)。另外,即使划分成功,VLAN 10 和 VLAN 20 之间通信也要经过路由器(或三层交换机)。
举一反三:条件一变,答案怎么变
| 在哪道题上改 | 条件改成 | 答案怎么变 |
|---|---|---|
| 2010-47(1) | 两主机相距 1km | 看答案τ = 5μs:最短 5μs,最长 10μs。 |
| 2010-47(2) | 速率改为 100Mbps,其余不变 | 看答案数据帧 121.44μs,确认帧 5.12μs,周期 121.44 + 5.12 + 20 = 146.56μs,有效速率 12000bit ÷ 146.56μs ≈ 81.9Mbps。 |
| 2022-47(2) | 设备 2 的时延改为 2.56μs | 看答案单程时延已被设备时延用完,传播时延只能为 0——H2、H3 理论上无法相距任何距离,说明这样的设备不能用在该冲突域中。 |
| 2022-47(4) | H4 向 H1 发送 IP 分组 | 看答案H1 在另一个网络,分组要交给网关 R:H4 发往 AP 的帧地址 1 = AP(C1),地址 2 = H4(D1),地址 3 = R 的 E0(A1)。 |
| 2019-47(4) | H1 发往 192.168.1.63 | 看答案192.168.1.63 是 192.168.1.0/26 的广播地址,只有 H2 接收。 |
| 2019-47(1) | H3、H4 也改为 192.168.1.4/26、192.168.1.5/26 | 看答案四台主机同一网络,设备 1 可以是交换机(此时 R 的内网接口要改为同一网络中的地址,作为网关)。 |
预测小题:IP 组播地址怎样映射成以太网地址
考纲有“IP 组播”,组播地址到 MAC 地址的映射还没考过。先读 4.10。
(1) 230.11.200.7 是哪一类地址?它对应的以太网组播 MAC 地址是什么?
(2) 230.139.200.7 对应的 MAC 地址是什么?这说明了什么?主机怎样处理?
(3) RIP 第 2 版把路由信息发往 224.0.0.9,对应的 MAC 地址是什么?
(4) 主机怎样让本网络上的组播路由器知道它要接收某个组的数据?
先在纸上自己做一遍,再点这里展开满分解答
首字节 230 在 224 ~ 239 之间,是 D 类(组播)地址。映射规则:MAC 前 25 位固定为 01-00-5E 再加一个 0,后 23 位取 IP 地址的低 23 位。11 = 0000 1011,去掉最高位后为 000 1011 = 0BH;200 = C8H;7 = 07H。MAC = 01-00-5E-0B-C8-07。
139 = 1000 1011,最高位被去掉后同样是 0BH,MAC 也是 01-00-5E-0B-C8-07。IP 组播地址有 28 位可变,MAC 只用了 23 位,有 5 位丢掉,所以 25 = 32 个组播地址映射到同一个 MAC。网卡会收下这个帧,主机还要在 IP 层再按组地址过滤一次,丢掉不属于自己加入的组的分组。
低 23 位:0.0.9 → 01-00-5E-00-00-09。
用 IGMP:主机加入组时发成员报告;组播路由器周期性发查询,没有主机回应的组就不再往这个网络转发。IGMP 报文封装在 IP 数据报中。
7.6⑤ 链路层可靠传输:GBN / SR、捎带确认与信道利用率
先读:3.3 停等、GBN、SR 与信道利用率 1.3 时延
这类题长什么样
给一张时序图(Sx,y、Rx,y 的收发过程)或一条长时延链路(卫星),问窗口里还能发几个帧、要重发哪几个、利用率多少、序号至少几位。2017、2025 年考过。
| 常见问法 | 考过的地方 |
|---|---|
| 对方已正确接收了哪几个帧 | 2017-47(1) |
| 还能发送几个帧,第一个、最后一个是哪个(含捎带的确认号) | 2017-47(2) |
| 超时后要重发几个、重发哪个 | 2017-47(3) |
| 最大信道利用率(捎带确认时确认帧也要发送时间) | 2017-47(4) |
| 卫星链路的传播时延、吞吐量、传文件时间 | 2025-47(1) |
| 满足利用率要求的最小窗口、最少序号位数 | 2025-47(2) |
做这类题必须会的 4 件事
① 两种窗口上限。n 位序号:GBN 发送窗口 ≤ 2n − 1;SR 发送窗口 = 接收窗口 ≤ 2n−1。
② 累积确认读法。确认号 y 表示“期望收到 y”,即 y 之前的都收到了。自己发帧时捎带的 y,要填按序收到对方的最后一帧 + 1(失序的帧在 GBN 中被丢弃,不算)。
③ 利用率公式。U = W × TD ÷ (TD + RTT + TA),超过 1 取 1。捎带确认:TA = 对方一个数据帧的发送时间;忽略确认帧:TA = 0。
④ 卫星链路。地面 → 卫星 → 地面,单向传播 ≈ 2 × 36000km ÷ 3 × 105km/s = 0.24s,RTT ≈ 0.48s。传一个文件的最少时间 = 发送时间 + 单向传播时延(瓶颈速率决定发送时间)。
解题模板
- 在时序图上标确认。把每个收到的 Rx,y 的 y 圈出来,最大的 y 就是窗口后沿。
- 画窗口。从后沿起数 W 个序号(循环),标出哪些已发、哪些可发。
- 重发:GBN 从超时帧起到已发的最后一帧全部重发;SR 只重发超时帧。
- 利用率:先算 TD、周期,再乘窗口,最后和 1 比。
- 序号位数:由窗口反推,GBN 用 2n − 1 ≥ W,SR 用 2n−1 ≥ W。
甲乙双方均采用后退 N 帧协议(GBN)进行持续的双向数据传输,且双方始终采用捎带确认,帧长均为 1000B。Sx,y 和 Rx,y 分别表示甲方和乙方发送的数据帧,其中:x 是发送序号;y 是确认序号(表示希望接收对方的下一帧序号);数据帧的发送序号和确认序号字段均为 3 比特。信道传输速率为 100Mbps,RTT = 0.96ms。下图给出了甲方发送数据帧和接收数据帧的两种场景,其中 t0 为初始时刻,此时甲方的发送和确认序号均为 0,t1 时刻甲方有足够多的数据待发送。
(1) 对于图 (a),t0 时刻到 t1 时刻期间,甲方可以断定乙方已正确接收的数据帧数是多少?正确接收的是哪几个帧(请用 Sx,y 形式给出)?
(2) 对于图 (a),从 t1 时刻起,甲方在不出现超时且未收到乙方新的数据帧之前,最多还可以发送多少个数据帧?其中第一个帧和最后一个帧分别是哪个(请用 Sx,y 形式给出)?
(3) 对于图 (b),从 t1 时刻起,甲方在不出现新的超时且未收到乙方新的数据帧之前,需要重发多少个数据帧?重发的第一个帧是哪个(请用 Sx,y 形式给出)?
(4) 甲方可以达到的最大信道利用率是多少?
先在纸上自己做一遍,再点这里展开满分解答
考点3.3 GBN 的窗口、累积确认、重传、信道利用率训练营 ⑤
- 3 位序号,GBN 发送窗口最大 23 − 1 = 7。
- Rx,y 的 y 是乙期望收到的甲方下一帧:y = 3 说明乙已按序收到甲的 0、1、2 号帧。
- 甲发出的帧 Sx,y 的 y 要填“甲期望的乙的下一帧”:甲按序收到了乙的哪些帧,就填最后一个 + 1。
甲最后收到的确认是 R3,3(及 R1,3),确认序号 3 表示乙期望收甲的 3 号帧,即已正确收到 0 ~ 2 号帧:共 3 个,分别是 S0,0、S1,0、S2,0。
窗口 7,从 3 号开始:3~7、0、1 这 7 个序号可以在途;3、4 已发出未确认,还能发 5、6、7、0、1 共 5 个。确认号:甲按序收到乙的 R0、R1,R3 失序(缺 R2)被丢弃,期望乙的 2 号帧,y = 2。
GBN 发送窗口最大为 23 − 1 = 7。已确认到 2 号,窗口为 3、4、5、6、7、0、1,其中 3、4 号(S3,0、S4,1)已发送。最多还可发送 5 个数据帧。
甲已按序收到乙的 0、1 号帧,3 号帧失序被丢弃,确认序号应为 2。第一个帧为 S5,2,最后一个帧为 S1,2。
乙最新的确认 R2,2 表示期望 2 号帧,即 2 号帧未被确认;S2,0 超时后,GBN 要重发 2 号及其后已发送的 3、4 号,共 3 个。甲已按序收到乙的 0、1、2 号帧,确认序号为 3,重发的第一个帧是 S2,3。
发送一帧 TD = 1000 × 8 ÷ 100Mbps = 0.08ms。捎带确认,确认要等乙发一个数据帧,也需 0.08ms。
一个周期 = TD + RTT + TA = 0.08 + 0.96 + 0.08 = 1.12ms,窗口 7 帧可发 7 × 0.08 = 0.56ms。
最大信道利用率 = 0.56 ÷ 1.12 = 50%。
捎带确认时确认帧就是对方的数据帧,它的发送时间不能忽略(TA = TD)。
- Rx,y 的 y 就是累积确认号:y 之前的全收到了。
- 自己发的帧里的 y:按序收到对方的最后一帧 + 1,失序的不算。
- 捎带确认时把 TA 当成 0(2017-47 利用率会算成 7 × 0.08 ÷ 1.04 ≈ 53.8%)。
- 重发帧的确认号还写旧值:重发时要填当前最新的确认号(S2,3,不是 S2,0)。
- 卫星单向传播时延只算一段 36000km(0.12s)。
模拟大题:卫星链路上的 SR 协议(按 408 风格自编)
甲、乙两站通过卫星链路通信,数据传输速率 2Mbps,单向传播时延 250ms,数据帧长 1000B,确认帧长度忽略不计。
(1) 若采用停等协议,信道利用率是多少?
(2) 若采用选择重传(SR)协议,发送窗口为 32,信道利用率是多少?帧序号至少多少位?
(3) 要使信道利用率不低于 50%,SR 的发送窗口至少多大?帧序号至少多少位?若改用 GBN 呢?
(4) 另一对站点采用 3 位序号的 SR 协议,收发窗口均为最大值。发送方已发出 0 ~ 3 号帧,收到了 1、2 号帧的确认,随后 0 号帧超时。此时发送方应重发哪些帧?重发后若收到 0 号帧的确认,发送方还可以立即发送哪几个帧?
先在纸上自己做一遍,再点这里展开满分解答
TD = 1000 × 8 ÷ 2Mbps = 4ms;周期 = 4 + 2 × 250 = 504ms;停等利用率 = 4 ÷ 504 ≈ 0.79%。
U = 32 × 4 ÷ 504 ≈ 25.4%。SR 要求 W ≤ 2n−1,2n−1 ≥ 32 → n ≥ 6,序号至少 6 位。
W × 4 ÷ 504 ≥ 50% → W ≥ 63,发送窗口至少 63。SR:2n−1 ≥ 63 → n = 7;GBN:2n − 1 ≥ 63 → n = 6。
3 位序号,SR 窗口最大 22 = 4。1、2 号已单独确认,0 号超时 → 只重发 0 号帧(3 号尚未超时,不重发)。
收到 0 号的确认后,0、1、2 都已确认,窗口后沿移到 3,窗口为 3、4、5、6;3 号已发出未确认,还可以立即发送 4、5、6 号帧。
模拟大题 2:帧长一变,窗口要多大(按 408 风格自编)
甲、乙之间是一条 8Mbps 的点对点链路,单向传播时延 3ms。甲向乙发送数据帧,帧长 1000B;确认帧很短,发送时延忽略;乙收到正确的帧立即确认。
(1) 采用停—等协议,信道利用率是多少?
(2) 采用 3 位序号的 GBN,发送窗口取最大值,信道利用率是多少?
(3) 帧长改为 500B,3 位序号 GBN 的利用率是多少?要使利用率达到 100%,发送窗口至少多大?GBN、SR 的序号各至少几位?
(4) 回到 1000B、3 位序号 GBN。甲连续发出 0 ~ 6 号帧,其中 2 号帧丢失,其余正确到达。乙对 3 ~ 6 号帧怎样处理、发出什么确认?甲超时后重发哪些帧?为把 0 ~ 6 号帧全部送达,甲一共发送了多少个数据帧?若改用序号足够的 SR 呢?
先在纸上自己做一遍,再点这里展开满分解答
TD = 1000 × 8 ÷ 8Mbps = 1ms;一个周期 = 1 + 2 × 3 = 7ms;U = 1 ÷ 7 ≈ 14.3%。
3 位序号,GBN 发送窗口最大 23 − 1 = 7;7 × 1ms = 7ms ≥ 周期 7ms,发送方在第一个确认回来之前一直有帧可发,U = 100%。
TD = 0.5ms,周期 = 0.5 + 6 = 6.5ms;W = 7 时 U = 7 × 0.5 ÷ 6.5 ≈ 53.8%。
要 100%:W × 0.5 ≥ 6.5 → W ≥ 13。GBN:2n − 1 ≥ 13 → n = 4;SR:2n − 1 ≥ 13 → n = 5。
帧变短,发一帧的时间变短,但等确认的时间(2 × 3ms)不变——要“填满管道”就得窗口更大、序号更多。
乙按序接收,3 ~ 6 号都不是期望的 2 号,全部丢弃,每收到一帧就重发对 1 号帧的确认(表示 0、1 已收到)。甲的 2 号帧超时后,重发 2、3、4、5、6 共 5 帧。总共发送 7 + 5 = 12 帧。
SR:乙缓存 3 ~ 6,甲只重发 2 号,共 7 + 1 = 8 帧。
举一反三:条件一变,答案怎么变
| 在哪道题上改 | 条件改成 | 答案怎么变 |
|---|---|---|
| 2017-47(4) | 序号字段改为 4 位 | 看答案GBN 窗口最大 15,15 × 0.08 = 1.2ms ≥ 周期 1.12ms,利用率可达 100%。 |
| 2017-47(4) | 乙不捎带,用极短的确认帧(发送时间忽略) | 看答案周期 0.08 + 0.96 = 1.04ms,U = 0.56 ÷ 1.04 ≈ 53.8%。 |
| 2017-47(2) | 改用 SR(3 位序号,收发窗口最大) | 看答案窗口 4,已确认到 2,窗口为 3、4、5、6,3、4 已发,最多还能发 2 个:S5,y、S6,y(y 取按序收到乙的最后一帧 + 1 = 2)。 |
| 2025-47(2) | SLP 帧长改为 3000B | 看答案TD = 0.12s,W × 0.12 ÷ 0.6 ≥ 0.8 → W ≥ 4;GBN 2n − 1 ≥ 4 → 3 位。 |
| 2025-47(1) | 上传 8000B 的文件 | 看答案8000 × 8 ÷ 200kbps = 0.32s,加 0.24s,至少 0.56s。 |
7.7⑥ TCP:握手挥手的序号、拥塞窗口与接收窗口、时间计算
先读:5.4 连接管理 5.5 滑动窗口与流量控制 5.6 拥塞控制
这类题长什么样
一次文件传输的全过程:给出初始序号、MSS、门限、接收缓存、RTT,问握手挥手时的标志和序号、某个时刻的 cwnd / rwnd / 发送窗口、传完要多久、平均速率多少。2016、2023、2026 年都考这一类。
| 常见问法 | 考过的地方 |
|---|---|
| 握手:第二次握手的 SYN、ACK、确认号 | 2016-41(1),2026-47(1) |
| 收到第 k 个确认 / 某个确认号时的 cwnd、rwnd、发送窗口 | 2016-41(2),2023-47(3),2026-47(2) |
| 发送窗口为 0 时下一个序号、平均速率 | 2016-41(3) |
| 文件第一个字节的序号、挥手报文的序号和确认号 | 2023-47(2),2026-47(3) |
| 从建连到确认收完(或到释放连接)需要多少时间 | 2016-41(4),2023-47(4),2026-47(4) |
| FTP 的控制连接、数据连接 | 2023-47(1) |
做这类题必须会的 4 件事
① 序号账本。SYN、FIN 各占 1 个序号;数据从 ISN + 1 开始;不发数据的一方,之后的 seq 一直是 ISN + 1。确认号 = 对方下一个应发的序号。
② cwnd 的两种“步长”。慢开始:每收到一个新确认 +1 MSS(等价于每轮翻倍,到门限为止);拥塞避免:每轮 +1 MSS。题目问“收到某个确认时”,就按每个确认数;问“第 k 轮”,就按轮数。超时:门限 = cwnd ÷ 2,cwnd = 1;3 个重复确认:门限 = cwnd = cwnd ÷ 2。
③ 发送窗口 = min(cwnd, rwnd)。接收缓存只进不出时 rwnd = 缓存 − 已收到的数据;rwnd 为 0 时发送窗口为 0。
④ 数时间。握手 1 RTT(第三次握手可带数据);数据按轮计 RTT,最后一轮的确认回来才算“确认收完”;释放:主动方 1 RTT + 2MSL,被动方 1.5 RTT。
解题模板
- 列序号账本:C 的 ISN、数据范围、FIN 序号;S 的 ISN、FIN 序号。
- 列轮次表:轮次 | cwnd | rwnd | 本轮发几个段 | 累计发送 | 本轮结束时收到的确认号。
- 从表里读答案:某确认号对应哪一行,当时 cwnd、rwnd 是多少;累计达到文件大小是第几轮。
- 时间:握手 1 RTT + 数据轮数 × RTT(+ 挥手);平均速率 = 数据量 ÷ 时间,注意 K 是 1000 还是 1024。
如下图所示,主机 H 登录到 FTP 服务器后,向服务器上传一个大小为 18000B 的文件 F,假设 H 传输 F 建立数据连接时,选择的初始序号为 100,MSS = 1000B,拥塞控制的初始阈值是 4MSS,RTT = 10ms,忽略 TCP 的传输时延,在 F 的传送过程中,H 以 MSS 段向服务器发送数据,且始终没有错误、丢包和乱序。
(1) FTP 的控制连接是持久的还是非持久的?FTP 的数据连接是持久的还是非持久的?H 登录服务器时,建立的 TCP 连接是控制连接还是数据连接?
(2) H 通过数据连接发送 F 时,F 的第一个字节序号是多少?在断开数据连接的过程中,FTP 服务器发送的第二次挥手的 ACK 段的确认序号是多少?
(3) F 发送过程中,当 H 收到确认序号为 2101 的确认段时,H 的拥塞窗口调整为多少?收到确认序号为 7101 的确认段时,H 的拥塞窗口调整为多少?
(4) H 从请求建立数据连接开始,到确认 F 已被服务器全部接收为止,至少需要多长时间?期间应用层数据平均发送速率是多少?
先在纸上自己做一遍,再点这里展开满分解答
考点6.3 FTP 的两条连接5.4 序号计数5.6 慢开始与拥塞避免训练营 ⑥
- SYN 序号 100,数据从 101 开始;18000B = 18 个 MSS。
- cwnd 从 1 MSS 开始慢开始(每收到一个确认加 1 MSS),到 4 MSS 后拥塞避免(每轮加 1)。
控制连接是持久的(整个会话期间保持);数据连接是非持久的(每传一个文件建立一次,传完关闭)。H 登录时建立的是控制连接。
SYN 占用序号 100,F 的第一个字节序号为 101。F 占 101 ~ 18100,H 的 FIN 序号为 18101,服务器第二次挥手的确认序号 = 18101 + 1 = 18102。
确认号 1101、2101、3101 依次确认第 1、2、3 个段;慢开始每个确认加 1:2、3、4 MSS。之后进入拥塞避免,一轮(4 个段 3101 ~ 7100)全部确认后加 1。
收到确认号 1101 时 cwnd = 2MSS,收到 2101 时 cwnd = 3MSS(慢开始,每收到一个确认加 1MSS)。
收到 3101 时 cwnd = 4MSS,达到阈值,进入拥塞避免。之后发出的 4 个段(3101 ~ 7100)全部被确认(确认号 7101)时,cwnd 加 1,为 5MSS。
建立连接 1 RTT。数据按轮发送:1、2、4、5、6 个 MSS,累计 1、3、7、12、18 个,用 5 个 RTT 发完并被确认。共 6 RTT = 60ms。
平均发送速率 = 18000B ÷ 60ms = 3 × 105B/s = 2.4Mbps。
“确认 F 已被全部接收”只算到最后一个确认到达,不包括释放连接。
- 数轮次:慢开始 1、2、4……到门限后每轮 + 1,累加到文件大小为止。
- 第二次挥手的确认号 = FIN 的序号 + 1 = 最后一个数据字节 + 2。
模拟大题:上传 30 个 MSS 的文件(按 408 风格自编)
客户 C 与服务器 S 建立 TCP 连接后,C 向 S 上传一个 30000B 的文件。C 的初始序号为 5000,S 的初始序号为 9000,MSS = 1000B,C 的拥塞窗口初始为 1MSS、门限为 8MSS;S 的接收窗口始终为 12000B;RTT = 20ms,忽略发送时延;S 不向 C 发送数据,对每个段都及时确认。
(1) 第二次握手 TCP 段的 seq 和确认号各是多少?文件第一个字节和最后一个字节的序号是多少?
(2) 按轮次(每轮一个 RTT)写出 C 每轮开始时的拥塞窗口和发送窗口,直到文件发完。
(3) 从 C 发出 SYN 开始,到 C 收到文件最后一个字节的确认为止,最少需要多长时间?
(4) 若 C 在拥塞窗口为 10MSS 时收到 3 个重复确认,门限和拥塞窗口变为多少?若是超时呢?
(5) 文件发完后 C 主动释放连接,C 发出的 FIN 的序号是多少?S 回复的确认号是多少?
先在纸上自己做一遍,再点这里展开满分解答
第二次握手:seq = 9000,确认号 = 5000 + 1 = 5001。文件占 30000 个序号:第一个字节 5001,最后一个字节 35000。
| 轮次 | cwnd(MSS) | rwnd(MSS) | 发送窗口 | 本轮发送 | 累计 |
|---|---|---|---|---|---|
| 1 | 1 | 12 | 1 | 1 | 1 |
| 2 | 2 | 12 | 2 | 2 | 3 |
| 3 | 4 | 12 | 4 | 4 | 7 |
| 4 | 8 | 12 | 8 | 8 | 15 |
| 5 | 9 | 12 | 9 | 9 | 24 |
| 6 | 10 | 12 | 10 | 6(剩余) | 30 |
前 4 轮慢开始,到门限 8 后拥塞避免每轮加 1;rwnd = 12 始终不构成限制。
握手 1 RTT,数据 6 轮 6 RTT,共 7 RTT = 140ms。
3 个重复确认:门限 = 10 ÷ 2 = 5MSS,cwnd = 5MSS(快恢复,之后拥塞避免)。超时:门限 = 5MSS,cwnd = 1MSS(重新慢开始)。
最后一个数据字节是 35000,C 的 FIN 序号为 35001;S 的确认号为 35002。
模拟大题 2:RTO、快重传与 cwnd 逐轮(按 408 风格自编)
主机甲与乙之间已建立 TCP 连接,MSS = 1000B,甲向乙连续发送大量数据。
(1) 甲当前的 RTTS = 30ms、RTTD = 10ms,新测得一个 RTT 样本 46ms。取 α = 1/8、β = 1/4,求新的 RTTS、RTTD 和 RTO。
(2) 某时刻甲依次发出序号为 2001、3001、4001、5001、6001 的 5 个报文段(各 1000B),3001 号段丢失,其余按序到达。乙依次发出的确认号是什么?甲什么时候、重传哪个段?重传的段到达后乙的确认号是多少?
(3) 甲的拥塞窗口初值 1MSS、门限 8MSS,每轮一个 RTT。第 8 轮发送时收到 3 个重复确认,第 11 轮发送时超时,其余时间不发生拥塞。写出第 1 ~ 16 轮每轮开始时的 cwnd,并指出哪些轮的 cwnd 是按慢开始(翻倍)得到的,哪些是按拥塞避免(加 1)得到的。
(4) 不考虑接收窗口时,第 1 ~ 8 轮一共发送多少个报文段?若乙通告的接收窗口始终为 10MSS,第 7 轮甲的发送窗口是多少?
先在纸上自己做一遍,再点这里展开满分解答
RTTS = (1 − 1/8) × 30 + 1/8 × 46 = 26.25 + 5.75 = 32ms;
RTTD = (1 − 1/4) × 10 + 1/4 × |32 − 46| = 7.5 + 3.5 = 11ms;
RTO = RTTS + 4 × RTTD = 32 + 44 = 76ms。
按教材顺序:先更新 RTTS,再用新的 RTTS 算 RTTD(5.5 节)。按 RFC 6298 先用旧的 30ms 算 RTTD 得 11.5ms、RTO = 78ms——考试按教材。
乙收到 2001 号段后确认号 3001;之后收到 4001、5001、6001 都不是期望的 3001,各发一个确认号仍为 3001 的重复确认(共 3 个)。甲收到 3 个重复确认后立即重传 3001 号段,不等超时(快重传)。乙已缓存 4001 ~ 7000,3001 号段到达后确认号变为 7001。
| 轮 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cwnd | 1 | 2 | 4 | 8 | 9 | 10 | 11 | 12 | 6 | 7 | 8 | 1 | 2 | 4 | 5 | 6 |
| 门限 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 6 | 6 | 6 | 4 | 4 | 4 | 4 | 4 |
慢开始(翻倍)得到的:第 2、3、4、13、14 轮;拥塞避免(加 1)得到的:第 5 ~ 8、10、11、15、16 轮。第 9 轮的 6 是快恢复(门限 = 12 ÷ 2 = 6,cwnd = 门限)得到的;第 12 轮的 1 是超时(门限 = 8 ÷ 2 = 4,cwnd = 1)得到的。
快恢复后 cwnd 直接等于新门限,进入拥塞避免,不再从 1 开始;只有超时才回到 1。
1 + 2 + 4 + 8 + 9 + 10 + 11 + 12 = 57 个报文段。第 7 轮 cwnd = 11,发送窗口 = min(11, 10) = 10MSS。
举一反三:条件一变,答案怎么变
| 在哪道题上改 | 条件改成 | 答案怎么变 |
|---|---|---|
| 2016-41(2)(3) | S 的接收缓存改为 16KB | 看答案第 8 个确认时 rwnd = 8KB,cwnd = 9KB,发送窗口 8KB。缓存满时已发 16KB(1 + 2 + 4 + 8 + 1),下一个序号 101 + 16 × 1024 = 16485,用 5 个 RTT,平均速率 16KB/s。 |
| 2016-41(4) | 问 H3 进入 CLOSED 的最短时间(MSL = 1s) | 看答案H3 在 1 RTT 后收到 S 的 FIN,发 ACK 后等 2MSL:0.2 + 2 = 2.2s。 |
| 2023-47(3) | 初始阈值改为 8MSS | 看答案收到 2101 时仍为 3MSS;收到 7101 时仍在慢开始,每个确认加 1:8MSS。 |
| 2023-47(4) | 文件改为 30000B(阈值 4MSS) | 看答案每轮 1、2、4、5、6、7 个,累计 1、3、7、12、18、25,第 7 轮发剩下的 5 个,数据 7 RTT,加握手共 8 RTT = 80ms。 |
| 2026-47(2) | 接收窗口改为 2000B | 看答案发送窗口 = min(1500, 2000) = 1500B。 |
7.8⑦ 一次访问的全过程:DHCP、ARP、DNS、NAT、交换机表
先读:6.6 打开一个网页的全过程 4.6 ARP、DHCP 4.5 NAT 3.9 交换机自学习
这类题长什么样
一台主机(常常是刚开机、ARP 表为空、交换表为空)去访问某个网站或服务器。题目沿着时间线问:先用了什么协议、某个帧或分组的源/目的地址是什么、交换机学到了什么、谁能收到哪些帧、NAT 前后地址怎么变。2011(部分)、2015、2020、2021 年考过。
| 常见问法 | 考过的地方 |
|---|---|
| DHCP 可分配的范围;DHCP 报文的源、目的 IP | 2015-47(1),2022-47(3) |
| ARP 表为空时发出的第一个帧的目的 MAC;发往外网的帧的目的 MAC | 2015-47(2),2011-47(1)(2) |
| 子网掩码 / 网关配错时能否访问某服务器、Internet | 2015-47(3) |
| NAT 表怎么配;分组经过各 NAT 路由器后的源、目的 IP | 2020-47 |
| 除 HTTP 外还用了哪个应用层协议,怎样逐层封装 | 2021-47(1) |
| 交换机的交换表内容;某主机能收到哪些帧 | 2021-47(2)(3) |
做这类题必须会的 4 件事
① 时间线。(DHCP 拿地址)→ ARP(DNS 服务器在本网络就问它,否则问网关)→ DNS 查询(UDP)→ ARP 网关 → TCP 三次握手 → HTTP。每一步问自己:这是广播还是单播?
② IP 不变、MAC 逐段变。主机发往外网的帧:目的 MAC = 默认网关;路由器转发后源 MAC = 路由器出接口。经过 NAT:出方向改源 IP(和源端口),入方向改目的 IP(和目的端口)。
③ 交换机只学源地址。谁发过帧,谁就进表;表中没有目的地址或是广播帧才泛洪。“某主机收到了几个帧”=它所在端口被泛洪了几次(广播帧 + 目的未知的单播帧)。
④ 配置错误的后果。掩码错 → 判断“是否同一网络”出错;网关错 → 只能访问本网络,出不去。
解题模板
- 把拓扑上的地址抄成表:设备、IP/前缀、MAC、所在网络、交换机端口。
- 按时间线列出每一个帧:协议、源 MAC、目的 MAC、源 IP、目的 IP、交换机从哪些端口转发。
- 边列边更新交换表(每个帧的源 MAC → 进入端口)。
- 按问题查表作答,每个答案带一句理由(“因为 DNS 服务器与 H1 在同一网络”“因为是广播帧”)。
某网络拓扑如下图所示,以太网交换机 S 通过路由器 R 与 Internet 互联。路由器部分接口、本地域名服务器、H1、H2 的 IP 地址和 MAC 地址如图中所示。在 t0 时刻 H1 的 ARP 表和 S 的交换表均为空,H1 在此刻利用浏览器通过域名 www.abc.com 请求访问 Web 服务器,在 t1(t1 > t0)时刻 S 第一次收到了封装 HTTP 请求报文的以太网帧,假设从 t0 到 t1 期间网络未发生任何与此次 Web 访问无关的网络通信。
(1) 从 t0 到 t1 期间,H1 除了 HTTP 之外还运行了哪个应用层协议?从应用层到数据链路层,该应用层协议报文是通过哪些协议进行逐层封装的?
(2) 若 S 的交换表结构为 <MAC 地址,端口>,则 t1 时刻 S 交换表的内容是什么?
(3) 从 t0 到 t1 期间,H2 至少会接收到几个与此次 Web 访问相关的帧?接收到的是什么帧?帧的目的 MAC 地址是什么?
先在纸上自己做一遍,再点这里展开满分解答
考点6.6 一次网页访问的全过程4.6 ARP3.9 交换机自学习训练营 ⑦
- H1 要解析 www.abc.com。本地域名服务器 192.168.1.126/25 与 H1(192.168.1.2/25)在同一网络 → H1 广播 ARP 请求问它的 MAC(S 学到 cc 在端口 4,泛洪)。
- 域名服务器单播回 ARP 响应(S 学到 bb 在端口 1,转发到端口 4)。
- H1 发 DNS 查询(单播给 bb,S 已知端口 1),收到 DNS 应答(单播给 cc,端口 4)。
- Web 服务器在外网,要交给默认网关 192.168.1.1 → H1 广播 ARP 请求问网关 MAC(泛洪)。
- R 单播回 ARP 响应(S 学到 aa 在端口 2)。
- H1 建 TCP 连接(三次握手,单播给 aa),然后发 HTTP 请求——t1。
H1 还运行了 DNS(把 www.abc.com 解析为 IP 地址)。DNS 报文 → UDP 用户数据报 → IP 数据报 → 以太网帧(CSMA/CD 帧)。
| MAC 地址 | 端口 |
|---|---|
| 00-11-22-33-44-cc | 4 |
| 00-11-22-33-44-bb | 1 |
| 00-11-22-33-44-aa | 2 |
H1、本地域名服务器、R 都向 S 发过帧,S 学到了它们的端口;H2 没有发过帧,表中没有 H2。
H2 至少收到 2 个帧,都是 H1 广播的 ARP 请求帧(一个查询本地域名服务器的 MAC,一个查询默认网关的 MAC),目的 MAC 地址都是 FF-FF-FF-FF-FF-FF。其余的帧都是单播,S 已学到目的端口,不会转发给 H2。
“至少”是指交换表正常学习的情况:第一个 ARP 响应到达 S 时,S 已从 ARP 请求学到 cc 在端口 4,不会泛洪。
- 同一网络的 DNS 服务器:ARP 问它自己;外网的 Web 服务器:ARP 问网关。
- 广播帧交换机一定泛洪;单播帧只有在目的 MAC 未学到时才泛洪。
- DNS 服务器与主机在同一网络时,误以为 ARP 要问网关。
- DHCP 可分配范围忘了扣掉静态分配的地址(路由器接口、服务器)。
- 把 NAT 的“入方向改目的地址”写成改源地址。
- 交换表里写上了没发过帧的主机。
模拟大题:新主机开机后打开一个网页(按 408 风格自编)
某宿舍楼网络如下图所示。路由器 R 实现 DHCP 服务器和 NAPT 功能:内网接口 E0 为 10.0.8.1/22(MAC 00-22-22-22-22-22),外网接口为 61.155.8.2。本地域名服务器 D 为 10.0.8.53/22(MAC 00-33-33-33-33-33)。新主机 H(MAC 00-11-11-11-11-11)刚接入交换机 S,ARP 表和 S 的交换表均为空。H 开机后通过 DHCP 获得地址 10.0.8.100/22、默认网关 10.0.8.1、DNS 服务器 10.0.8.53,然后用浏览器访问 http://www.xyz.cn/index.html(Web 服务器 119.75.217.26)。D 的缓存中有 www.xyz.cn 的记录。
(1) H 发出的 DHCP 发现报文,封装它的 IP 分组的源、目的 IP 地址,以太网帧的目的 MAC 地址各是什么?除 IP 地址外,DHCP 还给 H 配置了哪些与本题有关的参数?
(2) 得到地址后,H 为了解析域名发出的第一个帧是什么帧?目的 MAC 地址是什么?为什么不是去问网关的 MAC?
(3) H 发出的封装 HTTP 请求的帧,目的 MAC、源 IP、目的 IP 各是什么?该分组被 R 转发到外网时,哪些地址字段改变?
(4) 到 H 发出 HTTP 请求为止(忽略 DHCP 阶段的帧),S 的交换表中有哪些表项?
(5) 若 H 与 Web 服务器之间 RTT = 30ms,局域网内时延忽略,从 H 发出 DNS 查询开始到收到 index.html(一个 MSS 就能装下)为止,至少需要多长时间?
先在纸上自己做一遍,再点这里展开满分解答
DHCP 发现报文:源 IP 0.0.0.0,目的 IP 255.255.255.255,以太网帧目的 MAC FF-FF-FF-FF-FF-FF。DHCP 还配置了子网掩码 255.255.252.0、默认网关 10.0.8.1、DNS 服务器 10.0.8.53(以及租期)。
第一个帧是查询 DNS 服务器 10.0.8.53 的 MAC 地址的 ARP 请求帧,目的 MAC FF-FF-FF-FF-FF-FF。因为 10.0.8.53 与 H(10.0.8.100/22)同属 10.0.8.0/22 网络,直接交付,不经网关。
Web 服务器在外网,帧的目的 MAC 是网关 R 的 E0:00-22-22-22-22-22;源 IP 10.0.8.100,目的 IP 119.75.217.26。
R 转发时:源 IP 改为 61.155.8.2,源端口改为 NAPT 分配的端口;帧的 MAC 地址换成外网链路上的 MAC;目的 IP 不变(TTL 减 1,IP 和 TCP 检验和重算)。
发过帧的有 H(ARP 请求、DNS 查询……)、D(ARP 响应、DNS 应答)、R(ARP 响应、TCP 段):交换表为 <00-11-11-11-11-11,H 的端口>、<00-33-33-33-33-33,D 的端口>、<00-22-22-22-22-22,R 的端口>。
D 有缓存,DNS 在局域网内完成,时延忽略;TCP 握手 1 RTT,第三次握手捎带 HTTP 请求,再 1 RTT 收到页面,共 2 RTT = 60ms。
模拟大题 2:域名解析加取回一个带图片的网页(按 408 风格自编)
校园网主机 H 的本地域名服务器为 L(L 对外采用迭代查询,缓存为空)。H 要访问 http://www.abc.edu.cn/index.html,index.html 很小,引用了同一服务器上的 4 个小图像。H 与 L 之间 RTT = 2ms;L 与根、cn、edu.cn 以及 abc.edu.cn 的权限域名服务器之间 RTT 均为 50ms;H 与 Web 服务器之间 RTT = 40ms。忽略所有发送时延和服务器处理时间。
(1) H 向 L 发出的是递归查询还是迭代查询?L 依次向哪些服务器查询?整个解析共发出多少个 DNS 查询报文?需要多长时间?
(2) 解析完成后,分别用下列方式取回网页和 4 个图像,各需多长时间(从建立第一条 TCP 连接算起):① 非持续连接、串行;② 非持续连接、最多 4 条并行连接;③ 持续连接、非流水线;④ 持续连接、流水线。
(3) 若用方式 ④,从 H 发出 DNS 查询到收齐全部对象,最少多长时间?
(4) 1 分钟后,H 上的另一个程序要访问 www.abc.edu.cn 的另一网页,L 还要去问根服务器吗?为什么?
先在纸上自己做一遍,再点这里展开满分解答
H 向 L 是递归查询(让 L 给出最终答案)。L 依次迭代查询:根 → cn → edu.cn → abc.edu.cn 的权限域名服务器。查询报文共 1(H → L)+ 4 = 5 个。时间 = 2 + 4 × 50 = 202ms(DNS 用 UDP,不用建连接)。
| 方式 | 过程 | 时间 |
|---|---|---|
| ① 非持续、串行 | 5 个对象,每个“握手 1 RTT + 请求响应 1 RTT” | 10 RTT = 400ms |
| ② 非持续、并行 | 先取网页 2 RTT,再 4 条连接同时取图像 2 RTT | 4 RTT = 160ms |
| ③ 持续、非流水线 | 握手 1 + 网页 1 + 图像逐个 4 | 6 RTT = 240ms |
| ④ 持续、流水线 | 握手 1 + 网页 1 + 4 个请求连发 1 | 3 RTT = 120ms |
图像的请求一定要等网页取回之后才能发——浏览器解析了 index.html 才知道要哪些图像。
202 + 120 = 322ms。
不用。L 刚才已把 www.abc.edu.cn 的映射(以及 cn、edu.cn、abc.edu.cn 服务器的地址)存入缓存,在记录的生存时间(TTL)内直接从缓存回答,一次 H ↔ L 的查询即可(约 2ms);H 自己也可能有缓存。
举一反三:条件一变,答案怎么变
| 在哪道题上改 | 条件改成 | 答案怎么变 |
|---|---|---|
| 2015-47(1) | 主机 1 改用 111.123.15.200 静态配置 | 看答案原来的 .4 空出来了,.200 被占用:可分配范围变为 111.123.15.4 ~ 111.123.15.199 和 111.123.15.201 ~ 111.123.15.254。 |
| 2015-47(3) | 主机 1 的掩码配为 255.255.255.128,网关 111.123.15.1 | 看答案主机 1 认为自己在 111.123.15.0/25,WWW(.3)也在其中,能访问;网关 .1 也在其中且正确,能访问 Internet。 |
| 2020-47(2) | H1 访问 Web 服务器 | 看答案同一局域网,直接交付,源 192.168.1.3、目的 192.168.1.2,不经过任何 NAT。 |
| 2021-47(3) | 本地域名服务器改到 Internet 上 | 看答案DNS 查询也要交给网关,H1 只需广播一次 ARP(查询网关),H2 至少收到 1 个帧(该 ARP 请求)。 |
| 2021-47(2) | t0 时 S 的交换表已有 H2 的表项 | 看答案t1 时表中有 cc、bb、aa、dd 四项;H2 收到的帧仍然只有两个 ARP 广播。 |
预测小题三连:DHCP 中继与续约、HTTP 条件 GET、DNS 记录
“一次访问全过程”类大题的小问,最可能从这三处出新:都在考纲里,选择题碰过,大题还没细问过。先读 4.6、6.2、6.5。
192.168.2.0/24 中没有 DHCP 服务器,DHCP 服务器 S(192.168.1.10)在 192.168.1.0/24 中,两个网络之间是路由器 R(接口 192.168.1.1 和 192.168.2.1)。主机 H 接入 192.168.2.0/24,开机后用 DHCP 获取地址,租期 8 小时。
(1) H 的 DHCP 发现报文为什么到不了 S?R 要怎样配置才能让 H 拿到地址?S 怎么知道该从哪个地址池给 H 分配?
(2) DHCP 报文用什么传输层协议?客户和服务器的端口号各是多少?
(3) H 拿到地址后,何时第一次请求续租?用广播还是单播?若一直得不到应答,何时改用广播?租期到了还没续上怎么办?不再需要地址时发什么报文?
先在纸上自己做一遍,再点这里展开满分解答
发现报文是广播(目的 255.255.255.255),路由器不转发广播。把 R 配置成 DHCP 中继代理:R 收到 H 的广播后,以单播转发给 S,并把自己在 H 一侧的接口地址 192.168.2.1 填入报文(giaddr 字段);S 据此从 192.168.2.0/24 的地址池中选地址,回复也经 R 转交给 H。
UDP;客户端口 68,服务器端口 67。
租期过一半(T1 = 4 小时)时,H 向 S 单播 DHCP 请求报文续租;若无应答,到 87.5%(T2 = 7 小时)时改用广播请求(任何 DHCP 服务器都可应答);租期到了仍未续上,必须停止使用该地址,重新从发现报文开始。不再需要时发 DHCP 释放报文。
浏览器第一次访问 http://www.abc.com/logo.png(1.25MB),服务器的响应首部中有 Last-Modified: Mon, 05 Oct 2026 08:00:00 GMT,浏览器把它存入缓存。第二天再次访问。客户与服务器间瓶颈带宽 10Mbps,RTT = 50ms,TCP 连接已建好,忽略请求报文和响应首部的发送时间。
(1) 第二次的请求报文用哪个首部行询问“这个对象改过没有”?它的值是什么?
(2) 若对象没改,服务器返回什么状态码?响应里有没有实体主体?取得对象要多久?没有缓存时要多久?
(3) 若对象已经改过,服务器怎样响应?
先在纸上自己做一遍,再点这里展开满分解答
If-Modified-Since: Mon, 05 Oct 2026 08:00:00 GMT(照抄上次响应里的 Last-Modified)。这种带条件的 GET 叫“条件 GET”。
状态码 304 Not Modified,没有实体主体,浏览器直接用缓存里的副本:只需 1 个 RTT = 50ms。没有缓存时:1 RTT + 1.25 × 8Mb ÷ 10Mbps = 0.05 + 1 = 1.05s。
返回 200 OK,实体主体是新对象,首部带新的 Last-Modified;用时与第一次相同(约 1.05s)。
代理服务器(Web 缓存)也用同样的办法向源服务器确认副本是否过期。
abc.com 的权限域名服务器中有下列资源记录:
abc.com. NS dns.abc.com. dns.abc.com. A 203.0.113.53 www.abc.com. CNAME web1.abc.com. web1.abc.com. A 203.0.113.80 abc.com. MX 10 mail.abc.com. mail.abc.com. A 203.0.113.25
(1) 浏览器访问 www.abc.com,用到哪几条记录?最后得到的 IP 地址是什么?
(2) 外校用户给 tom@abc.com 发邮件,对方的邮件服务器要查哪种记录?邮件最终发往哪个 IP,用什么协议和端口?
(3) 顶级域名服务器 com 中至少要有关于 abc.com 的哪些记录,才能把查询“指”到 abc.com 的权限域名服务器?
(4) 要让 IPv6 用户也能访问 www.abc.com,需要增加什么记录?
先在纸上自己做一遍,再点这里展开满分解答
先查到 CNAME 记录:www.abc.com 是 web1.abc.com 的别名;再查 web1.abc.com 的 A 记录,得 203.0.113.80。
查 abc.com 的 MX 记录,得邮件服务器 mail.abc.com,再查它的 A 记录得 203.0.113.25;用 SMTP,TCP 端口 25。
一条 NS 记录(abc.com 的权限服务器是 dns.abc.com),加上 dns.abc.com 的 A 记录 203.0.113.53——否则要先解析 dns.abc.com,而它又要靠 abc.com 的权限服务器才能解析,陷入死循环。
为 web1.abc.com 增加一条 AAAA 记录(IPv6 地址)。
7.9整卷模拟:计网部分三套(8 道选择题 + 1 道综合题)
每套按 408 真卷的计网部分组卷:第 33~40 题各 2 分,第 47 题 9 分,共 25 分。建议限时 35 分钟:选择题直接点选项判对错,综合题先在纸上写完,再展开答案按评分细则自己打分。想要带计时和自动判分的整卷,做第 9 篇的 9.4 ~ 9.6。
模拟卷 A
选择题可以直接点选项:点错的变红、点对的变绿,并自动展开逐项分析。
- A. 传输层
- B. 数据链路层
- C. 网络层
- D. 会话层
展开解析
A传输层是 OSI 中第一个端到端的层:它在两台主机的应用进程之间通信,并用确认、重传等机制提供可靠的数据传输。
- A 对传输层:进程之间、端到端、可靠(TCP)。
- B 错数据链路层也能做可靠传输(停等、GBN 等),但只在相邻两个结点之间的一段链路上,不是两个端系统之间。
- C 错网络层负责把分组从源主机送到目的主机(转发、路由选择),不区分进程;TCP/IP 的 IP 还只是尽最大努力交付。
- D 错会话层也是端到端的,但它管的是会话的建立、同步与管理,不负责可靠地传送数据。
复习:回到正文。
- A. 16kbps
- B. 24kbps
- C. 32kbps
- D. 64kbps
展开解析
C无噪声信道用奈奎斯特定理:C = 2W log₂V。
- 极限码元速率 = 2W = 2 × 4k = 8k 波特。
- 每个码元携带 log₂16 = 4 bit。
- 最大数据传输速率 = 8k × 4 = 32kbps。
- A 错16kbps = 4k × 4:码元速率只取了 W,漏了奈奎斯特公式里的 2(极限码元速率是 2W = 8k 波特)。
- B 错24kbps = 2 × 4k × 3:把每码元的比特数算成 3;16 种状态要 log₂16 = 4 位(3 位只能表示 8 种)。
- C 对32kbps。
- D 错64kbps = 4k × 16:直接把状态数 16 当成了每码元的比特数,又漏了 2W 里的 2。
复习:回到正文。
- A. 010
- B. 011
- C. 101
- D. 110
展开解析
DG(x) = x³ + x² + 1 写成比特串 1101,最高次 r = 3,数据后面补 3 个 0 再做模 2 除法,余数就是 FCS。
- G(x) = x³ + x² + 1 → 1101,r = 3。
- 数据后补 3 个 0:1011001 000。
- 用 1101 做模 2 除法(逐位异或,不借位),余数 110 → FCS = 110,发送 1011001110。
- A 错代回检验:发送 1011001 010,接收方用 1101 去除,余数是 110 ⊕ 010 = 100 ≠ 000,会被判为出错,010 不是正确的 FCS。
- B 错011 是只补了 2 个 0 的结果(101100100 ÷ 1101);G(x) 的最高次是 3,要补 3 个 0。
- C 错101 是没有补 0、直接用 1011001 ÷ 1101 得到的余数;要先在数据后补 r = 3 个 0 再除。
- D 对110。
复习:回到正文。
- A. 625B
- B. 1250B
- C. 2500B
- D. 5000B
展开解析
B最短帧的发送时间要不小于争用期 2τ:最短帧长 = 2τ × 数据率。
- 单程传播时延 τ = 1km ÷ (2 × 10⁵km/s) = 5μs,2τ = 10μs。
- 最短帧长 = 10μs × 1Gbps = 10 000bit。
- 10 000bit ÷ 8 = 1250B。
- A 错625B = 5μs × 1Gbps ÷ 8:只用了单程传播时延 τ,最短帧的发送时间要覆盖往返的 2τ。
- B 对1250B。
- C 错2500B = 20μs × 1Gbps ÷ 8:把传播速度当成 10⁵km/s,τ 算成了 10μs;题给速度是 2 × 10⁵km/s,τ = 5μs。
- D 错5000B = 40 000bit,对应 2τ = 40μs,即单程 20μs、电缆 4km;可电缆只有 1km,单程 τ = 1km ÷ (2 × 10⁵km/s) = 5μs。
复习:回到正文。
- A. 172.16.100.255
- B. 172.16.127.255
- C. 172.16.96.255
- D. 172.16.111.255
展开解析
D/20 在第 3 字节,块大小 224 − 20 = 16;把 100 向下取到 16 的倍数就是子网的起点。
- 第 3 字节 100 向下取到 16 的倍数 → 96,子网 172.16.96.0/20。
- 广播地址:主机号 12 位全 1 → 第 3 字节 96 + 15 = 111,第 4 字节 255 → 172.16.111.255。
- A 错172.16.100.255 只把第 4 字节置成了全 1(按 /24 算);/20 的主机号还包括第 3 字节的低 4 位,也要置 1。
- B 错172.16.127.255 是按 /19 算的(块大小 32,96 ~ 127);/20 的块大小是 16,100 落在 96 ~ 111。
- C 错172.16.96.255:第 3 字节停在网络地址的 96,只把第 4 字节置了 1;第 3 字节的低 4 位也属于主机号,应为 96 + 15 = 111。
- D 对172.16.111.255。
复习:回到正文。
- A. 3000
- B. 3001
- C. 3002
- D. 2001
展开解析
BSYN 占一个序号:数据从 2001 开始编号,1000B 占 2001 ~ 3000,FIN 用下一个序号。
- A 错3000 是数据的最后一个字节(2001 ~ 3000);也可能是忘了 SYN 占序号、按 2000 + 1000 算的。FIN 用的是下一个序号 3001。
- B 对3001。
- C 错3002 是乙确认这个 FIN 时的确认号(3001 + 1),不是 FIN 自己的序号。
- D 错2001 是第一个数据字节的序号(SYN 占 2000),好像中间那 1000B 数据没有发过。
复习:回到正文。
- A. 10MSS
- B. 11MSS
- C. 12MSS
- D. 16MSS
展开解析
C超时:门限 = 20 ÷ 2 = 10,cwnd = 1,重新慢开始;翻倍越过门限时只增到门限,之后每轮加 1。
- 6 个 RTT 后依次为:2、4、8、10(到门限)、11、12。
- 经过 6 个 RTT 后拥塞窗口 = 12MSS。
- A 错10 是新门限:慢开始 1 → 2 → 4 → 8 → 10 只用了 4 个 RTT,之后还有 2 个 RTT 的拥塞避免(11、12)。
- B 错11 只数了 5 个 RTT(2、4、8、10、11),第 6 个 RTT 后还要再加 1。
- C 对12MSS。
- D 错16 是慢开始翻倍越过了门限:8 → 16。门限已降为 10,翻倍只能到 10,之后每轮加 1。
复习:回到正文。
- A. DNS
- B. HTTP
- C. FTP
- D. SMTP
展开解析
ADNS 查询报文短、一问一答,用 UDP(端口 53)不必先建连接;其余三个都要求可靠,用 TCP。
- A 对DNS。
- B 错HTTP 用 TCP(端口 80):网页内容要求一个字节都不能错。
- C 错FTP 的控制连接(21)和数据连接(20)都建立在 TCP 上。
- D 错SMTP 用 TCP 的 25 端口发送邮件,要求可靠传送。
复习:回到正文。
47.(9 分)某公司申请到地址 202.1.1.2/30 作为路由器 R 连接 ISP 的外网接口地址(ISP 一侧为 202.1.1.1),内部使用私有地址空间 192.168.5.0/24。R 的 E0 接口连部门 A(需要至少 100 个地址),E1 接口连部门 B(需要至少 50 个地址),R 实现 NAPT。
(1) 为部门 A、B 分配子网(A 用较低的地址段),并给出 E0、E1 接口地址(取各子网第一个可用地址)。(2 分)
(2) 写出 R 的路由表(目的网络、子网掩码、下一跳、接口)。(3 分)
(3) 部门 A 的主机 192.168.5.20 访问 Web 服务器 58.60.1.10,该分组在 Internet 上传输时的源、目的 IP 地址各是什么?R 为此要在 NAPT 表中记录什么?(2 分)
(4) 该主机与 Web 服务器之间 RTT = 40ms。主机新建 TCP 连接下载一个 8MSS 大小的网页(请求随第三次握手发出),服务器拥塞窗口初值 1MSS、门限 16MSS,接收窗口足够大,忽略发送时延。从主机发出 SYN 到收到全部网页至少需要多长时间?(2 分)
模拟卷 A 答案与评分细则
| 题号 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
|---|---|---|---|---|---|---|---|---|
| 答案 | A | C | D | B | D | B | C | A |
第 33 ~ 40 题的计算过程和逐项分析见每道题的“展开解析”。
47 题:
(1) A:192.168.5.0/25,E0 = 192.168.5.1;B:192.168.5.128/26,E1 = 192.168.5.129。(各 1 分;B 用其他对齐的 /26 且不与 A 重叠也给分)
(2)(每行 1 分)192.168.5.0 / 255.255.255.128 / 直接交付 / E0;192.168.5.128 / 255.255.255.192 / 直接交付 / E1;0.0.0.0 / 0.0.0.0 / 202.1.1.1 / 外网接口。
(3) 源 IP 202.1.1.2,目的 IP 58.60.1.10(1 分);NAPT 表记录(内网 192.168.5.20 : 源端口)↔(202.1.1.2 : 新端口)的对应关系(1 分)。
(4) 握手 1 RTT;服务器按 1、2、4、1 个 MSS 分 4 轮发完 8MSS,第 k 轮在 (1 + k) RTT 时到达,共 5 RTT = 200ms。(写出轮次 1 分,结果 1 分)
模拟卷 B
选择题可以直接点选项:点错的变红、点对的变绿,并自动展开逐项分析。
- A. 80ms
- B. 80.16ms
- C. 80.24ms
- D. 240ms
展开解析
B存储转发的分组交换像流水线:H1 发完 1000 个分组后,最后一个分组还要被 2 个路由器各转发一次。
- 每个分组的发送时间 = 1000 × 8bit ÷ 100Mbps = 80μs。
- 总时间 = (N + k − 1) × 80μs = (1000 + 3 − 1) × 80μs = 80.16ms。
- A 错80ms = 1000 × 80μs:只算了 H1 发完 1000 个分组的时间,漏了最后一个分组在后两段链路上的 2 × 0.08ms。
- B 对80.16ms。
- C 错80.24ms = (1000 + 3) × 80μs:把 3 段链路都算成了额外的转发;最后一个分组在第 1 段已经计入 H1 的 80ms,只需再转发 2 次。
- D 错240ms = 3 × 80ms:当成了报文交换,整批数据在每段链路上各发一遍;分组交换的各段是同时在传的。
复习:回到正文。
- A. 5MBaud
- B. 10MBaud
- C. 20MBaud
- D. 40MBaud
展开解析
C曼彻斯特编码把每个比特分成前后两半,各是一个码元,所以码元速率是比特率的 2 倍。
- A 错5MBaud = 10M ÷ 2:方向反了,曼彻斯特是一个比特对应 2 个码元,码元速率比比特率大,不是一半。
- B 错10MBaud 把波特率当成了比特率;曼彻斯特每位中间都要跳变一次,一位要用两个码元。
- C 对20MBaud。
- D 错40MBaud = 10M × 4:多乘了一个 2;每个比特只分前后两半,码元速率 = 2 × 10M = 20MBaud。
复习:回到正文。
- A. 4
- B. 3
- C. 5
- D. 10
展开解析
AGBN 累积确认:对 5 号帧的确认表示 0 ~ 5 都已收到;超时后从第一个未确认的帧起,把已发出的全部重发。
- A 对重发 6、7、8、9,共 4 帧。
- B 错3 = 9 − 6:用末尾减开头时忘了 + 1;未确认的是 6、7、8、9 四帧。
- C 错5 帧是把 5 号也重发了;对 5 号的确认说明它已经收到(累积确认),只需从 6 号开始重发。
- D 错10 帧是把 0 ~ 9 全部重发;0 ~ 5 号已被累积确认,GBN 只重发超时帧及其后已发出的帧。
复习:回到正文。
- A. AP 的 MAC
- B. 路由器接口的 MAC
- C. 广播地址
- D. H 的 MAC
展开解析
D地址 1 永远是这一跳无线传输的接收者:AP 发给 H 的帧,地址 1 = H,地址 2 = AP,地址 3 = 原始发送方(有线网络一侧)。
- A 错AP 是这一跳的发送者,填在地址 2,不在地址 1。
- B 错路由器接口是这个帧在有线网络一侧的原始发送方,从 AP 发出时它填在地址 3。
- C 错这是发给 H 的单播帧,地址 1 填 H 的 MAC;只有广播帧才把地址 1 填成全 1。
- D 对H 的 MAC 地址。
复习:回到正文。
- A. S0
- B. S1
- C. S2
- D. S3
展开解析
C逐项看是否匹配,再在匹配项中取前缀最长的。10.1.5.130 匹配 /16、/22、/25 三项(默认路由总能匹配)。
- A 错S0 的 10.1.0.0/16 也匹配,但前缀只有 16 位,还有更长的 /22、/25 能匹配。
- B 错S1 的 10.1.4.0/22 覆盖 10.1.4.0 ~ 10.1.7.255,也匹配;但 10.1.5.128/25(.128 ~ .255)前缀更长,优先。
- C 对S2:/25 最长。
- D 错默认路由 0.0.0.0/0 只在其他项都不匹配时才用,这里有 3 项匹配。
复习:回到正文。
- A. 默认网关的 MAC 地址
- B. 目的主机的 MAC 地址
- C. 目的主机的 IP 地址
- D. 默认网关的 IP 地址
展开解析
A目的主机在另一个网络,分组要先交给默认网关,所以主机用 ARP 解析的是默认网关的 MAC 地址。
- A 对默认网关的 MAC 地址。
- B 错目的主机在另一个网络,ARP 广播出不了本网络,问不到它的 MAC;帧只需交给下一跳网关。
- C 错目的主机的 IP 地址是已知的(就写在分组里);ARP 是由 IP 地址求 MAC 地址,不是求 IP 地址。
- D 错默认网关的 IP 地址是事先配置好的(手工或 DHCP),不用 ARP 解析;ARP 解析的是它的 MAC 地址。
复习:回到正文。
- A. 1000B
- B. 3000B
- C. 5000B
- D. 2000B
展开解析
D发送窗口 = min(cwnd, rwnd),从最新的确认号起算;再减去已发出、还没确认的部分。
- 发送窗口 = min(5000, 3000) = 3000B,从确认号 2001 起:2001 ~ 5000。
- 已发到 3000,还能发 3001 ~ 5000,共 2000B。
- A 错1000B 相当于把窗口前沿算到了 4000:在途的 1000B 被减了两次;窗口 2001 ~ 5000 减去在途的 2001 ~ 3000 后,还剩 3001 ~ 5000 共 2000B。
- B 错3000B 是整个发送窗口 min(5000, 3000),忘了其中 2001 ~ 3000 这 1000B 已经发出、还没确认。
- C 错5000B 是拥塞窗口,既没和接收窗口 3000B 取小,也没减去在途的数据。
- D 对2000B。
复习:回到正文。
- A. SMTP
- B. POP3
- C. FTP
- D. MIME
展开解析
B读取邮件是“拉”,用 POP3(或 IMAP);SMTP 只负责“推”。
- A 错SMTP 只负责发送:用户代理发信、邮件服务器之间转发;从服务器读取邮件要用 POP3 或 IMAP。
- B 对POP3。
- C 错FTP 是文件传送协议,用来上传、下载文件,不是读取邮件的协议。
- D 错MIME 只是邮件内容的编码格式(把非 ASCII 内容编成 ASCII),不是传送邮件的协议。
复习:回到正文。
47.(9 分)某实验室局域网如下图所示。路由器 R 的 E0 为 10.10.1.1/24,同时作为 DHCP 服务器;交换机 S 的端口 1 连 R,端口 2 连 100BaseT 集线器 Hub(Hub 上接 H1、H2),端口 3 连 H3,端口 4 连 AP(笔记本 L1 经 AP 无线接入)。传播速度 2 × 108m/s,最短帧 64B,信号经过 Hub 有 1μs 时延。
(1) H1 与 H2、H1 与 H3 是否在同一冲突域?该局域网(R 的 E0 一侧)有几个广播域?(2 分)
(2) L1 开机后广播 DHCP 发现报文。封装它的 IP 分组的源、目的 IP 是什么?该广播帧会被哪些主机和设备接口收到?(2 分)
(3) H1 与 H2 之间理论上可以相距的最远距离是多少?(2 分)
(4) H3 与 R 相距 100m,H3 用停—等方式向 R 连续发送 1518B 的帧,R 每收到一帧立即回 64B 的确认帧,H3 的有效数据传输速率是多少(每帧数据 1500B,不计前导码;把 H3 到 R 看成一条 100Mbps 的链路,忽略交换机的转发时延)?(3 分)
模拟卷 B 答案与评分细则
| 题号 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
|---|---|---|---|---|---|---|---|---|
| 答案 | B | C | A | D | C | A | D | B |
第 33 ~ 40 题的计算过程和逐项分析见每道题的“展开解析”。
47 题:
(1) H1、H2 同接在 Hub 上,在同一冲突域;H1 与 H3 之间隔着交换机,不在同一冲突域(各 0.5 分)。R 的 E0 一侧只有 1 个广播域(交换机、集线器、AP 都不隔离广播域)(1 分)。
(2) 源 IP 0.0.0.0,目的 IP 255.255.255.255(1 分);广播帧在整个广播域内泛洪,R 的 E0、H1、H2、H3 都会收到(1 分)。
(3) 64B 发送时间 5.12μs,单程 ≤ 2.56μs;减去 Hub 时延 1μs,传播 ≤ 1.56μs,最远 1.56μs × 200m/μs = 312m(2 分)。
(4) 数据帧 1518 × 8 ÷ 100Mbps = 121.44μs;确认帧 5.12μs;τ = 100m ÷ 2 × 108m/s = 0.5μs。周期 = 121.44 + 5.12 + 2 × 0.5 = 127.56μs,有效速率 = 1500 × 8 ÷ 127.56μs ≈ 94.07Mbps(周期 2 分,结果 1 分)。
模拟卷 C
选择题可以直接点选项:点错的变红、点对的变绿,并自动展开逐项分析。
- A. 12μs
- B. 5ms
- C. 5.012ms
- D. 10.012ms
展开解析
C从开始发送到收完 = 发送时延 + 传播时延(单程)。
- 发送时延 = 1500 × 8bit ÷ 10⁹bit/s = 12μs = 0.012ms。
- 传播时延 = 10⁶m ÷ (2 × 10⁸m/s) = 5ms。
- 合计 5.012ms。
- A 错12μs 只是发送时延 1500 × 8 ÷ 10⁹,漏了 1000km 的传播时延 5ms。
- B 错5ms 只是传播时延 10⁶m ÷ (2 × 10⁸m/s),漏了发送时延 12μs。
- C 对5.012ms。
- D 错10.012ms 把传播时延算成了往返(2 × 5ms);从甲开始发送到乙收完只需单程。
复习:回到正文。
- A. 18kbps
- B. 24kbps
- C. 30kbps
- D. 36kbps
展开解析
A同时给了带宽、信噪比和状态数:奈奎斯特、香农两个上限都要算,取较小的。
- 奈奎斯特:2 × 3k × log₂8 = 18kbps。
- 香农:30dB → S/N = 10³ = 1000,3k × log₂1001 ≈ 29.9kbps。
- 取较小者:18kbps。
- A 对18kbps。
- B 错24kbps = 2 × 3k × 4:把 8 种状态算成每码元 4 位;log₂8 = 3。
- C 错30kbps 是香农极限 3k × log₂1001 ≈ 30kbps;但 8 种状态的调制按奈奎斯特最多只有 18kbps,取较小者。
- D 错36kbps = 2 × 18kbps:码元速率按 2 × 2W 算,多乘了一个 2;无噪声的极限码元速率是 2W = 6k 波特。
复习:回到正文。
- A. 14
- B. 64
- C. 6
- D. 1518
展开解析
C直通交换只要读到帧首部的目的 MAC 地址(6 字节)就能查表并开始转发。
- A 错14B 是整个以太网帧首部(目的 MAC 6 + 源 MAC 6 + 类型 2);转发只看目的地址,读到前 6B 就够了。
- B 错64B 是最短帧长:“无碎片”交换要先收满 64B 才转发,直通交换不用等这么久。
- C 对6 字节。
- D 错1518B 是最长帧长,那是存储转发方式要收齐整帧才转发。
复习:回到正文。
- A. 358.4μs
- B. 768μs
- C. 819.2μs
- D. 1536μs
展开解析
B第 k 次冲突后 r ∈ {0, 1, …, 2k − 1}(k ≤ 10),等待 r 个争用期;10Mbps 以太网争用期 = 512bit ÷ 10Mbps = 51.2μs。
- 第 4 次冲突:k = 4,r 最大 2⁴ − 1 = 15。
- 最长等待 15 × 51.2μs = 768μs。
- A 错358.4μs = 7 × 51.2μs:按 k = 3 算了,是第 3 次冲突后的最长等待。
- B 对768μs。
- C 错819.2μs = 16 × 51.2μs:用了 2⁴,忘了减 1;r 的最大值是 2⁴ − 1 = 15。
- D 错1536μs = 15 × 102.4μs:争用期多乘了 2(或把 r 的上限算成 30);10Mbps 以太网争用期是 51.2μs。
复习:回到正文。
- A. 172.18.128.0/22
- B. 172.18.130.0/22
- C. 172.18.132.0/23
- D. 172.18.128.0/21
展开解析
D四个网络前 16 位相同,看第 3 字节:129 = 1000 0001,130 = 1000 0010,132 = 1000 0100,133 = 1000 0101,共同前缀是前 5 位 10000。
- 共同前缀 16 + 5 = 21 位,后面补 0:第 3 字节 1000 0000 = 128。
- 聚合结果 172.18.128.0/21(第 3 字节 128 ~ 135,包含全部 4 个网络)。
- A 错172.18.128.0/22 只覆盖第 3 字节 128 ~ 131,装不下 132、133。
- B 错130 不是 4 的倍数,不能作 /22 块的起点(130 与掩码 252 相与得 128);何况 /22 也装不下 4 个网络。
- C 错172.18.132.0/23 只覆盖 132、133,漏了 129、130。
- D 对172.18.128.0/21。
复习:回到正文。
- A. 途中路由器可以对 IPv6 分组分片
- B. 基本首部长度固定为 40B
- C. 地址长度为 128 位
- D. 基本首部取消了首部检验和
展开解析
A本题选错误的叙述。IPv6 只由源主机分片,途中路由器不分片。
- A 选错误:途中路由器遇到过大的 IPv6 分组不分片,而是丢弃并向源主机发 ICMPv6“分组太大”,由源主机按路径 MTU 重新分片。
- B 不选正确:IPv6 基本首部固定 40 字节,可选功能放进扩展首部。
- C 不选正确:IPv6 地址 128 位,是 IPv4(32 位)的 4 倍长。
- D 不选正确:基本首部取消了首部检验和,差错检测交给链路层和传输层,路由器不必每跳重算。
复习:回到正文。
- A. 600
- B. 400
- C. 700
- D. 401
展开解析
B累积确认:确认号是按序收到的最后一个字节 + 1,中间有缺口就停在缺口处。
- 第 1 段 100 ~ 399 按序收到;第 2 段 400 ~ 599 丢失;第 3 段 600 ~ 699 失序,先缓存。
- 确认号 = 400。
- A 错600 是第 3 段的序号;第 2 段(400 ~ 599)没到,确认号不能越过这个缺口。
- B 对400。
- C 错700 是三段都收到后的确认号(600 + 100);第 2 段丢了,后面收到的第 3 段只能先缓存。
- D 错确认号是“期望收到的下一个字节”,缺口从 400 开始就填 400;401 多加了 1。
复习:回到正文。
- A. 1 条、1 条
- B. 5 条、5 条
- C. 2 条、5 条
- D. 1 条、5 条
展开解析
DFTP 的控制连接整个会话只有 1 条,一直保持;数据连接每传一个文件建 1 条,传完就关。
- A 错数据连接是非持续的,每传一个文件建一条,传 5 个文件要 5 条,不是 1 条。
- B 错控制连接在整个会话期间只有一条、一直保持,不是每个文件一条。
- C 错控制连接只在登录时建 1 条,一直用到 QUIT,没有第 2 条。
- D 对1 条控制连接、5 条数据连接。
复习:回到正文。
47.(9 分)主机 H1 与 H2 通过路由器 R1、R2 相连(如图)。R1:E0 = 192.168.1.1/24,S0 = 10.0.0.1/30;R2:S0 = 10.0.0.2/30,E0 = 192.168.2.1/24。R1—R2 链路的 MTU = 820B,两个局域网的 MTU 都是 1500B。
(1) 写出 R1 的路由表(目的网络、子网掩码、下一跳、接口)。(2 分)
(2) H1 向 H2 发送一个总长 1500B 的 IP 分组(首部 20B,DF = 0)。R1 转发时分几片?写出各片的总长度、片偏移和 MF。(2 分)
(3) 这些分片在哪里重组?若 H1 发出时 TTL = 64,H2 收到时 TTL 是多少?(2 分)
(4) H1 与 H2 建立 TCP 连接后,H1 向 H2 发送 24 个 MSS 的数据。H2 的接收窗口始终为 8MSS,H1 的拥塞窗口初值 1MSS、门限 32MSS,RTT = 10ms,忽略发送时延,H2 对每个段立即确认。按轮次写出拥塞窗口和发送窗口;从 H1 发出 SYN 到收到最后一个确认至少要多长时间?(3 分)
模拟卷 C 答案与评分细则
| 题号 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
|---|---|---|---|---|---|---|---|---|
| 答案 | C | A | C | B | D | A | B | D |
第 33 ~ 40 题的计算过程和逐项分析见每道题的“展开解析”。
47 题:
(1)(三行全对 2 分,错一行扣 1 分)192.168.1.0 / 255.255.255.0 / 直接交付 / E0;10.0.0.0 / 255.255.255.252 / 直接交付 / S0;192.168.2.0 / 255.255.255.0 / 10.0.0.2 / S0。
(2) 每片数据最多 ⌊(820 − 20) ÷ 8⌋ × 8 = 800B,1480 = 800 + 680,分 2 片(1 分):总长 820B、片偏移 0、MF = 1;总长 700B、片偏移 100、MF = 0(1 分)。
(3) 在目的主机 H2 重组,路由器 R2 不重组(1 分);经过 R1、R2,TTL = 64 − 2 = 62(1 分)。
(4)(轮次表 2 分,时间 1 分)
| 轮次 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 拥塞窗口(MSS) | 1 | 2 | 4 | 8 | 16 | 24 |
| 发送窗口(MSS) | 1 | 2 | 4 | 8 | 8 | 8 |
| 本轮发送 / 累计 | 1 / 1 | 2 / 3 | 4 / 7 | 8 / 15 | 8 / 23 | 1 / 24 |
第 5 轮起发送窗口受接收窗口限制为 8;慢开始阶段每收到一个确认 cwnd 仍加 1。握手 1 RTT + 数据 6 RTT = 7 RTT = 70ms。
考场作战手册:模板、公式、协议速查、易错与真题索引
前六篇是“学”,第 7 篇是“练大题”,这一篇是考前“速查”:七类综合题的固定步骤、全部计算公式、协议端口和首部长度、107 条高频易错点、2009—2026 年综合题检索表,最后是按年份刷题的网格——计网部分 163 道真题都能在页内直接做。
8.1答题规范:把会做的分拿满
- 先读图后读题:每个接口的地址先算出所在网络,标出路由器、交换机、集线器。
- 地址写全:网络写成“地址/前缀”或“地址 + 掩码”;MAC 写满 6 字节;十六进制加 H。
- 路由表每行四项填满:直连写“直接交付”,下一跳是相邻路由器在共同网络上的接口。
- 计算先写公式再代数,单位写清:B/bit、ms/μs;存储容量 K = 1024,速率 k = 1000(题目另有说明除外)。
- “能/不能、是/否”后面跟一句理由;“要改哪些字段”只写真正改的,别罗列。
详见 7.1 计网大题怎么考、怎么给分。
8.2七类综合题:固定步骤速查
| 题型 | 固定步骤 | 真题 |
|---|---|---|
| ① IP 规划与路由表 | 标每个接口所在网络 → 主机数定前缀、从大到小对齐分配 → 站在路由器上按出口分组 → 同下一跳聚合 → 填表(直连 / 间接 / 特定主机 /32 / 默认 /0)→ 最长前缀匹配、数 TTL | 2009、2013、2014-43、2018、2025(3) |
| ② 路由算法与协议 | 表格化 Dijkstra,按确定顺序给路径和费用 → 第一跳即下一跳 → RIP:n 跳远要 n 次交换 → BGP:eBGP/iBGP、UPDATE、先短 AS 路径再近出口 | 2014-42、2024 |
| ③ 报文首部分析 | 画竖线切“帧首部 14B | IP 首部 | TCP 首部 | 数据” → 每个分组列表(长度、标识、TTL、源、目的、端口、seq、ack、标志)→ 按问题查表 | 2011、2012 |
| ④ 局域网 | 不同网络 → 路由器,同广播域不同冲突域 → 交换机,同冲突域 → 集线器 → 时间距离题:最短帧时间 ÷ 2 − 设备时延 → 广播看广播域 → 802.11 地址 1 收、2 发、3 另一侧 | 2010、2019、2022 |
| ⑤ 可靠传输 | 圈出最大确认号 → 画窗口(GBN 2n − 1,SR 2n−1)→ GBN 从超时帧起全重发,SR 只重发超时帧 → U = W·TD ÷ (TD + RTT + TA) | 2017、2025(1)(2) |
| ⑥ TCP | 序号账本(SYN、FIN 各占 1)→ 轮次表(cwnd、rwnd、本轮发送、累计)→ 发送窗口 = min(cwnd, rwnd) → 时间 = 握手 1 RTT + 数据轮数(+ 释放) | 2016-41、2023、2026 |
| ⑦ 一次访问的全过程 | 地址抄表 → 按时间线列每个帧(DHCP → ARP → DNS → ARP 网关 → TCP → HTTP)→ 边列边更新交换表 → IP 端到端不变、MAC 逐段改写、NAT 改地址和端口 | 2011、2015、2020、2021 |
8.3公式速查
| 内容 | 公式 / 结论 | 讲解 |
|---|---|---|
| 发送时延、传播时延 | 发送 = 数据长度 ÷ 速率;传播 = 距离 ÷ 传播速度;时延带宽积 = 传播时延 × 带宽 | 1.3 |
| 三种交换的时间 | 电路 = 建连 + L ÷ R;报文 = k × L ÷ R;分组 = (N + k − 1) × P ÷ R(N 个分组、k 段链路、分组长 P);有传播时延再加 k × 单段传播时延;各段速率不同时“跟着最后一个分组走”(2025-33) | 1.2 |
| 利用率与时延、吞吐量 | D = D0 ÷ (1 − U)(U = 0.5 → 2 倍,0.9 → 10 倍);单条路径吞吐量 = 最慢一段;并行路径先把各路径瓶颈相加,再与两头取小(2024-33);丢包率 = 丢失分组数 ÷ 发送分组数 | 1.3 |
| 封装效率 | 有效数据 ÷ (有效数据 + 各层首部、尾部)(2017-33:400 ÷ 500 = 80%) | 1.4 |
| 奈奎斯特 | 无噪声:C = 2W log2V(bit/s) | 2.2 |
| 香农 | 有噪声:C = W log2(1 + S/N);S/N = 10dB/10;两者同时给出取较小值 | 2.2 |
| 波特率与比特率 | 比特率 = 波特率 × log2V;曼彻斯特编码波特率 = 2 × 比特率;4B/5B 编码效率 4 ÷ 5 = 80% | 2.1 |
| PCM | 采样频率 ≥ 2 × 信号最高频率;数据率 = 采样频率 × log2(量化级数)(电话:8000 × 8 = 64kb/s) | 2.3 |
| CRC | 生成多项式 r 次 → 数据后补 r 个 0 → 模 2 除 → r 位余数为 FCS;接收方整串除余数全 0 为无错 | 3.2 |
| 海明距离 | 检 t 位:d ≥ t + 1;纠 t 位:d ≥ 2t + 1;海明码:2r ≥ k + r + 1 | 3.2 |
| 信道利用率 | U = min(1, W × TD ÷ (TD + RTT + TA));停等 W = 1 | 3.3 |
| 序号位数 | GBN:WT ≤ 2n − 1;SR:WT + WR ≤ 2n,通常 W = 2n−1 | 3.3 |
| CDMA | 规格化内积 S · T = (1/m) Σ SiTi:结果 1 → 发了 1,−1 → 发了 0,0 → 没发(2014-37) | 3.4 |
| CSMA/CD | 最短帧长 = 2τ × 速率;最远距离 = (最短帧时间 ÷ 2 − 设备时延) × 传播速度;检测冲突最短 τ、最长 2τ | 3.5 |
| 二进制指数退避 | k = min(重传次数, 10),r ∈ {0, …, 2k − 1},最长等待 (2k − 1) × 争用期;16 次失败放弃 | 3.5 |
| 802.11 NAV | CTS 设置:SIFS + DATA + SIFS + ACK;RTS 设置:再加 SIFS + CTS | 3.6 |
| 以太网帧 | 首部 14B + 尾部 4B;数据 46 ~ 1500B;帧 64 ~ 1518B;802.1Q 帧 +4B | 3.7 |
| 子网 | 可分配 = 2主机位 − 2;块大小 = 28k − n(前缀落在第 k 字节);网络地址 = 向下取到块大小的倍数 | 4.3 |
| 分片 | 每片数据 = ⌊(MTU − 首部) ÷ 8⌋ × 8;片偏移 = 前面数据字节 ÷ 8;只有最后一片 MF = 0(再分片时,原分片 MF = 1 则切出的各片 MF 都是 1) | 4.2 |
| IPv6 分片 | 只在源点分片;每片数据 ≤ ⌊(MTU − 40 − 8) ÷ 8⌋ × 8(基本首部 40B + 分片首部 8B) | 4.7 |
| 组播 MAC | 01-00-5E + 0 + IP 组播地址低 23 位;25 = 32 个组地址共用一个 MAC | 4.10 |
| DHCP 续约 | T1 = 租期 × 50%(单播请求原服务器);T2 = 租期 × 87.5%(广播请求) | 4.6 |
| 检验和 | 16 位反码求和,进位回卷,最后取反;接收方加总为全 1 无错 | 5.2 |
| TCP 序号 | SYN、FIN 各占 1;数据 = FIN 序号 − (SYN 序号 + 1);确认号 = 最后按序收到的字节 + 1 | 5.4 |
| TCP 窗口 | 发送窗口 = min(cwnd, rwnd);还能发 = 确认号 + 窗口 − 下一个待发序号;窗口受限时平均速率 ≤ 窗口 ÷ RTT(2016-41) | 5.5 |
| 超时重传时间 | RTTS = (1 − α)RTTS + α × 新样本(α = 1/8);RTTD = (1 − β)RTTD + β × |RTTS − 新样本|(β = 1/4,用新的 RTTS);RTO = RTTS + 4RTTD | 5.5 |
| 拥塞控制 | 慢开始每轮翻倍(每个新确认 +1)到门限;拥塞避免每轮 +1;超时:门限 = cwnd ÷ 2,cwnd = 1;3 个重复确认:门限 = cwnd = cwnd ÷ 2 | 5.6 |
| 连接释放时间 | 主动方 1 RTT + 2MSL;被动方 1.5 RTT(对方立即合并 ACK 和 FIN 时) | 5.4 |
| HTTP 时间 | 非持续串行:(N + 1) × 2 RTT;持续非流水线:2 + N;持续流水线:2 + 1;DNS 迭代 m 次再加 m RTT | 6.5 |
| Web 缓存 | 平均时延 = 命中率 × 本地时延 + (1 − 命中率) × 远程时延;出口链路负载 = (1 − 命中率) × 原负载;条件 GET 未改 → 304,无实体主体 | 6.5 |
| “要几位” | N 台主机:2n − 2 ≥ N;N 个子网:2n ≥ N;N 种码元状态:log2N 位 | 0.3 |
8.4协议、端口、首部与设备速查
| 协议 | 层 | 用什么传 | 端口 / 编号 | 一句话 |
|---|---|---|---|---|
| 按“应用层协议 → 传输层 → 端口”排,下面再列网络层协议的协议号和以太网类型字段。端口完整讲解见 5.1。 | ||||
| HTTP | 应用 | TCP | 80 | 无连接、无状态,用 Cookie 记用户 |
| FTP | 应用 | TCP | 21 控制 / 20 数据 | 控制连接持久,数据连接非持久(每个文件一条) |
| SSH / TELNET | 应用 | TCP | 22 / 23 | 远程登录:SSH 加密,TELNET 明文 |
| SMTP | 应用 | TCP | 25 | 推邮件,只传 7 位 ASCII(MIME 扩展) |
| POP3 / IMAP | 应用 | TCP | 110 / 143 | 拉邮件 |
| DNS | 应用 | UDP(主要) | 53 | 主机→本地递归,本地→其他迭代 |
| DHCP | 应用 | UDP | 67 服务器 / 68 客户 | DISCOVER、REQUEST 都是 0.0.0.0 → 255.255.255.255;跨网络要中继代理 |
| TFTP | 应用 | UDP | 69 | 简单文件传送,自己做确认重传 |
| SNMP | 应用 | UDP | 161 / 162 | 网管:161 收请求,162 收陷阱报文 |
| HTTPS | 应用 | TCP | 443 | HTTP + TLS;HTTP/3 改走基于 UDP 的 QUIC(拓展) |
| RIP | 应用 | UDP | 520 | 跳数 ≤ 15,30s 交换整张表 |
| BGP | 应用 | TCP | 179 | AS 之间,路径向量 |
| OSPF | 网络 | IP | 协议号 89 | 链路状态、Dijkstra、可分区 |
| ICMP | 网络 | IP | 协议号 1 | 差错报告、ping、traceroute |
| IGMP | 网络 | IP | 协议号 2 | 主机告诉组播路由器自己加入了哪个组 |
| TCP / UDP | 传输 | IP | 协议号 6 / 17 | 首部 20~60B / 8B |
| ARP | 网络(408 口径) | 以太网帧 | 类型 0x0806 | 同一网络内 IP → MAC,请求广播、响应单播 |
| IPv4 / IPv6 | 网络 | 以太网帧 | 类型 0x0800 / 0x86DD | 帧的“类型”字段告诉接收方里面装的是谁(链路层的 SAP) |
| 802.1Q | 链路 | — | 标签类型 0x8100 | VLAN 标签 4B,插在源 MAC 之后 |
首部长度
以太网帧首部 14B + FCS 4B;IPv4 首部 20~60B(首部长度 × 4);IPv6 基本首部 40B、分片首部 8B;TCP 首部 20~60B(数据偏移 × 4);UDP 8B;伪首部 12B;802.1Q 标签 4B;PPP 首部 5B + 尾部 3B。
设备与域
中继器、集线器:物理层,不隔离冲突域和广播域。网桥、交换机:链路层,隔离冲突域(每端口一个),不隔离广播域(VLAN 可隔离)。路由器:网络层,都隔离,抑制广播风暴。无线接入点 AP:链路层,相当于“有线—无线”之间的网桥。
8.5高频易错清单(107 条)
| # | 易错说法 / 陷阱 | 正确理解 |
|---|---|---|
| 1 | 传播速度越快,数据率越高 | 数据率取决于带宽、信噪比、码元状态数,与传播速度无关(2014-35) |
| 2 | 时延带宽积 = 发送时延 × 带宽 | = 传播时延 × 带宽 |
| 3 | 分组交换总时间 = N × P ÷ R × 链路数 | 流水线:(N + k − 1) × P ÷ R(2010-34) |
| 4 | 30dB 就是 S/N = 30 | S/N = 103 = 1000 |
| 5 | 给了信噪比也给了电平数,只用一个公式 | 奈奎斯特、香农都算,取较小值 |
| 6 | 曼彻斯特编码的波特率 = 比特率 | = 2 × 比特率 |
| 7 | 408 的曼彻斯特:前低后高为 1 | 本讲义按真题口径:前高后低 = 1(2013-34、2015-34) |
| 8 | MAC 地址属于物理层 | 属于数据链路层(2018-34) |
| 9 | 零比特填充:5 个 1 后面是 0 就不用插 | 只要连续 5 个 1 就插 0(2013-37) |
| 10 | 接收方 CRC 也要先补 0 再除 | 接收方整串直接除,余数全 0 才无错 |
| 11 | CRC 能保证可靠传输 | 只能检错丢弃,可靠要靠确认重传 |
| 12 | GBN 收到 ACK1 缺 ACK0,要重发 0 | 累积确认:ACKn 说明 n 及以前都收到了(2009-35) |
| 13 | SR 的确认也是累积的 | SR 逐个确认,只重发超时帧(2011-35) |
| 14 | SR 窗口比 GBN 大 | n 位时 SR 最大 2n−1,GBN 最大 2n − 1(2023-35) |
| 15 | 帧长有范围时用最长帧求窗口 | 用最短帧(2012-36) |
| 16 | 周期里只算一次传播时延 | RTT = 2 × 单向;确认帧等长时还要加确认帧发送时间(2020-36) |
| 17 | 捎带确认时 TA = 0 | TA = 对方数据帧的发送时间(2017-47) |
| 18 | 卫星链路单向传播 0.12s | 上去再下来,约 0.24s(2025-47) |
| 19 | CDMA 内积不除以 m | 规格化内积要除以码片长度 m(2014-37) |
| 20 | CSMA/CD 最短帧长 = τ × 速率 | = 2τ × 速率 |
| 21 | 算最远距离时,从最短帧发送时间里只减一次集线器时延:(5.12 − 1.535) ÷ 2 | 信号往返两次经过集线器,要减两次;等价于先除以 2 得单程时延,再减一次:5.12 ÷ 2 − 1.535(2016-36、2022-47) |
| 22 | 退避第 11 次冲突 r 最大 211 − 1 | k 最多取 10:r 最大 1023(2025-35) |
| 23 | CSMA/CD 可用于无线网 | 无线用 CSMA/CA(2015-36) |
| 24 | CSMA/CA 交换中各帧前都等 DIFS | 交换开始等 DIFS,中间的 CTS、DATA、ACK 前等 SIFS(2020-37) |
| 25 | 隐蔽站的 NAV 从 RTS 算起 | 它听不到 RTS,只能从 CTS 之后算(2024-36) |
| 26 | 802.11 地址 1 是源地址 | 地址 1 = 这一跳的接收者(2017-35) |
| 27 | 以太网提供可靠服务 | 无连接、不可靠(2012-35) |
| 28 | 直通交换要等整帧 | 只等 6B 目的地址(2013-38) |
| 29 | 交换机按源 MAC 转发 | 源 MAC 用来学习,目的 MAC 用来转发(2009-36) |
| 30 | 交换机泛洪也从进入端口发回 | 除进入端口外的所有端口(2014-34) |
| 31 | 交换机隔离广播域 | 不隔离,只有路由器和 VLAN 隔离(2015-37) |
| 32 | VLAN 内 ARP 可以解析其他 VLAN 的主机 | ARP 广播出不了 VLAN(2024-35) |
| 33 | IP 首部检验和覆盖数据 | 只检验首部,每跳重算 |
| 34 | 首部长度、总长度、片偏移单位相同 | 分别是 4B、1B、8B |
| 35 | 分片每片数据 = MTU − 20 | 还要取 8 的倍数:MTU 800 → 776(2021-36、2018-47) |
| 36 | 0.0.0.0 可作目的地址 | 只能作源地址(2017-36) |
| 37 | 广播地址的分组没有主机收 | 子网内所有主机都收(2011-38) |
| 38 | /22 的广播地址只把最后一个字节置 1 | 主机号 10 位全置 1:第 3 字节低 2 位也置 1(2012-39) |
| 39 | 变长划分可以得到任意小的子网 | 各块是 2 的幂且要正好分完(2019-37) |
| 40 | 聚合后网络地址取原来最小的那个 | 共同前缀后补 0;要验证块大小是否正好覆盖(2018-38) |
| 41 | 下一跳写本路由器的接口 | 写相邻路由器在共同网络上的接口(2011-37) |
| 42 | 多条匹配取第一条 | 取最长前缀;默认路由最后(2015-38) |
| 43 | 默认网关可以是任意一台服务器 | 必须是本网络上的路由器接口(2015-47、2016-39) |
| 44 | NAT 只改 IP 地址 | NAPT 还改端口,IP 和 TCP/UDP 检验和都要重算(2025-37) |
| 45 | 出 NAT 改目的地址 | 出方向改源,入方向改目的(2020-47) |
| 46 | /30 链路的另一端地址随便填 | 只有两个可用地址,知道一端就知道另一端(2016-38、2023-38) |
| 47 | 跨网络发送时 ARP 解析目的主机 | 解析默认网关(2018-37) |
| 48 | DHCP REQUEST 用刚分到的地址作源 | ACK 之前仍是 0.0.0.0,且广播(2025-36) |
| 49 | 拥塞时路由器发“目的不可达” | 发“源点抑制”(2010-36) |
| 50 | IPv6 地址空间是 IPv4 的 96 倍 | 296 倍;基本首部固定 40B(2023-40) |
| 51 | RIP 距离 16 表示 16 跳 | 表示不可达(2010-35) |
| 52 | OSPF 用 UDP、BGP 用 IP | RIP→UDP,OSPF→IP,BGP→TCP(2017-37) |
| 53 | RIP 收到坏消息后马上正确收敛 | 坏消息传得慢(2016-37) |
| 54 | UDP 分用看源端口 | 看目的端口(2018-39) |
| 55 | 反码求和的进位直接丢掉 | 进位回卷到最低位,最后取反(2024-39) |
| 56 | 第三次握手的确认号 = 对方 ISN | = 对方 ISN + 1(2019-39) |
| 57 | 客户收到 FIN 回 ACK 后就 CLOSED | 进入 TIME-WAIT,再等 2MSL(2021-38、2022-39) |
| 58 | 快重传在第一次重复确认时就重传 | 收到 3 个重复确认才重传(2019-38) |
| 59 | 超时后 cwnd 减半 | 超时:cwnd = 1;3 个重复确认才减半(2009-39、2022-38) |
| 60 | “发送窗口”就是 cwnd | = min(cwnd, rwnd)(2014-38、2015-39、2016-41) |
| 61 | SR 的发送窗口一定 ≤ 2n−1 | 只要求 WT + WR ≤ 2n;收发窗口相等时才是 2n−1(2019-35:WT = 5,WR ≤ 3) |
| 62 | 停等协议确认帧丢失时,接收方丢弃重复帧就行 | 丢弃重复帧,还要再回一次确认,否则发送方会一直重传 |
| 63 | 令牌传递也会冲突;负载轻时它比 CSMA/CD 好 | 令牌传递不会冲突;负载重时它好,负载轻时要等令牌,不如随机访问 |
| 64 | 网络层的 SAP 是 IP 地址,链路层的 SAP 是 MAC 地址 | 王道口径:链路层 SAP 是帧的“类型”字段,网络层 SAP 是 IP 首部的“协议”字段,传输层 SAP 是端口号 |
| 65 | 电路交换一定比分组交换慢 | 不一定:各段速率不同、报文很长时,电路交换只受最慢一段限制,可能最快(2025-33:Tms > Tps > Tcs) |
| 66 | 虚电路要为每条虚电路预先分配带宽 | 虚电路只是逻辑连接,不预分配带宽;独占带宽的是电路交换(2020-34) |
| 67 | 端到端吞吐量是各段速率的平均或总和 | 单条路径看最慢的一段;并行路径先把各路径的瓶颈相加,再与两头取小(2024-33) |
| 68 | 网络利用率越高越好 | D = D0 ÷ (1 − U):U = 0.9 时时延是空闲时的 10 倍 |
| 69 | 网络体系结构包括协议的实现细节 | 体系结构 = 层次 + 各层协议 + 功能,不含实现(2010-33) |
| 70 | 分层越多,效率越高 | 层越多首部越多、处理越多,效率越低(2026-33) |
| 71 | 直接为 ICMP 提供服务的是数据链路层 | ICMP 报文封装在 IP 数据报里,直接为它服务的是 IP(2012-33) |
| 72 | 差分曼彻斯特:位中间有跳变表示 0 | 位中间总有跳变(作同步);本讲义口径:位开始处有跳变 = 0、无跳变 = 1(2021-34) |
| 73 | 香农公式里 log21001 不能近似 | 考试按 log21001 ≈ 10 算(2016-34、2017-34) |
| 74 | PCM 采样频率等于信号最高频率即可 | 采样频率 ≥ 2 × 最高频率(采样定理) |
| 75 | 中继器像放大器一样把噪声一起放大 | 中继器对数字信号整形再生,噪声不累积;但它工作在物理层,不隔离冲突域 |
| 76 | 慢开始受接收窗口限制时,cwnd 就停止增长 | cwnd 仍按收到的确认数增长,只是发送窗口 = min(cwnd, rwnd)(5.6) |
| 77 | 收到 3 个重复确认后 cwnd 从 1 重新开始 | 快恢复:门限 = cwnd ÷ 2,cwnd = 新门限,接着拥塞避免;只有超时才回到 1(5.6) |
| 78 | 算 RTTD 时用旧的 RTTS | 按教材顺序先更新 RTTS,再用新的 RTTS 算 RTTD(RFC 6298 的顺序作拓展) |
| 79 | 数据还没被确认完就可以算 FIN 的发送时刻 | 本讲义按真题口径:数据全部被确认后才发 FIN(2024-38:60.04s) |
| 80 | UDP 检验和算出来是全 0 就填 0 | 填全 1;检验和字段为 0 表示“没有计算检验和”(5.2) |
| 81 | 非持续连接取 N 个对象只要 N + 1 个 RTT | 每个对象都要“握手 1 RTT + 请求响应 1 RTT”,串行共 2(N + 1) 个 RTT |
| 82 | 主机向本地域名服务器发的也是迭代查询 | 主机 → 本地:递归;本地 → 根、顶级、权限:通常迭代(2010-40) |
| 83 | 条件 GET 时对象没改,服务器返回 200 和空主体 | 返回 304 Not Modified,不带实体主体(6.5) |
| 84 | SMTP 可以直接传送二进制附件 | SMTP 只能传 7 位 ASCII,附件要用 MIME 编码(如 base64) |
| 85 | POP3、IMAP 用 UDP | 都用 TCP:110、143 |
| 86 | FTP 的数据连接和控制连接都保持整个会话 | 控制连接保持整个会话;数据连接每传一个文件建一条(2023-47) |
| 87 | 冲突域要把交换机与路由器之间的链路也算上 | 官方答案口径不计入(2020-35) |
| 88 | IPv6 分组太大时,途中路由器可以分片 | 只由源点分片;路由器丢弃并发 ICMPv6“分组太大” |
| 89 | 网卡按组播 MAC 收下帧,就一定是自己加入的组 | 32 个组地址共用一个 MAC,还要在 IP 层按组地址过滤 |
| 90 | MAC 地址和 IP 地址一路都不变 | MAC 地址每过一个路由器换一次;IP 地址一路不变(NAT 除外)(0.4) |
| 91 | RIP 收到距离变大的通告可以不理会 | 下一跳相同时必须按新消息更新,即使变大(7.3 模拟 2) |
| 92 | 再分片后最后一片的 MF 一定是 0 | 原分片 MF = 1 时,切出的各片 MF 都是 1;片偏移从原分片偏移接着算(7.4 模拟 2) |
| 93 | 聚合块里有没用的地址无所谓 | 发往空闲地址的分组可能在 ISP 与边界路由器之间兜圈直到 TTL 为 0,要加丢弃路由(7.2 模拟 2) |
| 94 | 按端口划分 VLAN 时,同一集线器下的主机可以分进不同 VLAN | 它们占用交换机的同一个端口,只能在同一个 VLAN(7.5 模拟 2) |
| 95 | OSPF 的链路状态通告洪泛到整个自治系统 | 划分区域后只在本区域内洪泛,区域之间由区域边界路由器交换汇总信息(7.3 预测小题) |
| 96 | 收到 MF = 0 的分片,就说明这个数据报收齐了 | MF = 0 只说明它是最后一片(或根本没分片);还要检查从偏移 0 起各片首尾相接、没有缺口(4.2 判定表) |
| 97 | 片偏移 = 0 的分组一定没有分过片 | MF = 1、偏移 0 是第一片;MF = 0 且偏移 0 才是没分过片的完整数据报(4.2) |
| 98 | RTT 里已经包含了数据帧和确认帧的发送时延 | 本讲义口径:RTT = 往返传播时延;数据帧发送 T_D、确认帧发送 T_A 另外加,停等周期 = T_D + RTT + T_A(1.3) |
| 99 | 4 相位调制时,2400 b/s 的波特率也是 2400 Baud | 每个码元携带 log24 = 2 bit,波特率 = 2400 ÷ 2 = 1200 Baud(2011-34) |
| 100 | SYN 报文段可以顺便携带数据 | 教材和真题口径:SYN = 1 的报文段不能携带数据,但要消耗 1 个序号;第三次握手的 ACK 可以带数据,不带就不消耗序号(5.4) |
| 101 | TIME-WAIT 状态总是出现在客户端 | 出现在主动关闭的一方;服务器先发 FIN 时,TIME-WAIT 在服务器(5.4) |
| 102 | TCP 面向连接,所以同一条连接的报文段走同一条路径、不会乱序 | 网络层仍是数据报服务,各分组独立选路、可能乱序到达;是 TCP 在接收端按序号重排(5.1 两种服务) |
| 103 | 本地域名服务器迭代解析任何域名,最多都是 4 次 | 按域名层数数:www.abc.xyz.com 最多 4 次(2016-40),mail.cs.pku.edu.cn 最多 5 次;缓存命中时 0 次(6.2) |
| 104 | 组播 MAC = 01-00-5E 后面直接抄 IP 地址的后 3 个字节 | 只取低 23 位,第 2 字节的最高位要丢掉:230.139.200.7 → 01-00-5E-0B-C8-07(4.10) |
| 105 | 移动结点到了外地网络,通信对方就改用它的转交地址 | 对方始终只用永久地址(归属地址);转交地址只出现在归属代理到外地代理的隧道外层首部里(4.11) |
| 106 | 主机与 DHCP 服务器不在同一网络时,主机直接单播给服务器 | 主机仍然广播 DISCOVER;由路由器上的 DHCP 中继代理单播转发给服务器,并填入 giaddr,服务器据此选地址池(4.6) |
| 107 | DHCP 租期快到期了才去续约 | 用到一半(T1 = 0.5 倍租期)就单播向原服务器续约;到 T2 = 0.875 倍仍无应答才改用广播(4.6) |
8.62009—2026 年计网综合题检索表
| 年份 | 题号 | 内容 | 题型 |
|---|---|---|---|
| 2009 | 47 | 子网划分、R1 路由表(特定主机、默认路由)、R2 聚合路由 | ① |
| 2010 | 47 | CSMA/CD 检测冲突时间、停等有效速率 | ④ |
| 2011 | 47 | 以太网帧抓包:服务器 IP、网关 MAC、ARP、HTTP 的 RTT、NAT 改字段 | ③ ⑦ |
| 2012 | 47 | 5 个 IP 分组抓包:三次握手、填充、已收字节数、途经路由器数 | ③ |
| 2013 | 47 | 两个 AS:R2 路由表聚合、最长前缀、BGP | ① |
| 2014 | 42、43 | OSPF 链路状态表 → 图的存储、Dijkstra;R1 路由表、TTL、LSI 增加默认路由 | ② ① |
| 2015 | 47 | DHCP 可分配范围、Discover 地址、ARP 第一帧、网关配错 | ⑦ |
| 2016 | 41 | TCP:第二次握手、第 8 个确认时的窗口、窗口为 0 时序号与速率、释放时间 | ⑥ |
| 2017 | 47 | GBN 双向捎带确认:已收帧、可发帧、重发帧、信道利用率 | ⑤ |
| 2018 | 47 | 广播地址、子网地址、可接主机数;分片 | ① |
| 2019 | 47 | 设备选择、接口配 IP、NAT、子网广播 | ④ |
| 2020 | 47 | 两级 NAT:静态映射表、分组经过各路由器后的地址 | ⑦ |
| 2021 | 47 | DNS 封装、交换表内容、H2 收到的帧 | ⑦ |
| 2022 | 47 | 设备选择、CSMA/CD 最远距离、DHCP 发现报文、802.11 地址 | ④ |
| 2023 | 47 | FTP 两条连接、序号、拥塞窗口、传输时间与速率 | ⑥ |
| 2024 | 47 | RIP/OSPF 选择、TTL、RIP 收敛时间、eBGP/iBGP、BGP 选路 | ② |
| 2025 | 47 | 卫星链路时延与吞吐量、GBN 窗口与序号位数、变长子网 | ⑤ ① |
| 2026 | 47 | TCP:握手确认号、cwnd 与发送窗口、挥手报文、完成时间 | ⑥ |
8.7接下来怎么复习
- 第一遍(学):按第 0~6 篇顺序读,每节的真题卡先自己做再看解析;子网、CRC、编码、窗口、拥塞窗口都有小工具,算完用它验证。
- 第二遍(练):做每篇末尾的“本篇真题闯关”;按第 7 篇逐类把 19 道综合题完整写一遍,对照“答题卡这样写”,再做两道模拟大题、预测小题和“条件一变”。
- 第三遍(考):用 8.8 的年份网格,限时做 2021—2026 年的计网部分(8 道选择 + 1 道综合,约 35 分钟),再做 7.9 的三套整卷和第 9 篇的三套 25 分限时卷(9.4 ~ 9.6,带计时和自动判分);错题回炉。
- 考前一周:只看 8.3 公式、8.4 速查、8.5 易错清单和各篇末尾的自测;再用 9.7 的知识点细目表逐条打勾,没把握的点回到对应小节。
8.8按年份刷真题:2009—2026 年计算机网络全部 163 题
下面每一行是一年,每个按钮是一道题(选择题标题号,红框粗体是综合题)。点开后在弹窗里作答:选择题点选项立即判对错并给出讲解,综合题先自己在纸上写,再展开分步解答并自评。
做题记录只存在你这台电脑的浏览器里(换浏览器或清除网站数据会丢失)。讲解是本讲义自己写的,答案以本机题库为准;2026 年真题的流传版本个别题面有出入(如 2026-37 缺少 R1 的路由表),已在讲解中注明。
计网的题看起来花样多,其实只在反复问三件事:分组要去哪(地址与路由)、每一段怎么交给下一站(封装与 MAC、ARP、NAT)、发多快多久(时延、窗口、拥塞控制)。拿到题先问自己问的是哪一件,再翻对应的那一篇。
满分冲刺:命题规律、冷点专项、概念辨析、计算专练与全真模拟
前六篇解决“会不会”,第 7、8 篇解决“会不会做大题、考前查什么”,这一篇解决“稳不稳”。计网从 21 分到 25 分,差的不是新知识,而是四件事:单位和口径一个不错、Ⅰ/Ⅱ/Ⅲ 组合题每一条都判对、考纲有而真题少的点也练过、计算题按固定步骤一步不漏。本篇先用 18 年真题的统计说清命题规律,再给出冷点专项、概念辨析、计算题满分专练和三套 25 分全真模拟卷,最后附一张可以逐条打勾的全书知识点细目表。
9.0从 21 分到 25 分:满分差在哪里
能考到 21 分的同学,知识点基本都学过。剩下的 4 分,几乎全丢在下面四个地方:
| 丢分的地方 | 典型表现 | 本书对策 |
|---|---|---|
| ① 单位与口径 | K 是 103 还是 210;B 和 bit 混用;“RTT”里算不算握手;“至少多少时间”从哪一刻算起;王道和谢希仁的口径不同(如快恢复 cwnd 加不加 3);“可分配地址”要不要减 2 | 0.2 单位;本篇 9.3 单位口径总表 |
| ② 组合题与反问 | Ⅰ/Ⅱ/Ⅲ/Ⅳ 判对三个照样 0 分;“错误的是”“不可能的是”看成“正确的是”。2025 年一年就有 2 道组合题 | 本篇 9.2 概念辨析专练 |
| ③ 冷点、从未考过的考纲点 | 组播、移动 IP、静态路由、CSMA 三种坚持、令牌传递、RTO 计算、MIME、FTP 主动 / 被动、HTTP 状态码——18 年里一次都没考过,却都写在考纲里 | 本篇 9.1 专项;4.10、4.11 |
| ④ 计算题和综合题的细节分 | 分片忘了把数据取 8 的倍数;子网的“块大小”算错一位;cwnd 到门限那一轮多翻了一倍;综合题只写结果不写依据 | 本篇 9.3 计算专练;第 7 篇评分细则;本篇三套模拟卷的评分表 |
18 年的选择题落在哪里
| 层(本书篇) | 18 年选择题 | 平均每年 | 最近 6 年(2021 ~ 2026) |
|---|---|---|---|
| 体系结构 | 19 | 1.1 | 6 |
| 物理层 | 15 | 0.8 | 5 |
| 数据链路层 | 37 | 2.1 | 10 |
| 网络层 | 32 | 1.8 | 14 |
| 传输层 | 23 | 1.3 | 8 |
| 应用层 | 18 | 1.0 | 5 |
两个规律值得记住:① 计算题比例高——链路层的窗口与利用率、CSMA/CD 与 802.11 的时间、网络层的子网与分片、传输层的序号与 cwnd,几乎每年都有 3 ~ 4 道要动笔算的选择题,这正是 9.3 专门练计算的原因;② 组合题不多但在回升——18 年共 9 道(约 6%),2025 年就有 2 道。
综合题(47 题)的轮换规律
- “报文首部分析(抓包)”只在 2011、2012 年出过,之后 14 年没有作为主考点——它把 IP 首部、TCP 首部、分片、TTL、序号确认号一起考,最能区分“真懂”和“背结论”,回归的可能性不小。本篇模拟卷 A 的 47 题就是这一类。
- “TCP 连接、流量与拥塞”(2016、2023、2026)和“路由算法与路由协议”(2014、2024)近年刚考过;“一次访问的全过程”(2015、2020、2021)已有 5 年没考,本篇模拟卷 B 的 47 题是这一类;“IP 地址规划与路由表”是出现最多的题型,2018 年后没有作为主考点出现,本篇模拟卷 C 的 47 题是这一类。
- 不管哪一类,47 题几乎都会顺带考一两问“子网 / 路由表”或“TCP 序号 / 时间”——这两样是综合题的“通用零件”。
2027 年值得重点准备的点
| 考点 | 真题情况 | 为什么值得准备 | 本书位置 |
|---|---|---|---|
| IP 组播(组播地址、组播 MAC 映射) | 从未考过 | 考纲明文两条;地址映射能出成计算题 | 4.10、9.1 ① |
| 移动 IP | 从未考过 | 考纲明文两条;名词、地址、通信过程都适合出选择题 | 4.11、9.1 ② |
| 静态 / 默认路由、层次路由 | 静态路由从未考;层次路由的思想只在 2026-38(OSPF 区域)出现过 | 考纲“路由算法”的第一条和最后一条 | 4.8、9.1 ③ |
| ALOHA、CSMA 三种坚持、令牌传递、信道划分 | 从未单独考过(信道划分只在 2013-36 作选项) | 介质访问控制三大类只考了 CSMA/CD、CSMA/CA 和 CDMA | 3.5、3.4、9.1 ④ |
| PPP 与广域网 | 从未作为主考点(2012-33、2014-40 只作选项) | 考纲单列“广域网:PPP 协议” | 3.7、9.1 ⑤ |
| RTO 计算与 Karn 算法 | 从未考过 | TCP 可靠传输里唯一没考过的计算 | 5.5、9.1 ⑥ |
| TCP 状态机 | 只有 2021-38 一次 | 状态名就是选择题的字眼,常与 TIME-WAIT 时间一起考 | 5.4、9.1 ⑦ |
| IPv6 | 只有 2023-40 一次 | 考纲明文“主要特点、地址”;零压缩、首部、分片都好出题 | 4.7、9.1 ⑧ |
| SDN、网络层拥塞控制、异构网络互连 | SDN 只有 2022-37 一次;另两条从未 | 2022 年起进入考纲的新条目 | 4.1、9.1 ⑨ |
| MIME、FTP 主动 / 被动、HTTP 状态码与方法 | MIME、主被动、状态码从未考;HTTP 方法只有 2015-40 | 应用层考纲明文 | 6.3 ~ 6.5、9.1 ⑩ |
| CDMA、ICMP、组帧、传输介质 | CDMA 2014 后、ICMP 2012 后未考;组帧、介质各只考过一次 | “冷了很久”的经典点,回来时往往换新问法 | 9.1 ⑪ |
- 一轮学完以后做 9.1、9.2:做错的题点“回到正文”,把那一节的“易错”框重读一遍。
- 二轮用 9.3 计算专练:每类先背“固定步骤”和“单位口径”,再限时做变式,最后对照“常见错法”找自己错在哪一步。
- 考前四周做三套模拟卷,每套限时 35 分钟:8 道选择题 15 分钟、47 题 20 分钟。选择题可以直接点选项(先只记下选择),点“交卷”后统一判分、列出错题,记录保存在本机浏览器。选择题全对、47 题 8 分以上,才算达到满分水平。
- 考前一周用 9.7 细目表逐条自查:能说出结论和理由就勾上;勾不上的回原文。
- 本篇所有题目都是原创数据,答案和每个干扰项的来历都由程序核对过(00_三书精修/verify/09/p9/)。
9.1考纲有、真题少:冷点与新点专项
下面 11 组考点,要么 18 年里一次都没考过,要么只考过一次、或者已经冷了十年以上。每组先说“为什么可能考、会怎么考”,再给 2 ~ 4 道按 408 风格自编的选择题。题目全部是原创数据(没有与正文例题、第 7 篇训练营重复),答案和每个干扰项“错在哪一步”都由程序核对过(verify/09/p9/new_topics.py)。建议限时每题 2 分钟,直接点选项就能判对错并展开解析。
① IP 组播:组播地址、组播 MAC、与单播的份数对比
为什么可能考:考纲明文“组播的概念、IP 组播地址”两条,18 年从未出题。会怎么考:给组播 IP 求以太网组播 MAC(计算题);组播与单播、广播的区别;组播地址的“规矩”(只能作目的、只用 UDP、224.0.0.x 不转发);数一数单播和组播各要传多少份。复习:4.10 IP 组播。
- A. 01-00-5E-CB-0F-4D
- B. 01-00-5E-4B-15-77
- C. 01-00-5E-0B-0F-4D
- D. 01-00-5E-4B-0F-4D
展开解析
D组播 MAC = 01-00-5E + 0 + 组播 IP 地址的低 23 位。
- 第 2 字节 203 = 1100 1011,最高位 1 属于被丢掉的 5 位,剩下 100 1011 = 0x4B。
- 第 3、4 字节照抄,但要换成十六进制:15 = 0x0F,77 = 0x4D。
- 拼起来:01-00-5E-4B-0F-4D。
- A 错第 2 字节 203 = 0xCB 原样写进去了,没有去掉它的最高位——MAC 里只放得下 IP 的低 23 位,第 2 字节最高位不在其中。
- B 错第 3、4 字节把十进制 15、77 直接当十六进制写了;MAC 地址是十六进制,15 = 0x0F、77 = 0x4D。
- C 错0x0B = 203 & 0x3F,相当于把第 2 字节的高 2 位都去掉了;实际只丢 1 位(低 23 位 = 第 2 字节低 7 位 + 后两字节)。
- D 对第 2 字节去掉最高位得 0x4B,后两字节 0x0F、0x4D。
先把第 2 字节写成 8 位二进制,划掉最高位;后两字节换成十六进制照抄。
复习:回到正文。
- A. 组播数据报的源地址可以是 D 类地址
- B. 目的地址为 224.0.0.1 的分组不会被路由器转发到其他网络
- C. 组播通信只能使用 UDP,不能使用 TCP
- D. 一个以太网组播 MAC 地址对应 32 个 IP 组播地址
展开解析
AD 类地址只能作目的地址;源地址必须是发送主机自己的单播地址。
- A 选组播地址标识的是“一组接收者”,只能出现在目的地址字段;源地址要写发送者自己的单播地址,否则接收者无法回复,ICMP 也无从发回。
- B 不选正确:224.0.0.0 ~ 224.0.0.255 是本地网络专用的组播地址(224.0.0.1 = 本网所有主机),路由器不转发。
- C 不选正确:TCP 是一对一的连接,要和每个接收者分别握手、确认、重传,做不到“一份数据交给一组”。
- D 不选正确:D 类地址可变部分 28 位,MAC 里只放低 23 位,丢掉 5 位,25 = 32 个 IP 组播地址共用一个 MAC。
复习:回到正文。
- A. 6,6
- B. 12,6
- C. 18,1
- D. 18,6
展开解析
D单播 6 个接收者各走 3 段:18;组播每段链路只走 1 份,共 6 段:6。
- 单播:每个接收者的分组都要走 S—R1、R1—Rx、Rx—LAN 三段,6 × 3 = 18(局域网上给两个接收者的单播也是发两次)。
- 组播:S—R1 1 份;R1 复制给 R2、R3 各 1 份;R2 向 LAN A、R3 向 LAN B 和 LAN C 各发 1 份,共 1 + 2 + 3 = 6 份。
- A 错6 只是单播在 S—R1 这一段上的份数,没有把后面两段也算上。
- B 错12 = 6 × 2,漏掉了最后一段局域网:路由器把分组发到局域网上也是一次传送。
- C 错组播的 1 份只是源 S 发出的那一份;分组在 R1、R3 处被复制,每一段需要的链路上都要传 1 份。
- D 对单播 18,组播 6。
复习:回到正文。
② 移动 IP:两个地址、两个代理、一条隧道
为什么可能考:考纲“移动 IP 的概念、移动 IP 通信过程”,从未出题。会怎么考:名词对应;某一段分组的源、目的地址(尤其是隧道的外层首部);谁封装、谁拆封;移动结点回复时走不走归属代理。复习:4.11 跟我填一遍。
- A. 202.96.1.8,172.20.5.9
- B. 172.20.5.1,61.130.7.1
- C. 172.20.5.1,172.20.5.9
- D. 202.96.1.8,61.130.7.1
展开解析
B外层首部是 HA 新加的:源 = HA,目的 = 转交地址。
- A 错这是里层(原来的)首部:C 发给 MN 的永久地址。它被原样装在隧道里面,外层首部要另外写。
- B 对外层源地址 = 做封装的 HA,外层目的地址 = 转交地址(FA)。
- C 错外层目的地址若写永久地址 172.20.5.9,分组又会被路由回归属网络,隧道就失去了意义;隧道的终点是转交地址。
- D 错外层首部是 HA 封装时新加的,源地址是 HA 自己,不是最初的发送者 C。
复习:回到正文。
- A. 外地代理收到经隧道送来的数据报后拆封,再交付给移动结点
- B. 通信对方必须知道移动结点的转交地址才能与之通信
- C. 移动结点在外地网络向对方发送分组时,源地址填转交地址
- D. 移动结点回到归属网络后,发给它的分组仍要由归属代理经隧道转发
展开解析
A封装在 HA,拆封在 FA;对方只用永久地址。
- A 对归属代理封装、外地代理拆封后交给移动结点。
- B 错对方始终只用永久地址,根本不知道转交地址;正是这一点让移动对通信对方“透明”。
- C 错移动结点发出的分组源地址仍是永久地址,这样对方的连接(按 IP + 端口识别)才不会断。
- D 错回到归属网络后,移动结点向归属代理注销转交地址,此后按普通方式收发,不再需要隧道。
复习:回到正文。
③ 静态路由、默认路由与层次路由
为什么可能考:考纲“路由算法”的第一条(静态与动态)和最后一条(层次路由),静态路由从未考过,层次路由的思想只在 2026-38 以“OSPF 区域”出现。会怎么考:给几条静态路由配置判断转发方向(本质还是最长前缀匹配);小网络该怎样配置路由;分层后路由表少了多少项。复习:4.8 静态路由、层次路由。
ip route 10.5.0.0 255.255.0.0 172.31.1.2ip route 10.5.64.0 255.255.192.0 172.31.2.2ip route 0.0.0.0 0.0.0.0 172.31.3.2R 收到一个目的地址为 10.5.100.1 的分组,转发的下一跳是( )。
- A. 172.31.1.2
- B. 172.31.2.2
- C. 172.31.3.2
- D. 丢弃该分组,并发送 ICMP 终点不可达
展开解析
B静态路由也按最长前缀匹配:/18 比 /16 长。
- 255.255.192.0 = /18,第 3 字节块大小 64,10.5.64.0/18 覆盖 10.5.64.0 ~ 10.5.127.255,100 在其中。
- 10.5.100.1 同时匹配 /16、/18 和默认路由,取最长的 /18 → 下一跳 172.31.2.2。
- A 错10.5.0.0/16 确实匹配,但还有更长的 /18 也匹配;按最长前缀匹配不能停在第一条。
- B 对/18 匹配且最长。
- C 错默认路由的前缀长度为 0,只有在没有任何其他表项匹配时才用。
- D 错有表项匹配(甚至有默认路由兜底)就不会因“不可达”丢弃;只有既没有匹配项又没有默认路由时才这样做。
复习:回到正文。
- A. 30,34
- B. 150,30
- C. 150,34
- D. 150,35
展开解析
C本区域 30 项 + 其他 4 个区域各 1 项 = 34 项。
- A 错30 是“只看本区域”的项数,不是不分层的项数;不分层要记全部 150 个网络。
- B 错30 只记了本区域的网络,其他 4 个区域没有表项,去往那里的分组就无路可走。
- C 对不分层 5 × 30 = 150;分层 30 + 4 = 34。
- D 错35 = 30 + 5,把自己所在的区域也多记了一条汇总;本区域已经逐个记录,不需要再汇总。
复习:回到正文。
- A. 在 R 上运行 OSPF,与 ISP 交换全部路由
- B. 为 3 个内部子网各配一条静态路由,再配一条指向 ISP 的默认路由
- C. 运行 RIP,并把到 ISP 的距离设为 16
- D. 只配一条指向 ISP 的默认路由
展开解析
D直连网络由接口配置自动生成路由,出口只有一个,一条默认路由就够了。
- A 错企业只有一个出口,没有选路的余地;与 ISP 交换全部因特网路由既浪费又不安全,属于“杀鸡用牛刀”。
- B 错3 个子网直接连在 R 的接口上,配置接口地址后 R 自动生成直连路由,不需要再为它们配静态路由。
- C 错RIP 中距离 16 表示“不可达”,这样设置等于宣布到 ISP 不通。
- D 对直连网络自动有路由;其他所有目的地都从唯一的出口走,配一条默认路由即可。
复习:回到正文。
④ ALOHA、CSMA 三种坚持、令牌传递与信道划分
为什么可能考:考纲介质访问控制的三大类(信道划分、随机访问、轮询访问)里,真题只考过 CSMA/CD、CSMA/CA 和 CDMA;ALOHA、三种坚持、令牌传递、FDM / TDM 从未单独出题。会怎么考:根据行为描述判断是哪种坚持;ALOHA 的吞吐量;令牌传递的特点;时分复用线路的速率。复习:3.5 三种坚持、ALOHA、令牌、3.4 复用。
- A. 非坚持 CSMA
- B. 1-坚持 CSMA
- C. p-坚持 CSMA
- D. CSMA/CA
展开解析
A“忙了就走开、过一会儿再来看”是非坚持。
- A 对忙则随机退避后再监听,闲则立即发送,正是非坚持 CSMA。
- B 错1-坚持在信道忙时一直监听,一旦空闲立刻(以概率 1)发送,不会“走开”。
- C 错p-坚持用于时隙信道:空闲时以概率 p 发送、以 1 − p 推迟到下一时隙,题中“空闲时立即发送”不符合。
- D 错CSMA/CA 在信道由忙转闲时要先等 DIFS 再随机退避,不会“空闲就立即发送”。
复习:回到正文。
- A. 18
- B. 37
- C. 50
- D. 100
展开解析
A纯 ALOHA 最大吞吐率 1/(2e) ≈ 18.4%:100 帧/秒 × 0.184 ≈ 18 帧/秒。
- 信道满载时每秒能发 100 kb/s ÷ 1000 bit = 100 帧。
- 纯 ALOHA 的易损期为 2 个帧时,最大吞吐率 S = 1/(2e) ≈ 0.184,成功约 18.4 帧/秒。
- A 对100 × 18.4% ≈ 18。
- B 错37 ≈ 100 × 36.8%,这是时隙 ALOHA 的最大吞吐率;纯 ALOHA 易损期是时隙 ALOHA 的 2 倍,吞吐率只有一半。
- C 错50 是把最大吞吐率当成 50%;ALOHA 不监听就发送,冲突很多,理论最大值只有 18.4%。
- D 错100 是信道满载时的帧数,没有考虑冲突;ALOHA 中大部分时间被冲突浪费掉了。
复习:回到正文。
- A. 令牌环网中不会发生冲突
- B. 轮询访问由主结点逐个询问从结点,不存在单点故障问题
- C. 网络负载很轻时,令牌传递的效率比 CSMA 高
- D. 令牌在环上传递时会携带数据,所以令牌本身就是数据帧
展开解析
A只有拿到令牌的站才能发送,任何时刻只有一个站在发,所以没有冲突。
- A 对令牌只有一个,持有者才发送,从机制上避免了冲突。
- B 错轮询协议依赖主结点,主结点一旦故障,整个网络就停了——这正是它的单点故障问题。
- C 错负载很轻时,想发送的站也要等令牌转到自己才能发,平白多出等待时间;轻负载下 CSMA 往往“听到空闲就发”,效率更高。令牌传递的优势在重负载。
- D 错令牌是一个不携带数据的特殊短帧,只表示“拿到它就可以发送”;站点拿到令牌后另外发送数据帧。
复习:回到正文。
- A. 9.6 kb/s
- B. 38.4 kb/s
- C. 39.6 kb/s
- D. 48 kb/s
展开解析
C每帧 4 × 8 + 1 = 33 bit;每路每秒要送 9600 bit,即每秒 1200 帧;33 × 1200 = 39.6 kb/s。
- 每路每帧送 8 bit,要达到 9.6 kb/s,每秒需要 9600 ÷ 8 = 1200 帧。
- 每帧长 4 × 8 + 1 = 33 bit。
- 线路速率 = 33 × 1200 = 39 600 b/s = 39.6 kb/s。
- A 错9.6 kb/s 只是一路的速率;4 路合到一条线上,线路必须同时承载 4 路的数据。
- B 错38.4 kb/s = 4 × 9.6,漏了每帧 1 bit 的同步位(每秒 1200 帧,共 1.2 kb/s)。
- C 对33 bit/帧 × 1200 帧/秒。
- D 错48 kb/s = (4 × 1 + 1) × 9600,相当于每帧每路只放 1 bit,于是每秒要 9600 帧、同步位开销被放大了 8 倍;题目说的是每路 8 bit 时隙。
复习:回到正文。
⑤ 广域网与 PPP 协议
为什么可能考:考纲单列“广域网:PPP 协议”,真题只在 2012-33、2014-40 把它当作选项。会怎么考:字节填充(7E、7D、控制字符);PPP 提供什么、不提供什么(不编号、不确认、不纠错);LCP 与 NCP 的分工。复习:3.7 PPP。
- A. 4A 7D 7D 7D 7E 3C 7D 7E
- B. 4A 7D 5D 7D 5E 3C 7D 5E
- C. 4A 7D 5D 7E 3C 7E
- D. 4A 7D 7D 5E 3C 7D 5E
展开解析
B7D → 7D 5D,7E → 7D 5E;4A、3C 不小于 0x20,原样发送。
- A 错只在 7E、7D 前面插了一个 7D、原字节不变,这是一般“字节填充”的写法;PPP 规定转义后的字节还要与 0x20 异或:7E → 5E,7D → 5D。
- B 对7D 变成 7D 5D,两个 7E 各变成 7D 5E。
- C 错只转义了 7D,两个 7E 没有处理;信息字段里的 7E 会被接收方当成帧定界符,帧就被截断了。
- D 错只转义了 7E,忘了数据里的 7D 本身也要转义;接收方会把原来那个 7D 当作转义符,把紧跟的 7D 与 0x20 异或还原成 5D,数据就错了。
复习:回到正文。
- A. PPP 帧带有序号和确认,提供可靠传输
- B. PPP 用 LCP 建立和测试数据链路连接,用 NCP 为网络层协议配置参数
- C. PPP 只能承载 IP 这一种网络层协议
- D. PPP 用 CSMA/CD 解决多个站点争用链路的问题
展开解析
BLCP 管链路,NCP 管网络层;PPP 不编号、不确认,只做差错检测。
- A 错PPP 不使用序号和确认,检出差错只丢弃;可靠传输交给上层(如 TCP)。
- B 对LCP 负责建立、配置、测试数据链路连接,NCP 为 IP 等网络层协议协商参数(如分配 IP 地址)。
- C 错PPP 支持多种网络层协议,帧的“协议”字段区分(如 0x0021 是 IP),每种网络层协议有对应的 NCP。
- D 错PPP 用于点对点链路,两端各一个结点,不存在“多个站争用”,不需要介质访问控制。
复习:回到正文。
⑥ 超时重传时间 RTO 与 Karn 算法
为什么可能考:TCP 可靠传输里唯一没有考过的计算。会怎么考:给样本算新的 RTTS;第一个样本时的 RTO;重传后收到的确认该不该当样本(Karn)。口径:教材先算新的 RTTS,再用新的 RTTS 算 RTTD;RFC 6298 次序相反——下面的题都设计成两种次序结果相同,或者只用到 RTTS。复习:5.5 RTO。
- A. 32 ms
- B. 38 ms
- C. 44 ms
- D. 46 ms
展开解析
A新 RTTS = (1 − α) × 旧 RTTS + α × 新样本 = 7/8 × 30 + 1/8 × 46 = 32 ms。
- 7/8 × 30 = 26.25;1/8 × 46 = 5.75。
- 26.25 + 5.75 = 32 ms。新样本只占 1/8 的权重,所以 RTTS 只向 46 挪了一小步。
- A 对7/8 × 30 + 1/8 × 46 = 32。
- B 错38 是两者的算术平均,相当于 α = 1/2;教材推荐 α = 1/8。
- C 错44 = 1/8 × 30 + 7/8 × 46,把两个权重放反了:新样本的权重是 α = 1/8,旧值是 7/8。
- D 错直接用新样本代替了 RTTS;加权平均的目的就是不让一次偶然的样本把估计值拉走。
复习:回到正文。
- A. 60 ms
- B. 80 ms
- C. 120 ms
- D. 200 ms
展开解析
CRTTS = 40,RTTD = 20,RTO = 40 + 4 × 20 = 120 ms,即样本的 3 倍。
- A 错60 = 40 + 20,RTTD 忘了乘 4。
- B 错80 = 2 × 40,这是把 RTO 粗略当成“两倍 RTT”;教材公式要加上 4 倍的偏差。
- C 对40 + 4 × 20 = 120。
- D 错200 = 40 + 4 × 40,把 RTTD 的初值取成了样本本身;规定取样本的一半。
复习:回到正文。
- A. 把 30 ms 作为新的往返时间样本
- B. 把从第一次发送 X 到收到确认的时间作为样本
- C. 不用这次的时间作样本;X 每重传一次,RTO 加倍
- D. 不用这次的时间作样本,RTO 保持不变
展开解析
C重传过的报文段不采样(分不清确认对应哪一次发送),并且每重传一次 RTO 加倍。
- A 错这个确认可能是对第一次发送的迟到确认,30 ms 可能偏小;Karn 规定重传过的报文段一律不采样。
- B 错如果确认其实是对重传的那一份,从第一次发送算起的时间就把超时等待也算进去了,样本偏大;同样不能用。
- C 对不采样,并在每次重传时把 RTO 加倍,直到拿到不含重传的样本后再按公式更新。
- D 错只“不采样”而 RTO 不变,网络时延突然变大时 RTO 永远偏小、反复超时,所以修正的 Karn 算法还要把 RTO 加倍。
复习:回到正文。
⑦ TCP 状态机与 TIME-WAIT
为什么可能考:状态名只在 2021-38 考过一次,但 2022-39、2024-38 的“释放连接要多久”都离不开它。会怎么考:某一时刻双方各处于什么状态;TIME-WAIT 期间又收到 FIN 怎么办;哪一方进入 TIME-WAIT。复习:5.4 状态机、TIME-WAIT。
- A. FIN-WAIT-2,CLOSE-WAIT
- B. FIN-WAIT-1,CLOSE-WAIT
- C. TIME-WAIT,LAST-ACK
- D. CLOSING,CLOSE-WAIT
展开解析
AA 的 FIN 已被确认 → FIN-WAIT-2;B 收到 FIN、还没发 FIN → CLOSE-WAIT(半关闭)。
- A 对半关闭:A → B 方向已关闭,B → A 方向还能传数据。
- B 错FIN-WAIT-1 是 A 发出 FIN、还没收到确认时的状态;收到 B 的 ACK 后 A 就进入 FIN-WAIT-2 了。
- C 错B 发出自己的 FIN 后才进入 LAST-ACK,A 收到这个 FIN 并确认后才进入 TIME-WAIT;现在 B 还没发 FIN。
- D 错CLOSING 是双方几乎同时发出 FIN、各自先收到对方 FIN 时的状态;本题 A 先收到的是 ACK。
复习:回到正文。
- A. 30 s
- B. 40 s
- C. 60 s
- D. 80 s
展开解析
CA 重发 ACK 并重新开始 2MSL 计时:从此刻起再等 60 s。
- A 错30 s 是 1 个 MSL;重新计时也要等满 2MSL。
- B 错40 s = 60 − 20,是按原来的计时继续等;收到重传的 FIN 说明对方没收到最后的 ACK,A 要重发 ACK 并重新计时。
- C 对2MSL = 60 s,从收到重传 FIN 的时刻重新算起。
- D 错80 s = 20 + 60,是从 A 进入 TIME-WAIT 的时刻算起的;题目问的是从收到 FIN 的时刻起还要等多久,只算重新开始的那 60 s。
复习:回到正文。
⑧ IPv6:地址写法、首部与分片
为什么可能考:考纲“IPv6 的主要特点、IPv6 地址”,只在 2023-40 考过一次组合题。会怎么考:零压缩写法是否合法、最简写法;首部 40 B、没有检验和、路由器不分片;Hop Limit 对应 TTL。复习:4.7 地址写法、只在源主机分片。
- A. 2001:DB8::85A3::7334
- B. 2001:0DB8:0000:0000:8A2E:0370:7334
- C. 2001:DB8::8A2E:370G:7334
- D. 2001:DB8:0:0:8A2E::7334
展开解析
D写出来的 6 组 + :: 代表的 2 组 0 = 8 组,合法。
- A 错出现了两次 ::,接收方无法确定每个 :: 各代表几组 0,所以一个地址里 :: 只能用一次。
- B 错只有 7 组且没有 ::,少了一组;IPv6 地址必须是 8 组(或用 :: 补足)。
- C 错“370G”中的 G 不是十六进制数字。
- D 对2001、DB8、0、0、8A2E、7334 共 6 组,:: 代表 2 组 0,展开为 2001:0DB8:0000:0000:8A2E:0000:0000:7334。
复习:回到正文。
- A. 2408:8::A10:0:C5
- B. 2408:8000::A10::C5
- C. 2408:8000:0:0:0:A10:0:C5
- D. 2408:8000::A10:0:C5
展开解析
D先去每组的前导 0,再把最长的一串连续 0 组(第 3 ~ 5 组)换成 ::。
- 去前导 0:2408:8000:0:0:0:A10:0:C5。
- 连续的 0 组有两段:第 3 ~ 5 组(3 组)和第 7 组(1 组),压缩更长的那段:2408:8000::A10:0:C5。
- A 错8000 写成了 8:只能省略每组前面的 0,组内后面的 0 是数值的一部分,去掉就变成了另一个地址(0008)。
- B 错用了两次 :::接收方无法判断两个 :: 各代表几组 0(写出来的只有 4 组,缺的 4 组 0 可以分成 3 + 1、2 + 2 或 1 + 3),所以不合法。
- C 错合法,但只去了前导 0、没有压缩连续的 0 组,不是最简写法。
- D 对去前导 0 后把最长的 3 组 0 压缩成 ::。
复习:回到正文。
- A. 把分组分成两片再转发
- B. 丢弃该分组,并向源主机发送 ICMPv6“分组太大”报文
- C. 截去超出 MTU 的部分后转发
- D. 把分组封装进一个 IPv4 隧道再转发
展开解析
BIPv6 只允许源主机分片;途中路由器放不下就丢弃,并告诉源主机路径 MTU。
- A 错IPv6 的路由器不做分片,分片只在源主机进行(用分片扩展首部),这样可以减轻路由器的负担。
- B 对丢弃并发 ICMPv6 分组太大报文,源主机据此调小分组(路径 MTU 发现)。
- C 错网络层从不截断分组,截掉一部分数据,接收方得到的就是错误的数据。
- D 错隧道是 IPv4 / IPv6 过渡技术,用来穿越不支持 IPv6 的网络,与 MTU 不够无关,也解决不了分组太大的问题。
复习:回到正文。
⑨ SDN、网络层拥塞控制与异构网络互连
为什么可能考:这三条是 2022 年才进入考纲的“网络层的功能”,SDN 只在 2022-37 考过接口方向,另两条从未出题。会怎么考:流表按优先级匹配(不是最长前缀);控制器与南向 / 北向接口;开环与闭环拥塞控制的区分。复习:4.1 SDN、拥塞控制、异构网络互连。
| 优先级 | 匹配字段 | 动作 |
|---|---|---|
| 10 | 目的 IP 属于 10.1.0.0/16 | 从端口 2 转发 |
| 30 | 源 IP = 10.3.3.3,TCP 目的端口 = 22 | 丢弃 |
| 20 | 目的 IP 属于 10.1.2.0/24 | 从端口 3 转发 |
| 0 | 任意分组 | 交给控制器 |
- A. 从端口 2 转发
- B. 从端口 3 转发
- C. 丢弃
- D. 交给控制器
展开解析
C四项中有三项匹配,优先级最高的是 30 → 丢弃。
- 逐项检查:优先级 10(10.1.0.0/16)匹配;30(源 10.3.3.3、端口 22)匹配;20(10.1.2.0/24)匹配;0 总是匹配。
- 取优先级最高的 30 → 丢弃。
- A 错优先级 10 这一项确实匹配,但它的优先级最低(除兜底项外),还有 20、30 两项也匹配。
- B 错这是只看目的 IP、按最长前缀匹配得到的结果;OpenFlow 的流表可以同时匹配多层字段,冲突时看优先级而不是前缀长度。
- C 对优先级 30 的项匹配了源 IP 和端口,动作是丢弃(相当于防火墙规则)。
- D 错交给控制器是优先级 0 的兜底项,只有其他项都不匹配时才执行。
对比:传统路由器的转发表只看目的 IP、按最长前缀匹配;SDN 的“广义转发”可以看 MAC、IP、端口等多层字段,动作也不只是“转发”,还可以丢弃、修改字段、交给控制器。
复习:回到正文。
- A. 设计网络时为路由器配置足够大的缓存
- B. 建立虚电路前先检查沿途资源,不够就拒绝建立(准入控制)
- C. 路由器检测到拥塞后向源点发送抑制分组,让它降低发送速率
- D. 规定路由器在缓存满时丢弃哪些分组
展开解析
C闭环 = 监测 → 反馈 → 调整;只有 C 依赖运行时的拥塞反馈。
- A 错在设计时事先考虑、运行时不看网络状态,属于开环控制。
- B 错准入控制是在通信开始前按预先的规则决定接受与否,没有用到运行中的拥塞反馈,属于开环。
- C 对检测到拥塞(监测)→ 发抑制分组(反馈)→ 源点降速(调整),是典型的闭环控制。
- D 错丢弃策略是事先制定的规则,属于开环控制的设计内容。
复习:回到正文。
⑩ FTP 主动 / 被动、HTTP 状态码与方法、MIME
为什么可能考:应用层考纲明文“控制连接与数据连接”“HTTP 协议”“电子邮件格式与 MIME”,其中主被动模式、状态码、MIME 从未考过,HTTP 方法只在 2015-40 出现。会怎么考:被动模式谁连谁;条件 GET 返回什么;base64 编码后变多长;HEAD 和 GET 的区别。复习:6.3 FTP、6.5 HTTP 报文、条件 GET、6.4 MIME。
- A. S 用 20 号端口主动连接 C 指定的端口
- B. C 主动连接 S 在 PASV 应答中给出的端口
- C. C 用 21 号端口主动连接 S 的 20 号端口
- D. 不建立数据连接,文件在控制连接上传输
展开解析
B被动模式:服务器“被动”打开一个端口等着,客户主动去连。
- A 错这是主动模式(PORT):服务器用 20 号端口去连客户。客户在防火墙后面时外面连不进来,所以才改用被动模式。
- B 对S 在 PASV 应答里告诉 C 一个临时端口,C 主动向它发起 TCP 连接。
- C 错21 是服务器的控制连接端口,不是客户的端口;被动模式下数据连接也不用 S 的 20 号端口,而是 S 临时打开的端口。
- D 错FTP 的特点就是控制和数据分开(带外传送),文件一定在数据连接上传输。
复习:回到正文。
- A. 状态码 304,不携带网页内容
- B. 状态码 200,并在实体主体中携带整个网页
- C. 状态码 404,不携带网页内容
- D. 状态码 301,并携带新网页的地址
展开解析
A没改过就回 304 Not Modified,浏览器直接用缓存的副本。
- A 对304 Not Modified,只有状态行和首部,没有实体主体。
- B 错200 OK 并带上整个网页,是网页被修改过(或普通 GET)时的响应;没改过还重传一遍,条件 GET 就失去了意义。
- C 错404 Not Found 表示请求的对象不存在;本题的网页存在,只是没有修改。
- D 错301 Moved Permanently 表示网页永久搬到了 Location 首部给出的新地址,与“是否修改过”无关。
复习:回到正文。
- A. 1125 B
- B. 1500 B
- C. 2000 B
- D. 3000 B
展开解析
Cbase64 把每 3 个字节变成 4 个字符:1500 ÷ 3 × 4 = 2000。
- 3 字节 = 24 位,切成 4 组 6 位,每组映射成一个可打印字符(1 字节)。
- 1500 B 正好 500 组,编码后 500 × 4 = 2000 B,长度变为原来的 4/3。
- A 错1125 = 1500 × 3/4,把比例乘反了:编码后是“3 变 4”,变长而不是变短。
- B 错MIME 编码后长度不变是对“7 位 ASCII 文本”说的;二进制数据用 base64 编码一定会变长。
- C 对1500 × 4/3 = 2000。
- D 错3000 = 1500 × 2,相当于每个字节写成两个十六进制字符;base64 每 6 位一个字符,效率比十六进制高。
复习:回到正文。
- A. GET
- B. POST
- C. PUT
- D. HEAD
展开解析
DHEAD 只要响应的首部(Content-Length、Last-Modified 等),不要实体主体。
- A 错GET 会把整个网页作为实体主体传回来,白白多传数据。
- B 错POST 用于向服务器提交数据(如表单),不是用来查询网页信息的。
- C 错PUT 是把数据上传到服务器、存为指定的对象,方向正好相反。
- D 对HEAD 的响应与 GET 相同,但只有首部、没有实体主体。
复习:回到正文。
⑪ 冷了很久的点:CDMA、ICMP、组帧、传输介质
为什么可能考:CDMA 在 2011、2013、2014 年连考三年后再没出现;ICMP 2012 年后没考;组帧(2013-37)、传输介质(2019-34)各只考过一次。这类点回来时,往往换一种问法。复习:3.4 CDMA、4.6 ICMP、3.1 组帧、2.4 介质。
- A. 100
- B. 011
- C. 10,第 3 个比特时间未发送
- D. 第 1 个比特时间未发送,后两个比特为 10
展开解析
B把每 8 个码片与 Y 求规格化内积:−1、1、1 → 0、1、1。
- 码片序列 8 位,所以每 8 个数一段,分成 3 段:(0, -2, 2, 0, 0, 2, -2, 0);(1, 3, -1, 1, -1, -3, 1, -1);(0, 0, -2, -2, 0, 0, 2, 2)。
- 每段与 Y 求内积再除以 8:-1、1、1。
- 1 → 发送 1,−1 → 发送 0,0 → 未发送:Y 发送了 011。
- A 错100 是把内积的符号读反了(−1 当 1、1 当 0),正好是 Y 真实数据 011 的反码。
- B 对内积依次为 −1、1、1,对应 0、1、1。
- C 错“10,第 3 个比特未发送”是用 X 的码片解出来的结果(内积 1、−1、0),站点认错了。
- D 错这是用 Z 的码片序列解出来的结果(内积 0、1、−1),站点认错了;求谁发的数据就用谁的码片。
复习:回到正文。
- A. TTL 减为 0 的普通 IP 数据报
- B. DF = 1 且长度超过下一段链路 MTU 的数据报
- C. 目的网络不可达的普通 IP 数据报
- D. 某个数据报的第 3 个分片(片偏移不为 0),且找不到去往目的网络的路由
展开解析
D对分片数据报,只对第一个分片发差错报文;后续分片出错不再发。
- A 不选TTL 为 0 要丢弃并发“时间超过”报文——traceroute 正是靠这一点工作的。
- B 不选DF = 1 又放不下,要发“终点不可达(需要分片但 DF 置 1)”报文,这是路径 MTU 发现的基础。
- C 不选目的网络不可达要发“终点不可达”报文。
- D 选片偏移不为 0,说明它不是第一个分片;为避免一个数据报引发一串差错报文,只对第一个分片发送。
四种不发:对差错报文本身、对非首片、对组播地址、对特殊地址(127.0.0.0、0.0.0.0)。
复习:回到正文。
- A. 01111110101111101
- B. 011111011011111001
- C. 01111101101111101
- D. 01111111011111010
展开解析
B每连续 5 个 1 就插入一个 0,插入后重新计数。
- 从左数:0 11111 → 插 0 → 1 0 1111 → 再遇到第 5 个 1 插 0 → 1 0 1。
- 原串 0111 1111 0111 1101 中有两处出现连续 5 个 1,各插入 1 个 0,得到 011111011011111001(18 位)。
- A 错01111110101111101 是在连续 6 个 1 之后才插 0,这样数据里就会出现 01111110 = 帧定界符 7E,正是零比特填充要避免的。
- B 对两处各插一个 0,共 18 位。
- C 错01111101101111101 只在第一处插了 0;后一个字节 0111 1101 里也有连续 5 个 1,同样要在其后插 0。
- D 错只在末尾加了一个 0,位置不对:0 要插在每一串连续 5 个 1 的紧后面,接收方才知道删掉哪一位。
复习:回到正文。
- A. 单模光纤的纤芯比多模光纤细,适合远距离传输
- B. 屏蔽双绞线比非屏蔽双绞线的抗电磁干扰能力强
- C. 光纤传输光信号,不受电磁干扰
- D. 多模光纤中光只沿一条路径传播,所以没有模式色散
展开解析
D“只沿一条路径传播”说的是单模光纤;多模光纤中光以多个角度反射,脉冲会展宽。
- A 不选正确:单模纤芯只有几微米,光几乎沿轴线直线传播,色散小、距离远。
- B 不选正确:屏蔽层把外界电磁干扰挡在外面(也减少向外辐射)。
- C 不选正确:光纤传的是光,铜线上的电磁干扰对它不起作用。
- D 选多模光纤中有多条不同入射角的光线(多个“模”),走的路程不同,到达时间有先后,脉冲展宽(模式色散),所以只适合近距离。
复习:回到正文。
9.2概念辨析专练:Ⅰ / Ⅱ / Ⅲ / Ⅳ 组合题
组合题是选择题里最“不讲情面”的一类:四个说法判对三个,照样 0 分。下面 16 道按层排列(每层 2 ~ 4 道),说法都取自各节“易错”框里最容易混淆的结论。做法建议:
- 先判最有把握的一条,用它一次划掉两个选项;
- 再判选项之间有差别的那几条——所有选项都包含(或都不包含)的说法可以不判;
- 每条都要说得出理由:对完答案后逐条看解析,说不出理由的那条就是你的薄弱点,点“回到正文”。
每题的四个说法逐条给出 ✓ / ✗ 和理由;每个错误选项写明它多选了哪条错误说法、或少选了哪条正确说法。生成器断言“正确组合 = 真说法的集合”(verify/09/p9/gen_judge.py)。
(1)体系结构
Ⅰ. 面向连接的服务一定是可靠的服务
Ⅱ. 协议是控制对等实体之间通信的规则,是“水平的”;服务是下层通过层间接口向上层提供的,是“垂直的”
Ⅲ. 第 n 层的实体通过第 n − 1 层的服务访问点(SAP)使用第 n − 1 层提供的服务
Ⅳ. 下面的协议对上面的实体是透明的:上层只能看见下层提供的服务,看不见下层的协议
- A. Ⅰ、Ⅱ、Ⅲ、Ⅳ
- B. 仅 Ⅱ、Ⅲ、Ⅳ
- C. 仅 Ⅲ、Ⅳ
- D. 仅 Ⅰ、Ⅲ、Ⅳ
展开解析
B正确的说法是 Ⅱ、Ⅲ、Ⅳ。
- Ⅰ ✗连接与可靠是两回事:虚电路面向连接却不一定可靠;802.11 无连接却对每帧确认(1.4 各层协议一览)。
- Ⅱ ✓这是协议与服务最核心的区别(1.4 节)。
- Ⅲ ✓SAP 是相邻两层交换信息的“窗口”,上层通过下层的 SAP 使用下层的服务。
- Ⅳ ✓教材原话:使用本层服务的实体只能看见服务,无法看见下面的协议。
再逐个看选项:
- A 错多选了 Ⅰ——这条是错的(面向连接不等于可靠)。
- B 对正确的说法恰好是 Ⅱ、Ⅲ、Ⅳ。
- C 错没选 Ⅱ,而 Ⅱ 是对的(协议水平、服务垂直)。
- D 错多选了 Ⅰ——这条是错的(面向连接不等于可靠);没选 Ⅱ,而 Ⅱ 是对的(协议水平、服务垂直)。
复习:回到正文。
Ⅰ. 提高链路带宽可以减小发送时延,但不能减小传播时延
Ⅱ. 往返时间 RTT 包括发送方发送这个数据帧所用的发送时延
Ⅲ. 网络利用率越高越好,利用率接近 100% 时时延最小
Ⅳ. 时延带宽积表示:发送端发出的第一个比特到达接收端时,链路上已经有多少比特
- A. 仅 Ⅰ、Ⅱ、Ⅳ
- B. 仅 Ⅳ
- C. 仅 Ⅰ、Ⅳ
- D. 仅 Ⅱ、Ⅳ
展开解析
C正确的说法是 Ⅰ、Ⅳ。
- Ⅰ ✓发送时延 = 数据长度 ÷ 发送速率;传播时延 = 信道长度 ÷ 电磁波传播速率,与带宽无关。
- Ⅱ ✗RTT 是从发送完数据到收到确认所经历的往返传播时间(含对方处理),不包括数据本身的发送时延(1.3 节 RTT 的定义)。
- Ⅲ ✗D = D0 / (1 − U):利用率接近 1 时时延趋于无穷大,网络已经拥塞。
- Ⅳ ✓时延带宽积 = 传播时延 × 带宽,也叫“以比特为单位的链路长度”。
再逐个看选项:
- A 错多选了 Ⅱ——这条是错的(RTT 不含数据的发送时延)。
- B 错没选 Ⅰ,而 Ⅰ 是对的(带宽只影响发送时延)。
- C 对正确的说法恰好是 Ⅰ、Ⅳ。
- D 错多选了 Ⅱ——这条是错的(RTT 不含数据的发送时延);没选 Ⅰ,而 Ⅰ 是对的(带宽只影响发送时延)。
复习:回到正文。
(2)物理层
Ⅰ. 奈氏准则:理想低通信道(带宽 W)的最高码元传输速率是 2W 波特
Ⅱ. 在有噪声的信道上,增加每个码元携带的比特数可以提高数据率,但不能超过香农公式给出的极限
Ⅲ. 1 波特表示每秒传送 1 个码元,与每个码元携带几个比特无关
Ⅳ. 香农公式中的 S/N 可以直接代入以分贝为单位的信噪比
- A. Ⅰ、Ⅱ、Ⅲ、Ⅳ
- B. 仅 Ⅱ、Ⅲ
- C. 仅 Ⅱ、Ⅲ、Ⅳ
- D. 仅 Ⅰ、Ⅱ、Ⅲ
展开解析
D正确的说法是 Ⅰ、Ⅱ、Ⅲ。
- Ⅰ ✓这是奈氏准则的原话,限制的是码元速率而不是比特率。
- Ⅱ ✓香农公式给出的是任何编码方法都无法突破的极限传输速率。
- Ⅲ ✓波特是码元速率的单位;比特率 = 波特率 × log2V。
- Ⅳ ✗公式里的 S/N 是功率之比,要先由 dB 换算:S/N = 10dB/10,30 dB 对应 1000。
再逐个看选项:
- A 错多选了 Ⅳ——这条是错的(S/N 要先由 dB 换算)。
- B 错没选 Ⅰ,而 Ⅰ 是对的(奈氏准则限制码元速率 2W)。
- C 错多选了 Ⅳ——这条是错的(S/N 要先由 dB 换算);没选 Ⅰ,而 Ⅰ 是对的(奈氏准则限制码元速率 2W)。
- D 对正确的说法恰好是 Ⅰ、Ⅱ、Ⅲ。
复习:回到正文。
Ⅰ. 集线器可以隔离冲突域
Ⅱ. 曼彻斯特编码在每个比特的中间都有电平跳变,接收方可以从信号中提取时钟
Ⅲ. 采用曼彻斯特编码的 10 Mb/s 以太网,码元传输速率为 20 MBaud
Ⅳ. 中继器可以连接两个速率不同的以太网网段
- A. 仅 Ⅱ、Ⅲ
- B. 仅 Ⅰ、Ⅱ、Ⅲ
- C. 仅 Ⅲ
- D. 仅 Ⅰ、Ⅲ
展开解析
A正确的说法是 Ⅱ、Ⅲ。
- Ⅰ ✗集线器是物理层设备,只是把比特转发到所有端口,所连的站都在同一个冲突域里。
- Ⅱ ✓“中间跳变”既表示数据又作为时钟,所以是自同步的编码。
- Ⅲ ✓每比特两个码元(前半、后半),码元速率是数据率的 2 倍。
- Ⅳ ✗中继器只对信号整形放大,不存储转发帧,两端网段必须速率相同、协议相同。
再逐个看选项:
- A 对正确的说法恰好是 Ⅱ、Ⅲ。
- B 错多选了 Ⅰ——这条是错的(集线器不隔离冲突域)。
- C 错没选 Ⅱ,而 Ⅱ 是对的(曼彻斯特中间跳变可提取时钟)。
- D 错多选了 Ⅰ——这条是错的(集线器不隔离冲突域);没选 Ⅱ,而 Ⅱ 是对的(曼彻斯特中间跳变可提取时钟)。
复习:回到正文。
(3)数据链路层
Ⅰ. 后退 N 帧协议(GBN)的接收窗口大小为 1
Ⅱ. GBN 协议中,接收方收到序号不对的帧时会先缓存起来,等前面的帧到齐后再一起交付
Ⅲ. 采用 n 位序号的选择重传协议,若发送窗口与接收窗口一样大,则窗口最大为 2n − 1
Ⅳ. 停止—等待协议的帧序号只需要 1 位
- A. Ⅰ、Ⅱ、Ⅲ、Ⅳ
- B. 仅 Ⅰ、Ⅲ、Ⅳ
- C. 仅 Ⅲ、Ⅳ
- D. 仅 Ⅱ、Ⅲ、Ⅳ
展开解析
B正确的说法是 Ⅰ、Ⅲ、Ⅳ。
- Ⅰ ✓GBN 接收方只按序接收,等的永远是“下一个”序号。
- Ⅱ ✗这是 SR 的做法;GBN 接收方直接丢弃失序的帧,并重发对最后一个按序收到的帧的确认。
- Ⅲ ✓由 WT + WR ≤ 2n 且两者相等得到。
- Ⅳ ✓序号只要区分“新帧”和“重传的旧帧”,0、1 交替即可。
再逐个看选项:
- A 错多选了 Ⅱ——这条是错的(GBN 丢弃失序帧)。
- B 对正确的说法恰好是 Ⅰ、Ⅲ、Ⅳ。
- C 错没选 Ⅰ,而 Ⅰ 是对的(GBN 接收窗口为 1)。
- D 错多选了 Ⅱ——这条是错的(GBN 丢弃失序帧);没选 Ⅰ,而 Ⅰ 是对的(GBN 接收窗口为 1)。
复习:回到正文。
Ⅰ. 以太网规定最短帧长 64 B,是为了保证帧还没发完就能检测到冲突
Ⅱ. CSMA/CD 只用于半双工的共享式以太网,全双工以太网不需要它
Ⅲ. 802.11 无线局域网的站点边发送边检测冲突,检测到冲突就立即停止发送
Ⅳ. CSMA/CA 中,接收方正确收到数据帧后,要经过 SIFS 发回确认帧
- A. Ⅰ、Ⅱ、Ⅲ、Ⅳ
- B. 仅 Ⅱ、Ⅳ
- C. 仅 Ⅰ、Ⅱ、Ⅳ
- D. 仅 Ⅱ、Ⅲ、Ⅳ
展开解析
C正确的说法是 Ⅰ、Ⅱ、Ⅳ。
- Ⅰ ✓帧的发送时间至少要等于争用期 2τ(10 Mb/s 时 51.2 μs 对应 64 B)。
- Ⅱ ✓全双工时收发各用一对线、没有争用,自然不会冲突。
- Ⅲ ✗无线信号强弱悬殊,站点发送时几乎听不到别的站,又有隐蔽站,所以 802.11 不做冲突检测,改用冲突避免(CSMA/CA)。
- Ⅳ ✓无线网无法检测冲突,只能靠确认判断是否发送成功。
再逐个看选项:
- A 错多选了 Ⅲ——这条是错的(802.11 不检测冲突)。
- B 错没选 Ⅰ,而 Ⅰ 是对的(最短帧长保证发完前检测到冲突)。
- C 对正确的说法恰好是 Ⅰ、Ⅱ、Ⅳ。
- D 错多选了 Ⅲ——这条是错的(802.11 不检测冲突);没选 Ⅰ,而 Ⅰ 是对的(最短帧长保证发完前检测到冲突)。
复习:回到正文。
Ⅰ. 交换机收到目的 MAC 地址不在交换表中的单播帧时,丢弃该帧
Ⅱ. 在交换机上划分 VLAN 可以隔离广播域
Ⅲ. 以太网交换机的每个端口是一个独立的冲突域
Ⅳ. 802.1Q 标签中的 VLAN 标识符(VID)占 12 位
- A. Ⅰ、Ⅱ、Ⅲ、Ⅳ
- B. 仅 Ⅲ、Ⅳ
- C. 仅 Ⅰ、Ⅲ、Ⅳ
- D. 仅 Ⅱ、Ⅲ、Ⅳ
展开解析
D正确的说法是 Ⅱ、Ⅲ、Ⅳ。
- Ⅰ ✗查不到就向除入口外的所有端口转发(泛洪),等对方回帧时再学习它的位置。
- Ⅱ ✓广播帧只在本 VLAN 内转发;不同 VLAN 之间要靠路由器或三层交换机。
- Ⅲ ✓交换机存储转发、各端口独立,端口之间不会冲突。
- Ⅳ ✓4 B 标签:TPID 16 位 + 优先级 3 位 + CFI 1 位 + VID 12 位。
再逐个看选项:
- A 错多选了 Ⅰ——这条是错的(查不到就泛洪)。
- B 错没选 Ⅱ,而 Ⅱ 是对的(VLAN 隔离广播域)。
- C 错多选了 Ⅰ——这条是错的(查不到就泛洪);没选 Ⅱ,而 Ⅱ 是对的(VLAN 隔离广播域)。
- D 对正确的说法恰好是 Ⅱ、Ⅲ、Ⅳ。
复习:回到正文。
(4)网络层
Ⅰ. IP 首部检验和只检验首部,不检验数据部分
Ⅱ. 同一个数据报的各个分片,“标识”字段都与原数据报相同
Ⅲ. IP 数据报的各个分片在途中的路由器上重组
Ⅳ. 片偏移字段以 4 B 为单位
- A. 仅 Ⅰ、Ⅱ
- B. 仅 Ⅰ、Ⅱ、Ⅲ
- C. 仅 Ⅱ
- D. 仅 Ⅱ、Ⅲ
展开解析
A正确的说法是 Ⅰ、Ⅱ。
- Ⅰ ✓数据部分由上层(TCP / UDP 检验和)负责,这样每一跳重算检验和更快。
- Ⅱ ✓目的主机靠标识把属于同一数据报的分片归到一起。
- Ⅲ ✗只在目的主机重组:各片可能走不同的路,中间路由器不一定收得齐。
- Ⅳ ✗片偏移以 8 B 为单位(所以每片数据长度要取 8 的倍数);以 4 B 为单位的是首部长度字段。
再逐个看选项:
- A 对正确的说法恰好是 Ⅰ、Ⅱ。
- B 错多选了 Ⅲ——这条是错的(只在目的主机重组)。
- C 错没选 Ⅰ,而 Ⅰ 是对的(首部检验和只管首部)。
- D 错多选了 Ⅲ——这条是错的(只在目的主机重组);没选 Ⅰ,而 Ⅰ 是对的(首部检验和只管首部)。
复习:回到正文。
Ⅰ. 子网掩码为 255.255.255.248 的子网中,可分配给主机的地址有 6 个
Ⅱ. 主机向另一个网络中的主机发送 IP 分组时,用 ARP 解析目的主机的 MAC 地址
Ⅲ. 不考虑 NAT 时,路由器转发 IP 分组,分组的源 IP 地址和目的 IP 地址都不变
Ⅳ. 路由聚合后的一条路由,可能把实际上并不存在的网络也包含进来
- A. Ⅰ、Ⅱ、Ⅲ、Ⅳ
- B. 仅 Ⅰ、Ⅲ、Ⅳ
- C. 仅 Ⅲ、Ⅳ
- D. 仅 Ⅱ、Ⅲ、Ⅳ
展开解析
B正确的说法是 Ⅰ、Ⅲ、Ⅳ。
- Ⅰ ✓/29 主机号 3 位,23 − 2 = 6。
- Ⅱ ✗跨网络时帧只送到默认网关,ARP 解析的是默认网关(路由器接口)的 MAC 地址。
- Ⅲ ✓IP 地址标识两端主机;每一跳改变的是帧的 MAC 地址、TTL 和首部检验和。
- Ⅳ ✓聚合取公共前缀,前缀覆盖的范围可能比实际的网络多(所以要注意“例外路由”与最长前缀匹配)。
再逐个看选项:
- A 错多选了 Ⅱ——这条是错的(跨网络时 ARP 解析网关)。
- B 对正确的说法恰好是 Ⅰ、Ⅲ、Ⅳ。
- C 错没选 Ⅰ,而 Ⅰ 是对的(/29 可分配 6 个)。
- D 错多选了 Ⅱ——这条是错的(跨网络时 ARP 解析网关);没选 Ⅰ,而 Ⅰ 是对的(/29 可分配 6 个)。
复习:回到正文。
Ⅰ. OSPF 报文直接封装在 IP 数据报中
Ⅱ. RIP 允许一条路径最多 15 跳,距离为 16 表示不可达
Ⅲ. RIP 路由器只与相邻路由器交换信息,交换的是自己当前的整个路由表
Ⅳ. BGP 力求寻找一条到达目的网络的最佳路由
- A. Ⅰ、Ⅱ、Ⅲ、Ⅳ
- B. 仅 Ⅱ、Ⅲ
- C. 仅 Ⅰ、Ⅱ、Ⅲ
- D. 仅 Ⅱ、Ⅲ、Ⅳ
展开解析
C正确的说法是 Ⅰ、Ⅱ、Ⅲ。
- Ⅰ ✓OSPF 的协议字段值为 89,不经过 TCP 或 UDP(2017-37)。
- Ⅱ ✓RIP 只适合小规模网络。
- Ⅲ ✓这是距离向量算法的特点;OSPF 则向所有路由器洪泛,但只发与本路由器相邻的链路状态。
- Ⅳ ✗各 AS 的度量标准不同、还要考虑策略,BGP 只求一条能到达且比较好的路由(不兜圈子)。
再逐个看选项:
- A 错多选了 Ⅳ——这条是错的(BGP 只求较好路由)。
- B 错没选 Ⅰ,而 Ⅰ 是对的(OSPF 直接用 IP)。
- C 对正确的说法恰好是 Ⅰ、Ⅱ、Ⅲ。
- D 错多选了 Ⅳ——这条是错的(BGP 只求较好路由);没选 Ⅰ,而 Ⅰ 是对的(OSPF 直接用 IP)。
复习:回到正文。
Ⅰ. NAPT 只转换 IP 地址,不改变端口号
Ⅱ. DHCP 客户发送 DHCP 发现报文时,源 IP 地址为 0.0.0.0
Ⅲ. ICMP 差错报告报文封装在 UDP 用户数据报中传送
Ⅳ. ping 程序使用 ICMP 的回送请求和回送回答报文
- A. 仅 Ⅰ、Ⅱ、Ⅳ
- B. 仅 Ⅳ
- C. 仅 Ⅰ、Ⅳ
- D. 仅 Ⅱ、Ⅳ
展开解析
D正确的说法是 Ⅱ、Ⅳ。
- Ⅰ ✗NAPT 靠端口号区分内网的不同主机:出去时改源 IP 和源端口,回来时改目的 IP 和目的端口。
- Ⅱ ✓客户此时还没有 IP 地址,目的地址用受限广播 255.255.255.255。
- Ⅲ ✗ICMP 报文直接封装在 IP 数据报中(协议字段 1),属于网络层。
- Ⅳ ✓ping 直接使用 ICMP,不经过传输层。
再逐个看选项:
- A 错多选了 Ⅰ——这条是错的(NAPT 要改端口号)。
- B 错没选 Ⅱ,而 Ⅱ 是对的(DISCOVER 源地址 0.0.0.0)。
- C 错多选了 Ⅰ——这条是错的(NAPT 要改端口号);没选 Ⅱ,而 Ⅱ 是对的(DISCOVER 源地址 0.0.0.0)。
- D 对正确的说法恰好是 Ⅱ、Ⅳ。
复习:回到正文。
(5)传输层
Ⅰ. UDP 面向报文,对应用层交下来的报文既不合并也不拆分
Ⅱ. UDP 首部 8 B,检验和覆盖伪首部、首部和数据
Ⅲ. 伪首部要随 UDP 用户数据报一起发送给接收方
Ⅳ. UDP 支持一对一、一对多和多对多的交互通信
- A. 仅 Ⅰ、Ⅱ、Ⅳ
- B. Ⅰ、Ⅱ、Ⅲ、Ⅳ
- C. 仅 Ⅱ、Ⅳ
- D. 仅 Ⅱ、Ⅲ、Ⅳ
展开解析
A正确的说法是 Ⅰ、Ⅱ、Ⅳ。
- Ⅰ ✓应用交多长,UDP 就发多长,保留报文边界。
- Ⅱ ✓比 IP 首部检验和管得更多:连数据和收发双方的 IP 地址(伪首部)一起检验。
- Ⅲ ✗伪首部只在计算检验和时临时加上,不发送;接收方用收到的 IP 首部自己构造。
- Ⅳ ✓无连接,所以能广播、组播;TCP 只能一对一。
再逐个看选项:
- A 对正确的说法恰好是 Ⅰ、Ⅱ、Ⅳ。
- B 错多选了 Ⅲ——这条是错的(伪首部不发送)。
- C 错没选 Ⅰ,而 Ⅰ 是对的(UDP 面向报文)。
- D 错多选了 Ⅲ——这条是错的(伪首部不发送);没选 Ⅰ,而 Ⅰ 是对的(UDP 面向报文)。
复习:回到正文。
Ⅰ. SYN 报文段不能携带数据,但要消耗一个序号
Ⅱ. 一条 TCP 连接由通信两端的两个套接字唯一确定
Ⅲ. 三次握手的第三个报文段可以携带数据
Ⅳ. TIME-WAIT 状态出现在被动关闭连接的一方
- A. Ⅰ、Ⅱ、Ⅲ、Ⅳ
- B. 仅 Ⅰ、Ⅱ、Ⅲ
- C. 仅 Ⅱ、Ⅲ
- D. 仅 Ⅱ、Ⅲ、Ⅳ
展开解析
B正确的说法是 Ⅰ、Ⅱ、Ⅲ。
- Ⅰ ✓教材原话;SYN 要被确认,所以占一个序号(5.4 序号账本)。
- Ⅱ ✓即“源 IP、源端口、目的 IP、目的端口”四元组。
- Ⅲ ✓它只是一个 ACK 报文段,可以带数据;不带数据就不消耗序号。
- Ⅳ ✗TIME-WAIT 在主动关闭方:它发出最后一个 ACK 后要等 2MSL。被动关闭方最后处于 LAST-ACK。
再逐个看选项:
- A 错多选了 Ⅳ——这条是错的(TIME-WAIT 在主动关闭方)。
- B 对正确的说法恰好是 Ⅰ、Ⅱ、Ⅲ。
- C 错没选 Ⅰ,而 Ⅰ 是对的(SYN 不带数据但耗 1 个序号)。
- D 错多选了 Ⅳ——这条是错的(TIME-WAIT 在主动关闭方);没选 Ⅰ,而 Ⅰ 是对的(SYN 不带数据但耗 1 个序号)。
复习:回到正文。
Ⅰ. 收到 3 个重复确认后执行快重传,并把 cwnd 重置为 1
Ⅱ. TCP 发送方的发送窗口取接收窗口 rwnd 和拥塞窗口 cwnd 中较小的一个
Ⅲ. 发生超时重传时,ssthresh 设为当时 cwnd 的一半,cwnd 重置为 1
Ⅳ. 接收方通告的窗口为 0 时,发送方启动持续计时器,定时发送零窗口探测报文
- A. Ⅰ、Ⅱ、Ⅲ、Ⅳ
- B. 仅 Ⅲ、Ⅳ
- C. 仅 Ⅱ、Ⅲ、Ⅳ
- D. 仅 Ⅰ、Ⅲ、Ⅳ
展开解析
C正确的说法是 Ⅱ、Ⅲ、Ⅳ。
- Ⅰ ✗3 个重复确认说明网络还能送达后面的报文段,拥塞不严重,执行快恢复:ssthresh 减半,cwnd = 新的 ssthresh(不回到 1)。
- Ⅱ ✓既不能淹没接收方,也不能把网络堵住。
- Ⅲ ✓超时说明网络可能严重拥塞,从慢开始重新来。
- Ⅳ ✓防止“窗口更新”报文丢失后双方互相等待、形成死锁。
再逐个看选项:
- A 错多选了 Ⅰ——这条是错的(3 个重复确认后 cwnd = 新 ssthresh)。
- B 错没选 Ⅱ,而 Ⅱ 是对的(发送窗口 = min(rwnd, cwnd))。
- C 对正确的说法恰好是 Ⅱ、Ⅲ、Ⅳ。
- D 错多选了 Ⅰ——这条是错的(3 个重复确认后 cwnd = 新 ssthresh);没选 Ⅱ,而 Ⅱ 是对的(发送窗口 = min(rwnd, cwnd))。
复习:回到正文。
(6)应用层
Ⅰ. HTTP/1.1 默认使用持续连接
Ⅱ. DNS 查询一般使用 UDP,服务器端口号 53
Ⅲ. 主机向本地域名服务器发出的查询一般采用迭代查询
Ⅳ. HTTP 是无状态的协议,服务器可以用 Cookie 识别用户
- A. Ⅰ、Ⅱ、Ⅲ、Ⅳ
- B. 仅 Ⅱ、Ⅳ
- C. 仅 Ⅱ、Ⅲ、Ⅳ
- D. 仅 Ⅰ、Ⅱ、Ⅳ
展开解析
D正确的说法是 Ⅰ、Ⅱ、Ⅳ。
- Ⅰ ✓HTTP/1.0 默认非持续,HTTP/1.1 默认持续(并可流水线)。
- Ⅱ ✓一问一答,报文短,用 UDP 更快。
- Ⅲ ✗主机向本地域名服务器一般用递归查询;本地域名服务器向根、顶级等服务器一般用迭代查询。
- Ⅳ ✓HTTP 本身不记住客户;Cookie 在客户端保存一个识别码,每次请求时带上。
再逐个看选项:
- A 错多选了 Ⅲ——这条是错的(主机到本地一般递归)。
- B 错没选 Ⅰ,而 Ⅰ 是对的(HTTP/1.1 默认持续连接)。
- C 错多选了 Ⅲ——这条是错的(主机到本地一般递归);没选 Ⅰ,而 Ⅰ 是对的(HTTP/1.1 默认持续连接)。
- D 对正确的说法恰好是 Ⅰ、Ⅱ、Ⅳ。
复习:回到正文。
Ⅰ. FTP 的控制连接在整个会话期间一直保持打开
Ⅱ. SMTP 用于用户从邮件服务器读取邮件
Ⅲ. POP3 和 IMAP 都可用于用户从邮件服务器读取邮件
Ⅳ. MIME 修改了 SMTP 协议,使 SMTP 能直接传送二进制数据
- A. 仅 Ⅰ、Ⅲ
- B. 仅 Ⅰ、Ⅱ、Ⅲ
- C. 仅 Ⅲ
- D. 仅 Ⅱ、Ⅲ
展开解析
A正确的说法是 Ⅰ、Ⅲ。
- Ⅰ ✓数据连接每传一个文件建立一次,控制连接则贯穿整个会话。
- Ⅱ ✗SMTP 是“推”协议,用于发信(用户代理 → 服务器、服务器 → 服务器);读信用 POP3 或 IMAP。
- Ⅲ ✓两者都是“拉”协议;IMAP 把邮件留在服务器上管理,POP3 一般下载到本地。
- Ⅳ ✗MIME 没有改动也没有取代 SMTP:它把非 ASCII 内容编码成 ASCII 再交给 SMTP 传送。
再逐个看选项:
- A 对正确的说法恰好是 Ⅰ、Ⅲ。
- B 错多选了 Ⅱ——这条是错的(SMTP 用于发信)。
- C 错没选 Ⅰ,而 Ⅰ 是对的(FTP 控制连接整个会话保持)。
- D 错多选了 Ⅱ——这条是错的(SMTP 用于发信);没选 Ⅰ,而 Ⅰ 是对的(FTP 控制连接整个会话保持)。
复习:回到正文。
9.3计算题满分专练:固定步骤、单位口径、变式与常见错法
计网每年 8 道选择题里,通常有 3 ~ 4 道要动笔算,综合题更是“算”的天下。计算题丢分,十有八九不是不会,而是步骤漏了一步或单位换错了。这一节把 18 类计算题各自压成一套“固定步骤”,先把单位口径统一列出,再每类给 2 ~ 3 道变式;每道题的解析都写出“每个错误选项是哪一步算错得来的”——做错了,对照它就知道自己错在哪一步。
先统一单位口径(所有计算题通用)
| 量 | 口径 | 一句话例子 |
|---|---|---|
| 速率、带宽 | k、M、G 一律是 103、106、109,单位是 bit/s | 100 Mb/s = 108 bit/s |
| 数据量(文件、缓存、窗口) | 存储容量、缓存、窗口通常按 1 KB = 210 B;文件大小与速率一起算时看题目说明。口诀:速率看 10,容量看 2,题目写了听题目(见 0.2 节) | MSS = 1 KB、窗口 64 KB:只数“几个 MSS”时口径不影响结果 |
| B 与 bit | 1 B = 8 bit;帧长、分组长多用 B,速率用 bit/s——算时延前先 × 8 | 1500 B ÷ 100 Mb/s = 120 μs |
| 时间 | 1 s = 103 ms = 106 μs = 109 ns | 51.2 μs = 0.0512 ms |
| 传播速率 | 题目不给时,电磁波在铜线、光纤中约 2 × 108 m/s = 200 m/μs | 1 km 的单程传播时延 5 μs |
| 分贝 | dB = 10 lg(S/N);代入香农公式前先换成比值 | 30 dB → S/N = 1000 |
| 首部字段的单位 | IP 首部长度、TCP 数据偏移:4 B;IP 总长度:1 B;IP 片偏移:8 B | 片偏移 185 → 1480 B |
| 以太网帧长 | 一般不计前导码(8 B);最短 64 B、最长 1518 B(含首部 14 B 和 FCS 4 B) | 数据 46 ~ 1500 B |
| RTT | 往返传播时间,不含数据本身的发送时延;“忽略发送时延”时一轮 = 1 个 RTT | 三次握手的前两次 = 1 RTT |
| 窗口 | 链路层窗口数“帧”;TCP 窗口数“字节”,题目常用 MSS 作单位 | rwnd = 8 KB = 8 个 1 KB 的 MSS |
① 时延、时延带宽积与交换方式的总时间
- 发送时延 = 数据长度(bit)÷ 发送速率;传播时延 = 信道长度 ÷ 传播速率。两者分开算,最后再相加。
- 存储转发:每经过一个结点都要把整个分组(或报文)收完才转发,所以每段链路都有一次发送时延。
- n 个分组经 k 段链路(无排队、各段速率相同):总时间 = (n + k − 1) × 一个分组的发送时延 + k × 单段传播时延。报文交换相当于 n = 1 的大分组。
- 时延带宽积 = 传播时延 × 带宽:发送端发出的第一个比特到达终点时,链路上“装着”的比特数。
单位口径:先把 B 换成 bit;分清“单程”“往返”;题目说“忽略传播时延”就只剩发送时延。
- A. 40 ms
- B. 40.12 ms
- C. 40.16 ms
- D. 160 ms
展开解析
B(1000 + 4 − 1) × 40 μs = 40.12 ms。
- 每个分组 4 × 106 ÷ 1000 = 4000 bit,一个分组的发送时延 4000 ÷ 108 = 40 μs。
- A 发完 1000 个分组用 1000 × 40 μs = 40 ms;最后一个分组还要再经 3 台路由器各转发一次,多 3 × 40 μs。
- 合计 (1000 + 3) × 40 μs = 40.12 ms。
- A 错40 ms 只是 A 自己发完所有分组的时间,最后一个分组还要被 3 台路由器各存储转发一次,漏了 3 × 40 μs。
- B 对(n + k − 1) × 分组发送时延。
- C 错40.16 ms = (1000 + 4) × 40 μs,把公式记成了 n + k;第一个分组到达 B 只需要 k 个发送时延,后面每个分组再多 1 个,共 n + k − 1。
- D 错160 ms = 4 × 40 ms 是报文交换(不分组)的时间:整个报文在每台路由器都要收完再发。
复习:回到正文。
- A. 104 bit
- B. 1.25 × 106 bit
- C. 107 bit
- D. 2 × 107 bit
展开解析
C传播时延 10 ms × 109 b/s = 107 bit。
- 单程传播时延 = 2 × 106 m ÷ 2 × 108 m/s = 10−2 s = 10 ms。
- 时延带宽积 = 10−2 s × 109 b/s = 107 bit(= 1.25 × 106 B)。
- A 错104 bit 是把 10 ms 当成了 10 μs,时间单位差了 1000 倍。
- B 错1.25 × 106 是换算成字节后的数值(107 ÷ 8),单位却还写 bit。
- C 对10 ms × 1 Gb/s = 107 bit。
- D 错2 × 107 bit 用的是往返时间 20 ms;时延带宽积按单程传播时延算。
复习:回到正文。
- A. 270 ms
- B. 271.2 ms
- C. 540 ms
- D. 541.2 ms
展开解析
D1.2 ms(发送)+ 2 × 270 ms(往返传播)= 541.2 ms。
- 发送时延 = 1500 × 8 ÷ 107 = 1.2 ms。
- 帧过去 270 ms,确认回来 270 ms,合计 1.2 + 540 = 541.2 ms。
- A 错270 ms 只是单程传播时延,既没算发送时延,也没算确认的回程。
- B 错271.2 ms 是“发送 + 单程传播”,即对方收完这一帧的时刻;还要等确认传回来 270 ms。
- C 错540 ms 只算了往返传播时延,漏了这一帧本身的发送时延 1.2 ms。
- D 对发送 1.2 ms + 往返 540 ms。
复习:回到正文。
- 只算一个分组的发送时延,忘了后面 n − 1 个分组还要依次跟上(少了 n − 1 个发送时延)。
- 把 (n + k − 1) 写成 n × k 或 n + k,存储转发的流水线没想清楚。
- 把往返时间当成单程(时延带宽积用的是单程传播时延)。
- B 与 bit 不换算,时延差 8 倍。
② 奈氏准则与香农公式
- 奈氏(无噪声):最大数据率 = 2W × log2V(W 带宽 Hz,V 码元状态数)。
- 香农(有噪声):C = W × log2(1 + S/N),S/N 先由 dB 换成比值。
- 题目同时给了噪声和状态数:两个都算,取较小的。
- 反过来求信噪比:先求 log2(1 + S/N) = C ÷ W,再求 S/N,最后换成 dB。
单位口径:W 用 Hz;dB 换比值:S/N = 10dB/10;log2 不是整数时题目一般给近似值或选“约为”。
- A. 10 kb/s
- B. 22.0 kb/s
- C. 33.3 kb/s
- D. 60 kb/s
展开解析
C奈氏 60 kb/s,香农约 33.3 kb/s,取小:33.3 kb/s。
- 奈氏:2 × 5k × log264 = 2 × 5k × 6 = 60 kb/s。
- 香农:20 dB → S/N = 100;5k × log2101 ≈ 5k × 6.66 ≈ 33.3 kb/s。
- 两个限制同时存在,取较小的 33.3 kb/s。
- A 错10 kb/s = 2W,只算了码元速率(10 kBaud),没有乘每个码元的比特数,单位也从 Baud 混成了 b/s。
- B 错22.0 kb/s = 5k × log2(1 + 20),把 20 dB 直接当成 S/N = 20 代入;应先换算成 100。
- C 对香农极限 33.3 kb/s 小于奈氏极限 60 kb/s。
- D 错60 kb/s 只是奈氏极限;信道有噪声,还受香农公式限制,取两者中较小的。
复习:回到正文。
- A. 36.1 dB
- B. 72.2 dB
- C. 120 dB
- D. 4095 dB
展开解析
Alog2(1 + S/N) = 12 → S/N = 4095 → 10 lg 4095 ≈ 36.1 dB。
- 48k ÷ 4k = 12,即 log2(1 + S/N) = 12。
- S/N = 212 − 1 = 4095。
- 换成分贝:10 lg 4095 ≈ 36.1 dB。
- A 对4095 换成分贝约 36.1 dB。
- B 错72.2 dB = 20 lg 4095,用了“20 lg”;20 lg 是电压(幅度)比的分贝公式,信噪比是功率比,用 10 lg。
- C 错120 = 10 × 12,把 log2 的结果直接乘 10 当分贝;分贝是 10 lg(S/N),要对比值 4095 取常用对数。
- D 错4095 是信噪比的比值,不是分贝数,单位写错了。
复习:回到正文。
- A. 1200 b/s
- B. 2400 b/s
- C. 3600 b/s
- D. 9600 b/s
展开解析
C4 × 2 = 8 种状态,每码元 log28 = 3 bit,1200 × 3 = 3600 b/s。
- A 错1200 是码元速率(Baud),没有乘每个码元携带的比特数。
- B 错2400 = 1200 × log24,只算了 4 种相位,忘了振幅也能区分(共 8 种状态)。
- C 对8 种状态,每码元 3 bit。
- D 错9600 = 1200 × 8,把状态数 8 直接当成了每码元的比特数;应取 log28 = 3。
复习:回到正文。
- 把 dB 直接代进香农公式(30 dB 当 S/N = 30)。
- 只算奈氏、不算香农(或反过来),忘了“取小”。
- 奈氏公式漏了 log2V,或把 V 直接当比特数乘进去。
- 码元速率(Baud)和比特率(b/s)混为一谈。
③ 停等、GBN、SR:信道利用率、窗口与序号位数
- 一帧的发送时延 TD = 帧长 ÷ 速率;一个发送周期 = TD + RTT(+ 确认帧发送时延 TA,若题目给出)。
- 利用率 U = 一个周期内真正在发数据的时间 ÷ 周期 = W × TD ÷ 周期(大于 1 时取 1);停等就是 W = 1。
- 要让利用率达到 100%:W ≥ 周期 ÷ TD(向上取整)。
- 序号位数 n:GBN 要 2n − 1 ≥ WT;SR 要 WT + WR ≤ 2n(两窗口相等时 W ≤ 2n − 1);停等 1 位。
单位口径:帧长 B 换 bit;RTT = 2 × 单程传播时延;“实际数据率” = 利用率 × 链路速率。
- A. 4.76%
- B. 5.00%
- C. 9.09%
- D. 95.24%
展开解析
ATD = 2 ms,周期 = 2 + 40 = 42 ms,U = 2 ÷ 42 ≈ 4.76%。
- TD = 1000 × 8 ÷ 4 × 106 = 2 ms。
- 周期 = TD + RTT = 2 + 2 × 20 = 42 ms。
- U = 2 ÷ 42 ≈ 4.76%。
- A 对2 ÷ 42 ≈ 4.76%。
- B 错5.00% = 2 ÷ 40,周期里漏了帧自己的发送时延 2 ms。
- C 错9.09% = 2 ÷ 22,把单程传播时延 20 ms 当成了 RTT;发出去的帧要到达对方、确认还要传回来。
- D 错95.24% = 40 ÷ 42,是一个周期里“空等确认”的时间所占的比例(1 − U),正好算反了。
复习:回到正文。
- A. 4 位
- B. 5 位
- C. 6 位
- D. 21 位
展开解析
B窗口 ≥ 42 ÷ 2 = 21;GBN 要 2n − 1 ≥ 21,n = 5。
- 一个周期 42 ms 内要一直在发,至少要发 42 ÷ 2 = 21 帧,即 WT ≥ 21。
- GBN:2n − 1 ≥ 21 → 2n ≥ 22 → n = 5(25 − 1 = 31)。
- A 错4 位时 GBN 窗口最大 24 − 1 = 15 < 21,一个周期里发完 15 帧后要停下来等确认,利用率只有 15 × 2 ÷ 42 ≈ 71%。
- B 对25 − 1 = 31 ≥ 21。
- C 错6 位是按选择重传(SR,两窗口相等)的条件 2n − 1 ≥ 21 算的;GBN 接收窗口为 1,上限是 2n − 1。
- D 错21 是需要的窗口大小(帧数),不是序号的位数,把两者混为一谈了。
复习:回到正文。
- A. 0.8 Mb/s
- B. 3.2 Mb/s
- C. 5.6 Mb/s
- D. 8 Mb/s
展开解析
B窗口 23 − 1 = 4;周期 10 ms 内发 4 帧,U = 40%,8 × 40% = 3.2 Mb/s。
- SR 两窗口相等:W ≤ 2n − 1 = 4。
- 一个周期 = 1 + 9 = 10 ms,其中发送 4 × 1 = 4 ms,U = 40%。
- 实际数据率 = 40% × 8 Mb/s = 3.2 Mb/s。
- A 错0.8 Mb/s 对应窗口为 1(停止—等待)的情况:1 ÷ 10 × 8。
- B 对W = 4,U = 40%。
- C 错5.6 Mb/s 用了窗口 7,那是 3 位序号的 GBN 发送窗口上限;SR 两窗口相等时只能取 4。
- D 错8 Mb/s 是链路速率;窗口只有 4 帧,一个周期里有 6 ms 在等确认,达不到满速率。
复习:回到正文。
- 周期里漏了 TD,只用 RTT 当分母。
- 用单程传播时延当 RTT。
- 帧长的 B 当 bit。
- GBN、SR 的窗口上限公式记混;把窗口大小当成序号位数。
④ CSMA/CD:最短帧长、最远距离、退避时间
- 单程传播时延 τ = 距离 ÷ 传播速率(中间有中继器、集线器的时延要加上);争用期 = 2τ。
- 最短帧长 = 2τ × 数据率(帧的发送时间不能小于争用期)。
- 反求最远距离:最短帧的发送时间 = 2τ → τ → 距离 = τ × 传播速率。
- 二进制指数退避:第 i 次冲突后 k = min(i, 10),从 {0, 1, …, 2k − 1} 中随机取 r,等待 r × 争用期;重传 16 次仍失败就丢弃。
单位口径:10 Mb/s 以太网的争用期取 51.2 μs(512 bit 时间),100 Mb/s 取 5.12 μs;题目给了距离和速率时按 2τ 现算。
- A. 62.5 bit
- B. 250 bit
- C. 500 bit
- D. 1000 bit
展开解析
C2τ = 5 μs,5 μs × 100 Mb/s = 500 bit。
- τ = 500 ÷ 2 × 108 = 2.5 μs,争用期 2τ = 5 μs。
- 最短帧长 = 5 μs × 108 b/s = 500 bit(约 62.5 B)。
- A 错62.5 是 500 bit 换成字节后的数,单位却还写 bit。
- B 错250 bit 只用了单程传播时延 τ;冲突信号要传回发送方,必须按往返 2τ 算。
- C 对2τ × 数据率 = 500 bit。
- D 错1000 bit 是把 2τ 又乘了 2(按 4τ 算),多算了一倍。
复习:回到正文。
- A. 40 m
- B. 160 m
- C. 320 m
- D. 640 m
展开解析
C400 B 的发送时间 3.2 μs = 2τ,τ = 1.6 μs,距离 = 1.6 μs × 200 m/μs = 320 m。
- 最短帧的发送时间 = 400 × 8 ÷ 109 = 3.2 μs,它等于争用期 2τ。
- τ = 1.6 μs,最远距离 = 1.6 × 10−6 × 2 × 108 = 320 m。
- A 错40 m 是把 400 B 当成 400 bit 算出的:发送时间 0.4 μs,τ = 0.2 μs。
- B 错160 m 是把 τ 又除了一次 2;发送时间 3.2 μs 已经是往返 2τ,单程是 1.6 μs。
- C 对2τ = 3.2 μs → 320 m。
- D 错640 m 是把发送时间 3.2 μs 当成了单程传播时延;最短帧的发送时间对应的是往返。
复习:回到正文。
- A. 8 种,35.84 μs
- B. 7 种,35.84 μs
- C. 8 种,40.96 μs
- D. 8 种,358.4 μs
展开解析
Ak = 3,r ∈ {0, 1, …, 7} 共 8 种,最长 7 × 5.12 μs = 35.84 μs。
- k = min(3, 10) = 3,r 从 {0, 1, …, 23 − 1} 中取,共 8 种。
- 100 Mb/s 以太网的争用期 = 512 bit ÷ 108 b/s = 5.12 μs,最长 7 × 5.12 = 35.84 μs。
- A 对8 种,最长 35.84 μs。
- B 错7 种漏了 r = 0(立即重传也是一种可能);0 ~ 7 共 8 个数。
- C 错40.96 μs = 8 × 5.12,把 r 的最大值当成了 2k;应为 2k − 1 = 7。
- D 错358.4 μs = 7 × 51.2,用了 10 Mb/s 以太网的争用期;100 Mb/s 的争用期是 5.12 μs。
复习:回到正文。
- 用单程 τ 代替 2τ,最短帧长少一半。
- 算出的是 bit,选项是 B(或反过来)。
- 退避的上限写成 2k 而不是 2k − 1,或漏了 r = 0。
- 退避用错了争用期(100 Mb/s 却用 51.2 μs)。
⑤ 802.11:帧间间隔与 NAV
- 不用 RTS/CTS:信道空闲 DIFS 后发数据帧 → 接收方等 SIFS 发 ACK。发送方“从开始到确认”= DIFS + 数据 + SIFS + ACK(信道一直空闲时不需要退避)。
- 用 RTS/CTS:DIFS → RTS → SIFS → CTS → SIFS → 数据 → SIFS → ACK。
- NAV = 本帧之后还要占用信道的时间:RTS 中的 NAV = 3 × SIFS + CTS + 数据 + ACK;CTS 中的 NAV = 2 × SIFS + 数据 + ACK;数据帧中的 NAV = SIFS + ACK。
- 隐蔽站只能听到 CTS(或只能听到 RTS),它的 NAV 按它听到的那一帧设置。
单位口径:各帧的“传输时延”= 帧长 × 8 ÷ 速率;题目给了的直接用;SIFS < DIFS。
- A. 830 μs
- B. 840 μs
- C. 870 μs
- D. 890 μs
展开解析
BCTS 之后还有 SIFS + 数据 800 μs + SIFS + ACK:10 + 800 + 10 + 20 = 840 μs。
- 数据帧传输时延 = 1100 × 8 ÷ 11 Mb/s = 800 μs。
- CTS 发完后,信道还要被占用:SIFS(10)+ 数据(800)+ SIFS(10)+ ACK(20)= 840 μs。
- A 错830 μs 少算了一个 SIFS:数据帧之前、ACK 之前各有一个 SIFS。
- B 对2 × SIFS + 数据 + ACK。
- C 错870 μs 是 RTS 帧里的 NAV(多了 SIFS + CTS);B 听不到 A 的 RTS,只能按 CTS 设置。
- D 错890 μs 多加了 DIFS 50 μs;DIFS 是发送 RTS 之前的等待,不在 CTS 之后的占用时间里。
复习:回到正文。
- A. 830 μs
- B. 880 μs
- C. 890 μs
- D. 945 μs
展开解析
BDIFS + 数据 + SIFS + ACK = 50 + 800 + 10 + 20 = 880 μs。
- A 错830 μs 漏了发送前的 DIFS:信道空闲也要先等 DIFS 才能发。
- B 对50 + 800 + 10 + 20 = 880 μs。
- C 错890 μs 多算了一个 SIFS,以为 ACK 发完之后还要再等 SIFS;发送方收到 ACK 就结束了。
- D 错945 μs 是按 RTS/CTS 流程算的(多了 RTS、CTS 和两个 SIFS);本题不使用 RTS/CTS。
复习:回到正文。
- NAV 里多算了 DIFS(DIFS 在发送前,不在 NAV 之内)。
- 少算一个 SIFS(每两帧之间都有一个)。
- 把 RTS 的 NAV 当成 CTS 的 NAV。
- 题目没用 RTS/CTS 却按 RTS/CTS 流程算。
⑥ 子网划分、广播地址与路由聚合
- 找“关键字节”:前缀 /n 落在哪个字节(/17 ~ /24 在第 3 字节),块大小 = 2(该字节剩下的主机位数) = 256 − 掩码在这一字节的值。
- 网络地址:关键字节向下取到块大小的整数倍,后面全 0;广播地址:网络地址 + 块大小 − 1,后面全 255。
- 可分配地址 = 2主机位数 − 2;按需(VLSM)分配时从大到小,每块的起点必须是块大小的整数倍。
- 路由聚合:把各网络的关键字节写成二进制,取公共前缀,前缀长度 = 前面完整的字节位数 + 公共位数。
单位口径:“可分配给主机”要减 2;“地址总数 / 网络规模”不减;/31、/32 是特殊情况。
- A. 10.141.88.255
- B. 10.141.89.255
- C. 10.141.91.255
- D. 10.141.95.255
展开解析
D/21 关键字节在第 3 字节,块大小 8:89 → 88 ~ 95,广播 10.141.95.255。
- /21 = 前 2 字节 16 位 + 第 3 字节 5 位,第 3 字节剩 3 位主机位,块大小 23 = 8。
- 89 向下取到 8 的倍数是 88,这个网络的第 3 字节是 88 ~ 95。
- 网络地址 10.141.88.0,广播地址 10.141.95.255。
- A 错10.141.88.255 只把第 3 字节取到了块的起点 88,忘了广播地址在块的末尾:88 + 8 − 1 = 95。
- B 错10.141.89.255 是按 /24 算的(只把第 4 字节置全 1),前缀长度看错了。
- C 错10.141.91.255 是按 /22(块大小 4)算的:89 → 88 ~ 91;/21 的块大小是 8。
- D 对88 ~ 95 的末尾。
复习:回到正文。
- A. 192.168.40.191
- B. 192.168.40.207
- C. 192.168.40.223
- D. 192.168.40.255
展开解析
CA:40.0/25;B:40.128/26;C:40.192/27,广播 40.223;D:40.224/27。
- A 要 100 个:27 − 2 = 126 ≥ 100 → /25,占 40.0 ~ 40.127。
- B 要 50 个:26 − 2 = 62 → /26,占 40.128 ~ 40.191。
- C 要 20 个:25 − 2 = 30 → /27,占 40.192 ~ 40.223,广播 40.223。
- D 同样 /27,占 40.224 ~ 40.255。
- A 错192.168.40.191 是 B 部门子网(40.128/26)的广播地址,部门对应错了。
- B 错40.207 = 192 + 16 − 1,是按 /28(16 个地址)给 C 分配的;但 /28 只有 24 − 2 = 14 个可分配地址,不够 20 个。
- C 对C 是 40.192/27,广播 40.223。
- D 错40.255 是 D 部门(也是整个 /24)的广播地址。
复习:回到正文。
- A. 31.8.64.0/20
- B. 31.8.64.0/19
- C. 31.8.64.0/21
- D. 31.8.72.0/20
展开解析
A64 ~ 67、68 ~ 71、72 ~ 79 合起来是 64 ~ 79 共 16 个“第 3 字节”,即 31.8.64.0/20。
- 第 3 字节:64 = 0100 0000,68 = 0100 0100,72 = 0100 1000,三个网络覆盖 64 ~ 79。
- 64 ~ 79 的公共前缀是 0100,第 3 字节取 4 位:16 + 4 = 20 → 31.8.64.0/20。
- A 对64 ~ 79,公共前缀 20 位。
- B 错/19 的公共前缀只取了 3 位,覆盖 64 ~ 95,比实际多出一倍地址;聚合要取最长的公共前缀。
- C 错/21 只覆盖 64 ~ 71,装不下 72.0/21(72 ~ 79)。
- D 错72 不是 16 的倍数,31.8.72.0/20 不是合法的网络地址(/20 网络的第 3 字节必须是 16 的倍数)。
复习:回到正文。
- 关键字节找错(把 /21 当成在第 4 字节)。
- 块大小算成 2 的幂但少一位(/21 的块是 8,不是 4 或 16)。
- 广播地址只把关键字节取到块的起点,忘了加“块大小 − 1”。
- 聚合时公共前缀多数或少数一位,或者起点不是块大小的倍数。
⑦ 最长前缀匹配
- 把目的地址和每条路由的网络地址在“关键字节”上写成二进制。
- 逐条判断:目的地址的前 n 位(n = 前缀长度)是否与该网络的前 n 位相同——相同就“匹配”。
- 在所有匹配的路由中选前缀最长的;默认路由 0.0.0.0/0 前缀长度为 0,只在别的都不匹配时才用;一条都不匹配又没有默认路由就丢弃。
单位口径:快速判断:/n 的网络覆盖的范围 = 网络地址 ~ 网络地址 + 块大小 − 1,看目的地址落在不落在里面。
| 目的网络 | 接口 |
|---|---|
| 77.10.96.0/19 | ifA |
| 77.10.112.0/20 | ifB |
| 77.10.120.0/21 | ifC |
| 0.0.0.0/0 | ifD |
- A. 77.10.100.1
- B. 77.10.121.9
- C. 77.10.130.1
- D. 77.10.113.5
展开解析
D77.10.113.5 匹配 /19 和 /20,最长的是 /20 → ifB。
- /19(96 ~ 127)、/20(112 ~ 127)、/21(120 ~ 127)三个范围是层层嵌套的。
- 113 在 112 ~ 127 里但不在 120 ~ 127 里,最长匹配是 /20 → ifB。
- A 错77.10.100.1 的第 3 字节 100 只落在 /19(96 ~ 127)里,不在 /20(112 ~ 127)里,从 ifA 转出。
- B 错77.10.121.9 同时匹配 /19、/20、/21,最长的是 /21 → ifC,不是 ifB。
- C 错77.10.130.1 不在 96 ~ 127 里,三条具体路由都不匹配,只能走默认路由 ifD。
- D 对113 落在 /19 和 /20 中,不在 /21 中,取 /20 → ifB。
复习:回到正文。
- A. R2
- B. R1
- C. R3
- D. 丢弃该分组
展开解析
A12 在 /21 的 8 ~ 15 里,不在 /23 的 10 ~ 11 里,最长匹配 /21 → R2。
- A 对/21 覆盖 8 ~ 15,12 在其中;/23 只覆盖 10 ~ 11。
- B 错/16 确实匹配,但 /21 也匹配而且更长。
- C 错/23 只覆盖第 3 字节 10、11 两个值,12 不在其中——不能只看“前缀最长”而不检查是否匹配。
- D 错/16 和 /21 都匹配,有路可走,不会因为“没有默认路由”而丢弃。
复习:回到正文。
- 匹配到第一条就停下,没有比较前缀长度。
- 只看前缀长度最长的那条,没检查它到底匹配不匹配。
- 块的范围算错(/23 只覆盖 2 个“第 3 字节”)。
⑧ IP 分片
- 数据长度 = 总长度 − 首部长度(首部不一定是 20 B,看首部长度字段)。
- 每片最多装的数据 = (MTU − 首部长度) 向下取到 8 的整数倍(最后一片除外)。
- 依次切片:第 k 片片偏移 = 前面各片数据长度之和 ÷ 8;总长度 = 该片数据 + 首部;最后一片 MF = 0,其余 MF = 1;标识都相同。
单位口径:片偏移以 8 B 为单位,总长度以 1 B 为单位;分片再分片时偏移相对最初的原数据报。
- A. 128,1024
- B. 128,1044
- C. 256,1044
- D. 1024,1044
展开解析
B每片数据最多 ⌊1026 ÷ 8⌋ × 8 = 1024 B;第 2 片偏移 1024 ÷ 8 = 128,总长度 1024 + 20 = 1044。
- 数据 3000 B;1046 − 20 = 1026,向下取到 8 的倍数:1024 B。
- 切成 1024 + 1024 + 952 三片。
- 第 2 片:片偏移 1024 ÷ 8 = 128,总长度 1044,MF = 1。
- A 错总长度写成了 1024,只是数据部分,忘了加 20 B 的首部。
- B 对偏移 128,总长度 1044。
- C 错256 = 1024 ÷ 4,把片偏移的单位当成了 4 B(那是首部长度字段的单位);片偏移以 8 B 为单位。
- D 错1024 是第 2 片前面的数据字节数,片偏移字段要再除以 8。
复习:回到正文。
- A. 236,158
- B. 212,158
- C. 220,160
- D. 236,1264
展开解析
A首部 6 × 4 = 24 B;每片数据 ⌊636 ÷ 8⌋ × 8 = 632 B;1476 = 632 + 632 + 212;最后一片总长 236、偏移 1264 ÷ 8 = 158。
- 0x46:版本 4,首部长度 6 × 4 = 24 B;数据 1500 − 24 = 1476 B。
- 660 − 24 = 636,向下取 8 的倍数:632 B。
- 1476 = 632 + 632 + 212;最后一片总长度 212 + 24 = 236,片偏移 (632 × 2) ÷ 8 = 158。
- A 对236,158。
- B 错212 只是最后一片的数据长度,总长度还要加 24 B 首部。
- C 错220、160 是按首部 20 B 算出的结果(每片 640 B、最后一片 200 B 数据);首字节 0x46 说明首部是 24 B。
- D 错1264 是前面两片的数据字节数,片偏移字段要除以 8。
复习:回到正文。
- 每片数据没有取 8 的倍数(直接用 MTU − 首部)。
- 总长度忘了加首部,只写了数据长度。
- 片偏移写成字节数,没有除以 8。
- 首部带选项(24 B)时仍按 20 B 算。
⑨ TCP 序号、确认号与发送窗口
- 数据从 ISN + 1 开始编号(SYN 占 ISN);一个报文段 seq = 它第一个数据字节的序号,覆盖 seq ~ seq + 长度 − 1。
- 确认号 = 期望收到的下一个字节的序号(累积确认:缺了哪一段,就停在那一段的第一个字节)。
- FIN 占一个序号:FIN 的 seq = 最后一个数据字节的序号 + 1,对它的确认号再 + 1。
- 可用窗口 = 窗口右沿 − 已发送的最大序号:右沿 = 确认号 + min(rwnd, cwnd) − 1。
单位口径:序号、窗口按字节;“MSS”题注意换算;第三次握手不带数据就不占序号。
- A. 3400
- B. 3401
- C. 4001
- D. 4501
展开解析
B三段依次是 3001 ~ 3400、3401 ~ 4000、4001 ~ 4500;缺 3401 开始的那段,累积确认停在 3401。
- 数据从 3001 开始:第 1 段 3001 ~ 3400,第 2 段 3401 ~ 4000,第 3 段 4001 ~ 4500。
- 第 2 段没到,乙期望的下一个字节仍是 3401,收到第 3 段后发出的确认号还是 3401(这是一个重复确认)。
- A 错3400 是已按序收到的最后一个字节的序号;确认号要写“期望的下一个”,即 3401。
- B 对累积确认停在缺失的第一个字节。
- C 错4001 是第 3 段的起始序号,确认号不会“跳过”缺失的第 2 段。
- D 错4501 相当于把三段都确认了;TCP 只做累积确认,第 2 段没到就不能确认它后面的数据。
复习:回到正文。
- A. 1000 B
- B. 2000 B
- C. 3000 B
- D. 4000 B
展开解析
A发送窗口 = min(3000, 4000) = 3000,从 5001 到 8000;已发到 7000,还能发 7001 ~ 8000 共 1000 B。
- A 对窗口右沿 8000 − 已发 7000 = 1000 B。
- B 错2000 B 是按拥塞窗口 4000 算的(右沿 9000);发送窗口取 rwnd 和 cwnd 中的较小值 3000。
- C 错3000 B 是发送窗口的大小,但窗口从确认号 5001 开始,其中 5001 ~ 7000 已经发出去了。
- D 错4000 B 是拥塞窗口,既没有取较小值,也没有减去已发送未确认的数据。
复习:回到正文。
- A. 11001,11002
- B. 11000,11001
- C. 11001,11001
- D. 11002,11003
展开解析
A数据占 9001 ~ 11000,FIN 序号 11001,FIN 占一个序号,确认号 11002。
- A 对FIN = 11001,确认号 11002。
- B 错11000 是最后一个数据字节的序号;FIN 排在它后面,序号是 11001。
- C 错确认号 11001 等于没有确认 FIN:FIN 占一个序号,对它的确认号要再加 1。
- D 错11002 是把 SYN 占的那个序号又多加了一次(数据本来就从 ISN + 1 = 9001 开始,已经算过 SYN)。
复习:回到正文。
- 确认号写成“最后收到的字节序号”,少加 1。
- 累积确认时跳过了丢失的段。
- 窗口从“已发送的末尾”而不是“确认号”算起。
- 忘了 SYN、FIN 各占一个序号。
⑩ 拥塞窗口逐轮计算
- 列表:轮次(每轮 1 个 RTT)、本轮开始时的 cwnd、ssthresh。
- cwnd < ssthresh:慢开始,每轮翻倍,但不越过 ssthresh(到门限那一轮取 ssthresh);cwnd ≥ ssthresh:拥塞避免,每轮 + 1。
- 超时:ssthresh = cwnd ÷ 2,cwnd = 1,重新慢开始。
- 3 个重复确认:ssthresh = cwnd ÷ 2,cwnd = 新的 ssthresh(快恢复),接着拥塞避免。
- 发送窗口 = min(cwnd, rwnd)。
单位口径:本书与王道一致:快恢复 cwnd = 新 ssthresh(不加 3);“经过 k 个 RTT 后”就是从事件发生时数 k 轮。
- A. 10 MSS
- B. 11 MSS
- C. 14 MSS
- D. 16 MSS
展开解析
A新门限 9:1 → 2 → 4 → 8 → 9 → 10。
- 超时:ssthresh = 18 ÷ 2 = 9,cwnd = 1。
- 慢开始:1 → 2 → 4 → 8,再翻倍会到 16,越过门限,只取到 9(第 4 个 RTT);之后拥塞避免 + 1:第 5 个 RTT 后为 10。
- A 对1, 2, 4, 8, 9, 10。
- B 错11 是用旧门限 10 算的(1, 2, 4, 8, 10, 11);超时后门限要改成 18 ÷ 2 = 9。
- C 错14 是把超时当成了 3 个重复确认:cwnd 只减半到 9 再每轮加 1(9 → 14);超时要让 cwnd 回到 1 重新慢开始。
- D 错16 是一直翻倍、没有在门限处停下:8 翻倍要越过门限 9,只能取 9,之后改为加 1。
复习:回到正文。
- A. 13 MSS
- B. 16 MSS
- C. 17 MSS
- D. 30 MSS
展开解析
Cssthresh = 13,cwnd = 13,之后每 RTT + 1:14、15、16、17。
- A 错13 是按超时处理的结果(cwnd 回到 1:1, 2, 4, 8, 13);3 个重复确认只把 cwnd 减半,不回到 1。
- B 错16 只经过了 3 个 RTT,少数了一轮。
- C 对13 + 4 = 17。
- D 错30 = 26 + 4,收到 3 个重复确认后没有把 cwnd 减半。
复习:回到正文。
- A. 4 个 RTT
- B. 24 个 RTT
- C. 26 个 RTT
- D. 30 个 RTT
展开解析
C慢开始 2 → 4 → 8(2 个 RTT),拥塞避免 8 → 32(24 个 RTT),共 26 个。
- A 错4 个 RTT 是一路翻倍(2 → 4 → 8 → 16 → 32)的结果,忽略了门限 8 KB:到 8 KB 之后只能每 RTT 加 1 KB。
- B 错24 个 RTT 只算了拥塞避免阶段(8 → 32),漏了前面慢开始的 2 个 RTT。
- C 对2 + 24 = 26。
- D 错30 个 RTT 是从 2 KB 起就每 RTT 加 1 KB 的结果,忘了门限之前是慢开始(翻倍)。
复习:回到正文。
- 到门限那一轮仍然翻倍(越过了门限)。
- 超时后门限仍用旧值。
- 把 3 个重复确认当超时(cwnd 回到 1),或者干脆不减半。
- 轮次多数或少数一轮。
⑪ 超时重传时间 RTO
- 第一个样本:RTTS = 样本,RTTD = 样本 ÷ 2。
- 之后(教材次序):先算新 RTTS = (1 − α) × 旧 RTTS + α × 样本(α = 1/8);再用新的 RTTS 算 RTTD = (1 − β) × 旧 RTTD + β × |新 RTTS − 样本|(β = 1/4)。
- RTO = RTTS + 4 × RTTD。
- 超时重传:RTO 加倍;重传过的报文段不采样(Karn)。
单位口径:RFC 6298 的次序相反(先用旧 RTTS 算 RTTD),两种次序结果略有差别;408 按教材次序,题目若注明按 RFC 则照题目。
- A. 102.5 ms
- B. 121.875 ms
- C. 172.5 ms
- D. 180 ms
展开解析
DRTTS = 102.5,RTTD = 19.375,RTO = 102.5 + 77.5 = 180 ms。
- RTTS = 7/8 × 100 + 1/8 × 120 = 87.5 + 15 = 102.5 ms。
- RTTD = 3/4 × 20 + 1/4 × |102.5 − 120| = 15 + 4.375 = 19.375 ms。
- RTO = 102.5 + 4 × 19.375 = 180 ms。
- A 错102.5 ms 只是新的 RTTS,还要加上 4 倍的 RTTD。
- B 错121.875 = 102.5 + 19.375,RTTD 忘了乘 4。
- C 错172.5 = 102.5 + 4 × 17.5,把 RTTD 直接取成 |102.5 − 120| = 17.5,没有和旧的 RTTD 做加权平均。
- D 对102.5 + 4 × 19.375 = 180。
若按 RFC 6298 的次序(先用旧 RTTS 100 算 RTTD = 15 + 5 = 20),RTO = 102.5 + 80 = 182.5 ms——这就是两种口径的差别,所以题目会写明次序。
复习:回到正文。
- A. 200 ms
- B. 400 ms
- C. 600 ms
- D. 800 ms
展开解析
D每超时一次 RTO 加倍:200 → 400 → 800 ms。
- A 错200 ms 是最初的 RTO;超时说明网络时延变大了,RTO 要加倍,不能保持不变。
- B 错400 ms 只加倍了一次,那是第一次重传时的 RTO。
- C 错600 ms 是每次加 200 ms 的线性增加;RTO 是按倍数(指数)退避的。
- D 对两次超时,加倍两次:800 ms。
复习:回到正文。
- 忘了乘 4。
- RTO 里用了旧的 RTTS 或直接用样本。
- 超时后 RTO 线性增加,而不是加倍。
⑫ 含握手与释放的总时间
- 握手:从发 SYN 到能发数据需要 1 个 RTT(第三次握手可以捎带第一个数据段)。
- 数据:按 cwnd 逐轮发送,每轮 1 个 RTT(忽略发送时延时),数一数几轮发完、最后一轮的确认什么时候回来。
- 释放:数据全部被确认后发 FIN,对方 ACK + FIN 回来要 1 个 RTT;主动关闭方再等 2MSL 才进入 CLOSED。
单位口径:“至少”就按无差错、对方立即响应算;“收到全部确认”是最后一轮发出后再过 1 个 RTT。
- A. 80 ms
- B. 100 ms
- C. 120 ms
- D. 220 ms
展开解析
B握手 1 RTT;数据按 1、2、4、3 个段分 4 轮发完,第 4 轮的确认在 5 RTT 时到达:100 ms。
- 0 ~ 1 RTT:前两次握手。第 1 RTT 末发第三次握手并捎带第 1 个段(cwnd = 1)。
- 第 2、3、4 RTT 末依次收到确认并发出 2、4、3 个段(cwnd 2 → 4 → 8,最后只剩 3 个)。
- 第 5 RTT 末收到最后的确认:5 × 20 = 100 ms。
- A 错80 ms = 4 RTT,只算了发数据的 4 轮,漏了握手的 1 个 RTT。
- B 对1(握手)+ 4(数据)= 5 RTT。
- C 错120 ms 多算了 1 个 RTT:以为第三次握手之后还要再等 1 个 RTT 才能发数据;其实第三次握手就能捎带第一个段。
- D 错220 ms = 11 RTT,把数据当成停止—等待、一个段一个 RTT(10 个)再加握手;TCP 用窗口,一轮可以发多个段。
复习:回到正文。
- A. 0.12 s
- B. 1.12 s
- C. 2.10 s
- D. 2.12 s
展开解析
D100 ms 后发 FIN,1 个 RTT 后收到 S 的 FIN 并回 ACK(120 ms),再等 2MSL = 2 s:2.12 s。
- A 错0.12 s 是 H 发出最后一个 ACK 的时刻,没有等 TIME-WAIT 的 2MSL;主动关闭方发完最后的 ACK 还要等 2MSL 才进入 CLOSED。
- B 错1.12 s 在 TIME-WAIT 只等了 1 个 MSL;主动关闭方要等 2MSL。
- C 错2.10 s 漏了释放连接的 1 个 RTT:H 发出 FIN 后要等 S 的 FIN 回来(20 ms)才进入 TIME-WAIT。
- D 对0.12 s + 2 s。
复习:回到正文。
- 漏算握手的 1 个 RTT,或多算(以为第三次握手后还要再等)。
- 数据按“一个段一个 RTT”算,没有用窗口。
- TIME-WAIT 只等 1 个 MSL。
- 释放过程多算或少算 RTT。
⑬ HTTP:一个网页需要几个 RTT
- 每建立一条 TCP 连接 1 个 RTT;每个“请求—响应”1 个 RTT(忽略传输时间时)。
- 非持续连接:每个对象 2 RTT;持续连接非流水线:第一个对象 2 RTT,之后每个 1 RTT;持续连接流水线:HTML 2 RTT,全部引用对象一起再 1 RTT。
- 非持续 + 并行 m 条连接:HTML 2 RTT,引用对象分 ⌈N ÷ m⌉ 批,每批 2 RTT。
- 若要先做 DNS 查询,把 DNS 的时间加在最前面。
单位口径:“忽略对象的传输时间 / 发送时延”时只数 RTT;题目给了传输时间就逐个加上。
- A. 90 ms
- B. 180 ms
- C. 210 ms
- D. 360 ms
展开解析
C建连接 1 RTT + 6 个对象各 1 个请求—响应 = 7 RTT = 210 ms。
- A 错90 ms = 3 RTT 是流水线方式:5 个图片的请求连续发出,一起 1 个 RTT 收回。
- B 错180 ms = 6 RTT 漏了建立 TCP 连接的 1 个 RTT,只算了 6 个请求—响应。
- C 对1 + 6 = 7 RTT。
- D 错360 ms = 12 RTT 是非持续连接:每个对象都要重新建连接,各 2 RTT。
复习:回到正文。
- A. 90 ms
- B. 120 ms
- C. 150 ms
- D. 180 ms
展开解析
DHTML 2 RTT;5 张图分 ⌈5 ÷ 3⌉ = 2 批,每批 2 RTT;共 6 RTT = 180 ms。
- A 错90 ms = 3 RTT 是持续连接加流水线的结果;本题是非持续连接,每个对象都要重新建立 TCP 连接。
- B 错120 ms = 4 RTT,以为 5 张图能一批取完;最多 3 条并行连接,要分 2 批。
- C 错150 ms = 5 RTT,第二批只算了 1 个 RTT,好像连接已经建好;非持续连接每批都要重新握手,各 2 RTT。
- D 对2 + 2 × 2 = 6 RTT。
复习:回到正文。
- 非持续连接忘了每个对象都要重新握手。
- 持续连接忘了第一次建立连接的 1 个 RTT。
- 并行时批数算错(⌈5 ÷ 3⌉ = 2)。
⑭ DNS:查询次数与时间
- 主机 → 本地域名服务器:一般递归,1 次查询。
- 本地服务器无缓存、迭代查询:从根开始,域名每多一级“单独设区”的层次,就多问一台服务器(根、顶级、二级……直到存有该主机记录的权限服务器)。
- 缓存里有某一级服务器的地址,就从那一级开始问;缓存里直接有答案,次数为 0。
- 时间 = 主机到本地的 RTT + 本地发出的每次查询的 RTT 之和。
单位口径:题目问“本地域名服务器发出的查询报文数”时不算主机发给本地的那一次;“最多 4 次”只是 2016-40 那道题的层数,不是通用结论。
- A. 1 个
- B. 4 个
- C. 5 个
- D. 6 个
展开解析
C依次问根、cn、edu.cn、ntu.edu.cn、dept.ntu.edu.cn 的服务器,共 5 个。
- A 错1 个是本地服务器向上一级做递归查询时的次数;题目说采用迭代查询,本地要一级一级自己去问。
- B 错4 个是把“最多 4 次”当成了通用结论;这里多了一级单独设区的 dept,要问 5 台服务器。
- C 对根 → cn → edu.cn → ntu.edu.cn → dept.ntu.edu.cn。
- D 错6 个把主机 H 发给本地服务器的那一次也算进来了;题目问的是本地服务器发出的查询。
复习:回到正文。
- A. 2 个,100 ms
- B. 2 个,102 ms
- C. 3 个,152 ms
- D. 5 个,252 ms
展开解析
B从 ntu.edu.cn 开始问:ntu.edu.cn、dept.ntu.edu.cn 两次;时间 2 + 2 × 50 = 102 ms。
- A 错100 ms 漏了 H 与本地服务器之间的 2 ms 往返。
- B 对2 次查询,2 + 100 = 102 ms。
- C 错3 个多问了 edu.cn 的服务器;缓存里已有 ntu.edu.cn 的服务器地址,可以直接从它问起。
- D 错5 个、252 ms 是没有利用缓存、从根开始问的结果。
复习:回到正文。
- 把“最多 4 次”当成通用结论。
- 把主机到本地的那次查询也算进本地发出的查询。
- 忘了缓存可以跳过前几级。
⑮ CRC 循环冗余校验
- 生成多项式 → 比特串:x3 + x + 1 → 1011(最高次 r = 3)。
- 数据后面补 r 个 0,用模 2 除法(异或,不借位)除以生成串,余数(r 位)就是 FCS。
- 发送 = 数据 + FCS;接收方把收到的整串直接除以生成串,余数全 0 才判为无差错。
单位口径:补 0 的个数 = 生成多项式的最高次数 r = 生成串位数 − 1;FCS 一定是 r 位(不足前面补 0)。
- A. 001
- B. 110
- C. 010
- D. 011
展开解析
D数据后补 3 个 0:10101100000 模 2 除以 1011,余数 011。
- G(x) = x3 + x + 1:x3、x2、x1、x0 的系数依次是 1、0、1、1 → 1011,r = 3。
- 数据后补 3 个 0:10101100 000,做模 2 除法(遇首位 1 就异或 1011,不借位)到底,余数 011。
- 发送 10101100 011;代回检验:整串除以 1011 余数为 000。
- A 错001 是没有补 0、直接用 10101100 除以 1011 得到的余数;要先在数据后补 r = 3 个 0 再除。
- B 错110 是补了 4 个 0 后得到的余数——把生成串的位数 4 当成了 r;补 0 的个数等于最高次数 3。
- C 错010 是用 1101 作除数得到的:把 x3 + x + 1 的系数顺序写反了(1101 对应 x3 + x2 + 1)。
- D 对补 3 个 0 后模 2 除以 1011,余数 011。
复习:回到正文。
- A. 余数为 101,有差错,丢弃
- B. 余数为 000,无差错,接受
- C. 先去掉末尾 3 位 FCS 再除,余数为 000,无差错
- D. 余数不为 0,根据余数找出出错的位,纠正后接受
展开解析
A收到的整串直接模 2 除以 1011,余数 101 不为 0,判为有差错。
- A 对整串除以 1011,余数非 0 → 出错,丢弃。
- B 错把整串 10100100011 模 2 除以 1011,余数是 101 而不是 000(正确的帧应是 10101100011,这里第 5 位变了)。
- C 错接收方检验时不去掉 FCS,而是连 FCS 一起整串除以生成串;去掉 FCS 再除,得到的是“应有的 FCS”,不会是 000。
- D 错408 的口径中 CRC 在数据链路层只用来检错,检出错误就丢弃,不做纠错(纠错要用海明码)。
复习:回到正文。
- 补的 0 个数等于生成串的位数(多补了 1 个)。
- 没补 0 就直接除。
- 模 2 除法做成了普通减法(借位)。
- 余数不足 r 位时没有在前面补 0。
⑯ 海明码:校验位数与纠错定位
- k 位信息要 r 位校验,满足 2r ≥ k + r + 1。
- 位置从 1 编号,1、2、4、8……(2 的幂)放校验位,其余放信息位。
- 校验位 Pi 管所有“位置号的二进制在第 i 位上为 1”的位;偶校验:管到的位(含它自己)中 1 的个数为偶数。
- 接收方重算每个校验组:出错的组对应的权值相加(或把所有为 1 的位的位置号异或),结果就是出错位的位置;0 表示无错。
单位口径:码距 d:检错 d − 1 位、纠错 ⌊(d − 1)/2⌋ 位;海明码 d = 3,能纠 1 位错。
- A. 1
- B. 4
- C. 5
- D. 11
展开解析
B2r ≥ 11 + r + 1:r = 4 时 16 ≥ 16,恰好满足。
- A 错1 位是奇偶校验,只能检出奇数个错,不能确定是哪一位错,也就无法纠错。
- B 对24 = 16 ≥ 11 + 4 + 1 = 16。
- C 错5 是把不等式当成了严格大于(16 > 16 不成立而多加了一位);条件是“大于或等于”,等号成立就够了。
- D 错11 是“每个信息位配一个校验位”的重复码思路,远多于需要;海明码用 r 位校验组合出 2r 种状态来指出错误位置。
复习:回到正文。
- A. 第 1 位
- B. 第 2 位
- C. 第 4 位
- D. 第 6 位
展开解析
D把值为 1 的位的位置号异或:1、3、5、6、7 → 结果 6,第 6 位出错,纠正后为 1010101,信息位 1101。
- P1 组(1、3、5、7):4 个 1;P2 组(2、3、6、7):3 个 1;P4 组(4、5、6、7):3 个 1。
- 奇数个 1 的组(出错的组)是 P2、P4,权值 2 + 4 = 6 → 第 6 位出错。
- A 错第 1 位所在的 P1 组(1、3、5、7)中 1 的个数是偶数,校验通过;若是第 1 位错,P1 组应不通过。
- B 错只看到 P2 组不通过就认定是第 2 位,漏了 P4 组也不通过;两组都出错时,错位 = 2 + 4。
- C 错只看到 P4 组不通过就认定是第 4 位,同样漏了 P2 组;第 4 位出错时只有 P4 一组不通过。
- D 对P2、P4 两组不通过,2 + 4 = 6。
复习:回到正文。
- 把 2r ≥ k + r + 1 写成 2r ≥ k(漏了 r + 1)或用严格大于。
- 位置从 0 编号。
- 校验组记错(P2 管 2、3、6、7……)。
⑰ 检验和(IP / UDP / TCP)
- 把要检验的内容按 16 位一组相加(UDP / TCP 还要加上 12 B 伪首部;奇数字节末尾补一个全 0 字节)。
- 最高位的进位“回卷”加到最低位,直到没有进位(反码求和)。
- 对结果取反,就是检验和;接收方把包括检验和在内的各组反码相加,结果全 1(0xFFFF)才判为无差错。
单位口径:十六进制逐位相加;取反 = 用 F 减每一位;IP 首部检验和只覆盖首部。
- A. 0x8217
- B. 0x8219
- C. 0x7DE8
- D. 0x8218
展开解析
A和 0x27DE6,回卷得 0x7DE8,取反得 0x8217。
- 0xB5C3 + 0x6D4A + 0x91E7 + 0xC8F2 = 0x27DE6。
- 最高位的进位 0x2 回卷加到低 16 位:0x7DE6 + 0x2 = 0x7DE8。
- 取反:0x8217。验证:四个字加上检验和,反码求和 = 0xFFFF。
- A 对回卷后取反。
- B 错0x8219 是进位直接丢掉(只取低 16 位 0x7DE6)再取反的结果,没有做回卷。
- C 错0x7DE8 是反码求和的结果本身,还没有取反。
- D 错0x8218 是取反后又加了 1,把反码运算当成了补码运算。
复习:回到正文。
- A. 0x3A7B
- B. 0x7B3A
- C. 0x84C5
- D. 0x84C6
展开解析
C取反:0x7B3A → 0x84C5(每位用 F 去减)。
- A 错0x3A7B 只是把两个字节对调了,不是取反;检验和与字节顺序无关地按 16 位整体取反。
- B 错0x7B3A 是求和的结果,忘了最后一步取反。
- C 对F − 7 = 8,F − B = 4,F − 3 = C,F − A = 5。
- D 错0x84C6 = 取反后加 1,那是补码;Internet 检验和用反码。
复习:回到正文。
- 进位直接丢掉,没有回卷。
- 求和后忘了取反。
- 把反码求和当成补码(取反后又加 1)。
⑱ CDMA:正交性与内积
- 规格化内积 S · T = (1/m) × Σ SiTi;两站的码片序列正交 ⟺ 内积为 0。
- 自己与自己的内积 = 1,与自己的反码的内积 = −1。
- 解码:把收到的叠加序列与某站的码片序列求规格化内积:1 → 该站发 1;−1 → 发 0;0 → 该站没发。
单位口径:码片用 ±1 表示(题目若给 0/1,先把 0 换成 −1);规格化要除以码片数 m。
- A. (−1 +1 −1 −1 +1 +1 −1 +1)
- B. (−1 −1 +1 +1 −1 −1 +1 −1)
- C. (−1 +1 +1 +1 −1 −1 +1 −1)
- D. (+1 −1 +1 +1 +1 +1 −1 +1)
展开解析
D与 S 逐位相乘再相加,只有最后一个和为 0。
- A:与 S 的内积 = −8(是 S 的反码,规格化 −1)。
- B:只改了 1 个码片,内积 = 8 − 2 = 6。
- C:改了 2 个码片,内积 = 8 − 4 = 4。
- D:改了 4 个码片(后 4 个取反),内积 = 8 − 8 = 0,正交。
- A 错这是 S 的反码,S 发送比特 0 时用的就是它;它与 S 的规格化内积是 −1,不是 0,不正交。
- B 错只有第 1 个码片与 S 不同,内积 = 7 − 1 = 6,规格化 0.75 ≠ 0。
- C 错有 2 个码片不同,内积 = 6 − 2 = 4,规格化 0.5 ≠ 0;正交要求恰好一半码片相同、一半不同。
- D 对后 4 个码片取反,4 个相同、4 个相反,内积为 0。
复习:回到正文。
- 内积没除以 m,把 4 或 −4 当成结论。
- 把“反码”当成“正交”(反码的内积是 −1,不是 0)。
- 只比较了前几个码片。
9.4全真模拟卷 A(计网 25 分 · 限时 35 分钟)
本卷按 408 的题位和分值出:第 33 ~ 40 题为选择题(每题 2 分,共 16 分),第 47 题为综合应用题(9 分)。建议用时:选择题 15 分钟,47 题 20 分钟。选择题可以直接点选项(先只记下你的选择),做完点“交卷”统一判分;47 题先在纸上写完再展开答案,按评分细则自己打分。所有数字都由程序核对(verify/09/p9/mock_a.py),本卷的 47 题是“报文首部分析(抓包)”——这一类 2012 年后再没考过。
一、单项选择题(第 33 ~ 40 题,每题 2 分)
- A. 网际层向上只提供无连接的数据报服务
- B. 传输层协议只在端系统(主机)中实现
- C. ICMP 报文封装在 IP 数据报中传送
- D. 应用层协议都必须建立在 TCP 之上
展开解析
DDNS、DHCP、TFTP、SNMP、RIP 等应用层协议都使用 UDP。
- A 不选正确:TCP/IP 的网际层(IP)只提供尽最大努力交付的无连接数据报服务,可靠性交给传输层。
- B 不选正确:路由器只有网络层及以下三层,传输层只在两端的主机里运行(端到端)。
- C 不选正确:ICMP 报文作为 IP 数据报的数据部分发送(协议字段 1),但 ICMP 属于网络层。
- D 选应用层协议可以用 TCP,也可以用 UDP:DNS 查询、DHCP、TFTP 都用 UDP,所以“都必须建立在 TCP 之上”是错的。
复习:回到正文。
- A. 4
- B. 8
- C. 16
- D. 256
展开解析
C2 × 3k × log2V = 24k → log2V = 4 → V = 16。
- 奈氏准则:最高码元速率 2W = 6000 Baud。
- 每个码元要携带 24000 ÷ 6000 = 4 bit,V = 24 = 16。
- A 错4 是每个码元要携带的比特数 log2V,还要换成状态数 24 = 16。
- B 错8 = 24k ÷ 3k,直接用带宽 W 去除,既漏了奈氏准则的“2W”,又把比特数当成了状态数。
- C 对每码元 4 bit,16 种状态。
- D 错256 = 28,用 W 而不是 2W 作码元速率(每码元算成 8 bit);奈氏准则的码元速率上限是 2W。
复习:回到正文。
- A. 2
- B. 3
- C. 4
- D. 7
展开解析
B窗口滑到 3 ~ 1(3、4、5、6、7、0、1),其中 3 ~ 6 已发,还能发 7、0、1 三个新帧。
- 确认 2 号帧后,窗口左沿移到 3,窗口内是 3、4、5、6、7、0、1(序号模 8 循环)。
- 3 ~ 6 已经发出、尚未确认,新帧只有 7、0、1,共 3 个。
- A 错2 是把“对 2 号帧的确认”理解成“期望收到 2 号帧”(只确认到 1 号)得出的:窗口变成 2 ~ 0,新帧只剩 7、0。题目已说明确认 2 表示 0 ~ 2 都收到了。
- B 对窗口 3 ~ 1 中未发送的是 7、0、1。
- C 错4 是把窗口当成 23 = 8 算的;GBN 的发送窗口不能超过 2n − 1 = 7,题目也给定为 7。
- D 错7 是以为收到确认后整个窗口都空出来了;窗口里的 3 ~ 6 已发出未确认,仍占着位置。
复习:回到正文。
- A. 只有 C
- B. C 和 E
- C. A、B、C、E
- D. 没有主机能收到
展开解析
A帧 ② 让 S 学到 C 在端口 3;帧 ③ 由集线器送到 C,S 查表发现 C 也在端口 3(入口),不转发。
- 帧 ①:S 学到 A 在端口 1;C 不在表中 → 从端口 2、3、4 泛洪,B、C、D、E 都收到。
- 帧 ②:集线器把它送给 D(D 丢弃);S 学到 C 在端口 3,A 在端口 1 → 只从端口 1 转发。
- 帧 ③:集线器把它送给 C(以及交换机端口 3);S 学到 D 在端口 3,查到 C 也在端口 3,与入口相同 → 丢弃,不转发。所以只有 C 收到。
- A 对集线器把帧送到 C;交换机发现目的端口就是入口,过滤掉。
- B 错E 收到的前提是交换机泛洪;但帧 ② 已经让 S 学到 C 在端口 3,帧 ③ 不再泛洪。
- C 错这是交换表为空时的泛洪结果(像帧 ①);帧 ② 之后 S 已经知道 C 的位置。
- D 错交换机确实不转发帧 ③,但 C 和 D 接在同一个集线器上,集线器是物理层设备,会把帧直接送给 C。
复习:回到正文。
- A. 254,202.118.41.0/24
- B. 254,202.118.42.0/24
- C. 256,202.118.41.0/24
- D. 4094,202.118.41.0/24
展开解析
A16 = 24,借 4 位:/24,每个子网 254 个可分配地址;第 10 个子网的第 3 字节 = 32 + 9 = 41。
- A 对/20 借 4 位得 /24;第 1 个是 32,第 10 个是 32 + 9 = 41。
- B 错42 = 32 + 10,把“第 10 个”当成了“从第 0 个数起的第 10 个”;第 1 个子网是 202.118.32.0,第 10 个应加 9。
- C 错256 是每个子网的地址总数,没有减去网络地址和广播地址。
- D 错4094 = 212 − 2 是整个 /20 地址块的可分配数,没有考虑划分子网。
复习:回到正文。
- A. 1,5,1,8
- B. 2,4,2,9
- C. 3,6,2,9
- D. 2,6,2,9
展开解析
D先把 R3 的距离都加 1:{2,6,2,9},再逐项比较。
- R3 发来的每一项距离先加 1(R1 到 R3 一跳):N1 2、N2 6、N3 2、N4 9。
- N1:2 < 3,改为经 R3、距离 2。N2:原下一跳就是 R3,无条件更新为 6(即使变大)。
- N3:2 不小于原来的 2,不变(仍经 R4)。N4:原来没有,新增 9。
- A 错1,5,1,8 是 R3 自己到各网络的距离,R1 经过 R3 还要多 1 跳,忘了加 1。
- B 错N2 仍写 4,是以为“新距离更大就不更新”;但 R1 到 N2 本来就经 R3,R3 说自己到 N2 变成了 5,R1 必须相信它,改为 6。
- C 错N1 仍写 3,是以为只有原下一跳是 R3 的项才会改;经 R3 到 N1 只要 2,比原来的 3 小,应该更新。
- D 对按规则逐项更新后为 2,6,2,9。
复习:回到正文。
- A. 36 B,DNS 服务器发给客户
- B. 36 B,客户发给 DNS 服务器
- C. 44 B,客户发给 DNS 服务器
- D. 24 B,客户发给 DNS 服务器
展开解析
B源端口 0x0489 = 1161(短暂端口),目的端口 0x0035 = 53(DNS),长度 0x002C = 44,数据 44 − 8 = 36 B。
- 前 2 字节源端口 0x0489 = 1161;接着 2 字节目的端口 0x0035 = 53,是 DNS 的熟知端口。
- 长度字段 0x002C = 44,包括 8 B 首部,数据部分 36 B。
- 目的端口是熟知端口 53、源端口是短暂端口,所以是客户发给 DNS 服务器的查询。
- A 错方向反了:53 出现在目的端口字段,说明是发给 DNS 服务器的;服务器的回答才会以 53 作源端口。
- B 对数据 36 B;目的端口 53,是发往 DNS 服务器的。
- C 错44 是 UDP 长度字段的值,它包括 8 B 首部,数据部分是 44 − 8 = 36 B。
- D 错24 = 44 − 20,按 TCP / IP 首部 20 B 减了;UDP 首部只有 8 B。
复习:回到正文。
- A. SMTP,SMTP,POP3
- B. HTTP,HTTP,POP3
- C. HTTP,SMTP,POP3
- D. SMTP,HTTP,IMAP
展开解析
C浏览器与网页邮箱服务器之间用 HTTP;邮件服务器之间总是用 SMTP;用客户端下载用 POP3(或 IMAP)。
- A 错第一段甲用的是浏览器,浏览器与网页邮件服务器之间用 HTTP,不是 SMTP(用户代理是 Outlook 一类客户端时第一段才用 SMTP)。
- B 错邮件服务器之间转发邮件仍然用 SMTP;网页邮件只改变了用户与服务器之间的那一段。
- C 对HTTP、SMTP、POP3。
- D 错服务器之间用的是 SMTP 而不是 HTTP;而且第一段是浏览器访问,用 HTTP 而不是 SMTP,两段都颠倒了。
复习:回到正文。
二、综合应用题(第 47 题,9 分)
主机 H 通过路由器 R 和因特网访问服务器 S。在 H 的网卡上依次捕获到 3 个 IP 分组①、②、③,下表给出每个分组从 IP 首部开始的前若干字节(以十六进制表示;①、② 各 44 B,③ 只给出前 40 B,其后是 TCP 的数据部分)。IP 首部格式见 4.2 节,TCP 首部格式见 5.3 节。
| 分组 | 偏移 | 字节(十六进制) |
|---|---|---|
| ① | 0000 | 45 00 00 2c 1a 2b 40 00 40 06 c6 0c de 14 0f 06 |
| 0010 | 65 2a 08 50 c7 4e 00 50 6e 2f 1c 00 00 00 00 00 | |
| 0020 | 60 02 fa f0 f0 d2 00 00 02 04 05 b4 | |
| ② | 0000 | 45 00 00 2c 00 00 40 00 31 06 ef 37 65 2a 08 50 |
| 0010 | de 14 0f 06 00 50 c7 4e 0a 3b 7d 44 6e 2f 1c 01 | |
| 0020 | 60 12 72 10 f2 5e 00 00 02 04 05 78 | |
| ③ | 0000 | 45 00 01 c4 1a 2c 40 00 40 06 c4 73 de 14 0f 06 |
| 0010 | 65 2a 08 50 c7 4e 00 50 6e 2f 1c 01 0a 3b 7d 45 | |
| 0020 | 50 18 fa f0 ec 80 00 00 |
请回答:
(1) 哪几个分组是 H 发出的?H 的 IP 地址是什么?H 访问的是哪种应用,依据是什么?(2 分)
(2) 分组①、② 的 TCP 首部中,哪些控制位为 1?分组② 的确认号是多少(十六进制)?为什么是这个值?(2 分)
(3) 分组③ 的 TCP 数据部分有多少字节?S 收到分组③ 后,发给 H 的确认报文段的确认号是多少(十六进制)?(2 分)
(4) 分组② 到达 H 时 TTL 是多少?若 S 发出它时 TTL = 64,它途经了几个路由器?这 3 个分组在途中能否被路由器分片?说明理由。(2 分)
(5) H、S 在连接建立时各自通告的 MSS 是多少?此后 H 发给 S 的每个报文段最多携带多少字节数据?(1 分)
先在纸上自己做一遍,再点这里展开满分解答
IP 首部第 13 ~ 16 字节是源 IP 地址。分组①、③ 的源地址为 de 14 0f 06 = 222.20.15.6,分组② 的目的地址也是它,所以①、③ 是 H 发出的,H 的 IP 地址为 222.20.15.6(1 分)。IP 首部长度 = 5 × 4 = 20 B,TCP 首部从第 21 字节开始;分组①、③ 的目的端口为 00 50 = 80,是 HTTP 的熟知端口,H 在访问 Web 服务(1 分)。
TCP 首部第 14 字节是控制位:分组① 为 0x02,只有 SYN = 1;分组② 为 0x12,SYN = 1、ACK = 1(1 分)。分组② 的确认号为 6e2f1c01,等于分组① 的序号 6e2f1c00 + 1:SYN 报文段不带数据,但要消耗一个序号(1 分)。
分组③ 的 IP 总长度 = 0x01c4 = 452 B,IP 首部 20 B;TCP 数据偏移字段为 5,TCP 首部 20 B;数据部分 = 452 − 20 − 20 = 412 B(1 分)。分组③ 的序号为 6e2f1c01,S 的确认号 = 6e2f1c01 + 412 = 6e2f1d9d(1 分)。
分组② 的 TTL 字段(第 9 字节)为 0x31 = 49,64 − 49 = 15,途经 15 个路由器(1 分)。3 个分组 IP 首部第 7、8 字节都是 40 00:DF = 1、MF = 0、片偏移 0,都是未分片的完整数据报,且不允许分片;若途中某段链路的 MTU 小于分组长度,路由器只能丢弃它并向源主机发送 ICMP 终点不可达报文(1 分)。
分组①、② 的 TCP 首部长度为 6 × 4 = 24 B,多出的 4 B 是 MSS 选项(02 04 + 2 字节值):H 通告 0x05b4 = 1460,S 通告 0x0578 = 1400。MSS 是“我能接收的最大数据段”,所以 H 发给 S 的每个报文段最多携带 1400 B 数据(1 分)。
① 读字节时先由首部长度找到 TCP 首部的起点,不要默认“第 21 字节”以后就是 TCP 数据;② 确认号 = 对方序号 + 数据长度,SYN、FIN 另加 1;③ TTL 之差是途经的路由器数,与“跳数”是同一个数;④ “40 00”表示 DF = 1,是“不让分”而不是“已经分片”;⑤ MSS 由对方通告的值决定本方的最大段,方向不要弄反。本题 3 个分组的 IP 首部检验和、TCP 检验和都由程序按真实算法算出,可以自己验证。
| 评分点 | 分 |
|---|---|
| (1) 判断 H 发出的分组并写出 H 的地址 1 分;由目的端口 80 判断为 HTTP 1 分 | 2 |
| (2) 两个分组的控制位各 0.5 分;确认号及“SYN 占一个序号”的理由 1 分 | 2 |
| (3) 数据长度 1 分(只写 432 或 452 不得分);确认号 1 分 | 2 |
| (4) 路由器个数 1 分;能否分片的结论和依据(DF = 1)1 分 | 2 |
| (5) 两个 MSS 与 H 的最大数据长度,全对 1 分 | 1 |
卷 A 答案速查(做完再看)
| 题 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
|---|---|---|---|---|---|---|---|---|
| 答案 | D | C | B | A | A | D | B | C |
| 考点 | 1.5 | 2.2 | 3.3 | 3.9 | 4.3 | 4.8 | 5.2 | 6.4 |
47:报文首部分析(IP 首部 + TCP 首部 + 序号确认号 + TTL + DF + MSS)。自评:选择题全对、47 题 ≥ 8 分 ⇒ 本卷达到满分水平。
9.5全真模拟卷 B(计网 25 分 · 限时 35 分钟)
题位、分值与卷 A 相同。本卷的 47 题是“一次访问的全过程”,但换了两个新条件:DHCP 服务器和域名服务器都在另一个网络(要靠中继代理、要先解析网关),出口路由器做 NAPT。数字由 verify/09/p9/mock_b.py 核对。
一、单项选择题(第 33 ~ 40 题,每题 2 分)
- A. 比特,帧,分组
- B. 分组,帧,报文段
- C. 帧,报文段,分组
- D. 帧,分组,报文段
展开解析
D链路层:帧;网络层:IP 数据报(分组);TCP:报文段(UDP 叫用户数据报)。
- A 错整体下移了一层:比特是物理层的数据单位,帧才是链路层的。
- B 错前两个颠倒了:网络层加 IP 首部得到分组,链路层再加首部和尾部封装成帧。
- C 错后两个颠倒了:TCP 的数据单位叫报文段,交给网络层加上 IP 首部后才成为分组。
- D 对帧、分组、报文段。
复习:回到正文。
- A. 11010010
- B. 00101101
- C. 00111011
- D. 1010011001011001
展开解析
A逐位看每个比特周期中间的跳变:高→低 = 1,低→高 = 0。
- 8 个比特周期依次是:高低、高低、低高、高低、低高、低高、高低、低高。
- 按“前高后低 = 1”:1 1 0 1 0 0 1 0。
- A 对前高后低为 1、前低后高为 0:11010010。
- B 错00101101 是按相反的约定(前低后高 = 1)读的,每一位都反了;408 真题按“前高后低 = 1”。
- C 错00111011 是把它当成差分曼彻斯特编码读的(位开始处有跳变为 0、无跳变为 1);题目说明是曼彻斯特编码。
- D 错1010011001011001 是把每个比特周期的前后两半各当成一位、按不归零码读出的 16 位;曼彻斯特编码一个比特占两个半周期。
复习:回到正文。
- A. R 的 MAC,L 的 MAC,AP 的 MAC
- B. AP 的 MAC,L 的 MAC,S 的 MAC
- C. L 的 MAC,AP 的 MAC,R 的 MAC
- D. AP 的 MAC,L 的 MAC,R 的 MAC
展开解析
D去往 AP 的帧:地址 1 = 接收者 AP(BSSID),地址 2 = 发送者 L,地址 3 = 最终的目的 MAC——下一跳路由器 R。
- A 错地址 1 和地址 3 对调了:地址 1 永远是“这一段无线链路上的接收者”,这里是 AP。
- B 错S 在另一个 IP 网络,帧的目的 MAC 只能是本网络出口路由器 R 的 MAC;MAC 地址只在一段链路内有效,到不了 S。
- C 错地址 1、地址 2 对调了:L 是发送方,应在地址 2;地址 1 是接收方 AP。
- D 对接收方 AP、发送方 L、目的 MAC 为下一跳 R。
复习:回到正文。
- A. 3,3
- B. 8,1
- C. 8,3
- D. 10,3
展开解析
C交换机每个端口 1 个冲突域(集线器所在端口也只算 1 个):8 个;每个 VLAN 1 个广播域:3 个。
- A 错3 个冲突域是把每个 VLAN 当成一个冲突域;VLAN 隔离的是广播域,冲突域由交换机端口划分。
- B 错1 个广播域忽略了 VLAN:划分 VLAN 后,广播帧只在本 VLAN 内转发,3 个 VLAN 就是 3 个广播域。
- C 对冲突域 8、广播域 3。
- D 错10 是把集线器上的 3 台主机各算了一个冲突域(7 + 3);集线器不隔离冲突域,它连的 3 台主机和交换机端口 6 同在一个冲突域。
复习:回到正文。
- A. 第 1 片,后面还有分片
- B. 第 2 片,后面还有分片
- C. 第 3 片,后面还有分片
- D. 第 3 片,是最后一片
展开解析
C总长度 0x05dc = 1500,数据 1480 B;21 72 → MF = 1、片偏移 0x172 = 370,即前面已有 2960 B = 2 片。
- 第 3、4 字节:总长度 0x05dc = 1500 B,首部 20 B(首字节 45),每片数据 1480 B。
- 第 7、8 字节 21 72 = 0010 0001 0111 0010:DF = 0,MF = 1,片偏移 = 0 0001 0111 0010 = 370。
- 370 × 8 = 2960 B = 2 × 1480,前面已有 2 片,这是第 3 片;MF = 1,后面还有。
- A 错把片偏移 370 当成了字节数(370 < 1480,好像落在第 1 片里);片偏移以 8 B 为单位,370 × 8 = 2960 B。
- B 错2960 ÷ 1480 = 2 是它前面的片数,它自己是第 3 片,少数了一片。
- C 对前面 2 片,本片第 3 片,MF = 1。
- D 错MF = 1 表示后面还有分片;只有 MF = 0(且偏移不为 0)的才是最后一片。
复习:回到正文。
- A. 10,R2
- B. 10,R3
- C. 11,R3
- D. 13,R2
展开解析
A最短路径 R1 → R2 → R3 → R5 → R6,代价 2 + 3 + 1 + 4 = 10,下一跳 R2。
- 从 R1 出发:确定 R2(2);经 R2 更新 R3 = min(6, 2 + 3) = 5、R4 = 7。
- 确定 R3(5);经 R3 更新 R5 = 6。确定 R5(6);经 R5 更新 R6 = 10(R4 经 R5 为 8,不如 7)。
- 确定 R4(7);经 R4 到 R6 为 13,不更新。确定 R6(10),回溯路径 R1 → R2 → R3 → R5 → R6。
- A 对代价 10,第一跳是 R2。
- B 错代价对了,下一跳却写成了路径上的 R3;转发表里的“下一跳”是离开 R1 后到达的第一台路由器,即 R2。
- C 错11 是 R1 → R3 → R5 → R6(6 + 1 + 4):先走了 R1–R3 这条直连边;但经 R2 绕到 R3 只要 2 + 3 = 5,比直连的 6 还短。
- D 错13 是沿上面一排走的 R1 → R2 → R4 → R6(2 + 5 + 6);经 R3、R5 走下面一排更短。
复习:回到正文。
- A. 立即快重传序号为 300 的报文段
- B. 等到超时后,只重传序号为 300 的报文段
- C. 等到超时后,重传序号为 300、500、700 的报文段
- D. 收到第一个确认号为 300 的确认后,立即重传序号为 300 的报文段
展开解析
B接收方发出的确认号依次是 300、300、300:只有 2 个重复确认,凑不够 3 个,不能快重传,只能等超时。
- A 错快重传要收到 3 个重复确认;这里第 1 段的确认是 300,第 3、4 段各引起一个重复的 300,只有 2 个重复确认。
- B 对超时后 TCP 只重传最早未被确认的那个报文段(序号 300),收到后接收方一次确认到 900。
- C 错重传后面所有的段是 GBN 的做法;TCP 接收方会缓存失序到达的 500、700 两段,超时只重传最早未确认的那一段。
- D 错第一个确认号为 300 的确认是对第 1 段的正常确认,说明 100 ~ 299 收到了,不是重复确认,更不触发重传。
复习:回到正文。
- A. 1,4
- B. 1,6
- C. 2,6
- D. 6,6
展开解析
B控制连接整个会话 1 条;数据连接每传一个文件或一次目录列表建一条:2 + 3 + 1 = 6。
- A 错4 = 3 + 1,只算了传文件,漏了“列目录”:目录列表也是通过数据连接传回来的(LIST 命令)。
- B 对控制 1 条,数据 6 条。
- C 错上传、下载都在同一个会话里,用同一条控制连接,不会因为方向不同就另建一条。
- D 错控制连接在整个会话期间一直保持,只有 1 条;每次操作新建的是数据连接。
复习:回到正文。
二、综合应用题(第 47 题,9 分)
某单位网络如下图所示。路由器 R 的 E0 接 LAN1(192.168.26.0/24),E1 接 LAN2(192.168.38.0/24),E2 接因特网,地址为 202.38.64.2;R 实现 NAPT,并在 E0 上开启 DHCP 中继代理。DHCP 服务器 DS(192.168.38.10)和本地域名服务器 D(192.168.38.53)都在 LAN2,DS 为 LAN1 配置的租期为 6 小时、默认网关 192.168.26.254、DNS 服务器 192.168.38.53。Web 服务器 W 的域名为 www.yxlib.cn,IP 地址为 120.55.8.20。
(1) 主机 H1 新接入 LAN1。它发出的 DHCP 发现报文,封装它的 IP 分组的源、目的 IP 地址各是什么?R 收到后,以单播还是广播把它转给 DS?转发的 IP 分组目的地址是什么?R 在 DHCP 报文的 giaddr 字段填什么?DS 依据什么决定从哪个地址池分配地址?(2 分)
(2) H1 获得地址 192.168.26.31 后,最早在什么时候发起续约?续约的 DHCP 请求报文是单播还是广播,封装它的 IP 分组源、目的地址各是什么?若续约一直不成功,到什么时候改为广播?(2 分)
(3) 随后 H1 在浏览器中访问 http://www.yxlib.cn/。为了发出 DNS 查询,H1 先发出的 ARP 请求要解析哪个 IP 地址对应的 MAC 地址?为什么?封装 DNS 查询的以太网帧的目的 MAC 地址是哪个设备(接口)的?(2 分)
(4) D 的缓存中有 www.yxlib.cn 的记录。H1 用源端口 49200 与 W 建立 TCP 连接,R 的 NAPT 为它分配外部端口 6001。W 发回的第二次握手报文段在 R 转换之前、之后,IP 分组的“源 IP:端口 → 目的 IP:端口”各是什么?(2 分)
(5) 设 H1 与 W 之间的 RTT 为 50 ms,单位内网中的时延忽略不计。网页 index.html 引用了同一服务器上的 3 个小图像,浏览器使用 HTTP/1.1 持续连接并采用流水线方式,各对象的传输时间忽略。从 H1 发出 DNS 查询到收齐全部对象,至少需要多长时间?(1 分)
先在纸上自己做一遍,再点这里展开满分解答
DHCP 发现报文:源 IP 0.0.0.0,目的 IP 255.255.255.255(受限广播,路由器不转发)(1 分)。R 的中继代理把它以单播转发给 DS,目的 IP 为 192.168.38.10;giaddr 填收到该报文的接口地址 192.168.26.254,DS 根据 giaddr 判断客户在 192.168.26.0/24,从这个网络的地址池里分配(1 分)。
租期过半,即获得地址后 3 小时(T1)发起续约;续约请求是单播,源 IP 为已租到的 192.168.26.31,目的 IP 为 DS 的 192.168.38.10——H1 已有地址,按普通单播交给默认网关 R 转发即可,不再需要中继代理(1 分)。若一直续约不成功,到租期的 87.5%,即 5.25 小时(T2)改为广播请求(1 分)。
H1 用自己的掩码判断:DNS 服务器 192.168.38.53 与自己(192.168.26.31/24)不在同一网络,DNS 查询要交给默认网关转发,所以 ARP 请求解析的是默认网关 192.168.26.254(R 的 E0)的 MAC 地址(1 分)。封装 DNS 查询的帧的目的 MAC 是 R 的 E0 接口的 MAC 地址,而 IP 分组的目的地址仍是 192.168.38.53(1 分)。
转换前(R 从 E2 收到):120.55.8.20:80 → 202.38.64.2:6001(1 分);转换后(R 从 E0 发出):120.55.8.20:80 → 192.168.26.31:49200(1 分)。NAPT 只改内网一侧的地址和端口(这里是目的 IP 与目的端口),并重算 IP 首部检验和与 TCP 检验和。
DNS 查询在内网完成且 D 有缓存,时间忽略;建立 TCP 连接 1 个 RTT;请求 index.html 1 个 RTT;流水线方式连续发出 3 个图像的请求,再 1 个 RTT 全部收回:共 3 × 50 = 150 ms(1 分)。
① DS 与 H1 不在同一网络,DISCOVER 靠中继代理以单播转发,giaddr 是“客户所在网络”的接口地址;② 续约时客户已经有地址,直接单播给服务器,不再经过中继;③ ARP 先看目的 IP 是否同网:DNS 服务器在另一网络时解析的是网关,而不是 DNS 服务器本身(与第 7 篇 7.8 的模拟大题正好相反,那里 DNS 服务器与主机同网);④ NAPT 在回来的方向改目的地址和目的端口;⑤ 流水线方式所有引用对象一共只多 1 个 RTT。
| 评分点 | 分 |
|---|---|
| (1) DISCOVER 的源、目的 IP 1 分;单播、目的 IP、giaddr 与地址池的关系 1 分 | 2 |
| (2) T1 时刻与单播、源 / 目的地址 1 分;T2 时刻改广播 1 分 | 2 |
| (3) 解析网关的 MAC 及理由 1 分;帧的目的 MAC 1 分 | 2 |
| (4) 转换前、后各 1 分(地址、端口任一项错扣该项的分) | 2 |
| (5) 150 ms | 1 |
卷 B 答案速查(做完再看)
| 题 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
|---|---|---|---|---|---|---|---|---|
| 答案 | D | A | D | C | C | A | B | B |
| 考点 | 1.4 | 2.3 | 3.6 | 3.9 | 4.2 | 4.8 | 5.5 | 6.3 |
47:DHCP 中继与续约、ARP、DNS 缓存、NAPT、HTTP 流水线。自评:选择题全对、47 题 ≥ 8 分 ⇒ 本卷达到满分水平。
9.6全真模拟卷 C(计网 25 分 · 限时 35 分钟)
题位、分值与卷 A 相同。本卷的 47 题是出现次数最多的“IP 地址规划与路由表”,加上聚合的“例外”、分片和扩容判断。数字由 verify/09/p9/mock_c.py 核对。
一、单项选择题(第 33 ~ 40 题,每题 2 分)
- A. 表示层
- B. 应用层
- C. 会话层
- D. 传输层
展开解析
A表示层处理“数据怎么表示”:编码转换、压缩、加密。
- A 对表示层:语法转换、压缩、加密。
- B 错应用层直接为用户的应用进程提供服务(如文件传送、电子邮件),不负责数据格式的转换。
- C 错会话层负责建立、管理、终止会话,并在数据流中设置同步点(对话管理),不处理数据格式。
- D 错传输层提供端到端的可靠或不可靠传输、复用与分用,不关心数据的表示形式。
复习:回到正文。
- A. 30 kb/s
- B. 60 kb/s
- C. 80 kb/s
- D. 640 kb/s
展开解析
B采样频率 2 × 5 kHz = 10 kHz;64 级 = 26,每样值 6 bit;10k × 6 = 60 kb/s。
- A 错30 kb/s 用最高频率 5 kHz 当采样频率;采样定理要求采样频率至少是最高频率的 2 倍。
- B 对10 kHz × 6 bit = 60 kb/s。
- C 错80 kb/s 是按每个样值 8 bit(1 字节)算的;64 级只需 log264 = 6 bit。
- D 错640 kb/s 把量化级数 64 直接当成每个样值的比特数;级数要取 log2。
复习:回到正文。
- A. 检测 1 位,纠正 1 位
- B. 检测 2 位,纠正 2 位
- C. 检测 3 位,纠正 1 位
- D. 检测 2 位,纠正 1 位
展开解析
D两两比较,最小码距 d = 3:检错 d − 1 = 2,纠错 ⌊(d − 1)/2⌋ = 1。
- 六对码字的距离:3、3、4、4、3、3,最小码距 d = 3。
- 检错:d − 1 = 2 位;纠错:⌊(3 − 1)/2⌋ = 1 位。
- A 错检测 1 位是把纠错的公式 ⌊(d − 1)/2⌋ 用到了检错上;检错能力是 d − 1 = 2。
- B 错纠正 2 位是把检错的公式 d − 1 用到了纠错上;纠正 t 位需要 d ≥ 2t + 1,d = 3 只能纠 1 位。
- C 错检测 3 位用的是最大码距 4;编码能力由最小码距决定,因为最容易混淆的是距离最近的两个码字。
- D 对d = 3:检 2 纠 1。
复习:回到正文。
- A. 50 B,0 B
- B. 60 B,14 B
- C. 64 B,14 B
- D. 64 B,32 B
展开解析
CIP 分组 20 + 8 + 4 = 32 B,不足 46 B,填充 14 B;帧长 14 + 46 + 4 = 64 B。
- IP 分组长度 = 20(IP 首部)+ 8(UDP 首部)+ 4(数据)= 32 B。
- 以太网帧的数据部分最少 46 B,填充 46 − 32 = 14 B。
- 帧长 = 首部 14 B + 数据 46 B + FCS 4 B = 64 B。
- A 错50 B = 14 + 32 + 4,没有填充;数据部分不足 46 B 时必须填充到 46 B,保证帧长至少 64 B(CSMA/CD 的需要)。
- B 错60 B 漏了尾部 4 B 的帧检验序列 FCS;64 B 的最短帧长包含 FCS。
- C 对填充 14 B,帧长 64 B。
- D 错填充 32 B = 64 − 32,把整帧 64 B 当成了数据部分的下限;首部 14 B 和 FCS 4 B 不属于数据部分,数据部分只要补到 46 B。
复习:回到正文。
- A. 192.168.7.21:6688 和 192.168.7.22:6688
- B. 210.1.1.1:6688 和 210.1.1.1:6688
- C. 210.1.1.1:6688 和 210.1.1.2:6688
- D. 210.1.1.1 的两个不同端口
展开解析
DNAPT 把源 IP 都换成 210.1.1.1,并给两个会话分配不同的外部端口,NTP 服务器回来的应答才能按端口分清是谁的。
- A 错192.168.x.x 是私有地址,不能出现在因特网上,出口路由器必须把源地址换成公网地址。
- B 错两个分组的源 IP、源端口完全一样,NTP 服务器的应答回来后,路由器无法区分该交给哪台内网主机;NAPT 必须换端口。
- C 错210.1.1.2 不属于该单位(它只有 210.1.1.1 一个公网地址);给每台内网主机一个公网地址是动态 NAT 的做法,这里地址不够用。
- D 对同一个公网 IP,用不同的外部端口区分两个会话。
复习:回到正文。
- A. 4
- B. 5
- C. 6
- D. 10
展开解析
BTTL = 1 ~ 5 的分组分别在第 1 ~ 5 台路由器处 TTL 减到 0,各回 1 个时间超过报文;TTL = 6 的分组到达 B,B 回的不是“时间超过”。
- A 错4 少数了一台:第 5 台路由器收到 TTL = 5 的分组时也把 TTL 减到 0,同样回时间超过报文。
- B 对5 台路由器各 1 个。
- C 错6 把目的主机 B 也算上了;B 收到分组后并不丢弃,回的是终点不可达(端口不可达)或回送回答,而不是时间超过。
- D 错10 是把一来一回各算一个;每台路由器只回 1 个时间超过报文给 A。
复习:回到正文。
- A. 1 KB
- B. 3 KB
- C. 5 KB
- D. 6 KB
展开解析
C缓存中还占着 5 − 2 = 3 KB,空闲 8 − 3 = 5 KB。
- A 错1 KB = 8 − 5 − 2,把被读走的 2 KB 又从窗口里减了一次;读走的数据腾出了空间,应该加回来。
- B 错3 KB = 8 − 5,以为收到的 5 KB 都还在缓存里;其中 2 KB 已被应用读走,已经腾出空间。
- C 对8 − (5 − 2) = 5 KB。
- D 错6 KB = 8 − 2,只减去了被读走的部分,方向反了:被读走的不占缓存,还没读走的 3 KB 才占。
复习:回到正文。
- A. Set-Cookie
- B. Cookie
- C. Location
- D. Last-Modified
展开解析
A响应里用 Set-Cookie 下发;浏览器以后在请求里用 Cookie 首部带回。
- A 对Set-Cookie 是响应首部,告诉浏览器保存这个识别码。
- B 错Cookie 首部行出现在浏览器发出的请求报文里,是把识别码带回给服务器,方向反了。
- C 错Location 用于重定向(如 301 / 302 响应),告诉浏览器去哪个新地址。
- D 错Last-Modified 给出对象的最后修改时间,用于缓存和条件 GET,与识别用户无关。
复习:回到正文。
二、综合应用题(第 47 题,9 分)
某单位网络如下图所示。ISP 分给该单位的地址块为 58.192.120.0/23,R1 的 S0 接口地址为 202.119.9.2/30(ISP 一侧为 202.119.9.1)。LAN1、LAN2、LAN3 分别需要 200、100、50 个可分配地址,R1 与 R2 之间的点对点链路也要从该地址块中分配地址,这条链路的 MTU 为 900 B,其余链路的 MTU 均为 1500 B。
(1) 按需分配子网,要求每个子网尽可能小,按 LAN1、LAN2、LAN3、R1–R2 链路的次序依次从低地址开始分配。写出各子网的网络地址(地址/前缀长度);R1、R2 的链路接口地址取链路子网中的两个可用地址(R1 取小的)。(2 分)
(2) 写出 R1 的路由表(目的网络、下一跳、接口),要求表项尽可能少(直连网络也要写出),并说明为什么到 R1–R2 链路的那一项不会被聚合项“抢走”。(3 分)
(3) ISP 的路由器到该单位只需要一条路由,写出这条路由。(1 分)
(4) LAN1 中的主机向 LAN3 中的主机发送一个总长度为 1500 B(首部 20 B)、DF = 0 的 IP 分组。R1 转发时分几片?写出各片的总长度、片偏移和 MF。若该分组的 DF = 1,R1 怎样处理?(2 分)
(5) 若 LAN3 以后要扩充到 120 台主机,能否在不改动其他子网和链路地址的前提下,把 LAN3 的子网扩大?说明理由。(1 分)
先在纸上自己做一遍,再点这里展开满分解答
| 子网 | 需要 | 前缀 | 网络地址 | 地址范围 |
|---|---|---|---|---|
| LAN1 | 200 | /24(254 个) | 58.192.120.0/24 | 120.0 ~ 120.255 |
| LAN2 | 100 | /25(126 个) | 58.192.121.0/25 | 121.0 ~ 121.127 |
| LAN3 | 50 | /26(62 个) | 58.192.121.128/26 | 121.128 ~ 121.191 |
| R1–R2 链路 | 2 | /30(2 个) | 58.192.121.192/30 | R1:58.192.121.193,R2:58.192.121.194 |
四个子网全部落在 58.192.120.0/23 内,共用去 256 + 128 + 64 + 4 = 452 个地址,还剩 60 个(58.192.121.196 ~ 58.192.121.255)。(子网每错一个扣 0.5 分)
| 目的网络 | 下一跳 | 接口 |
|---|---|---|
| 58.192.120.0/24 | 直接交付 | E0 |
| 58.192.121.192/30 | 直接交付 | S1 |
| 58.192.121.0/24 | 58.192.121.194 | S1 |
| 202.119.9.0/30 | 直接交付 | S0 |
| 0.0.0.0/0 | 202.119.9.1 | S0 |
LAN2(121.0/25)和 LAN3(121.128/26)都在 R2 后面,下一跳相同,聚合成一项 58.192.121.0/24。这一项也“包含”了链路子网 58.192.121.192/30,但链路那一项的前缀 /30 更长,按最长前缀匹配,发往链路地址的分组仍匹配 /30、直接交付,不会被聚合项送给 R2。
目的网络 58.192.120.0/23,下一跳 202.119.9.2(R1 的 S0)。
每片最多装 (900 − 20) = 880 B 数据(880 恰是 8 的倍数);原数据 1480 B = 880 + 600,分 2 片:第 1 片总长度 900 B、片偏移 0、MF = 1;第 2 片总长度 620 B、片偏移 110(880 ÷ 8)、MF = 0(1 分)。若 DF = 1,R1 不能分片,丢弃该分组,并向源主机发送 ICMP 终点不可达报文(需要分片但 DF 置 1)(1 分)。
不能。120 台需要 /25(126 个可分配地址),而 LAN3 现在的 58.192.121.128/26 所在的 /25 只能是 58.192.121.128/25,它已经包含了 R1–R2 链路的 58.192.121.192/30;不改动链路地址就无法扩大(若把链路改到别的地址段,如剩余地址重新规划,才可以)。
① 按需分配要从大到小、每块起点对齐到块大小的倍数;② 聚合项可以“包含”别的直连子网,只要后者前缀更长,最长前缀匹配会让它优先;③ 片偏移 = 880 ÷ 8 = 110,不要写成 880;④ DF = 1 时发的是“终点不可达”而不是“时间超过”;⑤ 扩容时子网必须是对齐的整块,不能把相邻的零散地址拼起来。
| 评分点 | 分 |
|---|---|
| (1) 四个子网与链路接口地址(每错一个扣 0.5 分) | 2 |
| (2) 五项各 0.5 分(LAN2、LAN3 分两项写也给分,但扣“表项最少”的 0.5 分);最长前缀匹配的理由 0.5 分 | 3 |
| (3) 一条 /23 路由 | 1 |
| (4) 两片的总长度、片偏移、MF 1 分;DF = 1 的处理 1 分 | 2 |
| (5) 结论与理由 | 1 |
卷 C 答案速查(做完再看)
| 题 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
|---|---|---|---|---|---|---|---|---|
| 答案 | A | B | D | C | D | B | C | A |
| 考点 | 1.5 | 2.3 | 3.2 | 3.7 | 4.5 | 4.6 | 5.5 | 6.5 |
47:按需划分、R1 路由表(聚合 + 最长前缀匹配)、ISP 路由、分片与 DF、扩容判断。自评:选择题全对、47 题 ≥ 8 分 ⇒ 本卷达到满分水平。三套卷都做完后,回到 9.0 对照丢分的四个地方,看看自己还在哪一处丢分。
9.7全书知识点细目表(满分清单)
这张表把全书压成 152 条“能直接拿来做题的结论”,按篇排列,覆盖 2009 ~ 2026 年全部 163 道计网真题。考前一周逐条过:能说出结论、能说出理由、能举一个例子,就勾上;勾不上的点“去看”原文。勾选只保存在你这台电脑的浏览器里。右列是直接考过这一条的真题,点题号可以弹出原题和讲解。
总进度:
第 1 篇 体系结构 ()
| ✓ | 知识点(结论) | 讲解 | 真题 |
|---|---|---|---|
| 组成的三种看法:硬件 / 软件 / 协议;边缘部分 / 核心部分;资源子网 / 通信子网 | 去看 | — | |
| 分类:按范围 WAN / MAN / LAN / PAN,按拓扑、按交换方式、按使用者 | 去看 | — | |
| 标准化组织 ISO、ITU-T、IEEE、IETF;RFC 成为标准的三个阶段(拓展) | 去看 | — | |
| 电路 / 报文 / 分组交换的特点;数据报与虚电路(虚电路按序、建立时选路) | 去看 | 2020-34 | |
| 交换方式的时间:n 个分组经 k 段链路 = (n + k − 1) × 发送时延 + 传播时延 | 去看 | 2010-34 2013-35 2025-33 | |
| 速率、带宽、吞吐量;端到端吞吐量由瓶颈链路决定 | 去看 | 2024-33 | |
| 四种时延;发送时延 = 长度 ÷ 速率,传播时延 = 距离 ÷ 传播速率,带宽不影响传播时延 | 去看 | — | |
| 时延带宽积 = 传播时延 × 带宽;RTT 不含数据的发送时延;D = D0 / (1 − U) | 去看 | 2023-33 | |
| 协议三要素(语法、语义、同步);服务原语四类;SAP;PDU = PCI + SDU | 去看 | 2020-33 | |
| 协议水平、服务垂直;体系结构 = 层次 + 各层协议的集合,不含具体实现;分层的好处 | 去看 | 2010-33 2026-33 | |
| 封装开销:各层首部逐层加上,算传输效率 | 去看 | 2017-33 | |
| 面向连接 ≠ 可靠:各层协议“连接与可靠性”一览 | 去看 | — | |
| OSI 七层各自的功能(会话层对话管理、表示层格式转换、传输层端到端……) | 去看 | 2009-33 2013-33 2014-33 2019-33 2022-33 | |
| TCP/IP 四层 / 五层模型;网际层只提供无连接的数据报服务 | 去看 | 2011-33 2021-33 | |
| 谁在哪一层、谁为谁服务:ICMP 由 IP 直接服务;路由器 / 交换机 / 集线器的最高层次 | 去看 | 2012-33 2016-33 |
第 2 篇 物理层 ()
| ✓ | 知识点(结论) | 讲解 | 真题 |
|---|---|---|---|
| 码元、波特与比特率:比特率 = 波特率 × log2V | 去看 | 2011-34 | |
| 单工 / 半双工 / 全双工;串行 / 并行;同步 / 异步 | 去看 | — | |
| 基带传输与频带(宽带)传输 | 去看 | — | |
| 奈氏准则:无噪声最大数据率 = 2W × log2V | 去看 | 2009-34 2022-34 2023-34 | |
| 香农公式 C = W log2(1 + S/N);dB = 10 lg(S/N),代入前先换成比值 | 去看 | 2016-34 2026-34 | |
| 两个极限同时存在取较小值;影响信道数据率的因素 | 去看 | 2014-35 2017-34 | |
| NRZ、NRZI、曼彻斯特(前高后低 = 1)、差分曼彻斯特(位首有跳变 = 0)、RZ;由波形反推比特 | 去看 | 2013-34 2015-34 2021-34 | |
| ASK / FSK / PSK / QAM;FSK 用两个频率;QAM 每码元 log2(点数) 位 | 去看 | 2024-34 | |
| PCM:采样频率 ≥ 2 × 最高频率,量化级数取 log2 得每样值位数 | 去看 | — | |
| 导向介质:双绞线(屏蔽 / 非屏蔽、为什么绞)、同轴电缆、光纤(单模远、多模近);非导向介质 | 去看 | 2019-34 | |
| 以太网物理层命名:10BASE-T、100BASE-TX、1000BASE-SX…… | 去看 | — | |
| 物理层接口四特性:机械、电气、功能、过程(规程) | 去看 | 2012-34 2018-34 | |
| 中继器、集线器:物理层设备,不隔离冲突域;两端速率必须相同;5-4-3 规则(拓展) | 去看 | — |
第 3 篇 数据链路层 ()
| ✓ | 知识点(结论) | 讲解 | 真题 |
|---|---|---|---|
| 链路层功能与三种服务;链路 vs 数据链路 | 去看 | — | |
| 组帧四法;零比特填充(5 个 1 后插 0)、字节填充;透明传输 | 去看 | 2013-37 | |
| 奇偶校验只能检出奇数个错 | 去看 | — | |
| CRC:补 r 个 0 做模 2 除法,余数为 FCS;接收方整串除余数为 0 才无错;只检错 | 去看 | 2023-37 | |
| 海明码:2r ≥ k + r + 1;码距 d:检 d − 1、纠 ⌊(d − 1)/2⌋ | 去看 | 2025-34 | |
| 停止—等待:出错、丢失、迟到三种情况;1 位序号;利用率 | 去看 | 2018-36 2020-36 | |
| GBN 与 SR 出错后的行为:GBN 重传其后全部、SR 只重传出错的帧并缓存失序帧 | 去看 | 2009-35 2011-35 | |
| 窗口上限:GBN WT ≤ 2n − 1;SR WT + WR ≤ 2n | 去看 | 2019-35 2024-37 | |
| 信道利用率 = W × TD ÷ (TD + RTT + TA);满利用率所需窗口与序号位数 | 去看 | 2012-36 2014-36 2015-35 2023-35 | |
| 累积确认、捎带确认;链路层可靠传输综合题 | 去看 | 2017-47 2025-47 | |
| FDM、TDM、统计时分 STDM、WDM 的区别;信道划分不冲突 | 去看 | 2013-36 | |
| CDMA:码片正交、规格化内积 1 / −1 / 0 | 去看 | 2014-37 | |
| 纯 ALOHA(易损期 2T,18.4%)与时隙 ALOHA(T,36.8%) | 去看 | — | |
| CSMA 三种坚持:1-坚持、非坚持、p-坚持 | 去看 | — | |
| CSMA/CD:争用期 2τ、最短帧长 = 2τ × 速率、最远距离 | 去看 | 2009-37 2016-36 2019-36 2010-47 | |
| 二进制指数退避:k = min(次数, 10),r ∈ {0, …, 2k − 1},16 次失败丢弃 | 去看 | 2023-36 2025-35 | |
| CSMA/CD 的特点辨析:半双工、不确认、冲突后发干扰信号 | 去看 | 2015-36 | |
| 轮询访问:轮询协议、令牌传递(无冲突、单点故障、轻负载效率低) | 去看 | — | |
| 802.11 为什么不能用 CD:隐蔽站、暴露站;CSMA/CA 对正确收到的帧确认 | 去看 | 2011-36 | |
| IFS(SIFS < PIFS < DIFS)、CSMA/CA 发送过程、退避计时器冻结 | 去看 | 2020-37 2026-35 | |
| RTS / CTS 信道预约与 NAV 的计算 | 去看 | 2018-35 2024-36 | |
| 802.11 帧的地址:To DS / From DS 决定地址 1、2、3 的含义 | 去看 | 2017-35 | |
| 局域网体系结构:LLC 与 MAC 子层 | 去看 | — | |
| MAC 地址 48 位、I/G 位;以太网提供无连接、不可靠的服务 | 去看 | 2012-35 | |
| 以太网 V2 帧:数据 46 ~ 1500 B,最短 64 B、最长 1518 B,不足填充 | 去看 | — | |
| 高速以太网:100 Mb/s、1 Gb/s、10 Gb/s;全双工不用 CSMA/CD | 去看 | — | |
| PPP:面向字节、7E 定界、字节填充、LCP / NCP、不编号不确认 | 去看 | — | |
| VLAN 隔离广播域;802.1Q 标签 4 B、VID 12 位;access / trunk 端口 | 去看 | 2024-35 2026-36 | |
| 网桥与交换机:工作在链路层、按 MAC 地址转发、隔离冲突域不隔离广播域 | 去看 | 2009-36 2015-37 | |
| 交换机自学习:记源地址、查目的地址,查不到泛洪,同端口过滤 | 去看 | 2014-34 | |
| 直通(只看目的 MAC 6 B)、存储转发、无碎片;交换机容量 | 去看 | 2013-38 | |
| 冲突域与广播域的数法;混合拓扑中帧能到达哪里 | 去看 | 2010-38 2016-35 2020-35 2019-47 2022-47 |
第 4 篇 网络层 ()
| ✓ | 知识点(结论) | 讲解 | 真题 |
|---|---|---|---|
| 转发(数据平面)与路由选择(控制平面) | 去看 | — | |
| 异构网络互连:路由器在网络层把不同的网络连起来 | 去看 | — | |
| 网络层拥塞控制:开环与闭环 | 去看 | — | |
| SDN:控制与转发分离;南向接口(OpenFlow,下发流表)、北向接口、东西向接口;流表按优先级匹配 | 去看 | 2022-37 | |
| IPv4 首部逐字段:首部长度 4 B 单位、总长度 1 B 单位、片偏移 8 B 单位、TTL、协议、首部检验和 | 去看 | — | |
| 分片:每片数据取 8 的倍数,MF / DF / 片偏移;只在目的主机重组 | 去看 | 2021-36 | |
| 分类地址与特殊地址(网络地址、广播地址、127、0.0.0.0、受限广播);私有地址 | 去看 | 2017-36 2011-38 | |
| 子网掩码与按位与求网络地址 | 去看 | 2012-39 2022-35 2016-39 | |
| CIDR 与块大小法:网络地址、广播地址、可分配地址(−2) | 去看 | 2023-39 2026-39 | |
| 定长划分与变长划分(VLSM):从大到小、对齐分配 | 去看 | 2010-37 2017-38 2019-37 2021-35 2018-47 | |
| 分组转发流程:直接交付 / 间接交付;默认路由、特定主机路由;主机的默认网关 | 去看 | 2011-37 2022-36 2009-47 | |
| 最长前缀匹配 | 去看 | 2015-38 2014-43 | |
| 路由聚合(构成超网)与例外路由 | 去看 | 2018-38 2013-47 | |
| NAT 与 NAPT:出去改源地址和源端口,回来改目的地址和目的端口 | 去看 | 2016-38 2023-38 2025-37 2020-47 | |
| ARP:同网络解析目的主机、跨网络解析默认网关;请求广播、响应单播 | 去看 | 2012-38 2018-37 | |
| 免费 ARP:检查地址冲突、更新别人的缓存 | 去看 | — | |
| DHCP:四个报文、UDP 67 / 68、DISCOVER 和 REQUEST 都是 0.0.0.0 → 广播 | 去看 | 2025-36 2015-47 | |
| DHCP 中继代理(giaddr)与租期续约(T1 单播、T2 广播) | 去看 | — | |
| ICMP 差错报文五类(含源点抑制)与不发送的四种情况 | 去看 | 2010-36 | |
| ping(回送请求 / 回答)与 traceroute(TTL + 时间超过) | 去看 | — | |
| IPv6 地址:128 位、冒号十六进制、零压缩只能用一次 | 去看 | — | |
| IPv6 与 IPv4:基本首部固定 40 B、无检验和、Hop Limit 对应 TTL | 去看 | 2023-40 | |
| IPv6 只在源主机分片,路由器不分片 | 去看 | — | |
| IPv4 向 IPv6 过渡:双协议栈与隧道 | 去看 | — | |
| 静态路由与动态路由;默认路由 | 去看 | — | |
| 层次路由:自治系统、IGP(RIP、OSPF)与 EGP(BGP);OSPF 划分区域 | 去看 | 2026-38 | |
| RIP:距离向量更新规则、16 不可达、30 s、坏消息传得慢 | 去看 | 2010-35 2016-37 2021-37 | |
| 链路状态路由与 Dijkstra | 去看 | 2026-37 2014-42 | |
| OSPF:IP 直接封装(89)、区域、洪泛、五种分组 | 去看 | 2024-47 | |
| BGP:TCP 179、路径向量、只求较好路由;RIP / OSPF / BGP 的封装 | 去看 | 2017-37 | |
| 路由器组成:路由选择部分 + 分组转发部分;路由表与转发表;路由器的功能 | 去看 | 2012-37 | |
| 交换结构三种;输入排队的线路前部阻塞 | 去看 | — | |
| 分组穿过路由器:IP 地址不变,TTL − 1、首部检验和重算、MAC 换成本段 | 去看 | — | |
| 组播的概念:源发一份、分岔处复制;与单播、广播的区别 | 去看 | — | |
| IP 组播地址:D 类、224.0.0.x 不转发、只作目的、只用 UDP;组播 MAC 01-00-5E + 低 23 位,32 对 1 | 去看 | — | |
| IGMP(主机与本地组播路由器之间)与组播路由(拓展) | 去看 | — | |
| 移动 IP:永久地址、转交地址、归属代理、外地代理;通信过程与三角路由 | 去看 | — | |
| 移动 IP 各段分组的地址:隧道外层目的 = 转交地址 | 去看 | — |
第 5 篇 传输层 ()
| ✓ | 知识点(结论) | 讲解 | 真题 |
|---|---|---|---|
| 传输层提供进程到进程(端到端)的逻辑通信,只在主机中实现 | 去看 | — | |
| 无连接服务(UDP)与面向连接服务(TCP);TCP 的连接只在两端主机 | 去看 | — | |
| 端口 16 位:熟知 0 ~ 1023、登记、短暂;常用熟知端口与 TCP / UDP | 去看 | — | |
| 复用与分用:先看 IP 协议字段,再看目的端口 | 去看 | 2018-39 | |
| 套接字 = IP + 端口;TCP 连接由四元组确定 | 去看 | — | |
| UDP 的特点:无连接、尽最大努力、面向报文、首部 8 B、支持一对多 | 去看 | 2014-39 | |
| UDP 伪首部 12 B,只用于计算检验和、不发送 | 去看 | — | |
| 检验和:16 位反码求和、回卷、取反;算出 0 存全 1 | 去看 | 2024-39 | |
| TCP 首部 20 ~ 60 B,各字段含义;传输效率 | 去看 | 2021-39 | |
| 读 TCP 首部(抓包题):端口、序号、确认号、数据偏移、标志 | 去看 | 2012-47 | |
| 六个控制位与紧急指针;RST | 去看 | — | |
| MSS 等选项 | 去看 | — | |
| 三次握手;SYN 不带数据但耗 1 个序号,第三次握手可带数据 | 去看 | 2011-39 2019-39 | |
| 为什么三次握手:防止失效的连接请求 | 去看 | — | |
| SYN 洪泛攻击 | 去看 | — | |
| 四次挥手、半关闭;FIN 占 1 个序号 | 去看 | 2020-39 | |
| TIME-WAIT 等 2MSL 的两个理由;释放连接所需时间 | 去看 | 2022-39 2024-38 2026-47 | |
| TCP 有限状态机:11 个状态与转移 | 去看 | 2021-38 | |
| 保活计时器与 RST;TCP 的四个计时器 | 去看 | — | |
| 序号按字节编号、确认号 = 期望的下一个字节、累积确认 | 去看 | 2009-38 2011-40 2013-39 | |
| 以字节为单位的滑动窗口:三个指针、可用窗口 | 去看 | 2010-39 2021-40 2025-38 | |
| RTO = RTTS + 4RTTD;加权平均;Karn 算法;超时 RTO 加倍 | 去看 | — | |
| 3 个冗余 ACK 触发快重传 | 去看 | 2019-38 | |
| TCP 的可靠传输像 GBN 还是 SR | 去看 | — | |
| 流量控制:rwnd 由接收方的空闲缓存决定 | 去看 | — | |
| 零窗口与持续计时器;糊涂窗口(拓展) | 去看 | — | |
| 拥塞控制四算法;超时 vs 3 个重复确认的处理 | 去看 | 2009-39 2014-38 | |
| cwnd 逐轮计算;发送窗口 = min(rwnd, cwnd) | 去看 | 2015-39 2017-39 2020-38 2022-38 2016-41 2023-47 | |
| AIMD;快恢复的两种写法(本书与王道一致:cwnd = 新 ssthresh) | 去看 | — | |
| TCP 与 UDP 全面对比;应用为什么这样选 | 去看 | — |
第 6 篇 应用层 ()
| ✓ | 知识点(结论) | 讲解 | 真题 |
|---|---|---|---|
| C/S 与 P2P 模型的区别 | 去看 | 2019-40 | |
| 一问一答:UDP 1 个 RTT,TCP 先握手共 2 个 RTT | 去看 | 2025-39 | |
| 层次域名空间 | 去看 | — | |
| 四类域名服务器(根、顶级、权限、本地)与“区” | 去看 | — | |
| 递归查询与迭代查询:主机到本地一般递归,本地向外一般迭代 | 去看 | 2010-40 2020-40 | |
| DNS 查询次数与时间(不是固定 4 次,缓存可以减少) | 去看 | 2016-40 | |
| DNS 一般用 UDP 53(区域传送、长应答用 TCP) | 去看 | 2018-33 | |
| 资源记录 A、AAAA、NS、CNAME、MX、PTR | 去看 | — | |
| FTP:控制连接 21 整个会话保持、数据连接每次传送(含目录列表)建立;主动 / 被动模式;带外传送 | 去看 | 2009-40 2017-40 | |
| 电子邮件系统组成:用户代理、邮件服务器、发送协议与读取协议 | 去看 | 2012-40 | |
| SMTP:推协议、TCP 25、三个阶段、只能传 7 位 ASCII | 去看 | 2013-40 2018-40 | |
| POP3(110)与 IMAP(143);网页邮件用 HTTP | 去看 | 2015-33 2025-40 | |
| 电子邮件格式与 MIME:编码成 ASCII 再交给 SMTP,不改 SMTP | 去看 | — | |
| URL、HTML、HTTP 的分工;访问网页可能用到的各层协议 | 去看 | 2014-40 | |
| 非持续 / 持续 / 流水线连接的 RTT 数 | 去看 | 2022-40 2024-40 | |
| HTTP 报文结构、方法(GET / POST / HEAD)、状态码分类 | 去看 | 2015-40 | |
| Cookie:Set-Cookie 响应首部、Cookie 请求首部、用途 | 去看 | 2026-40 | |
| Web 缓存(代理服务器)与条件 GET(304) | 去看 | — | |
| 一次网页访问的全过程:DHCP → ARP → DNS → TCP → HTTP | 去看 | 2011-47 2021-47 |