3963 字
20 分钟
网络:网络分层模型

计算机网络涉及网卡、交换机、路由器、IP、TCP、HTTP 等大量概念。如果把所有内容混在一起学习,很容易只记住一个个协议,却无法理解它们之间的关系。

网络分层模型就是用来解决这个问题的:把复杂的网络通信拆分成多个相对独立的层次,每一层负责不同的问题,并通过明确的接口与上下层协作。

本文只关注网络分层本身,重点介绍 OSI 七层模型、TCP/IP 模型、数据封装与解封装、层与层之间的关系,以及实际网络设备和协议大致位于什么位置。这些概念足以帮助你理解常见网络故障的排查顺序。

为什么需要网络分层#

如果不进行分层,网络通信可以被想象成一个巨大而复杂的系统:

网卡
交换机
路由器
MAC
ARP
IP
ICMP
TCP
UDP
DNS
HTTP
TLS
应用程序
...

这些技术之间存在大量依赖关系。

例如:

HTTP
↓
TCP
↓
IP
↓
Ethernet
↓
物理介质

如果所有概念都放在同一层理解,就很难回答:

HTTP 和 TCP 是什么关系?
IP 和 MAC 为什么同时存在?
交换机和路由器为什么做的事情不同?
一个数据包从应用程序到网线,经过了什么?
为什么同一个应用可以运行在不同网络上?

于是网络体系采用:

分层(Layering)

的思想。


网络分层的基本思想#

网络分层就是把通信过程拆成多个层次。

每一层:

负责自己的任务
+
向上层提供服务
+
使用下层提供的服务

可以简单理解为:

应用
↑
│ 使用
│
传输层
↑
│ 使用
│
网络层
↑
│ 使用
│
链路层
↑
│ 使用
│
物理层

每一层不需要知道所有底层实现细节。

例如:

HTTP 不需要知道网卡是如何把比特转换成电信号或无线信号的。

HTTP 更关心:

请求
响应
方法
状态
头部
数据

而底层则负责:

如何传输这些数据

这就是分层的核心价值。


分层带来的好处#

降低复杂度#

一个网络通信问题可以拆成:

应用问题
传输问题
网络问题
链路问题
物理问题

这样比研究整个系统简单得多。


模块化#

某一层发生变化时,不一定需要修改整个网络体系。

例如:

应用层
HTTP

可以运行在不同的底层网络之上。

同样:

TCP

也不需要知道具体应用是:

Web
数据库
SSH

还是其他程序。


标准化#

不同厂商只要遵循相同的协议标准,就可以互相通信。

例如:

厂商 A 的网卡
↕
标准网络协议
↕
厂商 B 的交换机

不需要所有设备都来自同一家厂商。


便于故障排查#

分层模型对运维尤其重要。

例如:

网站打不开

不能直接得出:

“网络坏了”

而应该逐层思考:

应用层
↓
HTTP 服务正常吗?
传输层
↓
TCP 连接建立了吗?
网络层
↓
IP 路由正常吗?
链路层
↓
网卡 / 交换网络正常吗?
物理层
↓
链路是否真的存在?

这也是后续学习网络故障排查时非常重要的思维方式。


OSI 七层模型#

最经典的网络分层模型是:

OSI(Open Systems Interconnection)参考模型

它定义了七个层次:

┌────────────────────┐
│ 7 应用层 │
├────────────────────┤
│ 6 表示层 │
├────────────────────┤
│ 5 会话层 │
├────────────────────┤
│ 4 传输层 │
├────────────────────┤
│ 3 网络层 │
├────────────────────┤
│ 2 数据链路层 │
├────────────────────┤
│ 1 物理层 │
└────────────────────┘

从上到下:

应用
表示
会话
传输
网络
数据链路
物理

第一层:物理层#

物理层:

Physical Layer

负责最底层的比特传输。

它关注的是:

信号
电气特性
光信号
无线信号
连接介质
接口
比特传输

例如:

铜缆
光纤
无线电波
连接器
信号电平

物理层关心的问题类似:

如何把 0 和 1 变成可以传输的信号?

可以简单表示:

比特
↓
信号
↓
物理介质
↓
信号
↓
比特

第二层:数据链路层#

数据链路层:

Data Link Layer

主要负责:

在直接相连的网络节点之间传输数据。

这一层通常涉及:

MAC 地址
帧
交换
链路
错误检测

典型的数据单位:

Frame(帧)

例如:

Ethernet Frame

属于这一层非常典型的内容。

可以简单理解:

网络层数据
↓
封装
↓
数据链路层帧
↓
通过局域网传输

第三层:网络层#

网络层:

Network Layer

主要解决:

不同网络之间的数据转发问题。

这一层的核心概念包括:

IP 地址
路由
路由表
数据包

典型协议:

IPv4
IPv6
ICMP

网络层数据通常称为:

Packet(数据包)

例如:

主机 A
↓
路由器
↓
路由器
↓
主机 B

数据能够跨越多个网络,就是网络层解决的重要问题。

后续会单独介绍:

IP 地址
子网
CIDR
路由
路由表

第四层:传输层#

传输层:

Transport Layer

主要负责:

端到端的传输。

典型协议:

TCP
UDP

它解决的问题包括:

端到端通信
端口
可靠传输
顺序
流量控制

不同协议的设计不同。

例如:

TCP
↓
可靠、面向连接
UDP
↓
无连接、开销较低

传输层会进一步使用:

Port(端口)

区分同一台主机上的不同网络应用。

例如:

192.168.1.10:22
192.168.1.10:80
192.168.1.10:443

第五层:会话层#

会话层:

Session Layer

主要负责管理应用程序之间的:

会话(Session)

例如:

建立会话
维护会话
恢复会话
结束会话

在 OSI 模型中,它被定义为独立的一层。

但在今天常见的 TCP/IP 网络栈中:

会话层通常不会作为一个独立的协议层明显存在。

很多会话功能实际上由:

应用层
传输层
具体协议

共同实现。

因此学习现代互联网协议时,不应该机械地寻找:

“第五层对应某一个具体协议”

第六层:表示层#

表示层:

Presentation Layer

主要负责:

数据表示和转换。

例如:

编码
数据格式
压缩
加密

其核心思想是:

应用看到的数据
↓
表示层进行转换
↓
网络传输数据

传统 OSI 模型将这些功能单独定义为一层。

但现代互联网协议中:

编码
压缩
加密

往往由具体应用协议、库或者独立协议完成,而不是存在一个统一的“表示层协议”。

例如:

TLS

提供加密能力,但不能简单地说:

TLS = OSI 第六层

因为现实协议栈与 OSI 七层模型并不是一一对应的。


第七层:应用层#

应用层:

Application Layer

最接近用户和应用程序。

常见协议包括:

HTTP
HTTPS
DNS
DHCP
SSH
FTP
SMTP

应用层负责的是:

具体应用之间如何通信。

例如 HTTP 定义:

请求
响应
方法
状态码
Header
Body

DNS 定义:

域名
查询
响应
资源记录

SSH 定义:

远程登录
安全通道
认证

因此:

应用层
↓
直接服务于具体网络应用

OSI 七层模型总览#

层名称主要关注内容典型数据单位
7应用层网络应用数据
6表示层数据表示、转换数据
5会话层会话管理数据
4传输层端到端传输Segment / Datagram
3网络层IP、路由Packet
2数据链路层帧、MAC、局域网Frame
1物理层信号、介质、比特Bit

需要注意:

“Segment / Datagram / Packet / Frame / Bit”是常见教学上的数据单位称呼,现实协议栈中具体命名会根据协议有所不同。


TCP/IP 模型#

实际互联网并不是直接按照 OSI 七层模型实现的。

互联网协议体系更常见的是:

TCP/IP 模型

教材中常见的表达方式有不同版本,其中一种经典的四层划分是:

┌────────────────────┐
│ 应用层 │
├────────────────────┤
│ 传输层 │
├────────────────────┤
│ 网际层 │
├────────────────────┤
│ 网络接口层 │
└────────────────────┘

也可以写成:

Application
Transport
Internet
Network Access

OSI 与 TCP/IP 的对应关系#

可以进行大致映射:

OSI TCP/IP
应用层 ───────┐
表示层 ───────┼────→ 应用层
会话层 ───────┘
传输层 ───────────→ 传输层
网络层 ───────────→ 网际层
数据链路层 ────┐
物理层 ────────┴────→ 网络接口层

因此:

OSI 7 层
↓
更多是参考模型
TCP/IP
↓
互联网协议体系中更加实际的模型

为什么 OSI 与 TCP/IP 不完全一样#

OSI 是:

参考模型

它重点描述:

网络功能应该如何分层

而 TCP/IP 是一个真实存在并长期使用的协议体系。

所以实际互联网:

HTTP
TCP
IP
Ethernet

并不会严格按照:

7 → 6 → 5 → 4 → 3 → 2 → 1

分别对应七个独立协议层。

现代网络协议的实际结构更加灵活。

因此学习分层模型时:

不要执着于“每一个协议必须准确属于 OSI 某一层”。

更重要的是理解:

谁负责应用通信?
谁负责端到端传输?
谁负责跨网络转发?
谁负责局域网传输?
谁负责物理信号?

数据封装#

网络分层最重要的概念之一:

Encapsulation(封装)

假设应用程序产生一段数据:

Application Data

向下经过协议栈时,每一层都可以增加自己的控制信息。

例如:

应用层
┌────────────────────┐
│ Application Data │
└────────────────────┘
↓
传输层
┌──────────┬─────────┐
│ TCP Header│ Data │
└──────────┴─────────┘
↓
网络层
┌────────────┬──────────────┐
│ IP Header │ TCP + Data │
└────────────┴──────────────┘
↓
链路层
┌────────┬─────────────────┬──────┐
│ Header │ IP + TCP + Data │ FCS │
└────────┴─────────────────┴──────┘
↓
物理层
↓
比特 / 信号

这个过程就是:

逐层封装。


数据解封装#

接收端则进行相反过程:

物理层
↓
链路层
↓
网络层
↓
传输层
↓
应用层

可以表示成:

比特 / 信号
↓
Frame
↓
Packet
↓
Segment
↓
Application Data

这就是:

解封装(Decapsulation)


一个完整通信过程#

假设:

浏览器

访问:

https://example.com

应用产生:

HTTP Data

然后:

HTTP
↓
TCP
↓
IP
↓
Ethernet
↓
物理介质

发送端:

应用数据
↓
TCP 封装
↓
IP 封装
↓
Ethernet 封装
↓
物理传输

接收端:

物理信号
↓
Ethernet 解封装
↓
IP 解封装
↓
TCP 解封装
↓
HTTP 数据
↓
浏览器

这就是网络分层最直观的体现。


每一层都在解决什么问题#

可以把几层最核心的问题简化为:

应用层
↓
“应用之间怎么交流?”
传输层
↓
“两个程序怎么可靠 / 高效地通信?”
网络层
↓
“数据怎么从一个网络到另一个网络?”
链路层
↓
“相邻节点怎么传输?”
物理层
↓
“比特怎么真正传出去?”

这是一种非常适合学习和排障的思维方式。


地址也具有层次性#

网络中存在多种不同类型的地址。

例如:

MAC 地址
IP 地址
端口

它们解决的问题不同。

可以先粗略理解:

MAC
↓
局部链路中的设备标识
IP
↓
网络层中的主机 / 接口寻址
Port
↓
区分一台主机上的不同应用

因此:

MAC
+
IP
+
Port

并不是三个重复的概念。

它们分别服务于不同层次的问题。


网络设备与分层#

网络设备也可以从分层角度理解。

集线器#

传统 Hub 主要在物理层工作:

Layer 1

它不会理解:

MAC
IP
TCP
HTTP

交换机#

传统以太网交换机主要工作在:

Layer 2

关注:

MAC 地址
以太网帧
交换表

现代交换机也可能具备:

Layer 3

路由能力。

因此不能简单认为:

所有交换机永远只工作在第二层。


路由器#

路由器主要关注:

Layer 3

核心工作:

IP
路由
数据包转发

可以简单理解:

交换机
↓
主要解决“局域网内部怎么传”
路由器
↓
主要解决“不同网络之间怎么走”

防火墙#

防火墙比较特殊。

现代防火墙可能同时检查:

二层信息
三层 IP
四层 TCP / UDP
甚至应用层内容

因此不应该强行给防火墙贴一个固定的:

“第几层设备”

更准确的是看:

它实际检查和控制哪些协议字段。


网络分层与故障排查#

分层模型最实用的地方之一:

帮助建立故障排查顺序。

例如:

浏览器打不开网站

可以逐层思考。

应用层#

Web 服务正常吗?
HTTP 响应是什么?

传输层#

TCP 三次握手成功了吗?
目标端口监听了吗?

网络层#

IP 地址正确吗?
有没有路由?
数据包能到目标吗?

链路层#

网卡是否正常?
交换网络是否正常?
MAC 是否可达?

物理层#

网线是否连接?
光模块是否正常?
链路是否 Up?

这样:

“网站打不开”

就会变成:

应用?
↓
传输?
↓
网络?
↓
链路?
↓
物理?

而不是一上来就:

“网络有问题”

分层不是严格的“盒子”#

学习网络分层时需要注意:

现实协议栈并不是严格互不重叠的五个或七个盒子。

实际协议可能:

跨层
复用
嵌套
提供多个层次的功能

例如:

TLS

既和应用通信密切相关,又提供加密和身份认证能力。

再比如:

ICMP

虽然通常归入网络层相关协议,但在实际实现中与 IP 协议栈关系非常紧密。

因此学习模型的目的不是:

背协议属于第几层

而是:

理解不同功能之间的边界和协作关系。


OSI 与 TCP/IP 的核心区别#

对比OSITCP/IP
定位参考模型实际互联网协议体系
层数7 层常见教材模型为 4 层,也有 5 层划分
应用 / 表示 / 会话分开通常合并为应用层
网络层Network LayerInternet Layer
链路 + 物理分开常合并为网络接口层
学习价值理解分层思想理解实际互联网协议体系

因此可以记住:

OSI
↓
帮助理解“网络应该怎样分层”
TCP/IP
↓
帮助理解“互联网实际上怎样组织协议”

数据封装的完整视图#

把整个过程串起来:

发送端
Application
│
│ Data
▼
Transport
│
│ Segment / Datagram
▼
Network
│
│ Packet
▼
Data Link
│
│ Frame
▼
Physical
│
│ Bits / Signals
▼
==================== 网络 ====================
│
│ Bits / Signals
▼
Physical
│
▼
Data Link
│
▼
Network
│
▼
Transport
│
▼
Application
接收端

可以概括成:

发送:
上 → 下 → 封装 → 传输
接收:
下 → 上 → 解封装

从分层进入后续网络知识#

建立分层模型之后,后续网络知识就可以按照层次逐步展开。

网络分层模型
│
├── 物理 / 链路层
│ └── 以太网、MAC、ARP、VLAN
│
├── 网络层
│ └── IP、CIDR、路由、ICMP
│
├── 传输层
│ └── TCP、UDP、端口
│
└── 应用层
├── DNS
├── DHCP
├── HTTP
└── HTTPS

再往后:

网络基础
↓
Linux 网络管理
↓
Linux 网络诊断
↓
iptables / nftables
↓
NAT
↓
网络故障排查

这样网络系列就可以做到:

先建立模型,再逐层学习协议,最后回到 Linux 运维实践。


外部参考#

网络:网络分层模型
https://tamakara.top/posts/学习笔记/网络网络分层模型/
作者
魂辛カラ
发布于
2026-09-13
许可协议
CC BY-NC-SA 4.0