从排错思维到实战工具
面向工程实践的系统与网络小册:给你一套自洽的排错方法论、常用命令速查和可落地的优化清单。适用于日常开发、上线运维与应急排障。
01. 排错思维与方法论
- 明确边界:应用 vs 系统 vs 网络 vs 外部依赖(DNS/CDN/第三方)。
- 二分定位:由近及远(本机 → 网关 → 目标)逐跳验证;由简到繁(直连 → 代理 → 负载均衡)。
- 控制变量:一次只改一个变量;记录时间点与变更项,便于回溯。
- 复现优先:抓准“稳定复现姿势”;能脚本化就脚本化。
- 数据为王:日志、抓包、指标三同步(Log/PCAP/Metrics)。
小剧本(通用版):
- 先问三件事:什么时候开始、影响范围、最近变更。
- 能否本机复现;不能则尝试同网段/同机房对比。
- 收集“最短证据链”:命令输出 + 抓包 + 日志片段。
- 快速回滚 vs 精准修复:按业务影响做决策。
02. 必知必会的网络基石
- OSI & TCP/IP:七层观念用于定位;实践中最常碰到 L3/L4/L7。
- 三次握手/四次挥手:TIME_WAIT/CLOSE_WAIT 不是“错误”,而是信号。
- MTU/MSS/分片:PMTUD 失败会导致“可 ping 不可用(黑洞)”。
- DNS & TTL:缓存层级多(系统/浏览器/中间层/权威);刷新策略要知道。
- 端口与临时端口:客户端会用临时端口;防火墙策略需兼顾返回流量。
常见状态释义:
- TIME_WAIT:主动关闭方;高并发短连接常见,关注端口耗尽/内存压力。
- CLOSE_WAIT:对端关闭我方未关闭;多为应用未及时
close()。
03. 必备工具速查(Linux/Windows 通吃)
网络连通与路径:
# Linux
ping -c 4 example.com
traceroute example.com # 或 mtr -rw example.com(更实用)
ss -lntp # 监听中的 TCP 端口与进程
curl -v http://ip:port/healthz
# Windows PowerShell
Test-NetConnection example.com -Port 443 -InformationLevel Detailed
tracert example.com
Get-NetTCPConnection -State Listen
DNS 诊断:
# Linux
dig example.com +trace +dnssec
dig www.example.com @8.8.8.8
resolvectl query example.com # systemd-resolved 环境
# Windows PowerShell
Resolve-DnsName example.com -Server 8.8.8.8 -DnsOnly -Type A
TLS/证书:
openssl s_client -connect example.com:443 -servername example.com -showcerts
openssl x509 -noout -dates -issuer -subject -in cert.pem
抓包定位:
# 仅抓 TCP 443 的三次握手与 TLS ClientHello
tcpdump -i any '(tcp port 443) and (tcp[tcpflags] & (tcp-syn|tcp-ack) != 0)' -w tls_handshake.pcap
# Windows 可用 Wireshark/Npcap GUI 或 tshark CLI
tshark -i 1 -f "tcp port 443" -w capture.pcapng
端口与服务:
# 端口扫描(谨慎、合规使用)
nmap -sS -Pn -p 1-1024 example.com
# 观察文件描述符/监听端口占用
lsof -i :8080
04. 常见场景排错剧本
- 端口不通(连接超时)
- 本机监听?
ss -lntp/Get-NetTCPConnection -State Listen - 本机防火墙?
iptables/nftables或netsh advfirewall show allprofiles。 - 网关/安全组?逐跳 traceroute,核对云厂商安全策略。
- 目标主机应用存活?
systemctl status、应用日志、端口 backlog。
- 端口被拒(Connection refused)
- 通路已通,目标未监听/已崩溃/权限不足;核对监听地址(0.0.0.0 vs 127.0.0.1)。
- DNS 异常
- 公网与内网解析是否一致;是否命中陈旧缓存;权威记录是否正确同步。
- 用
dig +trace看权威链路;多地 DNS 对比确认污染/劫持。
- HTTPS/TLS 失败
- SNI 是否正确;中间证书是否完整;时间是否偏差;弱算法被禁用。
openssl s_client/curl -vk --tlsv1.2 --http1.1逐项验证。
- 速度慢/间歇性丢包
mtr观察丢包位置是否稳定;是否上游限速/拥塞;- 服务器侧
sar -n DEV、ethtool、ifconfig看错误计数(CRC、dropped)。 - 调整 MTU/MSS(典型:隧道/云厂商 VPC 需要 MSS clamping)。
- 跨地域延迟大
- 物理限制 + BGP 路由选择;可考虑就近接入/智能调度/CDN/Anycast。
05. Linux 网络配置与优化
路由与策略:
ip addr; ip route; ip rule list
ip route get 1.1.1.1 # 实际出接口与下一跳
防火墙:
# firewalld
firewall-cmd --list-all
firewall-cmd --add-port=8080/tcp --permanent && firewall-cmd --reload
# nftables 简例
nft list ruleset
内核参数(谨慎、渐进调优):
cat <<EOF | sudo tee /etc/sysctl.d/99-net-tuning.conf
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
EOF
sudo sysctl --system
拥塞控制与队列:
sysctl net.ipv4.tcp_congestion_control
# 启用 BBR(视内核版本与场景)
echo bbr | sudo tee /proc/sys/net/ipv4/tcp_congestion_control
06. Windows 与 WSL 网络要点
- 防火墙:
netsh advfirewall show allprofiles
New-NetFirewallRule -DisplayName "Open 8080" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8080
- DNS:
Resolve-DnsName example.com -Server 1.1.1.1 -DnsOnly -Type A
- WSL:NAT 模式下 Windows 与 WSL 间端口转发需额外设置;版本升级可能改虚拟交换机 IP,留意
vEthernet (WSL)网卡变更。
07. SSH 与隧道技巧
SSH 多跳与复用:
Host bastion
HostName bastion.example.com
User ops
IdentityFile ~/.ssh/id_ed25519
Host target
HostName target.internal
ProxyJump bastion
User app
ControlMaster auto
ControlPersist 5m
端口转发:
# 本地转发:访问本机 8080 实际到远端 127.0.0.1:8000
ssh -L 127.0.0.1:8080:127.0.0.1:8000 user@remote
# 动态转发(SOCKS5 代理)
ssh -D 1080 user@bastion
08. 容器与网络命名空间
Docker 常用:
docker network ls
docker network inspect bridge
docker run --rm --net=host nicolaka/netshoot:latest ss -lntp
命名空间快测:
ip netns add testns
ip netns exec testns bash -lc 'ip link; ip addr; ping -c1 1.1.1.1'
ip netns del testns
09. 监控与可观测性
- 基线指标:吞吐、RT、丢包、重传、队列、FD、CPU/内存/磁盘/IOPS。
- eBPF 工具(生产谨慎使用):
bcc/bpftrace一次性定位热点与异常系统调用。 - 日志三段式:入口(LB/边缘)→ 应用 → 出口(网关/防火墙)。
10. 安全与合规清单(精简版)
- 最小权限:服务运行用户、仅绑定必要地址/端口、文件权限最小化。
- TLS 基线:禁用过时协议/套件;证书与中间证书完整;OCSP/CRL 可访问。
- SSH:禁用密码登录、启用
PubkeyAuthentication、限制AllowUsers。 - 暴露面:关闭无用服务;入口统一到网关/边缘;速率限制与黑白名单。
- 日志与告警:敏感操作与失败尝试必须有日志;可观测性基线覆盖网络层。
附录 A. 常用命令速查块
tcpdump 过滤:
tcpdump -i any 'host 10.0.0.1 and tcp port 443'
tcpdump -i any 'icmp or (tcp[tcpflags] & tcp-syn != 0)'
curl 调试:
curl -vk --http1.1 https://example.com/
curl -vk --resolve example.com:443:1.2.3.4 https://example.com/
curl -vk --connect-to ::1.2.3.4:443 https://example.com/
OpenSSL 链路核验:
openssl s_client -connect example.com:443 -servername example.com -verify_return_error < /dev/null
系统资源上限:
ulimit -n # 文件描述符
sysctl fs.file-max
Windows 端口/连接:
Get-NetTCPConnection | Group-Object -Property State | Sort-Object Count -Descending
附录 B. systemd 服务(加固示例)
[Service]
User=app
Group=app
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
RestrictSUIDSGID=true
LockPersonality=true
AmbientCapabilities=
CapabilityBoundingSet=
结语
系统与网络问题的本质是“可观测 + 方法论”。先用对工具拿到对的证据,再做最小变更验证。把本文的命令与清单沉淀成自己的“现场手册”,效率会有质的提升。
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果