← Lesson 0011 教你排错。排错需要理解底层——这课讲 DevOps 面试最常考的三个网络协议。
应用层 HTTP, DNS, TLS, SSH ← 你的代码在这一层
传输层 TCP, UDP ← 端口、连接、可靠性
网络层 IP, ICMP ← 寻址、路由
链路层 Ethernet, Wi-Fi ← 物理传输
面试问「浏览器输入 URL 后发生了什么」,答案就是这四层从上到下再回来。
Client Server
| -------- SYN -------→ | 1. 客户端:我想连你
| ←--- SYN + ACK ------ | 2. 服务端:好的,我也想连你
| -------- ACK -------→ | 3. 客户端:确认
为什么三次不是两次?防止旧的 SYN 包让服务端错误打开连接。
Client Server
| -------- FIN -------→ | 1. 客户端:我不发了
| ←------- ACK -------- | 2. 服务端:收到(可能还有数据)
| ←------- FIN -------- | 3. 服务端:我也不发了
| -------- ACK -------→ | 4. 客户端:收到
为什么挥手多一次?TCP 是全双工——双方独立关闭。服务端收到 FIN 后可能还有数据要发。
| 状态 | 含义 | 注意 |
|---|---|---|
LISTEN | 等待连接 | 正常 |
ESTABLISHED | 连接中 | 正常 |
TIME_WAIT | 主动关闭方等待 2MSL(~60s) | 正常,大量出现调内核参数 |
CLOSE_WAIT | 收到 FIN 但自己没关 | ⚠️ 堆积 = 应用 bug(忘了 close) |
example.com → ?
1. 浏览器缓存
2. OS 缓存(/etc/hosts)
3. Local DNS Resolver(路由器 / 8.8.8.8)
→ 4. Root DNS(根服务器)
→ 5. TLD DNS(.com 服务器)
→ 6. Authoritative DNS(example.com 的 NS 服务器)
7. 返回 IP: 93.184.216.34
常见记录类型:
| 类型 | 作用 | 例子 |
|---|---|---|
A | 域名 → IPv4 | example.com. A 93.184.216.34 |
AAAA | 域名 → IPv6 | example.com. AAAA 2606:2800:... |
CNAME | 别名 → 真名 | www.example.com. CNAME example.com. |
MX | 邮件服务器 | example.com. MX 10 mail.example.com. |
NS | 权威 DNS 服务器 | example.com. NS ns1.example.com. |
TXT | 任意文本 | SPF、DKIM、域名验证 |
# DNS 排查工具
dig example.com # 完整 DNS 查询过程
dig example.com +short # 只输出结果
dig -x 93.184.216.34 # 反向查询(IP → 域名)
dig example.com NS # 查 NS 记录
dig @8.8.8.8 example.com # 指定 DNS 服务器
Client Server
| -- ClientHello ---------→ | "我支持 TLS 1.3, 这些加密套件"
| ←- ServerHello + 证书 ----- | "用这个套件,这是我的证书"
| |
| 验证证书链: |
| example.com 证书 |
| ↑ 由中间 CA 签发 |
| ↑ 由根 CA 签发(信任锚点) |
| |
| -- 密钥交换 ------------→ | 生成对称加密密钥
| ←- 确认 --------------- |
| |
| ==== 之后所有通信都加密 ======
证书链:你的域名证书 ← 中间 CA 证书 ← 根 CA 证书(预装在操作系统/浏览器里)。任何一环断了就是「证书不受信任」。
# 用 openssl 看证书
openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -dates
# notBefore=... notAfter=... ← 证书有效期
# 看完整证书链
openssl s_client -connect example.com:443 -showcerts
# 测试 TLS 版本
openssl s_client -connect example.com:443 -tls1_3
| 范围 | 含义 | 经典 |
|---|---|---|
| 2xx | 成功 | 200 OK, 201 Created, 204 No Content |
| 3xx | 重定向 | 301 永久, 302 临时, 304 缓存未修改 |
| 4xx | 客户端错误 | 400 请求错误, 401 未认证, 403 无权限, 404 未找到, 429 请求太多 |
| 5xx | 服务端错误 | 500 内部错误, 502 网关错误, 503 服务不可用, 504 网关超时 |
502 vs 504:502 = Nginx 连不上后端(后端挂了/没启动)。504 = Nginx 连上了但后端太久不响应。
Lesson 0013:网络实战与负载均衡 →——Nginx upstream、健康检查、限流、CDN 原理、真实排错场景。