计算机网络模块的收官:CN-5 讲各应用协议“自己解决什么问题”,CN-6 把 CN-1~CN-5 全部串成“一次真实通信”。 CN-6 对应历年 47 题大题的终极形态(2021-47、2015-47、2019-47、2020-47、2024-47 均属此类)。
核心问题
这一部分为什么存在?
传输层已经提供了进程到进程的可靠/不可靠通道,但“通道”不等于“对话”。每个应用还有自己的语义问题:
- 用户记不住 IP → DNS:域名 → IP 的分布式翻译系统;
- 文件传输要登录、列目录、传文件 → FTP;
- 邮件是异步的“寄信-取信” → SMTP(推)+ POP3/IMAP(拉);
- 网页是“请求一个文档,文档里还有一堆对象” → HTTP 及其连接管理。
而 CN-6 的问题是更高一层的:这些协议从不单独工作。你在浏览器敲下一个 URL 的瞬间,DHCP、DNS、ARP、TCP、IP、Ethernet 像接力队一样依次出场。历年 47 题大题考的就是这支接力队——只会单个协议不够,必须知道谁先用谁后用、每步封装了什么、每跳谁改写了什么。
概念体系
flowchart TD
U["用户在浏览器输入 URL"] --> D["DNS:域名 → IP<br/>(UDP 53,递归/迭代)"]
D --> T["TCP 三次握手<br/>(与 Web 服务器 80 端口)"]
T --> H["HTTP 请求/响应<br/>(持久/非持久连接)"]
H --> S["封装:HTTP → TCP 段 → IP 数据报 → 以太网帧"]
S --> R{"与服务器同网?"}
R -- "否" --> A1["ARP 求默认网关 MAC<br/>→ 逐跳路由转发(IP 不变、MAC 每跳重写)"]
R -- "是" --> A2["ARP 直接求服务器 MAC"]
A1 --> V["服务器解封 → 响应原路返回"]
A2 --> V
V --> W["TCP 四次挥手(或保持连接)"]
核心概念:
| 协议 | 解决问题 | 传输层 | 端口 | 易考点 |
|---|---|---|---|---|
| DNS | 域名 → IP | UDP | 53 | 基于 UDP(2018-36 类辨析);递归 vs 迭代的报文数 |
| HTTP | Web 文档传输 | TCP | 80 | 1.0 非持久(每对象 2RTT)/ 1.1 持久默认 / RTT 计算 |
| FTP | 文件传输 | TCP | 21(控制,持久)+ 20(数据,非持久) | 为什么两条连接:带外控制,传文件时仍可发命令(2009-40、2017-40、2024-47) |
| SMTP | 发送邮件(推) | TCP | 25 | 只能直接传 7 位 ASCII,二进制要编码(2018-40) |
| POP3 / IMAP | 接收邮件(拉) | TCP | 110 / 143 | 发送-接收-读取三阶段协议组合:SMTP、SMTP、POP3(2012-40) |
实现机制
1. DNS:递归 vs 迭代(报文数是考点)
- 主机 → 本地域名服务器:总是递归(“你帮我查到底”)——主机只发 1 条请求;
- 本地服务器 → 根/顶级/权限服务器:若递归,本地服务器逐层代查但每层只发 1 条(本地无缓存时共 1 条——2010-40:用户主机 1 条、本地服务器 1 条);若迭代,本地服务器自己逐个问(根 → .com → abc.com → …),发出多条——2016-40 考“全部迭代时本地服务器发出查询的最少/最多次数”(缓存命中越少、域名层级越多则越多)。
- 2020-40 综合:本地只递归、其他只迭代 + 各 RTT=10ms → 求打开网页的最短/最长时间(DNS 报文数 × RTT + TCP/HTTP 时间)。
2. HTTP 的 RTT 账本(来源:复习资料 P5 模板 11)
| 模式 | 时间 |
|---|---|
| HTTP/1.0 非持久 | 每个对象:1 RTT 建连 + 1 RTT 请求响应 = 2 RTT/对象 |
| HTTP/1.1 持久(非流水线) | 建连 1 RTT + 每对象 1 RTT = (n+1) RTT |
| HTTP/1.1 持久(流水线) | 建连 1 RTT + 首对象 1 RTT + 其余流水线 ≈ 2 RTT 量级 |
- 2011-47(3):1.1 持续非流水线,页面 + 5 图 → 1 + 5 = 6 RTT(页面本身 1 次请求 + 每个图 1 次,共用已建连接)。
- 2022-40:1.1,页面 1MSS + 图 3MSS,RTT=10ms → 建连 1 + 页面 1 + 图请求 1 + 图 3MSS 需到第 4 个 RTT 收完 = 40ms。
- 2024-40:1.0 非持久,页面 + 7 图、不支持并行连接 → 16 RTT。
- 2015-40:读 HTTP 请求报文首部(Connection、Host、Cookie 等字段的含义)。
3. 邮件三阶段与 FTP 双连接
- 邮件:发送方 → 发送方邮件服务器(SMTP)→ 接收方邮件服务器(SMTP)→ 接收方读取(POP3/IMAP)——推推拉组合(2012-40 答案 D;2013-40 SMTP 叙述;2015-33:POP3 基于 TCP 可靠服务)。
- FTP:控制连接(21,持久,传命令与登录)+ 数据连接(20,非持久,每次传文件新建)——2024-47 大题第 1 问原题;登录过程走的是控制连接。
4. CN-6 全景:一次 Web 访问的接力赛(大题模板)
以 2021-47 为原型(H1 的 ARP 表和交换表均为空,浏览器输入域名访问 Web 服务器):
- (若地址未配置)DHCP:Discover(源 0.0.0.0、目的 255.255.255.255、目的 MAC 全 F 广播)→ Offer → Request → ACK(2015-47、2022-47)。
- DNS 解析:H1 → 本地域名服务器(递归),报文封装路径 DNS → UDP → IP → Ethernet 帧(2021-47 第 1 问标准答案:除 HTTP 外还运行了 DNS)。
- 判同网/跨网:用子网掩码比较服务器 IP 与自己网络地址;跨网则下一跳是默认网关。
- ARP(ARP 表为空时):广播请求网关(或服务器)的 MAC——帧的目的 MAC 全 F;应答单播。交换机随之自学习。
- TCP 三次握手:SYN → SYN+ACK → ACK(2016-41 考标志位与确认号)。
- HTTP 请求/响应:按 §2 的 RTT 账本计算总时间。
- 逐跳转发:每台路由器 TTL−1、重算校验和、IP 源/目的全程不变、帧的 MAC 每跳重写(2016-38:R2 转发后 IP 分组源/目的仍是 H3 与 S;2018-37:帧的源 MAC 变为 R 出口、目的 MAC 变为下一跳)。
- 结束:四次挥手(或 1.1 下保持连接供后续对象复用)。
得分口诀:“先 DNS 后 TCP 再 HTTP;ARP 找的是下一跳;IP 不变 MAC 变;交换机学源、路由器减 TTL。”
方案比较
递归 vs 迭代(本模块第一易混对):为什么易混——都是 DNS 查询方式且常混合使用。本质区别——递归是“替我把事办完”(被问者负责到底),迭代是“你告诉我下一个该问谁”(被问者只给线索)。判别线索:问“用户主机发几条”→ 永远 1 条(递归);问“本地域名服务器发几条”→ 递归则 1 条、迭代则多条(2010-40 vs 2016-40 正是这对对照)。
HTTP 1.0 vs 1.1:非持久每对象建连(慢但简单)vs 持久复用(省 RTT)——RTT 账本题第一步就是判版本与并行性。
C/S vs P2P:C/S 有永远在线的服务器(DNS/HTTP/FTP/邮件都是);P2P 没有中心,节点既取又给(理解级)。
应用与考法
形态一:单协议选择:2009-40(FTP 命令走控制连接)、2010-40、2012-40、2013-40、2015-33/40、2016-40、2017-40、2018-36/40、2024-40。
形态二:RTT/时间计算:2011-47(3)(6 RTT)、2020-40(DNS+HTTP 最短/最长时间)、2022-40(40ms)、2024-40(16 RTT)。
形态三:协议协作大题(47 题主线):
- 2009-47:子网划分 + 路由表 + DNS 主机路由;
- 2011-47:IP 分片 + HTTP RTT + 路由表;
- 2015-47:DHCP + ARP + 网关配置分析(主机 1 掩码配错能否访问 WWW/Internet);
- 2016-41:TCP 握手 + rwnd 递减 + 发送窗口;
- 2019-47、2020-47:拓扑 + 静态路由 + NAT/设备选择;
- 2021-47:DNS + ARP + 交换机自学习的完整接力;
- 2022-47:DHCP + 冲突域/广播域设备选择;
- 2024-47:FTP 双连接 + TCP 序号/cwnd + MTU。
做题触发词:看到“ARP 表/交换表为空”→ 立即补 ARP 广播与自学习步骤;看到“通过域名访问”→ 先 DNS(封装:UDP→IP→帧);看到“控制连接/数据连接”→ FTP;看到“非持久/持久”→ 翻 RTT 账本;看到“能否访问 Internet”→ 查掩码与网关是否同网。
来源:真题markdown/2009-2024统考真题.md 对应题号;复习资料 P5 §1.5、模板 11。
前后联系
- 向前依赖:CN-4(TCP/UDP 是应用层的腿)、CN-3(IP/路由/ARP/DHCP/NAT)、CN-2(帧与交换机)。
- 向后引出 / 跨学科:
- DNS 缓存、HTTP 缓存 ↔ X-7 缓存思想统一谱系;
- 应用层协议 = OS 中的进程在通信(socket、阻塞 I/O)→ OS-1/OS-8;
- HTTP 请求报文的字节序 → 网络字节序 = 大端(CO-1 的隐性连接);
- 至此计网全链路闭环:CN-0 分层 → CN-1 比特 → CN-2 帧 → CN-3 选路 → CN-4 端到端 → CN-5 语义 → CN-6 接力。
闭卷回忆链
- 传输层都打通了,应用层还要解决什么?(语义:名字、文件、邮件、文档)
- 为什么 DNS 用 UDP 而 HTTP/FTP/邮件用 TCP?(查询短平快 vs 可靠字节流)
- 主机到本地 DNS 服务器是递归还是迭代?本地服务器往外呢?各发几条报文?
- HTTP/1.0 和 1.1 的 RTT 账本分别怎么记?(2/对象 vs n+1)
- FTP 为什么要两条连接?哪条持久?登录走哪条?
- 发邮件和取邮件各用什么协议?SMTP 直接能传二进制附件吗?
- 浏览器输入 URL 后第一步做什么?(DNS;封装 UDP→IP→帧)
- 怎么判断服务器是否同网?跨网时 ARP 请求的是谁的 MAC?(网关)
- 交换机在这一过程中学到什么?路由器改写什么?(学源 MAC;TTL−1、MAC 重写、IP 不变)
- TCP 握手之后 HTTP 怎么传?什么时候挥手?
- 若 ARP 表和交换表都为空,完整动作序列是什么?(DHCP?→DNS→ARP→握手→HTTP→转发→挥手)
- 这道“接力赛”里每一棒分别属于哪一层?(对着分层模型倒背一遍)