01 · 网络体系结构(Network Architecture)

📅 预计 60 分钟 | ⭐ 本章主题:把"网络"拆成一摞分工明确的层


1.0 先给直觉:网络像一套跨国邮政系统

你给国外朋友寄一个包裹,整个过程不只有一个环节:你在信封上写地址 → 邮局盖邮戳分拣 → 火车/飞机运输 → 对方城市邮局再分拣 → 快递员送上门。任何一个环节都只关心自己那一层的活:你只管写信和写地址,运输队只管把包裹从 A 城运到 B 城,快递员只管认门牌号。

计算机网络也是一样。两台电脑通信,中间涉及接口、电线、寻址、差错校验、数据打包、应用格式等一大堆事。如果让每个程序员都自己处理所有环节,通信会乱成一团。于是人们发明了一个办法:分层——把整个通信过程拆成若干层,每层只干自己的活,层与层之间靠固定的接口衔接。

本章是整门课的骨架。后面每一章(物理层、链路层、网络层、传输层)都是在填这个框架里的某一层。先把骨架立起来,后面的内容就有地方挂了。

1.1 为什么要分层 ⭐

分层 = 把大问题切成小问题,再逐层解决

想象一个快递公司的组织架构:收件部、分拣部、运输部、派件部。每个部门只对"上一部门给的件 + 下一部门要的件"负责,不需要知道其他部门内部怎么运转。

分层的直接好处,总结成四句话:

  1. 各层独立:某层实现改动(比如换一种传输介质),只要接口不变,其他层不用动。
  2. 每层只管一件事:层内只需考虑本层的协议,问题简单、好实现。
  3. 灵活组合:每一层可以"插拔"不同的实现,比如传输层既可以用 TCP 也可以用 UDP,网络层不变。
  4. 可追踪:出现问题时,可以逐层排查,定位在哪一层出的错(排查工具 pingtraceroute 就是"逐层探测")。

💡 一句话记分层:分层的本质是"每一层都认为,对面那台机器跟自己是直接相连的"——中间那些绕路、转换、差错,都由下面的层悄悄处理掉了。

⚠️ 常见错误

  1. 把"分层"理解成物理隔离:分层只是逻辑上的职责划分,不是真的把网络拆成几根线。
  2. 以为层数越多越好:分层是为了降低复杂度,层过多反而增加开销(每层都要加头、都要处理)。OSI 七层是"参考模型",现实中很少完整实现。

1.2 OSI 七层模型 ⭐⭐⭐

七个各司其职的部门

OSI(Open Systems Interconnection,开放系统互联)参考模型由国际标准化组织 ISO 提出,把网络通信分成七层,从下到上是:

层号 名称 英文 一句话职责 典型协议/设备
7 应用层 Application 为用户提供网络服务接口 HTTP、FTP、DNS、SMTP
6 表示层 Presentation 数据格式转换、加密、压缩 JPEG、ASCII 转换
5 会话层 Session 建立、管理、终止会话 登录会话、断点续传
4 传输层 Transport 端到端可靠传输、端口 TCP、UDP
3 网络层 Network 寻址与路由(跨网转发) IP、路由器
2 数据链路层 Data Link 相邻节点间成帧、差错控制 以太网、交换机
1 物理层 Physical 在介质上传送原始比特流 网线、集线器、中继器

每一层的核心职责:

  • 物理层:只管"1 和 0"以电信号/光信号/无线电波的形式在介质上传输。它不关心这些比特有什么含义,只关心电压高低、光有无、传输速率。单位是比特(bit)
  • 数据链路层:把比特组装成帧(frame),加 MAC 地址,做差错检测。它解决的是"相邻两台设备"之间的传输。
  • 网络层:负责跨网络的寻址与路由选择——数据要从 A 网络到 B 网络,走哪条路。单位是分组(packet)/ 数据报
  • 传输层:负责端到端(进程到进程)的传输,管端口号,提供可靠(TCP)或不可靠(UDP)传输。单位是报文段(segment)/ 用户数据报
  • 会话层:管理一次"对话"的建立和结束,比如登录后保持会话不断开。
  • 表示层:解决"数据长什么样"的问题——同一段文字,中文系统用 GBK、英文系统用 ASCII,表示层负责统一格式、加密、压缩。
  • 应用层:离用户最近的一层,直接面向具体应用,提供网络服务接口。

💡 记忆口诀(从上到下)"应表会传网链物"。可以记成顺口溜:应(用)表(示)会(话)传(输)网(络)链(路)物(理)——"应用表示会传网,链路物理最底端"。

⚠️ 常见错误

  1. 层号记反:最底层是物理层(1),最顶层是应用层(7)。"7 层"指的是从上往下数。
  2. 把 DNS、HTTP 记到传输层:它们是应用层协议,只是"跑在 TCP/UDP 之上"。
  3. 以为每层都要经过物理设备:只有数据真正在线路上传输时才经过物理层;网络层的"路由"是逻辑决策,不是物理跳线。

1.3 TCP/IP 四层模型 ⭐⭐⭐

现实中真正在用的那套

OSI 是理想蓝图,而现实世界(尤其是互联网)用的是 TCP/IP 协议族,它把 OSI 七层合并成了四层

TCP/IP 四层 对应 OSI 层 典型协议
应用层 7+6+5 HTTP、DNS、FTP、SMTP、Telnet
传输层 4 TCP、UDP
网际层(Internet) 3 IP、ARP、ICMP
网络接口层 2+1 以太网、Wi-Fi、PPP

对应关系要记住:TCP/IP 的应用层 ≈ OSI 的应用层+表示层+会话层(现实中三层界限模糊,合并了);网络接口层 ≈ 链路层+物理层(现实中接口细节太多,统一收编)。

有些教材为了教学方便,把"网络接口层"再拆成"数据链路层 + 物理层",变成五层模型。考试时以你教材的定义为准,核心是:TCP/IP 的分层思想与 OSI 一致,只是合并了层

💡 一句话区分:OSI 是"理论上的标准答案",TCP/IP 是"互联网实际用的"。背 OSI 为了懂思想、会数层;背 TCP/IP 为了会用协议、会排错。

⚠️ 常见错误

  1. 把 OSI 和 TCP/IP 的层数记混:OSI 七层、TCP/IP 四层(或教学版五层),不是 4 对 7 一一对应。
  2. 以为 OSI 七层有真实实现:现实中网络设备基本按 TCP/IP 工作,OSI 的会话层、表示层在互联网中几乎没有独立协议对应。
  3. 把 ARP、ICMP 记到传输层:它们在 TCP/IP 里属于网际层(IP 的辅助协议)。

1.4 协议三要素 ⭐⭐⭐

协议 = 双方约定好的"规矩"

两台设备要通信,必须事先约定好:数据长什么样、怎么理解、什么时候发。这个约定就是协议(protocol)。任何协议都由三个要素构成:

  1. 语法(Syntax):数据格式——报文里哪些字节是地址、哪些是数据、哪些是校验码。就像写信要遵守"称呼→正文→落款"的格式。
  2. 语义(Semantics):每种字段的含义动作——收到一个"请求"该怎么应答、收到"确认"该做什么。就像"谢谢"表示感激、"再见"表示结束。
  3. 时序(Timing):事件的先后顺序和时间关系——先发请求还是先发确认、超时多久重发。就像对话"一问一答"的节奏。

举一个看得见的例子——HTTP 请求报文(语法、语义、时序全在这):

GET /index.html HTTP/1.1      # 语法:方法 + 路径 + 版本号
Host: www.example.com         # 语义:说明要访问哪个主机
  • 语法:每一行字段的顺序、空格、冒号都是规定死的格式。
  • 语义GET 表示"请求资源",服务器看到 GET 就返回网页内容;看到 POST 就执行提交。
  • 时序:必须先由客户端发请求,服务器收到后才回应答——顺序不能颠倒。

💡 记忆口诀:协议三要素 = "语法管格式,语义管含义,时序管顺序"。格式、含义、顺序,缺一个协议就不成立。

⚠️ 常见错误

  1. 把"语法"理解成编程语言的语法:这里的语法指报文的格式结构,不是 C 语言的那种语法。
  2. 漏掉"时序":很多同学只记语法和语义。记住——什么时候发、多久重发也属于协议内容,TCP 的重传计时器就是时序的体现。

1.5 封装与解封装 ⭐⭐⭐

数据穿衣服:一层套一层

数据要从应用层出发发到网络上,会逐层穿上"外套",这个过程叫封装(encapsulation);到达对端后,再逐层脱掉外套,叫解封装(decapsulation)

每一层只加自己那一层的"头"(header),就像寄快递:

应用层数据 "你好"                    # 原始数据(data)
     ↓ 传输层加 TCP 头
[TCP头][你好]                        # 报文段 segment
     ↓ 网络层加 IP 头
[IP头][TCP头][你好]                  # 数据报/分组 datagram
     ↓ 链路层加帧头帧尾
[帧头][IP头][TCP头][你好][帧尾]       # 帧 frame
     ↓ 物理层变成电信号/光信号发出去

封装:数据从上层往下层走,每层给数据包加一个"该层专用的头"(链路层还要加帧尾)。

解封装:接收方从底层往上走,每层拆掉自己那层的头,把剩余部分交给上一层。

一个生动的比喻——寄快递

环节 网络层 快递
写信 应用层产生数据 写内容
填地址、贴面单 网络层加 IP 头(源/目的 IP) 贴收/寄件地址
装箱、贴运单号 传输层加端口号 运单号(找具体的人)
打包、贴条码 链路层加帧头帧尾 包裹外层的条码
运输 物理层 货车运送

到对方手里,快递员拆条码(帧尾)、验面单(IP 头)、找收件人(端口),一层层把内容还原——这就是解封装。

💡 关键点:每一层"只认自己那层的地址"。网络层只看 IP 地址,链路层只看 MAC 地址,传输层只看端口号。谁加的谁拆,绝不越级。

⚠️ 常见错误

  1. 封装顺序记反:是从上到下加头(先 TCP 后 IP 再帧头),不是反过来。
  2. 以为每层都"修改"数据:中间层一般不修改原始数据,只是添加自己的头;到了目的端再原样还原。
  3. 把"加头"说成"加密":封装加的是控制信息(地址、校验),不是加密。加密属于表示层/应用层的事。

1.6 数据交换方式:电路交换 / 分组交换 ⭐⭐

网络怎么"让很多用户同时用线路"

前面讲的是"一层层怎么分工",这一节讲的是"数据在网络上到底怎么传输"——用到的底层技术叫交换(switching)。三种主流方式:

1. 电路交换(circuit switching)——电话

打电话时,从拨号到挂机,中间独占一条固定的线路:先"建立连接"(拨通),再传数据(通话),最后"释放连接"(挂断)。特征:

  • 先建连、后通信、再释放,三个阶段清清楚楚。
  • 通信期间独占资源——即使不说话,线路也占着,别人不能用。
  • 适合实时通信(电话),但线路利用率低。
电话:拨号(建连) → 通话(传数据) → 挂断(释放)  ← 全程独占一条路

2. 报文交换(message switching)——老式电报

把整个报文(整封信)作为一个整体,存储转发:每到一个节点先整个存下来,再发给下一站。不独占线路,但报文可能很大,中间节点要整份存,延迟大、不适合实时。

3. 分组交换(packet switching)——互联网的核心

把大报文拆成一个个小分组(packet),各自独立传输、可走不同路径,到目的地再重组。特征:

  • 无连接:分组独立转发,不必预先建连。
  • 逐段存储转发 + 排队:每个路由器把分组暂存、查路由表、转发出去。
  • 动态共享线路:线路按需分配,利用率高。
  • 缺点:有排队延迟,可能丢包、乱序,需要上层(TCP)负责重排和重传。
一个 9000 字节的文件,拆成 6 个 1500 字节的分组:
分组1 → 走路径 A
分组2 → 走路径 B(两条路都可以走,速度更快、更抗故障)
分组3 → 走路径 A ... 到达后按序号重组

💡 记忆口诀"电路交换先建连、独占一条线;分组交换拆小包、各走各路重组"。互联网用分组交换,电话用电路交换

⚠️ 常见错误

  1. 把"分组交换"说成"无存储转发":分组交换恰恰是存储转发——每个节点(路由器)要先把分组存下来再转发。
  2. 以为电路交换和分组交换都要"先建连":只有电路交换必须先建连;分组交换是无连接的,直接发。
  3. 把报文交换和分组交换混为一谈:报文交换传整份报文(不拆分),分组交换把报文拆小分组——拆不拆是关键区别。

1.7 一次通信的完整旅程 ⭐

浏览一个网页,数据是怎么穿过七层的

把所有概念串起来,看一个完整例子:你在浏览器输入网址,服务器把网页发给你,数据经过的完整路径。

发送端(服务器)逐层封装

应用层:HTTP 报文("这是网页内容")
传输层:加 TCP 头(端口 80,源端口 4xxxx)     → 报文段
网络层:加 IP 头(源 IP=服务器IP,目的 IP=你的IP) → 数据报
链路层:加帧头帧尾(源 MAC=服务器网卡,目的 MAC=下一跳路由器的 MAC) → 帧
物理层:变成光/电信号上线路

中间(路由器):路由器拆到网络层——只看 IP 目的地址,查路由表决定下一跳,重写链路层 MAC 头(改成下一个路由器/主机的 MAC),继续转发。IP 地址全程不变,MAC 地址逐跳更换。

接收端(你的电脑)逐层解封装

物理层:收到电信号还原比特
链路层:去掉帧头帧尾、验 CRC → 交给网络层
网络层:去掉 IP 头,看目的 IP 是自己 → 交给传输层
传输层:去掉 TCP 头,按端口号 4xxxx 找到浏览器进程 → 交给应用层
应用层:HTTP 报文渲染成网页

💡 核心领悟中间设备只拆到自己需要的那层——交换机拆到链路层,路由器拆到网络层,只有目的主机才拆到应用层。这正体现了分层的价值。

⚠️ 常见错误

  1. 以为每个路由器都拆到应用层:路由器只拆到网络层(看 IP),不拆更高层。
  2. 以为 IP 地址逐跳变化:IP 端到端不变;逐跳变的是 MAC 地址(每个路由器重写帧头)。
  3. 把"目的端口"和"目的 IP"搞混:IP 把数据送到主机,端口把数据送到主机上的具体进程,缺一个都不行。

🧠 记忆口诀

  • 七层从上到下:应表会传网链物(应用、表示、会话、传输、网络、链路、物理)。
  • 协议三要素:语法管格式,语义管含义,时序管顺序。
  • 封装路线:应用数据 → TCP 头 → IP 头 → 帧头帧尾 → 比特流;从上往下加,从下往上拆。
  • OSI 是蓝图,TCP/IP 是实物:OSI 七层重思想,TCP/IP 四层重实现。

⭐ 考点清单

  1. OSI 七层每层的名称、顺序、职责、代表协议/设备
  2. TCP/IP 四层与 OSI 七层的对应关系(应用层=7+6+5,网络接口层=2+1)
  3. 协议三要素:语法(格式)、语义(含义)、时序(顺序)
  4. 数据在各层中的名称:数据 → 报文段/数据报 → 分组 → 帧 → 比特
  5. 封装与解封装的顺序、各层加什么头
  6. 典型协议归属:HTTP/DNS 在应用层,TCP/UDP 在传输层,IP/ARP/ICMP 在网络层
  7. 分层的好处:独立、简化、灵活、可追踪
  8. 三种交换方式:电路交换(先建连、独占)、报文交换(整份存储转发)、分组交换(拆小包、独立转发)
  9. 封装/解封装的完整流程:中间路由器只拆到网络层,MAC 逐跳变、IP 端到端不变

📌 中英术语表

中文 English 说明
网络体系结构 network architecture 层次结构 + 各层协议的集合
分层 layering 按职责划分层次的思想
协议 protocol 通信双方约定的规则
语法 syntax 数据与控制信息的格式
语义 semantics 字段含义与应答动作
时序 timing 事件顺序与时间关系
封装 / 解封装 encapsulation / decapsulation 逐层加头 / 逐层拆头
应用层 application layer 面向应用的网络服务
表示层 presentation layer 格式转换、加密、压缩
会话层 session layer 会话的建立与管理
传输层 transport layer 端到端、端口、可靠传输
网络层 network layer 寻址与路由
数据链路层 data link layer 成帧、MAC、差错控制
物理层 physical layer 比特流的物理传输
报文段 / 数据报 / 帧 segment / datagram / frame 各层数据单元的称呼
参考模型 reference model OSI 只是参考,非强制实现
电路交换 circuit switching 先建连、独占线路,电话用
分组交换 packet switching 拆小包独立转发,互联网用
报文交换 message switching 整份报文存储转发
存储转发 store-and-forward 节点先存再发的转发方式