网络故障诊断
优质
小牛编辑
136浏览
2023-12-01
常见网络故障
我们在开发或者网络管理中,经常碰到各种各样的网络故障。掌握处理常见的网络故障,就成为了网络运维工程师和开发工程师的基础技能。
常见以下两个故障:
- 服务器无法登录了
- 服务访问不了
这两个故障背后的原因有很多种,列举如下:
- 服务器无法登录
- 你的电脑断网了
- 服务器关闭了
- 服务器没关闭,但是访问端口关闭了(例如关闭了远程桌面的3389端口或者ssh的22端口)
- 服务器没关闭,访问端口也没关闭(以ssh为例),但是却登录不了(权限问题)
- 服务访问不了
- 你的电脑断网了
- 服务停了
- 服务没停,但是代理服务的网关停了(例如SpringBoot服务还在,但是nginx停了)
- 服务没停,代理服务的网关也没停,但是网关配置错误
- 服务没停,代理服务的网关也没停,网关配置也没错,服务端口无法访问
- 服务没停,代理服务的网关也没停,网关配置也没错,服务端口可以访问,但是服务设置了只允许特定的ip访问
诊断工具
ping
ping www.baidu.com
telnet
telnet www.baidu.com 443
traceroute
traceroute
ipconfig/ifconfig
# *nix下,查看接口情况
ifconfig
ifconfig -a
# windows下,查看接口情况
ipconfig
ipconfig /all
arp
# linux查看ARP表
arp
# mac查看arp表
arp -a
# windows查看arp表
arp -a
route
# linux查看路由表
route
# mac查看路由表
netstat -nr
# windows查看路由表
route print
netstat/lsof
# *nix查看1080端口号是否监听状态
netstat -lant|grep 1080|grep LISTEN
lsof -iTCP:1080
# windows查看端口号是否监听状态
netstat -ano|findstr 1080
iptables
## 只在linux下有
# 查看防火墙配置
iptables -L
# 关闭防火墙
iptables -F
ps
# *nix查看所有的java进程
ps -ef|grep java
# windows查看所有的java进程
query process|findstr java
lynx
# *nix在终端下访问web
lynx https://haomo-tech.com
诊断步骤
- 服务器无法登录(以ssh为例)
- 1 查看ssh登录的反馈结果。根据ssh登录的输出,判断是权限问题,还是ssh服务端口关闭。
- 如果是ssh端口无法访问,那么只能进入云服务器的控制台、或者机房管理平台远程查看服务器状态。如果服务器开机状态,那么需要进入开启ssh服务;如果服务器关机状态,那么开启服务器;
- 如果是ssh权限问题,可以用其他用户权限调整自己的登录密码或者密钥;如果没有其他用户,那么只能进入云服务器的控制台、或者机房管理平台远程登录服务器(通常是console),调整ssh用户密码或者添加公钥;
- 1 查看ssh登录的反馈结果。根据ssh登录的输出,判断是权限问题,还是ssh服务端口关闭。
- 服务访问不了
- 1 查看服务是否已经启动了;
- 如果服务已经启动:那么进入步骤2
- 如果服务未启动:启动服务,如果可以访问,那么就成功了;如果还不能访问,进入步骤2
- 2 从网关所在的服务器访问服务:例如,使用lynx命令访问web服务
- 如果lynx可以访问服务:那么是网关的问题(以nginx为例),进入步骤3;
- 如果lynx不可以访问服务:那么采用telnet命令,确保网关服务器能够访问到服务所在的端口;
- 如果无法telnet端口号:可能是路由不通(ping不通),也可能是端口屏蔽。
- 路由不通:找网管。路由知识对开发人员而言是一个难点,但是对网络运维人员而言,是一个基础要求。
- 端口屏蔽:查看系统防火墙。linux的防火墙为iptables(配置很复杂,这里不展开):万能命令 iptables -F(防火墙全部关闭)(只能用在开发测试环境,不能用在生产环境)。
- 如果可以telnet端口号,lynx依然无法访问服务
- 大概率是服务本身有日志错误。需要查看服务的日志才能进一步诊断服务除了什么错。这个超出了网络诊断的范畴,这里不展开讲。
- 小概率是服务配置只允许特定ip访问。可以通过在服务所在服务器上访问服务验证(如果服务所在服务器上用lynx命令可以访问,那么大概率就是只允许特定ip访问了)
- 如果无法telnet端口号:可能是路由不通(ping不通),也可能是端口屏蔽。
- 3 检查nginx的配置。通常是proxy_pass配置路径配置有问题。可以在error_log后加debug功能查看,便可以解决问题。
- 1 查看服务是否已经启动了;
FAQ
ping不通ip,是不是服务器down了?
telnet不了端口号,是不是服务没有起来?
参考
- 《CCNA学习指南(第七版)》