Skip to content

OSI 与 TCP/IP 分层模型、封装与平面 ​

内容摘要:分层是理解网络的第一工具。本章讲清 OSI 七层与 TCP/IP 四层的对应与差异、数据如何在发送端被逐层封装、在接收端被逐层解封装、每层的**协议数据单元(PDU)**叫什么、以及「控制平面 / 数据平面 / 管理平面」这组正交视角。重点澄清一个高频误区:OSI 不是互联网必须严格遵守的调用栈。

难度:入门 | 前置知识:01 网络基础与互联网结构 | 所属层次:贯穿全层

一、为什么要分层 ​

分层(layering)是一种关注点分离(separation of concerns):每层只解决一类问题,并向上层提供稳定接口,向下层隐藏实现细节。

  • 可替换:把电缆换成 Wi-Fi,上层 TCP/HTTP 不用改(只换链路层实现)。
  • 可组合:同一个 IP 层之上可以跑 TCP、UDP、QUIC;同一个 TCP 之上可以跑 HTTP、SMTP、SSH。
  • 可独立演进:HTTP/1.1 升到 HTTP/2、TLS 1.2 升到 1.3,不需要改路由器。

代价:分层带来头部开销与跨层信息缺失。例如 TCP 看不到下层链路的真实丢包原因(是拥塞还是无线误码),这正是无线网络里拥塞控制常「误判」的根源(见 14)。分层是取舍,不是免费的。

二、OSI 七层与 TCP/IP 四层 ​

OSI(Open Systems Interconnection,开放系统互连) 模型由 ISO 定义(ISO/IEC 7498-1),共七层,主要用于教学与讨论。TCP/IP 模型(RFC 1122 定义主机要求)是互联网的实际实现,只有四层。

OSI 层TCP/IP 层典型协议PDU 名称关键设备/机制
7 应用 / 6 表示 / 5 会话应用层HTTP、DNS、TLS、SMTP消息 / 数据(message/data)应用、代理、负载均衡
4 传输传输层TCP、UDP、QUIC*段(segment,TCP)/ 数据报(datagram,UDP)端口、套接字
3 网络网络层(Internet)IPv4、IPv6、ICMP包 / 分组(packet)路由器
2 数据链路链路层以太网、802.11、ARP帧(frame)交换机、网卡
1 物理链路层电/光/电磁信号比特(bit)网线、光纤、集线器

关于 TLS 与 QUIC 的层次归属:TLS 通常被描述为「介于传输层与应用层之间」的安全层;QUIC 在 UDP 之上实现了传输+安全+多路复用,模糊了传统分层。这类协议正是「OSI 不是严格调用栈」的最好例证——不要强行把它们塞进某一层,理解其职责比贴标签更重要(见 16、17)。

关键澄清:OSI ≠ 互联网的实现 ​

这是本库的硬性纠偏:

  • 互联网按 RFC 1122 的 TCP/IP 四层实现,没有严格的会话层与表示层实体。
  • OSI 是参考模型,方便交流「工作在第几层」(如「四层负载均衡」「七层网关」),但报文在真实协议栈里并不会经过七个独立模块。
  • 用「层」定位问题很有用(如「这是三层可达但四层不通」),但不要把 OSI 当成代码调用链。

三、封装与解封装:数据在栈里的旅程 ​

封装(encapsulation):发送端自上而下,每层给上层数据加上本层头部(有时含尾部),形成本层 PDU。解封装(decapsulation):接收端自下而上,每层剥离本层头部、按其中的「上层协议」字段交给正确的上层。

每层如何知道「上层是谁」——靠头部里的「解复用键(demultiplexing key)」:

边界解复用字段示例值抓包显示
以太网 → 网络层以太网头 EtherType0x0800=IPv4、0x86DD=IPv6、0x0806=ARPWireshark「Type」
IP → 传输层IPv4 Protocol / IPv6 Next Header6=TCP、17=UDP、1=ICMP「Protocol」
TCP/UDP → 应用目的端口(Destination Port)80/443/53「Dst Port」

设计动机:这套「层层解复用」让同一台主机能同时跑多种协议与多个连接——网卡收到一个帧,靠 EtherType 判断交给 IPv4 还是 ARP;IP 靠 Protocol 判断交给 TCP 还是 UDP;TCP 靠端口交给正确的套接字。四元组(源 IP、源端口、目的 IP、目的端口)+ 协议唯一确定一条连接(见 13)。

头部开销与 MTU 的联系 ​

每层头部都占字节。以经典以太网为例(数值为常见值,具体见 03、05、09):

  • 以太网头 14 字节 + FCS 4 字节;标准 MTU(Maximum Transmission Unit,最大传输单元)= 1500 字节(指 IP 载荷上限)。
  • 典型 IPv4 头 20 字节 + TCP 头 20 字节 → 一个「满帧」里应用数据约 1460 字节(即 TCP 的 MSS)。

为什么重要:封装开销直接决定「一个包能装多少有效数据」,进而影响吞吐;而当路径上某段 MTU 更小又禁掉 ICMP 时,会出现「小包通、大包卡」的 PMTUD 黑洞(详见 09)。分层的头部开销不是抽象概念,它会变成真实故障。

四、跨层交互:分层不是「老死不相往来」 ​

严格分层是理想,工程实现中存在大量跨层信息传递:

  • PMTUD:三层 ICMP「需分片」错误会反馈影响 TCP 的分段大小(09)。
  • QoS:应用/传输层的标记(DSCP)写在 IP 头,供链路层排队调度(QoS 与高可用)。
  • 硬件卸载(offload):网卡把本属传输层的校验和、分段(TSO/GRO)下沉到硬件做,这会改变你在本机抓包看到的包大小(见 04、20 抓包与实验)。

排障启示:正因为存在跨层交互与卸载,「在发送主机抓到的包」未必等于「真正上线的包」。这是本库反复强调「多点抓包、双向验证」的底层原因(20 抓包与实验、分层故障排查)。

五、另一组正交视角:控制/数据/管理平面 ​

「分层」是纵向切分;「平面(plane)」是横向按职责切分,二者正交,都要掌握。

平面职责典型协议/机制故障表现
控制平面决定「怎么转」OSPF/BGP、ARP/NDP、STP、DHCP路由收敛慢、黑洞、环路
数据平面(转发平面)实际「搬数据」FIB 查表、ASIC/eBPF 转发丢包、时延、限速
管理平面配置与观测SSH、SNMP、NETCONF、日志失联、无法运维

工程价值:区分平面能精准描述故障。例如「控制平面正常(路由表对)但数据平面丢包」指向硬件/队列问题;「数据平面通但管理平面失联」是运维事故(这也是本库强调带外访问与防失联的原因,见 防火墙与访问控制)。SDN(软件定义网络)的核心思想正是把控制平面与数据平面解耦。

六、最小可复现实验:亲眼看到「层层封装」 ​

用只读命令观察同一次通信在不同层的表现。仅访问文档域名 example.com。

1、实验目标 ​

  • 在一次 HTTPS 请求里,分别观察链路层(MAC)、网络层(IP)、传输层(端口)与应用层(HTTP/TLS)的证据。

2、平台与工具 ​

  • 本机验证环境:macOS 26.6.2,curl 8.7.1。Linux 上 ip/ss 命令见注释;抓包用 tcpdump(需要权限,见 20 抓包与实验)。

3、执行命令 ​

传输层 + 应用层证据(一条命令看穿多层,本机可跑):

bash
curl -sS -o /dev/null -w \
'link: 本机 MAC 由网卡决定(见下条命令)\nnet(IP)  = remote_ip=%{remote_ip} local_ip=%{local_ip}\ntransport= remote_port=%{remote_port} local_port=%{local_port}\napp      = http_version=%{http_version} code=%{response_code} scheme=%{scheme}\n' \
https://example.com/

本机实测(2026-09-07):

text
net(IP)  = remote_ip=104.20.23.154 local_ip=192.168.x.x
transport= remote_port=443 local_port=54xxx
app      = http_version=2 code=200 scheme=HTTPS

解读:一条 curl 里同时暴露了网络层(IP)、传输层(端口,443=对端 HTTPS 服务,本地是临时端口/ephemeral port)、应用层(HTTP/2、状态码)。本地 IP 被我脱敏为 192.168.x.x(RFC 1918 私有段),遵循本库脱敏规范。

链路层证据(查看本机接口 MAC 与链路,只读):

bash
# macOS(本机可跑)
ifconfig en0 | grep -E 'ether|inet '
# Linux 等价(iproute2)
ip -br link show
ip -br address show

抓包看封装层次(需权限,限定包数,见 20 抓包与实验 的授权与脱敏要求):

bash
sudo tcpdump -i any -nn -c 5 'tcp port 443 and host example.com'

4、预期现象 ​

  • curl 输出中,remote_port=443 是对端知名端口,local_port 是临时端口(每次不同)。
  • tcpdump 每行会显示 IP src.sport > dst.dport: Flags [...],即网络层地址 + 传输层端口 + TCP 标志位同屏呈现,直观体现「一层套一层」。
  • 由于 TLS 加密,应用层内容不可见,只能看到 TCP/TLS 记录层——这正是加密对抓包的影响(见 17、20 抓包与实验)。

5、结论边界与清理 ​

  • 上述为单主机、单次观测,local_ip/端口/对端 IP 均随环境变化,不可推广。
  • 只读命令无需清理;tcpdump 若写入 PCAP,须按脱敏规范删除敏感字段后再引用。

七、错误示例与常见误区 ​

误区纠正
「数据在协议栈里真的经过 OSI 七个模块」OSI 是参考模型;互联网实现是 TCP/IP 四层,无独立会话/表示层实体。
「TLS 就是第 5 层(会话层)」TLS 职责跨传输与应用之间,不必强行归层;理解其加密/认证职责更重要。
「本机抓到的包 = 上线的包」网卡卸载(TSO/GRO/校验和)会改变本机可见的包大小与校验,需在链路上或多点验证。
「分层保证每层独立无关」存在大量跨层交互(PMTUD、QoS、卸载),排障必须考虑。
「控制平面通 = 业务通」控制平面(路由对)与数据平面(真转发)可能分离;要分别验证。

八、性能影响 ​

  • 头部开销:每层头部降低有效载荷比例(payload efficiency)。小包场景(如高频 RPC)开销占比更高,是「包速率(pps)瓶颈」的常见来源(见 性能观测)。
  • 封装/解封装成本:每层处理都消耗 CPU;高吞吐场景依赖网卡卸载与零拷贝降低开销(04)。
  • 跨层误判:无线链路误码被 TCP 误当拥塞而降速,是分层「信息缺失」导致的性能问题(14)。

九、安全风险与加固 ​

  • 分层 = 分层防御点:可在链路层(端口安全)、网络层(ACL/防火墙,防火墙与访问控制)、传输层(TLS,17)、应用层(WAF,网络安全)分别设防,构成纵深防御。
  • 封装也被攻击利用:VLAN 跳跃、隧道封装绕过检测等(VPN 与隧道、网络安全)。
  • 管理平面隔离:管理平面应与数据平面隔离,避免业务流量影响运维通道,或运维接口被攻击面暴露。

十、版本与平台差异 ​

  • RFC 1122/1123 定义 TCP/IP 主机要求,是四层模型的权威依据;OSI 见 ISO/IEC 7498-1。
  • Linux vs macOS/Windows:分层模型一致,但工具不同——Linux 用 ip/ss/tc,macOS 用 ifconfig/netstat,Windows 用 ipconfig/netsh。本库实验主体为 Linux,差异处单独标注。

十一、常见问题与排查方向 ​

  • 「三层能 ping 通但四层连不上」:网络层可达,传输层可能被防火墙拦、端口未监听或队列满(13、防火墙与访问控制)。
  • 「抓包看到的包比预期大很多」:网卡 GRO/TSO 卸载所致,非异常(20 抓包与实验)。
  • 「能配置但业务不通」:区分管理/控制/数据平面,逐平面验证。

十二、关联章节 ​

检索关键词 ​

OSI 七层 TCP/IP 四层 封装 解封装 PDU 帧包段 EtherType Protocol 端口 解复用 四元组 控制平面 数据平面 管理平面 OSI 不是调用栈 跨层交互 卸载

权威来源 ​

  • RFC 1122 / RFC 1123《Requirements for Internet Hosts》(TCP/IP 分层与主机要求)
  • ISO/IEC 7498-1(OSI 参考模型)
  • IANA EtherType、Protocol Numbers、Port 注册表
  • Wireshark 官方文档(分层解析与显示)

分层与封装以 RFC 1122/1123 与 ISO/IEC 7498-1 为准,verified_at: 2026-09-07;实测命令输出来自 macOS 26.6.2 本机,本地地址已按规范脱敏。

ICP 备案号待补充 · Gitee 主页