Skip to content

第一章 分层与端到端:网络的总体设计


1. 为什么网络课必须从"分层"开始

很多人复习计算机网络,第一件事就是背"OSI 七层:物理、数据链路、网络、传输、会话、表示、应用",背完就去做题,结果一遇到"交换机工作在哪一层""TCP 和 IP 谁负责可靠性"这类题就翻车。原因很简单:只记住了层的名字,没理解每一层"为什么存在"、它"承诺解决什么问题"。

先退一步想:把一段文字从北京的一台电脑发到上海的一台手机,中间要解决多少问题?

  1. 文字要变成电信号或光信号,才能在线缆里跑。
  2. 信号在传输中可能出错,要能发现错误。
  3. 北京到上海要经过很多台中间设备,每一步该往哪走?
  4. 对方可能同时开着微信、浏览器、网易云,数据到了手机,该交给哪个程序?
  5. 数据可能丢、可能乱序,谁来补发、谁来排序?
  6. 双方的程序要约定数据格式,比如"这是一个网页请求"。

如果让一个程序把这六件事全包了,这个程序会庞大到没人能维护,而且换一种线缆、换一种应用都得推倒重来。网络设计者的答案是:把大问题切成一叠小问题,每层只解决一类问题,层与层之间只通过固定接口打交道。这就是分层。

分层带来两个决定性的好处:

  1. 复杂性分解。每一层只面对一个规模可控的子问题,实现者不必了解其他层的细节。写浏览器的人不需要懂光纤怎么调制信号。
  2. 各层独立演化。只要层间接口不变,某一层的技术可以整体替换而不影响其他层。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、光纤规范集线器、中继器比特

三个必须记牢的点:

  1. PDU(协议数据单元)就是"每一层眼中的数据长什么样":应用层叫报文,传输层叫段,网络层叫分组(包),链路层叫帧,物理层叫比特。考试常直接考"帧是哪一层的数据单元"。
  2. 设备与层的绑定关系是高频考点:集线器在物理层(只会无脑复制信号),交换机在数据链路层(认 MAC 地址),路由器在网络层(认 IP 地址)。
  3. OSI 的会话层、表示层在 TCP/IP 里被并入应用层——实践证明这两层单独存在的必要性不大,相关功能由应用程序自己处理。

还有一种常见的"五层教学模型"(物理、链路、网络、传输、应用),是教材为了讲课方便把 TCP/IP 的网络接口层拆成两层。做题时以题目采用的模型为准。

3. 封装与解封装:数据在协议栈里的一生

分层之后,数据怎么在层间流动?答案是封装:每一层把上层交下来的数据当成"货物",在前面贴上自己这一层的"标签"(首部),然后交给下层。接收方则一层层拆标签,这叫解封装

用寄快递类比:你写好信(应用数据),装进信封写上收件人姓名(传输层端口),快递公司再套一个快递袋写上收件地址(网络层 IP 地址),司机把包裹装进货车贴上车次单(链路层帧头),最后货车在公路上跑(物理层信号)。收货时反过来一层层拆。

几个考试常挖坑的细节:

  1. 首部是"加在前面"的,链路层还会加帧尾(用于差错检测的校验字段放在帧尾)。
  2. 中间的路由器只解封装到网络层:拆帧、看 IP、换条新链路重新封帧发出去。路由器不看传输层和应用层的内容
  3. 交换机更浅,只看帧头里的 MAC 地址,连 IP 首部都不拆。
  4. 每经过一层封装,数据总长度都会变大——这解释了为什么谈"传输效率"时要考虑首部开销。

4. 端到端原则:可靠性到底该放在哪一层

这是整个网络设计里最深刻、也最值得花时间想通的一个问题。

链路层其实也能做差错检测甚至重传,那为什么还需要 TCP 在传输层再做一遍可靠传输?反过来问:既然 TCP 会保证可靠,链路层是不是就可以完全不管差错?

**端到端原则(end-to-end argument)**的回答是:只有通信的两端(端系统)才真正知道"传输是否成功",所以正确性检查必须放在端上;中间环节做的任何可靠性措施都只是性能优化,不能作为正确性的最终保证

推理过程是这样的:

  1. 假设每一段链路都做了完美的差错检测和重传,数据就一定完好吗?不一定。数据可能在路由器的内存里被翻转一个比特,可能被软件 bug 损坏——这些发生在"链路之间",链路层看不见。
  2. 所以无论中间做得多可靠,接收端的应用最终还是要自己确认"我收到的就是你发的"。既然端上这道检查省不掉,中间的可靠性机制就不是必需品。
  3. 但中间机制也不是没用:在误码率很高的链路(如无线链路)上做本地重传,比让 TCP 从头到尾重传一遍便宜得多。所以链路层的差错控制是性能优化,端上的可靠性才是正确性保证

这条原则直接塑造了互联网的样子:网络核心保持简单(IP 只管尽力而为地转发,丢了就丢了),复杂的功能推到网络边缘的主机上(TCP、加密、压缩都在端系统实现)。核心简单,网络才容易扩展到全球规模;边缘智能,新应用才不需要改造网络就能部署。

一句大白话点透:IP 是"尽力而为的邮政",寄丢不赔;TCP 是"寄件人自己盯着签收、丢了就再寄"的那股执念

5. 沙漏模型与 IP 细腰

把互联网的协议画在一起,会呈现一个沙漏形状:上面的应用层协议五花八门(HTTP、DNS、SMTP……),下面的物理网络技术也五花八门(以太网、WiFi、光纤、卫星……),但中间的网络层只有一个 IP。这就是沙漏模型,IP 所在的位置叫细腰

为什么要把腰做细?因为这是"任意应用跑在任意网络上"的最省事方案:

  1. 新应用只需要会说 IP,就能跑在所有物理网络上,不必逐个适配。
  2. 新的物理网络技术只要能承载 IP 分组,就能接入互联网,上面所有应用立刻可用。
  3. 如果中间层有 N 种协议,上下互联的适配工作量是乘法;只有一个 IP,工作量就变成加法。

细腰的代价是 IP 极难升级——所有设备都说 IPv4,换成 IPv6 就要"全世界一起换",这正是 IPv6 推广了二十多年仍未完成的根本原因。

6. 电路交换与分组交换:互联网选了哪条路

分层解决"纵向怎么分工",还有一个横向的根本抉择:数据在网络里以什么方式流动。历史上有两大流派:

  1. 电路交换:通信前先在两点之间建立一条专用物理通路,独占到底,通话结束才释放。传统电话网就是这样——拨号等待的那几秒就是在"铺路"。
  2. 分组交换:把数据切成一个个分组,每个分组自带目的地址,各自独立上路,走哪条路由器现场决定,到了终点再拼回来。互联网选的是这条路。
维度电路交换分组交换
通信前必须先建立连接(铺专线)不需要,直接发
资源占用独占线路,不说话也占着线路大家共享,按需使用
传输质量时延稳定,无拥塞之忧可能排队、丢包、乱序
线路利用率低(沉默时段全浪费)高(空隙被别人的分组填满)
适合场景持续稳定的通话突发性的数据传输

为什么互联网选分组交换?因为计算机通信是突发式的:你浏览网页时,点击的一瞬间流量汹涌,阅读的几十秒完全沉默。如果为每次上网铺一条专线,线路 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 是细腰,向上支撑所有应用,向下适配所有物理网络
交换方式电话网电路交换独占线路,互联网分组交换共享线路
四种时延发送、传播、处理、排队;带宽只影响发送时延

做题提醒

  1. 数据单元名称与层次必须一一对应:帧属于数据链路层,分组(包)属于网络层,段属于传输层。选项里"网络层的帧"这种表述直接判错。
  2. OSI 是七层理论模型,TCP/IP 是四层实用模型,别把"会话层、表示层"安到 TCP/IP 模型头上。
  3. 层次顺序既要会"自下而上"背,也要会"自上而下"背,考试两种问法都有。
  4. "路由器工作在传输层""交换机根据 IP 转发"都是经典错误选项,设备与层的对应关系必须条件反射。
  5. 问"哪一层保证可靠传输"时,标准答案是传输层(TCP);链路层的差错检测只发现和丢弃错帧,一般不保证端到端可靠。
  6. 中间设备处理深度:集线器不拆封装、交换机拆到帧头、路由器拆到 IP 首部——问"路由器是否检查端口号"答否。
  7. 互联网采用分组交换而非电路交换;"分组交换需要先建立物理专用通路"是错误说法,别把 TCP 的逻辑连接与电路交换的物理专线混为一谈。
  8. 计算时延的题先辨认问的是发送时延还是传播时延:数据量除以带宽是发送时延,距离除以信号速度是传播时延,提高带宽不会缩短传播时延。