flowchart TB
subgraph S1["应用层:说什么"]
A["HTTP / DNS / TLS / WebSocket"]
end
subgraph S2["传输层:端到端是否可靠"]
T["TCP(可靠有序) / UDP(低延迟)"]
end
subgraph S3["网络层:走哪条路"]
N["IP 寻址 + 路由 + ICMP"]
end
subgraph S4["链路层:这一跳怎么传"]
L["以太网 / WiFi / ARP"]
end
A --> T --> N --> L
sequenceDiagram
participant C as 客户端
participant S as 服务端
C->>S: SYN(进入连接请求队列)
S->>C: SYN+ACK
C->>S: ACK(连接建立,进入 ESTABLISHED)
Note over C,S: 数据传输(滑动窗口 + 确认号)
C->>S: FIN
S->>C: ACK
S->>C: FIN
C->>S: ACK(主动关闭方进入 TIME_WAIT,持续 2MSL)
flowchart LR
A["应用发起 connect()"] --> B["DNS 解析域名"]
B --> C["查路由表选出口"]
C --> D{"同网段?"}
D -->|"是"| E["ARP 找 MAC 直接发"]
D -->|"否"| F["发给默认网关逐跳转发"]
F --> G["NAT 改写源地址 / 出公网"]
G --> H["对端回包沿原路返回"]
五、DNS:解析链与真实生效时间
sequenceDiagram
participant B as 浏览器/系统
participant R as 递归解析器
participant root as 根域名服务器
participant tld as 顶级域服务器
participant au as 权威服务器
B->>R: 查询 example.com
R->>root: 谁管 .com
root-->>R: 指向 .com 顶级域
R->>tld: 谁管 example.com
tld-->>R: 指向权威 NS
R->>au: 要 A 记录
au-->>R: 返回 IP(带 TTL)
R-->>B: 结果并缓存
处置:VPN/容器网络出现「握手成功但数据不通」,先把 MSS clamp 到 1360–1400 验证是否是 MTU 问题。
七、排查工具链:按层选择
症状
命令
看什么
域名解析对不对
dig example.com +noall +answer
返回 IP 与 TTL 是否符合预期
网络层是否可达
ping -c 5 host
丢包率与 RTT 稳定性(不是快慢)
卡在哪一跳
traceroute -T -p 443 host
用 TCP 探测,避免 ICMP 被限速误判
端口是否监听
ss -lntp / telnet host 6379
LISTEN 地址是否 0.0.0.0 而非 127.0.0.1
连接状态堆积
ss -s、ss -ant state time-wait
TIME_WAIT/CLOSE_WAIT 数量含义见 2.1
完整 HTTP 过程
curl -v -w '%{time_total}\n'
DNS/连接/TLS/首字节各段耗时
抓包定责
tcpdump -i any -nn port 443
有无 SYN、有无 RST、是否重传
flowchart TD
A["用户报「打不开」"] --> B{"dig 能解析?"}
B -->|"否"| B1["检查 DNS 配置/hosts/权威 NS"]
B -->|"是"| C{"ping 通?"}
C -->|"否"| C1["检查路由、安全组、ICMP 是否被禁"]
C -->|"是"| D{"端口能连?"}
D -->|"否"| D1["检查服务监听地址、防火墙、负载均衡后端"]
D -->|"是"| E["看应用日志与 curl -v 分段耗时"]