【Linux服务器】网络问题排查思路总结
Linux云服务器网络问题排查思路
1. 总结
常见问题
- 无法连接到网络(例如无法访问互联网或内网)
- 网络速度异常(如延迟、丢包、低带宽等)
- 特定服务或端口无法访问
排查网络问题思路
2. 问题与排查思路
2.1 检查网络接口
通过IP a 命令判断Ipv4地址以及接口是否正常工作(UP标识是否存在)
ip a 命令检查网络接口状态
- 检查网络接口是否正常工作,查看UP是否有标识
- 检查IP地址分配情况,检查Ipv4地址
1:lo参数解释
- Lo表示回环接口(Loopback Interface),主要用于设备内部与自身通信,Ipv4地址为127.0.0.1,Ipv6地址为::1
2:ehto(物理网卡)以太网接口参数解释
- 第一行
BROADCAST
表示该接口支持广播功能MULTICAST
表示该接口支持多播功能UP
表示接口已启用,正在运行(核心查询内容)LOWER_UP
表示物理连接已经建立(网络接口已连接到物理网络)mtu 1500
:表示接口的最大传输单元(Maximum Transmission Unit)为 1500 字节qdisc fq_codel
:表示流量调度队列(Queue Discipline)使用了fq_codel
算法,这是一种防止队列阻塞的算法
- 网络地址相关
inet 192.168.8.66/20
:192.168.8.66
是该接口的 IPv4 地址(核心查询内容)brd 192.168.15.255
:这是广播地址,通常用于向子网中的所有主机发送广播信息fe80::f816:3eff:feed:4d87/64
是一个IPv6 地址,以fe80::
开头表示这是链路本地地址,只在本地网络范围内有效link/ether fa:16:3e:ed:4d:87
:这是该网络接口的 MAC 地址(物理地址),它唯一标识了该接口
检查链接的硬件设备(ethtool)
Speed
和Duplex
显示接口的连接速度和双工模式Link detected: yes
表示接口有物理连接Supports auto-negotiation: Yes
表示接口支持自动协商网络速度和双工模式- Linux云服务器无法查询,此方法留作本地服务器进行检查
2.2 测试网络连接性
通过traceroute快速判断网络是否可以到达目标路由(当开始判断网络问题的时候一定是直接挂的),然后根据上述判断的信息,使用ping命令进一步细化问题
ping测试,主要目标就是测试是否可以与本地和远程机器进行通信
- 测试本地回环地127.0.0.1(计算机自身的网络接口),验证网络协议栈是否正常
- 如果没有回应,那么进一步考虑网络协议栈和防火墙的问题,Linux云服务器则需要进一步考虑安全规则的设定
- 测试本地网络和网关是否想通
- 测试远程服务器
traceroute 跟踪数据包到达目标服务器的路径
2.3 云服务器安全规则检查
从云服务器访问外部资源一般情况下安全组都是完全开放的,当使用浏览器无法与云服务器进行通信的时候,这个是否就要检查安全组是否放开了该端口,与此同时还有检查该端口在云服务器中是否开启了监听
2.4 检查当前网络服务
如果当前网络服务有问题,那么直接重启服务,然后进行二次检查
2.5 分析DNS
如果无法访问特定网址,但是其他网址可以正常访问时,考虑DNS问题。通过dig工具测试出DNS问题后,可以通过修改配置文件或者使用默认DNS解决该问题
需要分析DNS场景
- 无法通过域名访问网站,可能是 DNS 解析失败
- 访问某些网站失败,可能是 DNS 服务器无法解析某些域名
- 网页加载慢,可能是 DNS 响应时间过长
- 无法解析特定内网域名,可能是 DNS 配置不完整、
使用dig进行排查
2.6 分析进程和端口
场景分析
- 浏览器无法访问服务器的服务时,需要判断进程是否被其他进程所占用
- 如果出现了多个服务监听同一个端口也会导致服务无法使用,此时需要注意关闭某个进程
- 服务器出现网络带宽或者CPU使用率过高的时候,需要检查哪些进程占用了监听端口从而造成的资源浪费
ss工具
参数
- State: 显示套接字的状态(
LISTEN
表示监听状态) - Recv-Q 和 Send-Q: 显示接收队列和发送队列的大小
- Local Address:Port: 显示本地地址和端口
- Peer Address:Port: 显示远程地址和端口(此列在监听状态下为空)
查看某个特定的端口
常用参数总结
- -t:显示TCP连接
- -u:显示UDP连接
- -p:显示每个端口的进程信息
-a
: 显示所有的套接字(包括监听和非监听的连接)-n
: 显示数字格式的地址和端口,不会尝试解析主机名-p
: 显示进程信息,包含 PID 和进程名称-r
: 尝试解析并显示域名(反向解析 IP 地址)-s
: 显示网络统计信息(类似netstat -s
)-o
: 显示有关超时的统计信息
#!/bin/bash
# 1. 查找系统中所有占用 8080 端口的进程
echo "查找占用 8080 端口的进程:"
ss -tuln | grep :8080
echo "------------------------"
# 2. 查看某个特定进程(例如 nginx)占用的端口
echo "查看占用端口的 nginx 进程:"
ss -tuln | grep nginx
echo "------------------------"
# 3. 查找所有 TCP 连接
echo "查看所有 TCP 连接:"
ss -tuln | grep tcp
echo "------------------------"
# 4. 查找处于 TIME_WAIT 状态的连接
echo "查看处于 TIME_WAIT 状态的连接:"
ss -tuln | grep TIME_WAIT
echo "------------------------"
# 5. 查看所有正在监听的端口及其对应的进程
echo "查看所有监听端口及其进程:"
ss -tulnp
echo "------------------------"
# 6. 查找占用 80 端口的进程(例如 Web 服务器)
echo "查找占用 80 端口的进程:"
ss -tuln | grep :80
echo "------------------------"
# 7. 查看所有 UDP 连接
echo "查看所有 UDP 连接:"
ss -uln
echo "------------------------"
# 8. 查找所有已建立的 TCP 连接(ESTABLISHED 状态)
echo "查看所有已建立的 TCP 连接:"
ss -tn | grep ESTABLISHED
echo "------------------------"
# 9. 查找某个特定 IP 的连接(例如,查看连接到 192.168.1.1 的所有连接)
echo "查看所有连接到 192.168.1.1 的连接:"
ss -tuln | grep 192.168.1.1
echo "------------------------"
netstat工具(略)
3. 网络流量抓包
通过抓包获取网络流量,分析具体的流量数据包,查看是否有错误、丢包或者被拒绝的请求,同时还可以分析HTTP请求是否到达服务器
3.1 tcpdump
核心功能
- 捕获网络数据包:监控网络接口,并捕获通过它们的所有数据包
- 过滤特定的流量:通过设置过滤条件,捕捉特定的网络流量,例如可以设置只捕捉HTTP请求等
- 分析协议和数据内容:可以看到各层协议比较详细的内容
- 诊断网络问题:识别网络连接的问题
- 理解:类似于通过电子交通系统分析出来道路中哪些路口的车流量拥堵了,从而诊断该条网络道路是否有问题
丢包问题
场景:网络不稳定的时候,数据包在传输过程中没有到达目的地
3.2 使用思路
保存抓包文件然后图形化界面分析
按照指定条件过滤
按照协议过滤:你可以指定只捕获 HTTP 协议的数据包
sudo tcpdump -i eth0 port 80
按 IP 地址过滤:如果你只关心某个特定 IP 地址的流量
sudo tcpdump -i eth0 host 192.168.1.10
按端口过滤:如果你只关心某个端口的数据包
sudo tcpdump -i eth0 port 443
与grep结合使用
sudo tcpdump -i eth0 -nn -v | grep "192.168.1.10"
更多推荐
所有评论(0)