网络故障诊断

优质
小牛编辑
142浏览
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 查看服务是否已经启动了;
      • 如果服务已经启动:那么进入步骤2
      • 如果服务未启动:启动服务,如果可以访问,那么就成功了;如果还不能访问,进入步骤2
    • 2 从网关所在的服务器访问服务:例如,使用lynx命令访问web服务
      • 如果lynx可以访问服务:那么是网关的问题(以nginx为例),进入步骤3;
      • 如果lynx不可以访问服务:那么采用telnet命令,确保网关服务器能够访问到服务所在的端口;
        • 如果无法telnet端口号:可能是路由不通(ping不通),也可能是端口屏蔽。
          • 路由不通:找网管。路由知识对开发人员而言是一个难点,但是对网络运维人员而言,是一个基础要求。
          • 端口屏蔽:查看系统防火墙。linux的防火墙为iptables(配置很复杂,这里不展开):万能命令 iptables -F(防火墙全部关闭)(只能用在开发测试环境,不能用在生产环境)。
        • 如果可以telnet端口号,lynx依然无法访问服务
          • 大概率是服务本身有日志错误。需要查看服务的日志才能进一步诊断服务除了什么错。这个超出了网络诊断的范畴,这里不展开讲。
          • 小概率是服务配置只允许特定ip访问。可以通过在服务所在服务器上访问服务验证(如果服务所在服务器上用lynx命令可以访问,那么大概率就是只允许特定ip访问了)
    • 3 检查nginx的配置。通常是proxy_pass配置路径配置有问题。可以在error_log后加debug功能查看,便可以解决问题。

FAQ

ping不通ip,是不是服务器down了?

telnet不了端口号,是不是服务没有起来?

参考

  • 《CCNA学习指南(第七版)》