模块0-1 Linux系统深度 ✅ 已完结(01-06)
📚 模块0-2 计算机网络
07 计算机网络基础:OSI 七层模型与 TCP/IP 协议栈(当前篇)
08 TCP/UDP 协议详解:三次握手与四次挥手
09 HTTP/HTTPS 协议与 TLS 加密
10 DNS 解析与 ARP 协议

计算机网络基础:OSI 七层模型与 TCP/IP 协议栈

难度:入门 | 模块0-2 第一篇
当你在网上买一件易碎品,卖家不会直接把商品扔进快递箱。他们会先裹上气泡膜(保护),再放入说明书(使用指引),套上防尘袋(隔离),贴上快递面单(地址),最后装箱发走。每一层包装有特定用途,拆包时按反序逐层打开。网络通信同样如此——你发送的一条消息,要经过多层"包装"才能变成电信号飞出去,每一层添加自己的"面单"(头部信息),接收方再逐层"拆包"还原原始数据。读完本篇你将能:理解 OSI 七层模型和 TCP/IP 四层模型的分层逻辑,掌握数据封装与解封装过程,并用 ping、tcpdump、curl 验证每一层的存在。
📑 本文目录
01为什么需要网络分层
02OSI 七层模型详解
03TCP/IP 四层模型
04数据封装与解封装
05实战:用命令验证分层模型

01 为什么需要网络分层

前六篇你掌握了 Linux 系统层面的操作——文件、进程、网络配置、脚本、包管理。现在要回答一个更底层的问题:当你在 Kali 上执行 nmap scanme.nmap.org 时,这条命令背后,数据是如何从你的网卡出发、穿过无数路由器、到达远端服务器的?答案藏在"分层模型"里。

网络通信极其复杂:物理层面要处理电信号和光纤脉冲,链路层面要解决 MAC 地址寻址和碰撞检测,网络层面要路由跨越多个子网,传输层面要保证数据可靠到达,应用层面要解析 HTTP 请求格式。如果把所有问题混在一起处理,任何一处改动都会牵连全局。分层模型的核心思想是分而治之——每一层只负责一个特定职责,对上层提供服务,对下层隐藏细节。

💡 小贴士
分层的最大好处是解耦。你在第04篇学的 iptables 工作在网络层和传输层,它不需要知道下层用的是 WiFi 还是有线网卡——那是数据链路层和物理层的事。这种隔离让每层可以独立演进:WiFi 6 替代 WiFi 5 时,上层的 IP 路由和 HTTP 协议完全不受影响。

02 OSI 七层模型详解

OSI(Open Systems Interconnection)模型由 ISO 在 1984 年提出,将网络通信划分为七个层级。我们从最底层开始,逐层向上理解——就像拆快递时从最外层包装拆到商品本身。

OSI 七层全景图
7
应用层 Application
HTTP · DNS · SSH · FTP · SMTP — 为用户应用程序提供网络服务
6
表示层 Presentation
TLS · JPEG · ASCII — 数据格式转换、加密压缩
5
会话层 Session
NetBIOS · RPC — 建立、维护、终止通信会话
4
传输层 Transport
TCP · UDP — 端口寻址、可靠传输、流量控制
3
网络层 Network
IP · ICMP · ARP — IP 寻址、路由选择、跨网段通信
2
数据链路层 Data Link
Ethernet · ARP — MAC 地址寻址、帧封装、差错检测
1
物理层 Physical
电缆 · 光纤 · WiFi 信号 — 比特流在物理介质上的传输

底层四层:负责"搬运"

物理层(Layer 1)关心的是 0 和 1 如何变成电信号、光脉冲或无线电波。网线中的电压变化、WiFi 中的电磁波振荡,都在这一层定义。设备:集线器(Hub)、中继器(Repeater)。

数据链路层(Layer 2)在同一个局域网内通过 MAC 地址找到目标网卡。你在第04篇用 ip link show 看到的 link/ether 后面的地址就是 MAC。设备:交换机(Switch)。

网络层(Layer 3)解决跨网段通信——源 IP 和目的 IP 可能不在同一个局域网,需要路由器逐跳转发。ping 命令使用的 ICMP 协议就在这一层。设备:路由器(Router)。

传输层(Layer 4)通过端口号区分同一台机器上的不同服务——22 端口给 SSH,80 端口给 HTTP。TCP 保证可靠送达(三次握手),UDP 追求速度不保证送达。你在第03篇用 ss -tlnp 查看的就是这一层的信息。

高层三层:负责"理解"

会话层(Layer 5)管理通信双方的"对话"——何时建立连接、何时断开、谁先发言。实际工程中,这一层的功能常被传输层和应用层吸收,独立协议较少。

表示层(Layer 6)处理数据的"翻译"——加密解密(TLS)、编码转换(UTF-8)、数据压缩(gzip)。当你访问 HTTPS 网站时,TLS 握手就发生在这一层。

应用层(Layer 7)是离用户最近的一层——HTTP 请求、DNS 查询、SSH 登录,都是应用层协议。注意:应用层不等于"你的应用程序",而是应用程序使用的网络通信协议。

⚠️ 常见误区
HTTP 是传输层协议 — HTTP 是应用层协议,它"坐"在 TCP(传输层)之上
✓ 正确理解:分层关系是嵌套的:HTTP 数据 → 装入 TCP 段 → 装入 IP 包 → 装入以太网帧 → 变成比特流。HTTP 不关心数据怎么传输,那是 TCP 和 IP 的事。

03 TCP/IP 四层模型

OSI 模型理论上完美,但实际互联网使用的是 TCP/IP 模型。它更简洁,将七层合并为四层。会话层、表示层、应用层合并为"应用层",物理层和数据链路层合并为"网络接口层"。

OSI 七层 vs TCP/IP 四层 映射关系
OSI 层 OSI 名称 TCP/IP 层 代表协议
7 应用层 应用层 HTTP, DNS, SSH
6 表示层 TLS, JPEG
5 会话层 RPC
4 传输层 传输层 TCP, UDP
3 网络层 网际层 IP, ICMP
2 数据链路层 网络接口层 Ethernet, ARP
1 物理层 电缆, WiFi

为什么 TCP/IP 模型赢了?因为它先有实现(ARPANET),后有模型——从实战中长出来的协议栈自然更健壮。OSI 则是先有理论模型再尝试实现,会话层和表示层在实际工程中几乎没有独立协议。后续文章中我们提到的"网络层"指 TCP/IP 的网际层,"传输层"两者一致。

04 数据封装与解封装

理解了七层结构,现在看数据如何穿越这些层级。当你用浏览器访问 https://www.kali.org 时,数据从应用层出发,每经过一层就被"套上一层信封"(添加头部),这个过程叫封装(Encapsulation)。

封装过程:数据逐层包装
Data(应用数据)
↓ 传输层添加 TCP 头部
TCP头源端口→目的端口Data
↓ 网络层添加 IP 头部
IP头源IP→目的IPTCP头 + Data
↓ 链路层添加帧头帧尾
帧头源MAC→目的MACIP头+TCP头+DataFCS
↓ 物理层转为比特流
010101101110... 比特流

每一层添加的头部包含该层需要的控制信息。传输层头部携带端口号(区分服务),网络层头部携带 IP 地址(区分主机),链路层头部携带 MAC 地址(区分网卡)。这些头部信息就是你在第04篇用 iptables 过滤数据包时匹配的字段。

解封装是封装的逆过程。接收方从物理层收到比特流,逐层向上"拆信封":链路层读取 MAC 地址后剥离帧头,网络层读取 IP 地址后剥离 IP 头,传输层读取端口号后剥离 TCP 头,最终把原始 Data 交给应用层。每一层只看自己的头部,不关心其他层的内容。

每一层处理的数据单元有专用名称,称为 PDU(Protocol Data Unit):

• 物理层 — 比特(Bit):0 和 1 的电信号
• 链路层 — 帧(Frame):包含 MAC 地址的以太网帧
• 网络层 — 包(Packet):包含 IP 地址的 IP 数据包
• 传输层 — 段(Segment/Datagram):包含端口号的 TCP 段或 UDP 数据报
• 应用层 — 数据(Data):HTTP 请求体、DNS 查询等

05 实战:用命令验证分层模型

理论需要实践验证。以下四个命令分别对应不同层级,让你亲眼"看到"每一层的存在。如果 Kali 上没有 tcpdump,先用第06篇学到的 sudo apt install tcpdump -y 安装。

网络层:ping 测试连通性

Bash
# ping 使用 ICMP 协议(网络层),测试 IP 连通性
ping -c 4 8.8.8.8
# 输出示例
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.3 ms
4 packets transmitted, 4 received, 0% packet loss

ttl=117 是 IP 头部中的 Time-To-Live 字段——每经过一个路由器减 1,减到 0 则丢弃。从 8.8.8.8 到你的机器经过了 117 跳吗?不是——TTL 初始值通常是 128,128-117=11,说明经过了约 11 个路由器。

链路层~传输层:tcpdump 抓包

Bash
1
2
3
4
5
6
7
8
9
10
11
12
# 抓取 eth0 接口 ICMP 包,只抓 4 个
sudo tcpdump -i eth0 icmp -c 4
# 输出(同时开另一终端执行 ping 8.8.8.8)
tcpdump: listening on eth0
14:32:01.123 IP 192.168.1.100 > 8.8.8.8: ICMP echo request
14:32:01.156 IP 8.8.8.8 > 192.168.1.100: ICMP echo reply
# -i 指定网卡 icmp 过滤协议 -c 抓包数量
# 输出中的 IP 地址就是网络层头部信息
# 加 -e 参数可以看到链路层 MAC 地址
sudo tcpdump -e -i eth0 icmp -c 2

应用层:curl 查看 HTTP 交换

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
# -v 显示完整的 HTTP 请求和响应过程
curl -v https://www.kali.org 2>&1 | head -12
# 输出示例(> 请求方向 < 响应方向)
* Trying 45.154.14.243:443... # 网络层:DNS解析得到IP
* Connected to www.kali.org port 443 # 传输层:TCP连接建立
* TLSv1.3 handshake # 表示层:TLS加密握手
> GET / HTTP/1.1 # 应用层:HTTP请求
> Host: www.kali.org
> User-Agent: curl/7.88.1
>
< HTTP/1.1 200 OK # 应用层:HTTP响应
< Server: nginx
< Content-Type: text/html; charset=UTF-8

这条 curl -v 命令的输出完美展示了分层协作:先 DNS 解析得到 IP(网络层),再建立 TCP 连接(传输层),然后 TLS 握手加密(表示层),最后 HTTP 请求响应(应用层)。一条命令,四层联动。

常见端口速查表

端口是传输层的概念——一台机器上同时运行多个网络服务,靠端口号区分。以下是网络安全领域必须牢记的常见端口:

端口 服务 协议 安全备注
22 SSH TCP 加密远程登录,暴力破解首选目标
23 Telnet TCP 明文传输,可抓包窃听
53 DNS UDP/TCP 域名解析,DNS 劫持/隧道攻击
80 HTTP TCP Web 明文,可中间人窃听
443 HTTPS TCP Web 加密,TLS 握手在表示层
3306 MySQL TCP 数据库,不应暴露公网
3389 RDP TCP Windows 远程桌面,勒索软件入口
8080 HTTP-alt TCP Web 代理/备用端口,常被忽略
💡 小贴士
渗透测试中,端口扫描就是遍历这张表——逐一探测目标机器哪些端口处于 LISTEN 状态,从而判断开放了哪些服务。后续模块学习 nmap 时,你将深入扫描原理:SYN 扫描利用传输层 TCP 握手过程,版本探测读取应用层 Banner 信息。理解分层模型是掌握扫描原理的前提。
📖 知识回顾
分层思想 OSI 七层模型 TCP/IP 四层模型 数据封装 解封装 PDU 数据单元 ping/ICMP tcpdump 抓包 curl -v 常见端口
✏️ 动手练习
🟢 基础验证
请执行 ping -c 4 1.1.1.1,记录返回的 TTL 值,计算数据包从 1.1.1.1 到你的机器大约经过了多少个路由器(假设初始 TTL 为 64)。
参考解法:如果返回 ttl=57,则经过 64-57=7 个路由器。
🟡 组合应用
请完成以下任务:① 用 tcpdump -e -i eth0 icmp -c 2 抓取 ping 包,观察输出中的 MAC 地址和 IP 地址;② 对比 -e 参数加与不加的区别,说明哪个参数显示了链路层信息。
提示:不加 -e 时 tcpdump 从网络层开始显示(IP 地址),加上 -e 后额外显示链路层信息(源/目的 MAC 地址、以太网类型)。
🔴 开放挑战
执行 curl -v https://www.kali.org 2>&1,对照本篇的七层模型,找出输出中至少三个分别属于不同层级的线索(如 IP 地址对应网络层、端口号对应传输层等),并说明你的判断依据。
参考方向:关注输出中的 Trying IP:Port(网络层+传输层)、TLS handshake(表示层)、GET/HTTP(应用层)。思考为什么 2>&1 是必要的——curl 的调试信息输出到 stderr 而非 stdout。
下篇预告
08 TCP/UDP 协议详解:三次握手与四次挥手
深入传输层,解析 TCP 三次握手建立连接的全过程、四次挥手断开连接的细节、TIME_WAIT 状态的工程意义,以及 UDP 为什么"快但不可靠"。理解这些原理是掌握 nmap SYN 扫描和端口扫描防御的基础。