TCP/IP(一):网络分层模型——OSI、TCP/IP 与五层模型

写在前面

网络是后端、云原生、分布式都绕不开的地基,可它偏偏是那种"天天用、却很少系统学"的东西——出问题时抓包看不懂、调内核参数不知道原理、被人问"TCP 为什么是三次握手"答不完整。

这个系列从分层模型开始,自底向上把 TCP/IP 讲透。第一篇先回答最基础也最重要的问题:网络为什么要分层 ,以及 OSI、TCP/IP、平时说的"五层"这三种模型到底什么关系、怎么对应。


一、为什么需要分层

先想象不分层的网络是什么样:一个大程序要同时管电缆上的电信号、怎么给数据编址、怎么保证可靠、要不要加密、网页是什么格式……只要换一个环节(比如从有线换成无线),整个程序都得重写。

分层把这套极复杂的问题切成互不干扰的几层,每层只解决一件事,对上提供接口、对下使用下层服务。这样换来四个好处:

  • 解耦 —— 换网卡、换链路(有线 / 无线)不影响上面的 HTTP;
  • 复用 —— TCP 这一套可靠性机制,HTTP、SSH、数据库协议都能直接用;
  • 标准化 —— 不同厂商的设备能互通,因为大家都按同一套分层与接口来实现;
  • 可排查 —— 出问题时能按层定位(是物理断了?链路冲突?路由不通?端口被占?还是应用 bug?)。

一句话:分层把"两台机器上的程序互相通信"这件极复杂的事,拆成若干个可独立设计、可替换的简单问题


二、OSI 七层模型

OSI(Open Systems Interconnection)是 ISO 在 1984 年提出的参考模型,把网络通信分成七层。它是"教科书标准",概念清晰,但现实里的协议很少严格按七层实现。

自底向上:

名称负责什么典型协议 / 设备
7应用层 Application为用户程序提供网络服务接口HTTP、DNS、SMTP、SSH
6表示层 Presentation数据格式转换、编码、加解密、压缩TLS、JPEG、ASCII
5会话层 Session建立 / 管理 / 断开会话(少有独立的会话层协议)
4传输层 Transport端到端通信、可靠性与分段TCP、UDP
3网络层 Network跨网络寻址与路由IP、ICMP、路由器
2数据链路层 Data Link相邻节点间成帧、差错检测以太网、Wi-Fi、交换机
1物理层 Physical比特在介质上的传输电缆、光纤、集线器

记忆顺序(自底向上):物理、链路、网络、传输、会话、表示、应用。

一个常见疑问:会话层、表示层为什么"没什么存在感"?因为在工程实践中,它们的功能往往被应用层或 TLS 顺手做掉了,没有单独的协议实体。这也是 OSI 在工程上不如 TCP/IP 贴合实际的原因之一。


三、TCP/IP 四层模型

TCP/IP 模型是伴随互联网(ARPANET)一起成长起来的工程模型(也叫 DoD 模型),RFC 1122 把它划成四层。它先有协议、再归纳模型,所以和实际协议贴得很紧——这一点和 OSI 正好相反。

TCP/IP 层对应 OSI负责什么典型协议
应用层 Application5 / 6 / 7应用逻辑 + 表示 + 会话全部合并HTTP、DNS、SMTP、TLS
传输层 Transport4端到端通信(端口、可靠性)TCP、UDP
网际层 Internet3跨网寻址与路由IP、ICMP
网络接口层 Network Access(Link)1 / 2物理传输 + 成帧以太网、Wi-Fi、PPP

最容易混的是命名:TCP/IP 的网际层(Internet layer)对应 OSI 的网络层,别和"网络接口层"搞混——前者管 IP 路由,后者管链路成帧。最底下那层在不同教材里叫法不一(Network Access / Link / Network Interface),指的都是同一层。


四、实际用的五层模型

OSI 太细(会话 / 表示层实际很少单独存在),TCP/IP 太粗(把物理和链路合在一起,不好分开讲)。教学和工程里常用一个折中的五层模型,既好理解,又能一一对应到真实协议:

五层PDU 名称典型协议 / 设备
应用层报文 Message / DataHTTP、DNS
传输层段 Segment(TCP)/ 数据报 Datagram(UDP)TCP、UDP
网络层包 Packet(IP 数据报)IP、ICMP、路由器
数据链路层帧 Frame以太网、Wi-Fi、交换机
物理层比特 Bit电缆、光纤、集线器

本系列后面的篇幅就按五层来展开(链路 → 网络 → 传输 → 应用),既保留 TCP/IP 的工程视角,又不丢 OSI 的概念清晰度。

三者怎么对应?一句话:TCP/IP 把 OSI 的 5/6/7 合成应用层、把 1/2 合成网络接口层;五层模型再把 TCP/IP 的网络接口层拆回物理和链路


五、封装与解封装:数据是怎么一层层"穿上"的

分层不是"各干各的就完了"——数据发送时,每一层都会在上层数据外面套一个自己的头部(链路层还会加尾部),这叫封装(encapsulation);接收端再逐层拆掉,叫解封装。

一次 HTTP 请求从你的机器发出去,要经历:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
应用层:   生成 HTTP 报文
            │ + TCP 头部(源端口 / 目的端口 / 序号 …)
传输层:   TCP 段(Segment)
            │ + IP 头部(源 IP / 目的 IP / TTL …)
网络层:   IP 包(Packet)
            │ + 帧头(源 MAC / 目的 MAC)+ 帧尾(FCS)
链路层:   以太网帧(Frame)
            │ 转成比特流
物理层:   比特(Bit)经网线 / 光纤发出

每一层只认自己的头部,不关心(也看不懂)上层的载荷——这就是"解耦"在数据层面的体现。比如路由器只看到网络层的 IP 头就能决定往哪转发,完全不必读懂 TCP 或 HTTP。

这里出现的 PDU(Protocol Data Unit,协议数据单元)就是每一层处理后产生的数据单元:应用层叫报文、传输层叫段 / 数据报、网络层叫包、链路层叫帧、物理层叫比特。


六、每层靠什么"认人":地址

各层有各自的寻址方式,互不替代:

地址说明
传输层端口号区分同一台机器上的不同进程(如 80 = HTTP)
网络层IP 地址跨网络定位主机,可路由
链路层MAC 地址同一链路上定位网卡,出厂固化

后面几篇会分别展开:IP 地址怎么划分、路由怎么走(网络层),TCP 怎么用端口建立连接(传输层),ARP 怎么把 IP 翻译成 MAC(链路层)。


小结

  • 分层是为了解耦、复用、标准化、可排查
  • OSI 七层是概念参考模型,TCP/IP 四层贴合实际协议,五层模型是教学折中;
  • 数据发送时逐层封装(加头 / 尾),接收时逐层解封装;每层都有自己的 PDU 名称和地址体系。

下一篇:TCP/IP(二):以太网与链路层 —— MAC 地址、帧结构、交换机怎么转发、ARP 怎么把 IP 变成 MAC。


参考:

Licensed under CC BY-NC-SA 4.0