A — 网络体系结构

计算机网络体系结构是网络协议的分层抽象框架,是理解 B_物理层C_数据链路层D_网络层E_传输层F_应用层 各层协议的前提。


1. 计算机网络概述

1.1 概念

计算机网络是通过通信设备和传输介质,将地理位置不同、功能独立的计算机系统互连,以网络协议实现资源共享和信息传递的系统。

核心要素可以概括为”三网合一”:

graph TD
 CN["计算机网络"] --> RS["Resource Sharing<br/>资源共享"]
 CN --> CT["Communication<br/>通信"]
 CN --> DP["Distributed Processing<br/>分布式处理"]

更精确的定义:计算机网络 = 若干自治计算机的集合 + 遵循统一协议 + 通过通信链路互连。自治意味着每台计算机可独立运行,不依赖网络中其他节点。

1.2 组成

从不同视角有三个维度的划分:

划分视角组成部分说明
物理组成主机 (Host) / 端系统 (End System)产生或消费数据的设备
通信设备 (Networking Devices)交换机、路由器、防火墙、负载均衡器
传输介质 (Transmission Media)双绞线、光纤 (单模/多模)、同轴电缆、无线电波
网络协议 (Protocol)约定数据格式、时序与语义的规则集合
网络软件 (Software)操作系统协议栈 (Linux 内核 net/ 子系统)、应用软件
逻辑组成通信子网 (Communication Subnet)物理层 + 数据链路层 + 网络层 (路由器、交换机构成的转发平面)
资源子网 (Resource Subnet)传输层 + 应用层 + 端系统上的应用软件
功能组成边缘部分 (Edge)端系统,产生/消费数据
核心部分 (Core)路由器、交换机,负责数据转发 (packet switching)

1.3 功能

功能描述对应层
数据通信 (Data Communication)端到端可靠或不可靠的数据传输传输层/网络层
资源共享 (Resource Sharing)CPU、存储、打印机、软件、数据库应用层
分布式处理 (Distributed Processing)将任务分解到多节点并行运算应用层
提高可靠性 (Reliability)通过冗余和备份提供高可用全栈
负载均衡 (Load Balancing)将请求均匀分配到多台服务器传输层/应用层

容器的功能映射:Kubernetes 的 Service 对象 (负载均衡) 本质是传输层/应用层的抽象;StatefulSet (可靠存储) 是资源子网的实现;CNI 插件是把上述功能编排进 Linux 内核协议栈 (iptables/IPVS/eBPF)。

1.4 分类

graph TD
 NET["计算机网络分类"] --> byScope["按覆盖范围"]
 NET --> byTopo["按拓扑结构"]
 NET --> byTech["按传输技术"]
 NET --> byOwner["按所有权"]

 byScope --> PAN["PAN 个域网<br/>&lt;10m"]
 byScope --> LAN["LAN 局域网<br/>10m~几km"]
 byScope --> MAN["MAN 城域网<br/>几km~几十km"]
 byScope --> WAN["WAN 广域网<br/>几十km~几千km"]

 byTopo --> Star["星型"]
 byTopo --> Bus["总线型"]
 byTopo --> Ring["环型"]
 byTopo --> Mesh["网状(Mesh)"]
 byTopo --> Tree["树型/混合"]

 byTech --> BC["广播式<br/>Broadcast"]
 byTech --> P2P["点对点<br/>Point-to-Point"]

 byOwner --> Public["公用网"]
 byOwner --> Private["专用网"]
类型范围典型协议/技术典型场景速度量级
PAN (Personal Area Network)< 10mBluetooth, Zigbee, NFC, UWB手机-耳机, 智能家居传感器Kbps~Mbps
LAN (Local Area Network)10m~几kmEthernet (IEEE 802.3), WiFi (802.11), ARP办公室/校园网络, 家庭路由器100Mbps~100Gbps
MAN (Metropolitan Area Network)几km~几十kmMetro Ethernet, FDDI, WiMAX城市 ISP 骨干, 大学城互联1Gbps~100Gbps
WAN (Wide Area Network)几十km~几千kmIP/MPLS, SD-WAN, BGP, OSPF, 光传输(SONET/SDH)跨省/跨国互联, Internet 骨干10Gbps~400Gbps

要点:WAN 的核心协议是 IP 和 BGP;LAN 的核心协议是以太网和 ARP;MAN 的典型场景相对少见,但城域网的概念需知。


2. 性能指标

计算机网络性能指标是衡量网络质量的定量尺度,是所有网络协议设计与网络排障的基石。

2.1 速率 (Rate / Data Rate)

定义:单位时间内在信道上传输的数据量(比特数),也称数据率比特率

  • 单位:bps (bit/s), Kbps (10^3 bps), Mbps (10^6 bps), Gbps (10^9 bps), Tbps (10^12 bps)
  • 注意:存储的 K = 1024,通信的 K = 1000。1 MB 文件 = 1024 x 1024 x 8 bits;100 Mbps 速率 = 100 x 10^6 bps

计算示例:在 100 Mbps 的信道上传输一个 1 GB 文件,忽略所有开销,理想时间为:

1 GB = 1 × 10^9 × 8 = 8 × 10^9 bits
传输时间 = 8 × 10^9 / (100 × 10^6) = 80 秒

2.2 带宽 (Bandwidth)

两种含义,务必区分:

含义单位适用上下文类比
信号带宽 (模拟)Hz (赫兹)物理层: 信号频率范围 — 最高频率 - 最低频率水管直径
数字带宽 (速率)bps链路能支持的最高数据率水管最大流速

Nyquist 与 Shannon 定理 (物理层详解,参见 B_物理层)

  • 理想无噪声信道:Nyquist — 最高数据传输率 = 2W log₂(V) bps,W 为带宽 (Hz),V 为离散电平级数
  • 有噪声信道:Shannon — 信道极限传输率 = W log₂(1 + S/N) bps,S/N 为信噪比 (非 dB 值)
信噪比 dB 转换: (S/N)dB = 10 log₁₀(S/N)
若 S/N(dB) = 30dB,则 S/N = 10^(30/10) = 1000
若带宽 W = 3 kHz,则 Shannon 极限 = 3000 × log₂(1001) ≈ 30 kbps

2.3 吞吐量 (Throughput)

定义:单位时间内实际通过某个网络 (或信道、接口) 的数据量。

  • 吞吐量 <= 额定速率/带宽 (受拥塞控制、丢包、流控制约)
  • 吞吐量受瓶颈链路限制:端到端吞吐量 = min(各链路吞吐量)

计算示例

链路1: 100 Mbps, 链路2: 10 Mbps, 链路3: 1000 Mbps
端到端吞吐量 ≈ min(100, 10, 1000) = 10 Mbps (瓶颈在链路2)

2.4 时延 (Delay / Latency)

时延是数据从源节点到目的节点所经历的总时间。四部分构成:

总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延
graph LR
 HostA["主机 A"] -->|"处理时延 + 排队时延"| R1["路由器 R1"]
 R1 -->|"处理 + 排队"| R2["路由器 R2"]
 R2 -->|"处理 + 排队"| HostB["主机 B"]

 subgraph "每个节点的时延构成"
 Proc["处理时延<br/>查路由表、差错检测<br/>通常 < 1ms"]
 Queue["排队时延<br/>在输出队列等待<br/>取决于拥塞程度,可变"]
 Trans["发送时延<br/>= 分组长度 / 发送速率<br/>L / R"]
 Prop["传播时延<br/>= 信道长度 / 信号传播速度<br/>d / v"]
 end
时延类型公式说明影响因素
发送时延 (Transmission Delay)d_trans = L / RL = 分组长度 (bits), R = 链路速率 (bps)分组大小、链路速率
传播时延 (Propagation Delay)d_prop = d / vd = 物理链路长度 (m), v = 信号传播速度 (~2×10⁸ m/s 铜缆, ~3×10⁸ m/s 光缆真空)物理距离、介质类型
处理时延 (Processing Delay)非计算量路由器查路由表、校验 CRC、提取首部路由器 CPU 性能
排队时延 (Queuing Delay)非计算量分组在输出队列等待发送的时间流量强度 La/R

排队时延的数学模型

设: a = 平均分组到达速率 (packets/s)
 R = 链路速率 (bps)
 L = 平均分组长度 (bits)

流量强度 (Traffic Intensity) = La / R

当 La/R → 0 : 排队时延很小
当 La/R → 1 : 排队时延急剧增大
当 La/R > 1 : 队列无限增长,时延趋向无穷 (拥塞崩溃)

综合计算示例

条件: 链路长度 1000 km, 传播速度 2×10⁸ m/s
 链路速率 100 Mbps
 分组长度 1000 Bytes

1. 发送时延 = (1000 × 8) / (100 × 10⁶) = 8000 / 10⁸ = 80 μs
2. 传播时延 = (1000 × 10³) / (2 × 10⁸) = 5 ms
 
 结论: 本例中传播时延是发送时延的 5000000/80 = 62500 倍
 长距离链路上,传播时延主导总时延。

辨析要点:发送时延与传播时延是独立的概念。发送时延取决于分组长度和发送速率,发生在主机/路由器内部;传播时延取决于物理距离和信号速度,发生在传输介质上。两者可以同时发生 (流水线效应)。

2.5 时延带宽积 (Delay-Bandwidth Product)

定义时延带宽积 = 传播时延 × 带宽

物理意义:当发送端连续发送比特时,在第一个比特到达接收端之前,发送端已经发送了多少比特。即”管道”中容纳的比特数。

时延带宽积 = 传播时延 × 带宽
 = (d / v) × R

单位: bits (比特数)

示例

条件: 传播时延 = 20 ms, 带宽 = 1 Gbps
时延带宽积 = 20 × 10⁻³ × 1 × 10⁹ = 20 × 10⁶ bits = 20 Mb = 2.5 MB

含义: 接收端收到第一个比特时,发送端已发出 2.5 MB 数据。
 这 2.5 MB 正在"管道"中传输 — 这些是 "in-flight" 数据。

TCP 拥塞控制的关联:TCP 的理想发送窗口大小应接近时延带宽积 (BDP = RTT × C)。窗口太小则链路利用率低,窗口太大则引发拥塞。这是 BBR 拥塞控制算法的核心思想(详见 E_传输层)。

容器的意义:跨可用区的容器通信 (如 K8s 集群跨 AZ) 时,BDP 决定了 TCP 窗口的合理上界。远距离节点部署时需要调整 net.core.wmem_max 等内核参数。

2.6 往返时间 RTT (Round-Trip Time)

定义:从发送端发出数据到发送端收到接收端确认所经历的总时间。

RTT = 2 × 传播时延 + 中间节点处理时延 + 接收端处理时延

注意:RTT 不包括发送时延本身 (因为接收端可以在收到足够数据后立即发送 ACK,发送时延与传播可能重叠)。

RTT 测量

# Linux 中观测 RTT
ping -c 4 8.8.8.8 # ICMP echo, 应用层估计
traceroute -n 8.8.8.8 # 逐跳 RTT
ss -ti # 查看 TCP 连接的平滑 RTT (SRTT) 和 RTT 方差 (RTTVAR)

TCP 超时重传 (RTO) 与 RTT 的关系

SRTT(i+1) = (1 - α) × SRTT(i) + α × SampleRTT (α 通常为 0.125)
RTTVAR(i+1) = (1 - β) × RTTVAR(i) + β × |SampleRTT - SRTT(i)| (β 通常为 0.25)
RTO = SRTT + 4 × RTTVAR

参见 E_传输层 中 TCP 重传机制的完整推导。

2.7 利用率 (Utilization)

信道利用率 = 实际吞吐量 / 信道带宽
网络利用率 = 全网络信道利用率的加权平均

利用率与排队时延的关系

graph LR
 U["利用率 U"] -->|"U → 0"| LowQ["排队时延 → 0"]
 U -->|"U → 1"| HighQ["排队时延 → ∞"]

 D0["D0 = 空闲负载时延"] --> D["D = D0 / (1 - U)"]

设 D₀ 为零负载时的时延 (空载时延 = 传播时延 + 处理时延),则:

D = D₀ / (1 - U)

当 U = 0.5: D = 2 × D₀ (时延翻倍)
当 U = 0.9: D = 10 × D₀ (时延扩展 10 倍)
当 U = 0.99: D = 100 × D₀ (崩溃)

工程实践:骨干网运营商通常在利用率达到 30%-50% 时考虑扩容,以保持在拥塞崩溃的悬崖之前。

2.8 丢包率 (Packet Loss Rate)

定义丢包率 = 丢失分组数 / 发送分组总数

丢包原因机制缓解手段
路由器队列溢出 (Congestion)队列满, 尾丢弃 (Tail-Drop)AQM: RED, CoDel; 显式拥塞通知 ECN
链路误码 (Bit Error)校验失败, 静默丢弃FEC (前向纠错), ARQ (自动重传)
TTL 超时IP TTL 递减至零避免路由环路 (路由协议收敛)
MTU 不匹配 (黑洞)分组过大且 DF 置位, 无法分片丢弃PMTUD (Path MTU Discovery)

路由器丢包行为:默认的尾丢弃策略导致 TCP 全局同步 (Global Synchronization) — 所有 TCP 流同时缩减窗口、同时增大,吞吐量振荡。AQM 机制 (RED/WRED) 通过概率性早期丢弃来避免全局同步。

graph TD
 subgraph "拥塞控制闭环"
 PL["丢包事件"] -->|"检测到丢包<br/>3 dup ACK / Timeout"| TCP["TCP 拥塞窗口缩减<br/>ssthresh = cwnd/2<br/>cwnd = 1 MSS (超时)"]
 TCP -->|"窗口降低"| Rate["发送速率下降"]
 Rate -->|"队列深度减少"| LessPL["丢包减少"]
 LessPL -->|"窗口逐步增长<br/>慢启动 / 拥塞避免"| TCP
 end

3. OSI 七层模型

OSI (Open Systems Interconnection) 模型由 ISO 制定,是网络通信的概念性框架,用于教学和协议分析。

graph TD
 subgraph "OSI 七层模型 — 数据封装与解封装"
 direction TB

 subgraph HostA_TOP["发送方 (封装)"]
 A7["7. 应用层<br/>Application<br/>————<br/>PDU: Data / Message<br/>协议: HTTP, SMTP, FTP, DNS, SNMP"]
 A6["6. 表示层<br/>Presentation<br/>————<br/>PDU: Data<br/>功能: 编码转换、加密、压缩<br/>协议: SSL/TLS, MIME, JPEG, ASCII"]
 A5["5. 会话层<br/>Session<br/>————<br/>PDU: Data<br/>功能: 会话建立/管理/同步<br/>协议: SOCKS, NetBIOS, RPC, SIP"]
 A4["4. 传输层<br/>Transport<br/>————<br/>PDU: Segment (TCP) / Datagram (UDP)<br/>功能: 端到端可靠/不可靠传输<br/>协议: TCP, UDP, SCTP, QUIC"]
 A3["3. 网络层<br/>Network<br/>————<br/>PDU: Packet / Datagram<br/>功能: 路由选择、逻辑编址<br/>协议: IP, ICMP, ARP, OSPF, BGP, IPsec"]
 A2["2. 数据链路层<br/>Data Link<br/>————<br/>PDU: Frame<br/>功能: 成帧、MAC编址、差错检测<br/>协议: Ethernet, PPP, Wi-Fi (802.11), VLAN"]
 A1["1. 物理层<br/>Physical<br/>————<br/>PDU: Bit<br/>功能: 比特流透明传输<br/>介质: 双绞线、光纤、无线电"]

 A7 --> A6 --> A5 --> A4 --> A3 --> A2 --> A1
 end

 A1 -->|"比特流<br/>传输介质"| B1
 end

 subgraph HostB_BOT["接收方 (解封装)"]
 B1["1. 物理层<br/>————<br/>接收比特流, 上传"]
 B2["2. 数据链路层<br/>————<br/>解帧, CRC校验"]
 B3["3. 网络层<br/>————<br/>路由查找, 解IP头"]
 B4["4. 传输层<br/>————<br/>端口解复用, 重组"]
 B5["5. 会话层<br/>————<br/>会话恢复"]
 B6["6. 表示层<br/>————<br/>解密, 解码, 解压"]
 B7["7. 应用层<br/>————<br/>交付应用进程"]

 B1 --> B2 --> B3 --> B4 --> B5 --> B6 --> B7
 end

各层详细职责与 PDU 总结

层号名称功能摘要PDU地址类型关键设备
7应用层为应用程序提供网络服务接口Data / Message应用网关, 应用层防火墙
6表示层数据格式转换、加密/解密、压缩/解压缩Data
5会话层建立、管理、终止会话;会话检查点与恢复Data
4传输层端到端可靠传输、流量控制、拥塞控制、端口复用Segment (TCP) / Datagram (UDP)Port (16-bit)L4 负载均衡器, NAT 网关
3网络层路由选择、逻辑编址 (IP)、分片与重组Packet / DatagramIP 地址 (32/128-bit)路由器, L3 交换机, 防火墙
2数据链路层成帧、MAC 编址、差错检测与纠错、介质访问控制FrameMAC 地址 (48-bit)交换机、网桥、AP
1物理层比特流在物理介质上的透明传输Bit中继器 (Repeater)、集线器 (Hub)、调制解调器

数据在各层的封装过程 (自上而下的首部追加)

flowchart TD
 AppData["应用层数据<br/>(Data)"] -->|"+ TCP/UDP Header"| Segment["传输层: Segment/Datagram<br/>{TCP Hdr | Data}"]
 Segment -->|"+ IP Header"| Packet["网络层: Packet<br/>{IP Hdr | TCP Hdr | Data}"]
 Packet -->|"+ MAC Header + FCS"| Frame["数据链路层: Frame<br/>{MAC Hdr | IP Hdr | TCP Hdr | Data | FCS}"]
 Frame -->|"物理层编码"| BitStream["物理层: 比特流<br/>101100101..."]

 subgraph "每层追加的头部信息"
 TCPH["TCP Hdr: SrcPort, DstPort, SeqNo, AckNo, Flags, Window, Checksum"]
 IPH["IP Hdr: SrcIP, DstIP, TTL, Protocol, Checksum, Flags, Fragment Offset"]
 MACH["MAC Hdr: DstMAC, SrcMAC, EtherType/VLAN Tag"]
 FCSV["FCS: CRC32 帧校验序列 <br/>(Frame Check Sequence)"]
 end

各层职责要点

  • 物理层:不提供差错控制,只做透明比特传输。差错控制由数据链路层以上负责。
  • 数据链路层:点到点通信 (同一网段内相邻节点),MAC 地址仅在广播域内有效。
  • 网络层:端到端通信 (跨越多个网络/路由器),IP 地址全局唯一/局部唯一 (NAT)。
  • 传输层:进程到进程通信,端口号区分同一主机上的不同应用进程。
  • 下一层为上一层提供服务,对等层之间遵守同一协议。

OSI 7 层 vs 操作系统 系统调用栈对比

OSI 概念操作系统对应
应用层用户态: socket(), send(), recv(), connect(), accept()
传输层内核态: TCP/UDP 协议栈 (net/ipv4/tcp.c, net/ipv4/udp.c)
网络层内核态: IP 路由子系统 (net/ipv4/ip_forward.c, net/ipv4/route.c)
数据链路层内核态: 网卡驱动 (NIC driver, drivers/net/) + NAPI
物理层硬件: NIC PHY, 网线/光模块

4. TCP/IP 四层模型

TCP/IP 是互联网实际运行的协议栈。OSI 七层是教学模型,TCP/IP 四层是工程模型。

flowchart LR
 subgraph OSI["OSI 七层模型"]
 O7["7. 应用层"]
 O6["6. 表示层"]
 O5["5. 会话层"]
 O4["4. 传输层"]
 O3["3. 网络层"]
 O2["2. 数据链路层"]
 O1["1. 物理层"]
 end

 subgraph TCPIP["TCP/IP 四层模型"]
 T4["应用层<br/>Application Layer<br/>————<br/>HTTP, SMTP, FTP, DNS, SSH,<br/>TLS, MIME, RPC, NFS"]
 T3["传输层<br/>Transport Layer<br/>————<br/>TCP, UDP, SCTP, QUIC"]
 T2["网络互联层<br/>Internet Layer<br/>————<br/>IP (v4/v6), ICMP, IGMP,<br/>ARP, IPsec"]
 T1["网络接口层<br/>Network Interface Layer<br/>————<br/>Ethernet, Wi-Fi, PPP,<br/>帧中继, 物理介质"]
 end

 O7 -->|合并| T4
 O6 -->|合并| T4
 O5 -->|合并| T4
 O4 -->|对应| T3
 O3 -->|对应| T2
 O2 -->|合并| T1
 O1 -->|合并| T1

映射关系与差异总结

对比维度OSI 七层TCP/IP 四层
层次数74
出现时间先有模型 (1977-1984)先有协议栈 (ARPANET, 1970s)
模型性质理论模型 — 先设计模型后实现工程模型 — 从已有协议栈中归纳
表示层/会话层独立层 — 分工明确合并入应用层 — 由应用自身或库处理 (TLS/SSL 是库)
物理层与数据链路层独立的两层合并为”网络接口层” — 不做细节规定
是否定义”服务/接口/协议”严格区分三者未做严格区分
适用场景教学, 协议分析, 概念设计互联网工程实施
协议族未绑定 (理论上可承载任意协议)绑定 TCP/IP 协议族

TCP/IP 协议栈沙漏模型 (Hourglass Model)

graph TD
 subgraph "应用层 (宽 — 协议繁多)"
 A1["HTTP"] ; A2["SMTP"] ; A3["DNS"] ; A4["FTP"] ; A5["SSH"]
 A6["BitTorrent"] ; A7["QUIC"] ; A8["gRPC"] ; A9["MQTT"]
 end

 subgraph "传输层 (窄 — 协议少而精)"
 T1["TCP"] ; T2["UDP"]
 end

 subgraph "网络互联层 (极窄 — 唯一)"
 I1["IP<br/>(IPv4 / IPv6)"]
 end

 subgraph "网络接口层 (宽 — 物理技术多样)"
 N1["Ethernet"] ; N2["Wi-Fi"] ; N3["4G/5G"] ; N4["光纤"]
 N5["DOCSIS"] ; N6["卫星"] ; N7["BLE"]
 end

 A1 & A2 & A3 & A4 & A5 & A6 & A7 & A8 & A9 --> T1 & T2
 T1 & T2 --> I1
 I1 --> N1 & N2 & N3 & N4 & N5 & N6 & N7

沙漏模型的哲学:IP 是 Internet 的”窄腰” (narrow waist)。IP 之上支持任意传输层和应用层协议,IP 之下可运行于任意物理网络之上。这种设计使得互联网具有极强的可扩展性 — 新增上层应用或底层物理技术无需修改 IP 层。


5. 五层参考模型(教学常用模型)

五层模型是国内教材与教学中广泛采用的教学标准,在 OSI 七层基础上合并了表示层和会话层到应用层。

graph TD
 L5["5. 应用层<br/>Application Layer<br/>PDU: Message"]
 L4["4. 传输层<br/>Transport Layer<br/>PDU: Segment (TCP) / Datagram (UDP)"]
 L3["3. 网络层<br/>Network Layer<br/>PDU: Datagram (Packet)"]
 L2["2. 数据链路层<br/>Data Link Layer<br/>PDU: Frame"]
 L1["1. 物理层<br/>Physical Layer<br/>PDU: Bit"]

 L5 -->|"数据封装"| L4 -->|"加 TCP/UDP 头"| L3 -->|"加 IP 头"| L2 -->|"加 MAC 头 + FCS"| L1 -->|"编码为比特流"| Medium["物理传输介质"]

 subgraph "各层协议示例"
 L5Ex["HTTP, HTTPS, DNS, FTP, SMTP, SSH, SNMP, DHCP"]
 L4Ex["TCP, UDP"]
 L3Ex["IP, ICMP, ARP, OSPF, BGP, RIP"]
 L2Ex["Ethernet, PPP, Wi-Fi (802.11), ARP(链路层实现)"]
 L1Ex["RS-232, V.35, RJ-45, 光纤, 无线电频谱"]
 end

五层参考模型 vs 其他模型

五层参考模型 (推荐)OSI 七层TCP/IP 四层本教程对应章节
5应用层7/6/5 (应用/表示/会话)应用层F_应用层
4传输层4 (传输层)传输层E_传输层
3网络层3 (网络层)网络互联层D_网络层
2数据链路层2 (数据链路层)网络接口层C_数据链路层
1物理层1 (物理层)网络接口层B_物理层

统一采用五层模型的原因:教学上,五层模型既保留了 OSI 的逻辑清晰性 (物理层和数据链路层分别处理 bit 和 frame),又避免了对表示层/会话层的过度抽象 (这两层在现代互联网中几乎不独立存在)。实践中根据协议查找对应层次即可。


6. 协议、接口与服务

6.1 核心概念辨析

graph TD
 subgraph "三个核心概念"
 Protocol["协议 (Protocol)<br/>————<br/>对等层之间的通信规则<br/>是'水平的'<br/>————<br/>例: 两个 TCP 实体之间<br/>遵守 TCP 协议通信"]
 Interface["接口 (Interface)<br/>————<br/>相邻层之间交换信息的边界<br/>是连接点<br/>————<br/>例: socket API 是应用层<br/>与传输层之间的接口"]
 Service["服务 (Service)<br/>————<br/>下层通过接口向上层<br/>提供的功能<br/>是'垂直的'<br/>————<br/>例: TCP 为应用层提供<br/>可靠的字节流服务"]
 end

 Protocol --- Interface --- Service

正式定义

术语定义方向例子
协议 (Protocol)对等层实体之间通信规则的集合 (语法、语义、时序)水平TCP 的对等实体间交换 SYN/ACK/FIN 的规则
接口 (Interface)相邻层之间交换信息的方法,即下层向上层提供的操作集合垂直 (层间)BSD Socket API: socket(), bind(), listen()
服务 (Service)下层通过接口向上层提供的通信能力垂直 (下层→上层)传输层为应用层提供”可靠字节流”服务
实体 (Entity)每层中执行协议和提供服务的硬件或软件模块TCP 模块 (内核中的 net/ipv4/tcp.c)
对等实体 (Peer Entity)不同机器上相同层的实体水平主机 A 的 TCP 实体 ↔ 主机 B 的 TCP 实体

6.2 服务访问点 SAP (Service Access Point)

SAP 是相邻层实体之间进行信息交换的逻辑接口。每个 SAP 有一个唯一标识。

SAP 名称标识
传输层 ↔ 应用层端口号 (Port Number)16-bit: 0-65535
网络层 ↔ 传输层协议号 (Protocol Number)8-bit: IP 首部 Protocol 字段 (TCP=6, UDP=17)
数据链路层 ↔ 网络层以太网类型 (EtherType)16-bit: IPv4=0x0800, ARP=0x0806, IPv6=0x86DD
物理层 ↔ 数据链路层网卡接口 (NIC Interface)eth0, wlan0 (in Linux)
graph TD
 subgraph "SAP 的分层标识体系"
 App1["进程 A<br/>(PID 1234)"]
 App2["进程 B<br/>(PID 5678)"]

 TP4["传输层</br>TCP/UDP"]
 NW3["网络层</br>IP"]
 DL2["数据链路层</br>Ethernet"]

 App1 -->|"Port 80 (SAP)"| TP4
 App2 -->|"Port 443 (SAP)"| TP4
 TP4 -->|"Protocol=6 (TCP SAP)"| NW3
 NW3 -->|"EtherType=0x0800 (SAP)"| DL2
 DL2 -->|"eth0 (物理 SAP)"| PHY["物理层"]
 end

6.3 服务原语 (Service Primitives)

服务原语描述相邻层之间交互的请求-响应动作序列。

原语方向含义
Request (请求)上层→下层上层请求下层提供服务
Indication (指示)下层→上层下层通知上层有事件发生 (如数据到达)
Response (响应)上层→下层上层对 Indication 的应答
Confirm (确认)下层→上层下层通知上层请求已完成

面向连接服务的四原语交互 (以 TCP connect() 为例):

sequenceDiagram
 participant AppA as 应用进程 A<br/>(Client)
 participant TCP_A as 传输层实体 A<br/>(TCP Stack)
 participant NetA as 网络层 A
 participant NetB as 网络层 B
 participant TCP_B as 传输层实体 B<br/>(TCP Stack)
 participant AppB as 应用进程 B<br/>(Server)

 Note over AppA,AppB: 连接建立 — 4 类服务原语

 AppA->>TCP_A: CONNECT.Request<br/>(dest IP, dest Port)
 TCP_A->>NetA: TCP SYN 段<br/>(Seq=x)
 NetA->>NetB: IP Datagram
 NetB->>TCP_B: TCP SYN 段
 TCP_B->>AppB: CONNECT.Indication<br/>(src IP, src Port)

 AppB->>TCP_B: CONNECT.Response<br/>(接受连接)
 TCP_B->>NetB: TCP SYN+ACK 段<br/>(Seq=y, Ack=x+1)
 NetB->>NetA: IP Datagram
 NetA->>TCP_A: TCP SYN+ACK 段
 TCP_A->>AppA: CONNECT.Confirm<br/>(连接已建立)

 Note over AppA,AppB: 连接已就绪, 可传输数据

 AppA->>TCP_A: DATA.Request<br/>(payload)
 TCP_A->>NetA: TCP Data 段
 NetA->>NetB: IP Datagram
 NetB->>TCP_B: TCP Data 段
 TCP_B->>AppB: DATA.Indication<br/>(payload delivered)

无连接服务的二原语交互 (以 UDP sendto() 为例):

sequenceDiagram
 participant AppA as 应用进程 A
 participant UDP_A as UDP 实体 A
 participant UDP_B as UDP 实体 B
 participant AppB as 应用进程 B

 AppA->>UDP_A: UNITDATA.Request<br/>(dest IP, dest Port, payload)
 UDP_A->>UDP_B: UDP Datagram<br/>(无连接, 直接发送)
 UDP_B->>AppB: UNITDATA.Indication<br/>(src IP, src Port, payload)

 Note over AppA,AppB: 无连接 — 无 Confirm, 无 Response<br/>上层自己处理丢失

要点

  • 面向连接服务:必然使用四原语 (Request, Indication, Response, Confirm);典型的”请求-确认”模型。
  • 无连接服务:仅使用两个原语 (Request, Indication);“发了就不管”。
  • 服务原语 vs 协议数据单元 (PDU):服务原语是相邻层之间控制信息的交换方式,PDU 是对等层之间数据的格式。

6.4 面向连接 vs 无连接服务

比较维度面向连接 (Connection-Oriented)无连接 (Connectionless)
连接建立需要 (三次握手等)不需要
通信过程建立连接 → 数据传输 → 释放连接直接发送数据
可靠性通常提供可靠传输通常不保证可靠 (尽力而为)
顺序性保证数据按序到达不保证顺序
流量控制有 (滑动窗口等)
典型协议TCP, SCTP, 虚电路 (VC)UDP, IP, Ethernet, DNS (基于 UDP)
适用场景文件传输、邮件、网页、远程登录实时音视频、DNS 查询、DHCP、IoT 遥测
网络层中的实现虚电路网络 (ATM, X.25, MPLS)数据报网络 (IP)
服务原语四原语 (Req/Ind/Resp/Conf)二原语 (Req/Ind)

网络层两类服务(重点):

  • 虚电路 (Virtual Circuit):面向连接,如 ATM、X.25、MPLS。先建立路径,分组沿固定路径转发,中间节点维护连接状态。
  • 数据报 (Datagram):无连接,如 IP。每个分组独立路由,中间节点无连接状态。

7. 分层的好处与缺点

graph TD
 subgraph "分层设计 — 好处与代价"
 direction LR
 Benefits["好处 (Pros)"] -->|权衡| Costs["代价 (Cons)"]

 B1["1. 模块化: 每层独立开发、维护、替换<br/>2. 标准化: 接口统一, 不同厂商可互操作<br/>3. 问题隔离: 故障排查可从任意层切入<br/>4. 协议演进: 上层应用升级无需改动传输层<br/>5. 教学分析: 分层使复杂系统可理解"]
 C1["1. 层间冗余: 相邻层可能重复实现相同功能<br/> 例: 链路层 CRC + 传输层校验和<br/>2. 信息隐藏过度: 上层无法利用下层优化<br/> 例: TCP 不知底层链路丢包还是拥塞丢包<br/>3. 跨层交互需求: HTTP/3 将 TLS 移入 QUIC<br/> 打破了传统分层<br/>4. 处理开销: 每层加/剥头部,额外 CPU 周期<br/>5. OSI 的历史教训:<br/> 过度分层导致协议栈臃肿 (会话层/表示<br/> 层的边界在实践中模糊)"]
 end
好处具体体现工程例子
模块化每层可独立开发和测试编写应用层时无需关心网卡驱动
互操作性不同厂商遵循同一接口规范Cisco 路由器与 Juniper 路由器可互操作
故障隔离从下往上逐层排查ping (网络层) → telnet port (传输层) → curl (应用层)
协议演进上层可独立升级HTTP/1.1 → HTTP/2 → HTTP/3, 底层 TCP/UDP 未被替换

对”分层原则”的总结分层 = 越高层离用户越近、越低层离硬件越近。N 层为 N+1 层提供服务,使用 N-1 层提供的服务。

分层在真实工程中的”破坏”案例

技术跨层行为理由
TCP 显式拥塞通知 (ECN)IP 层标记拥塞,TCP 层接受并响应避免由丢包推断拥塞的低效
Path MTU Discovery (PMTUD)IP 层 ICMP 消息通知传输层 TCP 调整 MSS避免分片开销
QUIC / HTTP/3传输层 (UDP) + 安全 (TLS 1.3) + 应用 (HTTP) 全部合并到用户空间减少队头阻塞, 0-RTT 握手
DPDK / XDP / eBPF绕过内核协议栈,在用户态或网卡上处理数据包极致性能,NFV 场景
SR-IOV虚拟化绕过 hypervisor,网卡直接向 VM 暴露硬件队列容器高性能网络

这些”破坏”分层的技术恰恰说明了分层的本质是逻辑抽象而非物理约束。在工程实践中,当性能需求压倒一切时,跨层优化是合理的。


8. 各层攻击面与红队实战关联

每一层都有独特的攻击面和利用技术。红队渗透测试应在各个网络层上建立攻击思维。

OSI 层攻击面红队利用技术工具/框架防御技术
物理层信号窃听、线缆搭接、电磁泄漏光纤窃听、TEMPEST 辐射分析、硬件 Keylogger硬件嗅探器, HackRF, RTL-SDR屏蔽、光电隔离、物理访问控制
数据链路层MAC 欺骗、ARP 欺骗、VLAN 跳跃、STP 操纵ARP Spoofing → MITM;MAC Flooding → CAM 表溢出;DHCP Starvation + Rogue DHCParpspoof, ettercap, yersinia, macchangerDAI (动态 ARP 检测), DHCP Snooping, Port Security
网络层IP Spoofing, ICMP 隧道, 路由注入, IP 分片攻击, Smurf 攻击BGP Hijacking; ICMP 隐蔽信道; 源路由攻击; IP 分片绕过防火墙 (Teardrop)scapy, hping3, nmap, fragroute, nemesis入口过滤 (BCP38), uRPF, IPsec, 防火墙 ACL
传输层SYN Flood, TCP 会话劫持, UDP Flood, 端口扫描探测 OS (指纹)TCP RST 注入; SYN 半开扫描 (nmap -sS); TCP 序列号预测攻击; SSL Strippingnmap, hping3, LOIC/HOIC, ettercap, bettercapSYN Cookies, SYN Proxy, 速率限制, TLS 1.3
会话层会话劫持, RPC 未授权访问, NetBIOS 枚举NetBIOS 名查询泄露主机信息; SMB 中继攻击; RPC 空会话枚举enum4linux, rpcclient, impacket (smbrelayx)SMB 签名, RPC 认证, Kerberos
表示层SSL/TLS 降级, 不安全的密码套件, 证书伪造SSL Stripping, POODLE (降级到 SSLv3), BEAST, CRIME, Heartbleed; 中间人证书注入sslstrip, mitmproxy, sslscan, testssl.shTLS 1.3, HSTS, Certificate Pinning
应用层SQLi, XSS, CSRF, SSRF, 命令注入, 文件包含, 反序列化, API 未授权Web 漏洞利用; C2 通信伪装 (HTTPS/DNS over HTTPS); DNS 隧道 C2sqlmap, Burp Suite, Metasploit, Cobalt Strike, EmpireWAF, RASP, 输入校验, CSP, 代码审计

详细内容参见:01-计算机网络基础 — 红队视角的 OSI 七层攻击与防御详解。本节侧重协议理论框架与实战的映射关系。

红队常用网络层工具在协议栈中的位置

graph TD
 subgraph "L7 应用层"
 BP["Burp Suite<br/>HTTP/HTTPS 代理"]
 SS["sqlmap<br/>SQL 注入"]
 CS["Cobalt Strike<br/>C2 Framework"]
 end
 subgraph "L4 传输层"
 NM["nmap -sS/-sT<br/>端口扫描"]
 HP["hping3<br/>数据包构造"]
 end
 subgraph "L3 网络层"
 SC["scapy<br/>任意数据包构造"]
 FR["fragroute<br/>分片绕过"]
 end
 subgraph "L2 数据链路层"
 ASP["arpspoof / bettercap<br/>ARP 欺骗与 MITM"]
 ET["ettercap<br/>综合 MITM"]
 end
 subgraph "L1 物理层"
 HW["硬件嗅探器<br/>Throwing Star LAN Tap"]
 end

跨层攻击链 (以 MITM + 凭据窃取为例):

flowchart LR
 L2_MAC["L2: ARP Spoofing<br/>(arpspoof)"] -->|"建立 MITM 位置"| L3_IP["L3: IP 转发开启<br/>(ip_forward=1)"]
 L3_IP -->|"流量透明转发"| L4_Port["L4: 重定向流量<br/>(iptables REDIRECT)"]
 L4_Port -->|"HTTP → 代理"| L7_SSL["L7: SSL Stripping<br/>(sslstrip)"]
 L7_SSL -->|"降级到 HTTP 明文"| Cred["获取用户名/密码"]

9. 容器网络与网络体系结构

容器 (Container) 的网络栈本质是 Linux 内核网络子系统 (net/) 的 namespace 隔离与虚拟化。理解传统分层模型是理解容器网络的前提。

9.1 容器网络的软件定义层

graph TD
 subgraph "物理拓扑 (Underlay Network)"
 PhyNIC["物理网卡<br/>eth0 (NIC)"]
 PhySwitch["物理交换机<br/>(ToR)"]
 PhyRouter["物理路由器"]
 end

 subgraph "Overlay Network (VXLAN/Geneve)"
 VXLAN_TEP["VTEP<br/>(VXLAN Tunnel Endpoint)"]
 VXLAN_Frame["VXLAN 封装<br/>{Outer ETH | Outer IP | Outer UDP | VXLAN HDR | Inner ETH | Inner IP | Payload}"]
 end

 subgraph "容器网络接口 (CNI)"
 CNI0["cni0 / flannel.1<br/>容器网桥"]
 VethPair["veth pair<br/>{容器端 eth0 ↔ 宿主机端 vethXXXX}"]
 PodNS["Pod Network Namespace<br/>独立协议栈"]
 end

 subgraph "K8s 网络模型"
 Service["ClusterIP / NodePort<br/>(kube-proxy)"]
 NetPol["NetworkPolicy<br/>(Calico / Cilium)"]
 end

 PhyNIC --> PhySwitch --> PhyRouter
 VethPair --> CNI0 --> VXLAN_TEP --> VXLAN_Frame --> PhyNIC
 PodNS --> VethPair
 Service --> CNI0
 NetPol --> PodNS

9.2 容器数据包完整路径

以一个 Pod 访问外部互联网为例,数据包在各层的生命周期:

flowchart TD
 Pod["Pod App<br/>(pid=1 in netns)"] -->|"1. socket() → write()<br/>应用层数据"| TCP_NS["Pod netns: TCP 封装<br/>SrcPort, DstPort, Seq, Ack"]
 TCP_NS -->|"2. 传输层分段"| IP_NS["Pod netns: IP 封装<br/>SrcIP=10.244.1.5, DstIP=8.8.8.8"]
 IP_NS -->|"3. 网络层路由查找<br/>default route → eth0"| Veth_In["veth pair (Pod 端 eth0)"]
 Veth_In -->|"4. 跨 namespace<br/>veth pair 转发"| Veth_Out["veth pair (宿主机端)"]
 Veth_Out -->|"5. 进入 cni0 网桥<br/>L2 转发"| Bridge["cni0 Bridge"]
 Bridge -->|"6. 路由: 10.244.x.x → via flannel.1"| Overlay["VXLAN/Geneve 封装<br/>{Outer IP | Inner IP | Payload}"]
 Overlay -->|"7. 宿主机路由<br/>default route → eth0"| HostEth["宿主机物理网卡 eth0"]
 HostEth -->|"8. 发送到物理网络"| Internet["互联网"]

关键的内核组件

概念内核实现层映射
Network Namespaceclone(CLONE_NEWNET) — 独立协议栈:路由表、iptables 规则、网络接口、/proc/net
veth pair虚拟以太网设备对,一端在容器 netns,一端在宿主机 netnsL2 (数据链路层)
Bridge (cni0/docker0)软件实现的 L2 交换机,MAC 学习 + 转发L2
iptables / nftables内核包过滤框架 — DNAT/SNAT (Service), MASQUERADE (出网)L3/L4
IPVS (IP Virtual Server)L4 负载均衡,比 iptables 模式性能更好 (O(1) 调度)L4
VXLAN / GeneveOverlay 封装,MAC-in-UDP (VXLAN)L2 over L3
eBPF (Cilium)绕过 iptables,在内核中直接编程处理数据包L3/L4/L7

9.3 CNI 插件体系

CNI (Container Network Interface) 定义了容器运行时与网络插件之间的接口规范,本质上就是分层模型中接口 (Interface) 概念的工程实现。

CNI 插件网络模型Overlay 协议数据平面适用场景
FlannelOverlay (VXLAN/host-gw/UDP)VXLAN内核 VXLAN入门级, 简单跨节点通信
CalicoL3 BGP 路由 (纯路由)无 (纯 IP 路由)Linux 路由表 / eBPF高性能, 大规模集群
CiliumeBPF + 标识感知Geneve (可选)eBPF XDP / TC极致性能 + L7 网络策略
WeaveVXLAN / sleeveVXLAN内核 / 用户态 sleeve简单易用, 加密通信
Multus多网卡 (Meta-CNI)— (调度其他 CNI)委托其他 CNISR-IOV + 多租户

数据平面决策图

flowchart TD
 Pkt["进入 Pod 的出站数据包"] --> Route["路由查找"]

 Route -->|"同节点 Pod"| Bridge["cni0 Bridge L2 转发"]
 Route -->|"跨节点 Pod"| OverlayRoute{"CNI 类型?"}

 OverlayRoute -->|"Flannel VXLAN"| VXLAN["VXLAN 封装 → 内核 VXLAN → 物理网卡"]
 OverlayRoute -->|"Calico BGP"| BGP["直接 L3 路由 → 宿主机 IP → 物理网卡"]
 OverlayRoute -->|"Cilium eBPF"| eBPF["eBPF 程序直通 → 直接修改包 → 物理网卡"]
 OverlayRoute -->|"host-gw"| HostGW["直接路由: next hop = 目标节点 IP"]

 Route -->|"出集群 (外部)"| SNAT["iptables MASQUERADE<br/>源地址: Pod IP → 宿主机 IP"]
 SNAT -->|"通过物理网卡"| Internet2["互联网"]

容器网络与分层模型的映射

容器网络概念层次对应协议/机制
veth pairL2虚拟以太网, 点对点链路
cni0 / docker0 bridgeL2网桥 (透明桥接, MAC 学习)
VXLAN 封装L2 over L3隧道封装 (类似 GRE, IPsec)
Service ClusterIP (kube-proxy)L4 (iptables/IPVS)NAT / 负载均衡
NetworkPolicyL3/L4 (防火墙)包过滤规则 (ACL)
Ingress ControllerL7反向代理, TLS 终止, URL 路由
CoreDNSL7 (应用层)DNS 服务发现
eBPF tc/XDP跨 L2/L3/L4直接操作 sk_buff, 绕过协议栈

9.4 Overlay 网络的数据包封装层次

VXLAN (典型的容器 Overlay 协议) 的完整数据包结构直观展示了分层封装的理念:

+-------------------------------------------+
| 物理层: 比特流 (100Gbps 光纤/铜缆) |
+-------------------------------------------+
| L2: 外部 MAC 头 (Src/Dst MAC) | ← 物理网络 (Underlay)
| EtherType = 0x0800 (IPv4) |
+-------------------------------------------+
| L3: 外部 IP 头 (Src/Dst IP of host) |
| Protocol = 17 (UDP) |
+-------------------------------------------+
| L4: 外部 UDP 头 (DstPort = 4789, VXLAN) | ← Overlay 封装边界
+-------------------------------------------+
| VXLAN Header: VNI (24-bit Virtual Net ID) | ← Overlay 标识
+-------------------------------------------+
| L2: 内部 MAC 头 (Pod Src/Dst MAC) | ← 容器网络 (Overlay)
| EtherType = 0x0800 (IPv4) |
+-------------------------------------------+
| L3: 内部 IP 头 (Pod Src/Dst IP) |
| Protocol = 6 (TCP) |
+-------------------------------------------+
| L4: 内部 TCP 头 (Src/Dst Port) |
| SYN / ACK / PSH / FIN |
+-------------------------------------------+
| 应用层: HTTP Request / gRPC / DNS Query |
+-------------------------------------------+
| FCS (CRC-32) |
+-------------------------------------------+

每层协议首部的字节开销

封装层首部长度累计
Pod TCP 首部20-60 B20-60
Pod IP 首部20-60 B40-120
Pod MAC 首部14 B + 4 (VLAN)58-138
VXLAN 首部8 B66-146
UDP 首部8 B74-154
外部 IP 首部20 B94-174
外部 MAC 首部14 B108-188
总计 Overlay 开销108-188 B

这就是容器网络中经常需要调整 MTU 的原因:VXLAN 封装增加了 50-74 字节开销,如果 Underlay 网络 MTU 为 1500,则 Pod 内 MTU 应设为 1450 (或以 PMTUD 自动协商)。否则会导致 IP 分片或 PMTU 黑洞。

相关概念:overlay、underlay、veth pair、bridge 的完整实现与 ip netns 实验操作,参见 内核linux 中的容器网络实战部分。


10. 跨模块交叉索引

概念所属模块链接
物理层的信号编码、Nyquist/Shannon 定理计算机网络B_物理层
以太网帧格式、MAC 地址、ARP、交换与 VLAN计算机网络C_数据链路层
IP 协议、路由算法 (RIP/OSPF/BGP)、NAT、ICMP计算机网络D_网络层
TCP 拥塞控制、三次握手/四次挥手、超时重传计算机网络E_传输层
HTTP/DNS/FTP/SMTP 协议实现计算机网络F_应用层
网络协议栈系统调用 (socket, send, recv)操作系统O 管理
内核协议栈实现 (net/ 子系统)操作系统O 管理
网络中断处理与 NAPI 机制操作系统O 管理
CPU 缓存层级对包处理性能的影响计算机原理缓存层级
DMA 在网络数据包传输中的应用计算机原理输入输出系统
端序 (字节序) 与网络字节序转换计算机原理数据表示
红队视角的网络攻击与防御红队01-计算机网络基础
渗透测试中网络层利用 (ARP Spoof, MITM, BGP Hijack)红队01-计算机网络基础

11. 关键公式速查

公式说明单位
发送时延 = L / RL: 分组长度 (bits), R: 链路速率 (bps)s
传播时延 = d / vd: 链路距离 (m), v: 信号速度 (m/s), v (铜缆) ≈ 2×10⁸ m/ss
总时延 = d_trans + d_prop + d_proc + d_queue四部分独立, 可流水线s
时延带宽积 = d_prop × R管道中”飞行中”的比特数bits
利用率 U = 吞吐量 / 带宽0 ≤ U ≤ 1无量纲
排队时延 D = D₀ / (1 - U)M/M/1 队列模型近似s
丢包率 = N_lost / N_sent无量纲
Nyquist 极限 = 2W log₂(V)无噪声信道最大速率bps
Shannon 极限 = W log₂(1 + S/N)有噪声信道最大速率bps
(S/N)dB = 10 log₁₀(S/N)信噪比分贝转换dB
RTO = SRTT + 4 × RTTVARTCP 超时重传时间估计s