Debian 进程网络连接排查手册
一、快速定位目标进程与连接
ps -ef | grep <进程名> 或 pidof <进程名>。ss -lptun | grep <PID>lsof -Pan -p <PID> -iTCP -sTCP:ESTABLISHEDss -lntp | column -t 或 netstat -tulpen | column -t(若未安装,执行 apt-get install -y iproute2 lsof net-tools)。nsenter 或容器内的 ss/lsof)。二、从系统到进程的四步连通性验证
ip addr show 或 ifconfig -aip link set <iface> upip route show 或 route -nip route add default via <网关IP> dev <iface>ping -c 4 8.8.8.8(ICMP 可能被禁,不代表业务端口不可用)ping -c 4 www.example.com(若失败,多为 DNS 问题)cat /etc/resolv.conf;必要时临时写入 nameserver 8.8.8.8 测试(注意某些系统会动态覆盖该文件,需做持久化)。nc -vz <IP> <端口> 或 telnet <IP> <端口>traceroute <IP>(Debian 上可能需要 apt-get install -y traceroute)。三、定位“卡在哪儿”的关键工具
tcpdump -ni any -s0 -w /tmp/app.pcap 'tcp port <端口>'ss -lptun | grep <PID> 获取 源IP:源端口,然后在 tcpdump 中过滤 src host <源IP> and src port <源端口>tcpdump -ni <iface> -s0 'tcp port <端口>'ifconfig <iface> 或 ip -s link show <iface>(关注 errors/dropped)ethtool <iface>(关注 Speed/Duplex/Auto-negotiation)ip route get <目标IP> from <源IP>ip neigh showsudo ufw status(UFW)或 sudo iptables -S(iptables)四、常见症状与对应处理
| 症状 | 快速判断 | 处理要点 |
|---|---|---|
| 进程端口未监听 | `ss -lntp | grep <端口>` 无输出 |
| 能 ping 通网关与 8.8.8.8,域名访问失败 | nslookup/dig 失败 |
修正 /etc/resolv.conf 的 nameserver;检查 resolvconf/NetworkManager 是否覆盖;做 DNS 连通性测试 |
| 连接超时或拒绝 | nc/telnet 到目标 IP:端口 失败 |
服务端进程/端口是否存活;本机/对端 iptables 与云安全组是否放行;抓包确认是否发出 SYN 以及是否收到 SYN-ACK/RST |
| 偶发丢包/高延迟 | ifconfig/ip -s link 显示 dropped/errors |
检查 双工/速率 协商、网线/交换机端口、链路质量;必要时更换网线/端口或固定速率 |
| 本机监听正常但外部访问不了 | ss -lntp 可见监听,外部不通 |
云主机安全组/本机防火墙未放行;服务仅绑定 127.0.0.1;路由/NAT/端口转发配置问题 |
| 应用报 UnknownHostException | 域名解析失败 | 更换 DNS、检查 /etc/resolv.conf 是否被覆盖、验证域名拼写与 DNS 记录 |
| 应用报 ConnectException/超时 | 连接被拒绝或长时间无响应 | 用 nc/telnet 复现;检查目标进程与端口、对端防火墙、网络路径(traceroute)、必要时抓包分析握手过程 |
| 以上症状与处理要点可结合系统命令与日志快速验证与修复,涉及 DNS、路由、防火墙、抓包 等关键环节。 |
五、网络配置与服务状态核查
sudo systemctl status NetworkManager(或 networking)sudo systemctl start NetworkManager && sudo systemctl enable NetworkManagerip addr showip link set <iface> upsudo dhclient <iface>ip route showip route add default via <网关IP> dev <iface>cat /etc/resolv.confecho "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf(注意持久化方式)journalctl -u NetworkManager -b 或 tail -f /var/log/syslogdmesg | grep -i <iface>。