一、排障前先准备常用工具¶
原始笔记里建议先安装下面这些工具:
yum install -y net-tools lsof nethogs iftop telnet nc nmap
它们分别覆盖的方向大致如下:
ss/netstat:看端口和连接lsof:看端口对应的进程telnet/nc:测试端口能否连通nmap:扫描端口iftop/nethogs:看流量dig/host/nslookup:看 DNStraceroute:看路径
二、先确认本机 IP、网关和路由¶
很多网络问题,一上来就查服务端口,其实容易走偏。先看本机地址和路由更稳。
ip a
ifconfig
ip ro
route -n
重点关注:
- IP 是否正确
- 掩码是否正确
- 默认网关是否存在
- 路由是否走对出口
三、检查端口是否真的在监听¶
3.1 推荐先用 ss¶
ss -lntup | grep 22
ss -lntu
参数含义:
-l:只看监听端口-n:数字形式显示地址和端口-t:只看 TCP-u:只看 UDP-p:显示进程信息
3.2 也可以用 netstat¶
netstat -lntup | grep -w 22
3.3 用 lsof 反查进程更直接¶
lsof -i :22
lsof -ni :22
lsof -nPi :22
如果要排查“22 端口到底是不是 sshd 在监听”,lsof -nPi :22 非常直观。
四、检查端口是否能从外部访问¶
服务监听不代表外部一定能访问,可能还有防火墙、ACL、云安全组或链路问题。
4.1 telnet¶
telnet 10.0.0.200 22
4.2 nc¶
nc -v 10.0.0.200 22
4.3 nmap¶
nmap -p22 10.0.0.200
nmap -p1-1024 10.0.0.200
nmap -p22 10.0.0.0/24 jd.com taobao.com
当你不在目标服务器本机,而是站在客户端侧排查时,这组命令尤其好用。
五、检查 TCP 连接状态和并发¶
5.1 查看当前 TCP 连接¶
ss -ant
netstat -ant
常见状态解释:
LISTEN:服务在监听ESTABLISHED:连接已建立TIME_WAIT:连接刚关闭,等待回收CLOSE_WAIT:对端已关,本端未彻底释放
5.2 统计并发连接¶
原始笔记给出了一个很实用的思路:统计某个端口处于 ESTABLISHED 状态的连接数量。
ss -ant | awk 'NR>1 && $4~/:80$/ {print $1}' | sort | uniq -c
如果要做压力测试,也可以配合 ab 使用:
ab -n 90000000 -c 3 http://192.168.1.20/
实际工作里,你未必会真的发这么多请求,但这类命令能帮助你快速理解“并发数”和“当前连接状态”之间的关系。
六、检查网络带宽和流量来源¶
6.1 看网卡总体流量¶
iftop -nNP -i eth0
参数含义:
-n:不解析主机名-N:不解析端口对应的服务名-P:显示端口信息-i eth0:指定网卡
它会显示 2s、10s、40s 的流量平均值,适合观察当前带宽是否被打满。
6.2 看进程级流量¶
nethogs eth0
如果想知道“到底是谁在吃带宽”,可以按照笔记里的思路组合使用:
1、iftop 找出高流量端口
2、ss 找出端口对应的 PID
3、ps 根据 PID 找出具体进程
七、DNS 解析排障¶
7.1 dig¶
dig baidu.com
dig +trace baidu.com
dig -x 8.8.8.8
7.2 host¶
host baidu.com
7.3 nslookup¶
nslookup baidu.com
如果域名不通但公网 IP 通,可以优先怀疑:
- DNS 配置错了
/etc/resolv.conf被覆盖了- 网卡配置里的
DNS1/DNS2不正确
八、追踪链路是否通畅¶
8.1 Windows 侧用 tracert¶
tracert -d www.baidu.com
常见参数:
-d:不做域名解析,只显示 IP-h:指定最大跃点数-w:设置超时时间
8.2 Linux 侧用 traceroute¶
traceroute -nI www.baidu.com
常见参数:
-n:不做名称解析-I:使用 ICMP-T:使用 TCP-p:指定目标端口
当怀疑“本机能连网,但去目标站点中途绕路或卡在某一跳”时,路径追踪非常有帮助。
九、一个实用的排障顺序¶
遇到“网站打不开、端口不通、访问很慢”这类问题,可以按下面顺序排查:
1、看本机 IP、网关、路由。 2、看目标服务端口是否在监听。 3、看端口从客户端是否可访问。 4、看连接状态是不是异常堆积。 5、看带宽是否打满。 6、看 DNS 是否解析正确。 7、看路径追踪是否异常。
十、小结¶
网络命令不用一次全背下来,但至少要先熟练掌握下面这组:
sslsofncnmapiftopdigtraceroute
这几类命令组合起来,已经足够覆盖大多数 Linux 网络故障的一线排查场景。