主题
第一章 分层与端到端:网络的总体设计
1. 为什么网络课必须从"分层"开始
很多人复习计算机网络,第一件事就是背"OSI 七层:物理、数据链路、网络、传输、会话、表示、应用",背完就去做题,结果一遇到"交换机工作在哪一层""TCP 和 IP 谁负责可靠性"这类题就翻车。原因很简单:只记住了层的名字,没理解每一层"为什么存在"、它"承诺解决什么问题"。
先退一步想:把一段文字从北京的一台电脑发到上海的一台手机,中间要解决多少问题?
- 文字要变成电信号或光信号,才能在线缆里跑。
- 信号在传输中可能出错,要能发现错误。
- 北京到上海要经过很多台中间设备,每一步该往哪走?
- 对方可能同时开着微信、浏览器、网易云,数据到了手机,该交给哪个程序?
- 数据可能丢、可能乱序,谁来补发、谁来排序?
- 双方的程序要约定数据格式,比如"这是一个网页请求"。
如果让一个程序把这六件事全包了,这个程序会庞大到没人能维护,而且换一种线缆、换一种应用都得推倒重来。网络设计者的答案是:把大问题切成一叠小问题,每层只解决一类问题,层与层之间只通过固定接口打交道。这就是分层。
分层带来两个决定性的好处:
- 复杂性分解。每一层只面对一个规模可控的子问题,实现者不必了解其他层的细节。写浏览器的人不需要懂光纤怎么调制信号。
- 各层独立演化。只要层间接口不变,某一层的技术可以整体替换而不影响其他层。WiFi 取代网线、HTTP/3 取代 HTTP/1.1,上下层几乎无感。这就像换手机壳不用换手机。
一句大白话点透:分层的本质是"分工加合同"——每层对上层承诺一种服务,怎么兑现承诺是自己的私事。
2. OSI 七层与 TCP/IP 四层:两套模型怎么对照
考试中两套模型都会考。OSI(开放系统互连参考模型)是国际标准组织提出的"理论蓝图",分七层,概念完整但从未大规模落地;TCP/IP 模型是互联网实际使用的"工程实践",通常划成四层。它们的对应关系如下:
| OSI 七层 | TCP/IP 四层 | 核心职责(白话) | 典型协议 | 典型设备 | 数据单元 PDU |
|---|---|---|---|---|---|
| 应用层 | 应用层 | 程序之间说什么、怎么说 | HTTP、DNS、FTP、SMTP | 网关(应用层网关) | 报文 |
| 表示层 | 应用层 | 数据格式转换、加密压缩 | JPEG、TLS 的部分职责 | — | 报文 |
| 会话层 | 应用层 | 建立、管理会话 | RPC 会话管理 | — | 报文 |
| 传输层 | 传输层 | 进程到进程、可靠性 | TCP、UDP | — | 段(TCP)/ 数据报(UDP) |
| 网络层 | 网际层 | 跨网络寻址与选路 | IP、ICMP、ARP、OSPF | 路由器 | 分组 / 包 |
| 数据链路层 | 网络接口层 | 同一链路内成帧、差错检测 | 以太网、PPP、WiFi | 交换机、网桥 | 帧 |
| 物理层 | 网络接口层 | 比特流变成物理信号 | RJ45、光纤规范 | 集线器、中继器 | 比特 |
三个必须记牢的点:
- PDU(协议数据单元)就是"每一层眼中的数据长什么样":应用层叫报文,传输层叫段,网络层叫分组(包),链路层叫帧,物理层叫比特。考试常直接考"帧是哪一层的数据单元"。
- 设备与层的绑定关系是高频考点:集线器在物理层(只会无脑复制信号),交换机在数据链路层(认 MAC 地址),路由器在网络层(认 IP 地址)。
- OSI 的会话层、表示层在 TCP/IP 里被并入应用层——实践证明这两层单独存在的必要性不大,相关功能由应用程序自己处理。
还有一种常见的"五层教学模型"(物理、链路、网络、传输、应用),是教材为了讲课方便把 TCP/IP 的网络接口层拆成两层。做题时以题目采用的模型为准。
3. 封装与解封装:数据在协议栈里的一生
分层之后,数据怎么在层间流动?答案是封装:每一层把上层交下来的数据当成"货物",在前面贴上自己这一层的"标签"(首部),然后交给下层。接收方则一层层拆标签,这叫解封装。
用寄快递类比:你写好信(应用数据),装进信封写上收件人姓名(传输层端口),快递公司再套一个快递袋写上收件地址(网络层 IP 地址),司机把包裹装进货车贴上车次单(链路层帧头),最后货车在公路上跑(物理层信号)。收货时反过来一层层拆。
几个考试常挖坑的细节:
- 首部是"加在前面"的,链路层还会加帧尾(用于差错检测的校验字段放在帧尾)。
- 中间的路由器只解封装到网络层:拆帧、看 IP、换条新链路重新封帧发出去。路由器不看传输层和应用层的内容。
- 交换机更浅,只看帧头里的 MAC 地址,连 IP 首部都不拆。
- 每经过一层封装,数据总长度都会变大——这解释了为什么谈"传输效率"时要考虑首部开销。
4. 端到端原则:可靠性到底该放在哪一层
这是整个网络设计里最深刻、也最值得花时间想通的一个问题。
链路层其实也能做差错检测甚至重传,那为什么还需要 TCP 在传输层再做一遍可靠传输?反过来问:既然 TCP 会保证可靠,链路层是不是就可以完全不管差错?
**端到端原则(end-to-end argument)**的回答是:只有通信的两端(端系统)才真正知道"传输是否成功",所以正确性检查必须放在端上;中间环节做的任何可靠性措施都只是性能优化,不能作为正确性的最终保证。
推理过程是这样的:
- 假设每一段链路都做了完美的差错检测和重传,数据就一定完好吗?不一定。数据可能在路由器的内存里被翻转一个比特,可能被软件 bug 损坏——这些发生在"链路之间",链路层看不见。
- 所以无论中间做得多可靠,接收端的应用最终还是要自己确认"我收到的就是你发的"。既然端上这道检查省不掉,中间的可靠性机制就不是必需品。
- 但中间机制也不是没用:在误码率很高的链路(如无线链路)上做本地重传,比让 TCP 从头到尾重传一遍便宜得多。所以链路层的差错控制是性能优化,端上的可靠性才是正确性保证。
这条原则直接塑造了互联网的样子:网络核心保持简单(IP 只管尽力而为地转发,丢了就丢了),复杂的功能推到网络边缘的主机上(TCP、加密、压缩都在端系统实现)。核心简单,网络才容易扩展到全球规模;边缘智能,新应用才不需要改造网络就能部署。
一句大白话点透:IP 是"尽力而为的邮政",寄丢不赔;TCP 是"寄件人自己盯着签收、丢了就再寄"的那股执念。
5. 沙漏模型与 IP 细腰
把互联网的协议画在一起,会呈现一个沙漏形状:上面的应用层协议五花八门(HTTP、DNS、SMTP……),下面的物理网络技术也五花八门(以太网、WiFi、光纤、卫星……),但中间的网络层只有一个 IP。这就是沙漏模型,IP 所在的位置叫细腰。
为什么要把腰做细?因为这是"任意应用跑在任意网络上"的最省事方案:
- 新应用只需要会说 IP,就能跑在所有物理网络上,不必逐个适配。
- 新的物理网络技术只要能承载 IP 分组,就能接入互联网,上面所有应用立刻可用。
- 如果中间层有 N 种协议,上下互联的适配工作量是乘法;只有一个 IP,工作量就变成加法。
细腰的代价是 IP 极难升级——所有设备都说 IPv4,换成 IPv6 就要"全世界一起换",这正是 IPv6 推广了二十多年仍未完成的根本原因。
6. 电路交换与分组交换:互联网选了哪条路
分层解决"纵向怎么分工",还有一个横向的根本抉择:数据在网络里以什么方式流动。历史上有两大流派:
- 电路交换:通信前先在两点之间建立一条专用物理通路,独占到底,通话结束才释放。传统电话网就是这样——拨号等待的那几秒就是在"铺路"。
- 分组交换:把数据切成一个个分组,每个分组自带目的地址,各自独立上路,走哪条路由器现场决定,到了终点再拼回来。互联网选的是这条路。
| 维度 | 电路交换 | 分组交换 |
|---|---|---|
| 通信前 | 必须先建立连接(铺专线) | 不需要,直接发 |
| 资源占用 | 独占线路,不说话也占着 | 线路大家共享,按需使用 |
| 传输质量 | 时延稳定,无拥塞之忧 | 可能排队、丢包、乱序 |
| 线路利用率 | 低(沉默时段全浪费) | 高(空隙被别人的分组填满) |
| 适合场景 | 持续稳定的通话 | 突发性的数据传输 |
为什么互联网选分组交换?因为计算机通信是突发式的:你浏览网页时,点击的一瞬间流量汹涌,阅读的几十秒完全沉默。如果为每次上网铺一条专线,线路 99% 的时间在空转。分组交换让所有人"拼车",把线路利用率提上来——代价是可能堵车(拥塞)、可能丢件(丢包),而这些问题正是后面 TCP 要出场解决的。
还有一个中间形态报文交换:不切分、整条报文逐站存储转发,因单个报文可能很大、占用节点存储且时延不可控,被分组交换取代。三者对比偶尔出现在考题里,记住"电路独占、报文整存整转、分组切小块转发"即可。
7. 网络性能指标:时延不只一种
考试爱考"数据从 A 到 B 需要多久",必须先分清时延的四个组成部分:
| 时延类型 | 白话含义 | 决定因素 |
|---|---|---|
| 发送时延 | 把数据"推上"链路需要的时间 | 数据长度 ÷ 发送速率 |
| 传播时延 | 信号在介质中"跑路"的时间 | 距离 ÷ 传播速度(约光速量级) |
| 处理时延 | 路由器查表、校验的时间 | 设备性能 |
| 排队时延 | 在路由器队列里等待的时间 | 网络拥塞程度 |
最容易混的是前两个:发送时延与数据量和带宽有关,传播时延只与距离有关。带宽从 100 Mbps 升级到 1000 Mbps,发送时延缩短到十分之一,但传播时延一纳秒都不会变——信号不会因为你办了更贵的宽带就跑得更快。理解这一点,"提高带宽能否降低跨洋通信的延迟"这类题就不会答错(不能,跨洋延迟主要是传播时延)。
往返时间 RTT 指从发出数据到收到对方确认所经历的时间,是后面理解 TCP 握手成本、滑动窗口大小的基础量。
8. 用分层框架给考题"定位"
拿到网络题,第一步永远是问:这道题在考哪一层? 定位之后,选项里跨层混搭的说法基本就能排除。
| 题目关键词 | 定位层次 | 联想对象 |
|---|---|---|
| 比特、信号、带宽、网线、集线器 | 物理层 | 传输介质、编码 |
| 帧、MAC 地址、交换机、CSMA/CD | 数据链路层 | 以太网 |
| IP 地址、子网、路由器、分组 | 网络层 | IP、ICMP、路由协议 |
| 端口、可靠传输、拥塞控制 | 传输层 | TCP、UDP |
| 域名、网页、邮件、HTTP | 应用层 | DNS、HTTP、SMTP |
例如"交换机根据 IP 地址转发数据帧"这句话,一眼就能判错:交换机在链路层,它认的是 MAC 地址;"帧"和"IP 地址"也不是同一层的概念。
本章要点回顾
| 知识点 | 一句话结论 |
|---|---|
| 分层的目的 | 复杂性分解 + 各层独立演化,本质是"分工加合同" |
| OSI 七层 | 物理、数据链路、网络、传输、会话、表示、应用(自下而上) |
| TCP/IP 四层 | 网络接口、网际、传输、应用;会话表示并入应用层 |
| PDU 对照 | 比特—帧—分组—段—报文,自下而上 |
| 设备与层 | 集线器·物理层,交换机·链路层,路由器·网络层 |
| 封装 | 每层加首部,链路层还加帧尾;路由器只拆到网络层 |
| 端到端原则 | 正确性检查必须放在两端,中间的可靠性只是性能优化 |
| 沙漏模型 | IP 是细腰,向上支撑所有应用,向下适配所有物理网络 |
| 交换方式 | 电话网电路交换独占线路,互联网分组交换共享线路 |
| 四种时延 | 发送、传播、处理、排队;带宽只影响发送时延 |
做题提醒
- 数据单元名称与层次必须一一对应:帧属于数据链路层,分组(包)属于网络层,段属于传输层。选项里"网络层的帧"这种表述直接判错。
- OSI 是七层理论模型,TCP/IP 是四层实用模型,别把"会话层、表示层"安到 TCP/IP 模型头上。
- 层次顺序既要会"自下而上"背,也要会"自上而下"背,考试两种问法都有。
- "路由器工作在传输层""交换机根据 IP 转发"都是经典错误选项,设备与层的对应关系必须条件反射。
- 问"哪一层保证可靠传输"时,标准答案是传输层(TCP);链路层的差错检测只发现和丢弃错帧,一般不保证端到端可靠。
- 中间设备处理深度:集线器不拆封装、交换机拆到帧头、路由器拆到 IP 首部——问"路由器是否检查端口号"答否。
- 互联网采用分组交换而非电路交换;"分组交换需要先建立物理专用通路"是错误说法,别把 TCP 的逻辑连接与电路交换的物理专线混为一谈。
- 计算时延的题先辨认问的是发送时延还是传播时延:数据量除以带宽是发送时延,距离除以信号速度是传播时延,提高带宽不会缩短传播时延。
