关键词:网络分层、OSI、TCP/IP、数据封装、Wireshark、抓包、TCP三次握手
本文为安全学习与授权测试用途,所有操作均在本地环境完成,请勿用于未授权目标。
文章目录
- 0. 一个每天都在发生、却少有人看透的过程
- 1. 为什么要分层
- 2. 两个模型:OSI 七层 vs TCP/IP 四层
- OSI 七层(理论模型)
- 3. 数据封装:数据包是怎么"打包"的
- 一次访问网页的完整封装
- 接收方:解封装
- 关键:传输途中哪些变、哪些不变
- 4. PDU:每层数据单位的名字
- 5. 用 Wireshark 看真实封装
- 6. 分层排障:哪一层出了问题
- 7. 动手实验
- 8. 写在最后
0. 一个每天都在发生、却少有人看透的过程
你在浏览器输入一个网址、按下回车,几百毫秒后网页就显示出来了。这几百毫秒里,数据从你的电脑出发,经过家里路由器、运营商、骨干网络,到达千里外的服务器,再原样返回。
这件事复杂到惊人:信号怎么传、数据怎么找到对方、出错怎么办、网页内容怎么组织……那它为什么还能如此稳定?答案就两个字——分层。
而理解分层最关键的机制,叫数据封装:你发出的数据,会被一层层"套信封"打包出去。这篇文章我们用图解的方式,把这个过程彻底讲清。它是你看懂抓包、排查网络问题、学习内网渗透的地基。
1. 为什么要分层
如果让一个协议把"传信号、找地址、保可靠、组织网页"所有事全管了,那么任何一个环节变化(网线换 Wi-Fi、IPv4 换 IPv6),整个系统都得推倒重来。
分层的思路是:把通信过程切成若干层,每层只解决一个明确问题、为上一层服务,且不关心其他层的内部实现。
这带来三个直接好处:
- 职责清晰:信号、寻址、可靠性、应用数据各有归属,出问题能按层定位;
- 可独立替换:网线换光纤、以太网换 Wi-Fi,只影响最底层,上面的 TCP、HTTP 毫无感知;
- 标准化互通:不同厂商设备只要遵守同一层协议就能对接。
寄快递是个好类比:你只关心包裹内容和收件人,网点负责揽收,干线负责城际转运,分拣中心按地址路由。每一层都不关心包裹里是什么,只在外面套上自己这层的单据。
2. 两个模型:OSI 七层 vs TCP/IP 四层
OSI 七层(理论模型)
| 层 | 名称 | 主要职责 | 典型协议/设备 |
|---|---|---|---|
| 7 | 应用层 | 面向应用的数据语义 | HTTP、DNS、SSH |
| 6 | 表示层 | 格式、编码、加密 | TLS、JPEG |
| 5 | 会话层 | 建立管理会话 | RPC |
| 4 | 传输层 | 端口、可靠传输 | TCP、UDP |
| 3 | 网络层 | 跨网络寻址路由 | IP、ICMP;路由器 |
| 2 | 链路层 | 同链路帧传输、MAC | 以太网、Wi-Fi、ARP;交换机 |
| 1 | 物理层 | 比特、信号 | 网线、光纤、网卡 |
OSI 适合教学,但上三层在真实互联网里没严格分开。实际跑的是更精简的 TCP/IP 模型:
| TCP/IP 层 | 对应 OSI | 核心协议 | 数据单位 |
|---|---|---|---|
| 应用层 | 5/6/7 | HTTP、DNS、SSH | 数据 data |
| 传输层 | 4 | TCP、UDP | 段 segment / 数据报 |
| 网际层 | 3 | IP、ICMP | 包 packet |
| 网络接口层 | 1/2 | 以太网、Wi-Fi | 帧 frame / 比特 |
教学中常画成五层(把网络接口拆成链路层 + 物理层),它和 Wireshark 的展示完全吻合。记忆要点:越往上越靠近人和程序,越往下越靠近硬件。
3. 数据封装:数据包是怎么"打包"的
这是全文核心。发送数据时,数据从应用层自上而下,每经过一层就加上自己这层的头部,像套信封。
一次访问网页的完整封装
假设浏览器产生一个 HTTP 请求,逐层打包过程如下:
① 应用层(数据)
浏览器生成 HTTP 请求报文:
GET /index.html HTTP/1.1 Host: example.com这层只关心"要什么资源",不管怎么送到。
② 传输层(TCP 段 segment)
加上 TCP 头部,关键字段:
| TCP 头字段 | 作用 |
|---|---|
| 源端口 / 目的端口 | 标识哪个进程发出、交给服务器哪个进程(HTTP=80,HTTPS=443) |
| 序号 | 给字节编号,保证按序重组、发现丢失 |
| 确认号 ACK | 告诉对方"收到哪了",实现可靠传输 |
| 标志位 SYN/ACK/FIN | 建立连接、确认、关闭(握手挥手靠它) |
| 窗口 | 流量控制 |
加完成为一个TCP 段。如果是 UDP,只加极简头(端口、长度、校验和)。
③ 网络层(IP 包 packet)
加上 IP 头部:
| IP 头字段 | 作用 |
|---|---|
| 源 IP / 目的 IP | 端到端标识"谁发给谁",跨网络寻址核心 |
| TTL | 每经过一个路由器减 1,减到 0 丢弃,防止无限环路(traceroute 原理) |
| 协议号 | 上层是 TCP(6)、UDP(17) 还是 ICMP(1) |
| 首部校验和 | 检查 IP 头损坏 |
加完成为IP 包,负责让数据跨网络被路由器正确转发。
④ 链路层(以太网帧 frame)
在当前这段链路上加帧头帧尾:
| 帧字段 | 作用 |
|---|---|
| 目的 MAC | 这一跳交给谁(先给默认网关 MAC) |
| 源 MAC | 这一跳谁发出(你的网卡 MAC) |
| 类型 EtherType | 上层是 IPv4(0x0800)、IPv6(0x86DD)、ARP(0x0806) |
| 帧尾 FCS | 校验这一帧有没有传错 |
加完成为以太网帧。注意 MAC 只在当前这段链路有意义。
⑤ 物理层(比特 bit)
帧的二进制被网卡转成电信号、光信号或无线电波,以 0/1 比特流发出。
接收方:解封装
接收完全反过来,数据自下而上,每层拆掉自己的头部、检查后把载荷上交:物理层收比特 → 链路层校验 FCS、拆帧头取出 IP 包 → 网络层检查 IP/TTL、拆 IP 头取出 TCP 段 → 传输层检查端口序号、拆 TCP 头取出 HTTP → 应用层 Web 进程解析请求。
关键:传输途中哪些变、哪些不变
数据包往往经过好几跳路由器,这是理解分层的精髓:
| 层 | 经过路由器时 |
|---|---|
| 应用数据、TCP 头 | 不变(端到端) |
| IP 头(源/目的 IP) | 一般不变(端到端;NAT 才改) |
| 链路层帧头(MAC) | 每一跳都重新封装、会变 |
路由器工作在网络层,它解封装到 IP 层、查路由表决定下一跳,再用下一段链路的帧头重新封装。所以:
- MAC 地址是逐跳的,每段链路用相邻两个接口的 MAC;
- IP 地址是端到端的,从源到目的始终不变(除非经过 NAT)。
4. PDU:每层数据单位的名字
| 层 | 数据单位 | 英文 |
|---|---|---|
| 应用层 | 数据 / 报文 | data / message |
| 传输层 | 段(TCP)/ 数据报(UDP) | segment / datagram |
| 网络层 | 包 | packet |
| 链路层 | 帧 | frame |
| 物理层 | 比特 | bit |
严谨交流时,说"一个 TCP 段"“一个以太网帧"能精确表达你指哪一层,而不是笼统地说"数据包”。
5. 用 Wireshark 看真实封装
打开 Wireshark 抓包,"包详情"面板就是按封装层次从上到下排列的,每层可展开:
Frame 1: 74 bytes on wire (592 bits) ... ← 帧层面(这一帧多大) Ethernet II, Src: xx:xx, Dst: yy:yy ← 链路层(MAC、类型) Internet Protocol Version 4, Src: 192.168.1.10 ← 网络层(IP、TTL) Src: 192.168.1.10, Dst: 93.184.216.34 TTL: 64, Protocol: TCP (6) Transmission Control Protocol, Src Port: 53000 ← 传输层(端口、序号、标志) Src Port: 53000, Dst Port: 80 Flags: SYN Hypertext Transfer Protocol ← 应用层(载荷) GET /index.html HTTP/1.1从外到内 = 物理层到应用层 = 解封装的逆序。看懂这个对应,你就真正理解了封装。Wireshark 还能用颜色区分协议,并提供 “Follow TCP Stream” 把一次连接的包重组成完整对话。
6. 分层排障:哪一层出了问题
分层最实用的价值是系统化排障,从下往上逐层定位:
| 层 | 排查动作 | 典型故障现象 |
|---|---|---|
| 物理层 | 看网卡灯、ip link是否 UP | 网线断、网卡禁用 |
| 链路层 | ARP 能否解析、ip neigh | 网关 MAC 学不到 |
| 网络层 | ping 网关、ping 8.8.8.8 | IP 不通、路由错误 |
| 传输层 | nc -vz IP 端口、TCP 握手 | 端口没开、防火墙 |
| 应用层 | curl -v、DNS 解析 | HTTP 报错、DNS 失败 |
经典排查路径:
ping网关IP# 通 → 物理/链路/本地网络层正常ping8.8.8.8# 通 → 能出外网;不通 → 网络层/出口nslookupexample.com# ping IP 通但域名不通 → DNS(应用层)curl-vexample.com# 看 TCP 握手与 HTTP;连不上 → 传输层端口/防火墙“能 ping 通但网页打不开”,立刻缩小到 DNS、目标端口/防火墙、或 HTTP 服务本身,不用怀疑网线。这套思路在排查反弹 Shell 为什么连不回来时同样好用。
7. 动手实验
iplink# 网卡与链路层(MAC、UP 状态)ipaddr# 各接口 IP(网络层)iproute# 路由表(默认网关 = 下一跳)ipneigh# ARP 表:MAC 与 IP 对应ping-c4<网关IP># 网络层:到网关通不通ping-c48.8.8.8# 网络层:能否出外网sudotcpdump-iany-nn-c5'tcp port 80'# 抓包看封装有图形界面时,强烈建议打开 Wireshark 开始抓包,访问一个 http 网站,点开一个包对照第五节逐层展开——这一遍胜过读十遍理论。
8. 写在最后
这篇文章最该带走的三点:
第一,分层让每层职责单一、可独立替换,OSI 七层是理论,互联网实际跑 TCP/IP 五层。
第二,封装 = 发送时自上而下逐层加头(数据→段→包→帧→比特),解封装反过来;IP 端到端不变,MAC 逐跳重封,这是理解路由和内网的关键。
第三,Wireshark 详情面板就是封装结构的直观展示,排障时从物理层到应用层逐层定位,效率最高。
如果你想顺着网络层继续,看子网划分、路由决策、NAT 原理,以及更多从零基础到内网/域控的体系化安全文章,可以访问我的安全学习站点:
- 站点地址:详见官网【光跃Eason·安研社】
- 里面有完整的漏洞实战导航、成体系的网络与安全文章,以及配套靶场环境;
- 具体联系方式见站点相关页面,也欢迎加微信交流。
我会持续更新网络基础和抓包实战内容,我们下篇文章见。
免责声明:本文仅用于网络安全研究与教学,所有测试均在本人授权的环境中进行。请严格遵守《网络安全法》,切勿对任何未授权系统测试。技术本身中立,关键在于使用它的人。