面向工程实践的系统与网络小册:给你一套自洽的排错方法论、常用命令速查和可落地的优化清单。适用于日常开发、上线运维与应急排障。


01. 排错思维与方法论

  • 明确边界:应用 vs 系统 vs 网络 vs 外部依赖(DNS/CDN/第三方)。
  • 二分定位:由近及远(本机 → 网关 → 目标)逐跳验证;由简到繁(直连 → 代理 → 负载均衡)。
  • 控制变量:一次只改一个变量;记录时间点与变更项,便于回溯。
  • 复现优先:抓准“稳定复现姿势”;能脚本化就脚本化。
  • 数据为王:日志、抓包、指标三同步(Log/PCAP/Metrics)。

小剧本(通用版):

  1. 先问三件事:什么时候开始、影响范围、最近变更。
  2. 能否本机复现;不能则尝试同网段/同机房对比。
  3. 收集“最短证据链”:命令输出 + 抓包 + 日志片段。
  4. 快速回滚 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. 常见场景排错剧本

  1. 端口不通(连接超时)
  • 本机监听?ss -lntp/Get-NetTCPConnection -State Listen
  • 本机防火墙?iptables/nftablesnetsh advfirewall show allprofiles
  • 网关/安全组?逐跳 traceroute,核对云厂商安全策略。
  • 目标主机应用存活?systemctl status、应用日志、端口 backlog。
  1. 端口被拒(Connection refused)
  • 通路已通,目标未监听/已崩溃/权限不足;核对监听地址(0.0.0.0 vs 127.0.0.1)。
  1. DNS 异常
  • 公网与内网解析是否一致;是否命中陈旧缓存;权威记录是否正确同步。
  • dig +trace 看权威链路;多地 DNS 对比确认污染/劫持。
  1. HTTPS/TLS 失败
  • SNI 是否正确;中间证书是否完整;时间是否偏差;弱算法被禁用。
  • openssl s_client / curl -vk --tlsv1.2 --http1.1 逐项验证。
  1. 速度慢/间歇性丢包
  • mtr 观察丢包位置是否稳定;是否上游限速/拥塞;
  • 服务器侧 sar -n DEVethtoolifconfig 看错误计数(CRC、dropped)。
  • 调整 MTU/MSS(典型:隧道/云厂商 VPC 需要 MSS clamping)。
  1. 跨地域延迟大
  • 物理限制 + 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=

结语

系统与网络问题的本质是“可观测 + 方法论”。先用对工具拿到对的证据,再做最小变更验证。把本文的命令与清单沉淀成自己的“现场手册”,效率会有质的提升。