4. 网络基础:TCP/IP、DNS、HTTP、TLS 与抓包
CI/CD 与生产故障的共同底座:网络与协议。
本章目标
把网络问题从“玄学”变成“可分层定位”:DNS → TCP → TLS → HTTP → 应用。
你会掌握
三次握手/重传、DNS 递归链路、TLS 握手、HTTP 请求生命周期,以及抓包/命令排障套路。
典型收益
当出现 502/超时/握手失败/证书报错/间歇性断连时,你知道先看哪一层、用什么证据验证。
在 DevOps 世界里,“网络”经常扮演反派:它不坏得彻底,而是坏得若隐若现——有时能通、有时超时;有时 200、有时 502;有时证书正常、有时握手失败。
你要做的不是背协议,而是建立一套分层诊断的本能:把问题像剥洋葱一样,一层层剥到根因。
你要做的不是背协议,而是建立一套分层诊断的本能:把问题像剥洋葱一样,一层层剥到根因。
1) 网络排障的“分层地图”(你要先学会站位)
遇到“访问不了服务”,不要先怪应用。先按层归类:
- DNS:域名能不能解析到正确 IP?TTL/缓存有没有坑?
- 连通性(TCP):三次握手是否完成?是否被防火墙/安全组/路由拦住?
- 加密(TLS):握手是否成功?证书链/域名匹配/时间是否正确?
- 应用协议(HTTP):状态码/路由/反代/超时/头部是否正确?
- 应用本身:进程、依赖、资源、线程池、数据库连接等。
排障黄金句:“我现在要证明的是哪一层出问题?”
只要你能用证据回答这句话,问题就已经成功了一半。
只要你能用证据回答这句话,问题就已经成功了一半。
2) TCP:连接是怎么建立的?为什么会超时?
绝大多数线上“超时”,最终都会落在 TCP 的两个问题:握手没完成或数据没按预期到达(丢包/拥塞/重传)。
图 1:TCP 三次握手 + 超时/重传的直觉(动态)
你不需要背所有字段,但要知道“握手卡住”意味着什么:路由/防火墙/端口/服务监听任一处都可能出错。
TCP 排障的最短命令
- 端口通不通:
curl -v http://host:port/nc -vz host port - 服务有没有监听:
ss -lntp(或netstat -ano) - 中间是否丢包:
ping(有限)/traceroute(看路径)
3) DNS:域名到 IP 的“暗箱”其实有迹可循
DNS 问题的典型症状:
- 同一个域名在不同机器解析结果不同(缓存/内网 DNS/分流)
- 解析很慢(递归链路慢、超时重试)
- 解析正确但访问错误服务(老记录未过期、负载均衡切换)
图 2:DNS 递归解析链路(动态)
把“为什么我解析到这个 IP?”变成可解释的链路:本地缓存 → 递归解析器 → 根/权威 → 结果返回。
DNS 排障的最短命令
- 看解析链路:
dig example.com(看 ANSWER/TTL) - 指定解析器对比:
dig @8.8.8.8 example.com(对比公司 DNS) - 看 CNAME 跳转:
dig +trace example.com(更深入)
4) HTTP:状态码只是表象,关键在“谁在说 502?”
HTTP 排障的一条核心思路:
- 2xx:业务成功(但可能慢)
- 4xx:请求问题(鉴权/参数/路由)
- 5xx:服务端问题(应用/依赖/反代)
最关键:当你看到 502/504,先问一句:是 Nginx/网关返回的,还是应用返回的?这是两条完全不同的排障路。
5) TLS:证书不是“文件”,是“信任链 + 时间 + 域名匹配”
TLS 握手失败的常见原因其实很“工程化”:
- 证书链不完整(缺中间证书)
- 域名不匹配(SNI/证书 SAN 不包含域名)
- 时间不正确(机器时间漂移导致证书“未生效/已过期”)
- 协议/套件不兼容(老客户端/老服务器)
图 3:TLS + HTTP 请求生命周期(动态)
一条请求里通常包含三段“握手”:DNS(找地址)→ TCP(建连接)→ TLS(建信任)→ HTTP(传业务)。
TLS/HTTP 排障的最短命令
- 看 TLS 握手与证书:
openssl s_client -connect host:443 -servername host - 看 HTTP 细节:
curl -v https://host/path(含 SNI/重定向/证书信息) - 从客户端侧抓证据:
tcpdump -i eth0 host <ip> and port 443
6) 抓包:你不是在“抓数据”,你是在“抓证据”
抓包的核心是:你要先知道自己想证明什么。常见目标:
- 握手是否完成(SYN/SYN-ACK/ACK)
- TLS 是否协商成功(ClientHello / ServerHello)
- HTTP 是否有返回(状态码、响应时间)
优先在离问题最近的地方抓:客户端、反代、后端服务节点。三点抓包往往能把链路问题定位到“哪一段”。
本章小结:把网络从“恐怖片”变成“侦探片”
- 分层排障:DNS → TCP → TLS → HTTP → 应用。
- 502/504:先确认是谁返回的(反代 vs 应用)。
- TLS:信任链 + 域名匹配 + 时间,是三大常见坑。
- 抓包:抓的是证据,不是数据。先明确要证明的问题。