Skip to content

网络模型

概念

网络模型是理解计算机网络的基础框架。所有网络协议都可以归入某一层,每层只负责特定功能,层与层之间通过接口通信。面试中主要考 OSI 七层模型和 TCP/IP 四层模型的对应关系。

OSI 七层 vs TCP/IP 四层

OSI 七层TCP/IP 四层职责常见协议
应用层应用层为用户提供网络服务接口HTTP、HTTPS、FTP、SMTP、DNS、SSH
表示层数据格式转换、加密解密、压缩SSL/TLS、JPEG、JSON
会话层建立、管理、终止会话RPC、NetBIOS
传输层传输层端到端的可靠传输TCP、UDP
网络层网际层路由选择、逻辑寻址IP、ICMP、ARP
数据链路层网络接口层帧传输、MAC 寻址、差错检测以太网、Wi-Fi、PPP
物理层比特流传输(电信号/光信号)RJ45、光纤

实际使用中以 TCP/IP 四层模型为主,OSI 七层更多用于理论参考。面试中常考的是"说出每一层的职责和代表协议"。

数据封装与解封装

发送数据时,数据从上到下逐层封装:

应用层数据
  ↓ 加上 TCP/UDP 头 → 段(Segment)
  ↓ 加上 IP 头 → 包(Packet)
  ↓ 加上 MAC 头和尾 → 帧(Frame)
  ↓ 转为比特流 → 物理传输

接收时反向解封装:每层剥掉自己的头部,把数据传给上一层。

每层关键概念

应用层

直接为用户的应用程序提供服务。HTTP 请求、DNS 查询、邮件发送都发生在这一层。

传输层

提供端到端的通信。核心问题是可靠性

  • TCP:面向连接、可靠传输、流量控制、拥塞控制
  • UDP:无连接、不可靠、快

端口是传输层的概念,用于区分同一主机上的不同应用(HTTP 80、HTTPS 443、MySQL 3306)。

网际层(网络层)

负责将数据包从源主机路由到目标主机:

  • IP 地址:逻辑地址,用于跨网络寻址
  • 路由:决定数据包走哪条路径
  • ICMP:网络诊断(ping 就是 ICMP Echo Request)
  • ARP:将 IP 地址解析为 MAC 地址(严格来说跨越了网络层和数据链路层)

网络接口层(数据链路层 + 物理层)

负责在相邻节点之间传输数据帧:

  • MAC 地址:物理地址,硬件唯一标识(48 位)
  • 以太网帧:包含源 MAC、目标 MAC、数据和 CRC 校验

IP 地址基础

IPv4 vs IPv6

对比项IPv4IPv6
地址长度32 位(如 192.168.1.1)128 位(如 2001:db8::1)
地址数量~43 亿几乎无限
头部可变长(20-60 字节)固定 40 字节
NAT需要(地址不够)不需要
配置手动或 DHCP支持自动配置(SLAAC)

常见特殊地址

地址用途
127.0.0.1本机回环(localhost)
0.0.0.0监听所有网络接口
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16私有地址(局域网)
255.255.255.255广播地址

子网掩码与 CIDR

子网掩码用于区分 IP 地址中的网络部分和主机部分:

IP:      192.168.1.100
掩码:    255.255.255.0  (即 /24)
网络号:  192.168.1.0
主机号:  100
可用主机: 2^8 - 2 = 254(减去网络地址和广播地址)

CIDR 表示法:192.168.1.0/24 = 前 24 位是网络号。

MTU / MSS:包大小的根本约束

MTU 和 MSS 是网络性能/排错的高频追问点——能讲清两者关系 + 分片代价 + 路径 MTU 探测,立刻显出网络深度。

MTU vs MSS

   ┌──────────────────────────────────────────────────────┐
   │              Ethernet 帧                              │
   │  ┌───────┬────────────────────────────────┬────────┐ │
   │  │14 B头 │      IP 包 (MTU)               │ FCS    │ │
   │  │ MAC   │  ┌──────┬───────────────────┐  │        │ │
   │  │       │  │20B IP│   TCP 段           │  │        │ │
   │  │       │  │ 头   │ ┌──────┬────────┐ │  │        │ │
   │  │       │  │      │ │20B   │ 应用数据│ │  │        │ │
   │  │       │  │      │ │TCP头 │ (MSS)  │ │  │        │ │
   │  └───────┴──┴──────┴──┴──────┴────────┴─┴──┴────────┘ │
   └──────────────────────────────────────────────────────┘
   
   MTU (默认 1500)
   = IP 头 20 + TCP 头 20 + MSS
   → MSS 默认 = 1500 - 40 = 1460
概念含义默认值
MTU(Maximum Transmission Unit)链路层一帧最多承载多少字节以太网 1500(jumbo frame 9000)
MSS(Maximum Segment Size)TCP 段最大数据载荷1460(IPv4)/ 1440(IPv6)

IP 分片陷阱(必背)

应用发送 5000 字节 → TCP 切成 1460 / 1460 / 1460 / 620 段 → 不分片 ✓

但若中间链路 MTU < 1500(如 VPN 1400):
  IP 层强制分片 → 1400 + 1400 + 1400 + 800

  任何分片丢失 → 整个原始包全部重传
  → 性能下降 + 包乱序加重

⚠️ "网通的但 ping 不通"经典场景

① TCP 三次握手 OK(小包);② 真发数据时大包被 MTU 截断 → ICMP "Need Fragment" 又被防火墙吃掉(PMTUD 黑洞)→ 应用层超时

排查:ping -M do -s 1472 host(IPv4,1472 + 28 IP/ICMP 头 = 1500);超出会失败 → 找到真实 MTU。

路径 MTU 探测(PMTUD)

TCP 默认开启 PMTUD:
  ① 发包带 IPv4 "DF (Don't Fragment)" 标志
  ② 中间路由器 MTU 不够 → 丢包 + 返回 ICMP "Fragmentation Needed"
  ③ 发送方收到 ICMP → 调小 MSS 重发

生产排查命令

bash
# 1. 查接口 MTU
ip link show eth0

# 2. 测试到目标的最大 MTU
ping -M do -s 1472 target

# 3. tracepath 探测各跳 MTU
tracepath target

# 4. 临时把网卡 MTU 调小(防火墙吃 ICMP 的场景)
ip link set eth0 mtu 1450

VLAN / VXLAN:网络隔离与 Overlay 网络

容器网络和云网络的基础概念——能讲清 VLAN 和 VXLAN 差别是云原生运维的硬通货。

VLAN(虚拟局域网,二层)

原始以太帧:  [MAC][数据]
VLAN 帧:    [MAC][VLAN Tag (4B)][数据]

              12 bit VLAN ID (0-4095,可用 1-4094)

特性

  • 限制广播域:相同 VLAN 内的主机才能广播(ARP/DHCP)
  • VLAN 数上限 4094——大型云厂商不够用
  • 二层网络,跨数据中心需要打通底层

VXLAN(Virtual Extensible LAN,三层 Overlay)

   原始以太帧 → 封装在 UDP 包中跨 IP 网络传输
   
   原始: [Inner MAC | IP | TCP | 数据]
   VXLAN: [Outer Eth | Outer IP | UDP | VXLAN头(8B) | Inner Eth | ...]

                                   24 bit VNI (1600 万个虚拟网络)

VXLAN vs VLAN 关键差异

维度VLANVXLAN
类型二层三层 Overlay
网络数上限40941600 万
跨数据中心难(需二层打通)天然支持(封装到 UDP)
典型用途传统企业网络K8s Flannel/Calico VXLAN 模式、公有云 VPC

💡 K8s 用 VXLAN 干什么

K8s 集群跨多节点部署 → 每个节点上的 Pod IP 范围不同 → Pod 间直接通信需要"打通"跨节点的二层网络。VXLAN 把整个 K8s 集群的 Pod 网络封装成一个大二层,跨节点 Pod 互通就像在同一个交换机下。Flannel 默认用 VXLAN,Calico 可选用 IPIP / VXLAN / BGP。

详见 K8s — CNI 与容器网络

路由协议速查(OSPF / BGP)

了解 OSPF / BGP 的本质区别,是高级运维 / SRE 必备

协议适用算法收敛速度
RIP小型网络(< 15 跳)距离向量慢,已淘汰
OSPF(Open Shortest Path First)企业内部网络、单一 AS链路状态 + Dijkstra快(秒级)
BGP(Border Gateway Protocol)互联网骨干、跨 AS 通信路径向量 + 策略路由慢(分钟级)

💡 一句话定位

OSPF 是企业内网的路由协议(如校园网、公司内网);BGP 是互联网的"骨架"(运营商之间、跨数据中心、Cloud BGP-to-LAN)。Calico 在 K8s 节点间用 BGP 宣告 Pod 路由——这就是为什么 Calico 性能高的根本原因。

一次 HTTP 请求的网络全流程

面试经典题:从输入 URL 到页面显示发生了什么(网络部分)?

  1. DNS 解析 — 浏览器缓存 → OS 缓存 → 本地 DNS → 递归查询 → 获得 IP
  2. 建立 TCP 连接 — 三次握手(SYN → SYN+ACK → ACK)
  3. TLS 握手(HTTPS) — 协商密钥、验证证书
  4. 发送 HTTP 请求 — 请求行 + 头部 + 请求体
  5. 服务器处理 — 解析请求 → 业务逻辑 → 生成响应
  6. 返回 HTTP 响应 — 状态码 + 头部 + 响应体
  7. 浏览器渲染 — 解析 HTML → 构建 DOM → 加载 CSS/JS → 渲染
  8. 关闭连接 — 四次挥手(或 Keep-Alive 复用)

面试常问 & 怎么答

Q1: OSI 七层模型和 TCP/IP 四层模型的区别?

OSI 是理论模型,分七层;TCP/IP 是实际使用的模型,分四层。TCP/IP 把 OSI 的应用层、表示层、会话层合并为应用层,把数据链路层和物理层合并为网络接口层。面试中只要能说出每层的职责和代表协议即可。

Q2: TCP 和 UDP 分别在哪一层?HTTP 在哪一层?

TCP 和 UDP 在传输层,HTTP 在应用层。HTTP 基于 TCP(HTTP/3 基于 QUIC/UDP)。

Q3: 从输入 URL 到页面显示发生了什么?

DNS 解析域名获得 IP → TCP 三次握手建立连接 → TLS 握手(HTTPS)→ 发送 HTTP 请求 → 服务器处理并返回响应 → 浏览器解析 HTML 并渲染 → 四次挥手关闭连接(或 Keep-Alive 复用)。

Q4: ARP 协议的作用?

ARP 将 IP 地址解析为 MAC 地址。同一局域网内通信时,知道目标 IP 但需要知道目标 MAC 才能发送以太网帧。ARP 广播询问"谁是这个 IP?",目标主机回复自己的 MAC 地址。

看到什么就先想到这类

  • 出现 OSI 七层、TCP/IP 四层、协议栈。
  • 出现"从输入 URL 到页面显示"。
  • 出现 IP 地址、子网掩码、CIDR。
  • 出现 ARP、ICMP、ping。