HTTP、TLS、DNS 与网络排障
🌐 网络是所有分布式系统的基础。深入理解 HTTP/TLS/DNS 才能高效排查生产问题。
HTTP 基础
常用状态码速查
| 状态码 | 含义 | 常见场景 |
|---|---|---|
| 200 | OK | 成功 |
| 201 | Created | POST 创建资源成功 |
| 301/302 | 重定向 | 域名迁移 |
| 400 | Bad Request | 请求参数错误 |
| 401 | Unauthorized | 未认证 |
| 403 | Forbidden | 无权限 |
| 404 | Not Found | 资源不存在 |
| 429 | Too Many Requests | 限流 |
| 500 | Internal Server Error | 服务端异常 |
| 502 | Bad Gateway | 上游服务不可用 |
| 503 | Service Unavailable | 服务过载 |
HTTP/1.1 vs HTTP/2 vs HTTP/3
| 特性 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| 协议 | TCP | TCP | QUIC(UDP) |
| 多路复用 | ❌ | ✅ | ✅ |
| 头部压缩 | ❌ | HPACK | QPACK |
| 队头阻塞 | 有 | TCP 层仍有 | ✅ 解决 |
TLS 握手流程
客户端 服务端
│── ClientHello(支持的加密套件)──▶│
│◀── ServerHello + 证书 ──────────│
│── 验证证书、生成预主密钥 ──────▶│
│◀──────── 握手完成 ─────────────│
│════ 对称加密通信 ════════════════│
证书验证要点
# 检查证书有效期和链
openssl s_client -connect example.com:443 -showcerts
# 验证证书
openssl verify -CAfile chain.pem cert.pem
DNS 解析流程
浏览器缓存 → 系统缓存(/etc/hosts) → 本地 DNS → 根服务器
→ TLD 服务器 → 权威 DNS → 返回 IP
DNS 记录类型
| 类型 | 作用 |
|---|---|
| A | 域名 → IPv4 |
| AAAA | 域名 → IPv6 |
| CNAME | 别名 → 另一个域名 |
| MX | 邮件服务器 |
| TXT | 验证(SPF、DKIM) |
| NS | 权威 DNS 服务器 |
网络排障工具
# 1. 连通性测试
ping example.com
traceroute example.com # 逐跳延迟
# 2. DNS 查询
dig example.com # 完整 DNS 查询
nslookup example.com 8.8.8.8 # 指定 DNS 服务器
# 3. HTTP 调试
curl -v https://example.com # 详细请求信息
curl -I https://example.com # 只看响应头
curl -w "%{time_total}" https://example.com # 耗时分析
# 4. 端口连通
telnet example.com 443
nc -zv example.com 443
# 5. 抓包
tcpdump -i eth0 port 443 -w capture.pcap
# 用 Wireshark 分析 .pcap 文件
常见误区
- HTTPS 证书过期导致服务中断,应提前 30 天告警
- DNS TTL 设置过长,切换 IP 时流量长时间不迁移
- 排障时只看应用日志,忽略了网络层(丢包/重传)问题