网络模型
概念
网络模型是理解计算机网络的基础框架。所有网络协议都可以归入某一层,每层只负责特定功能,层与层之间通过接口通信。面试中主要考 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
| 对比项 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 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 重发生产排查命令:
# 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 1450VLAN / 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 关键差异
| 维度 | VLAN | VXLAN |
|---|---|---|
| 类型 | 二层 | 三层 Overlay |
| 网络数上限 | 4094 | 1600 万 |
| 跨数据中心 | 难(需二层打通) | 天然支持(封装到 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 到页面显示发生了什么(网络部分)?
- DNS 解析 — 浏览器缓存 → OS 缓存 → 本地 DNS → 递归查询 → 获得 IP
- 建立 TCP 连接 — 三次握手(SYN → SYN+ACK → ACK)
- TLS 握手(HTTPS) — 协商密钥、验证证书
- 发送 HTTP 请求 — 请求行 + 头部 + 请求体
- 服务器处理 — 解析请求 → 业务逻辑 → 生成响应
- 返回 HTTP 响应 — 状态码 + 头部 + 响应体
- 浏览器渲染 — 解析 HTML → 构建 DOM → 加载 CSS/JS → 渲染
- 关闭连接 — 四次挥手(或 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。