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/20192.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)

  • SpeedDuplex 显示接口的连接速度和双工模式
  • 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-QSend-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"

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐