当前位置: 首页 > news >正文

6.1 网络故障排查基础:连通性测试与抓包分析

模块一:ping、nc、telnet、tcpdump 实操知识点

1.ping(ICMP 连通性与延迟测试)

  • 原理:发送 ICMP Echo Request,等待 Echo Reply

  • 用途:Ping 是最基础、最快速的网络连通性测试工具,用于检查本机到目标主机是否可达以及网络延迟情况。

  • 关键参数:

# Linux ping -c 3 192.168.0.1 # 只发3个包,然后自动停止 ping -i 0.5 192.168.0.1 # 每 0.5 秒发一个包(默认1秒) ping -s 1500 192.168.0.1 # 发送大包(测试MTU问题) ping -W 2 192.168.0.1 # 超时 2 秒就认为失败 # Windows ping -n 3 192.168.0.1 # 发 3 个包 ping -t 192.168.0.1 # 持续ping(ctrl+c停止) ping -l 1500 192.168.0.1 # 发送大包
  • 使用场景:

1. 测试网络是否通

# 是否能上网 ping 8.8.8.8 # 测试是否能访问百度 ping www.baidu.com # 测试内网服务器(ping内网IP) ping 192.168.0.11

2. 排查网络故障的第一步

# 从近到远逐步排查 ping 127.0.0.1 # 1. 本机网卡是否正常 ping 192.168.0.1 # 2. 网关是否通 ping 192.168.0.160 # 3. 目标主机是否通 ping 8.8.8.8 # 4. 外网是否通 ping www.baidu.com # 5. DNS 解析是否正常

3. 监控网络稳定性(持续观察丢包和延迟)

# 持续 ping,观察是否有丢包 ping -c 100 192.168.0.1 # 发100个包后自动停止 # 观察延迟变化 ping 192.168.0.1 # 输出示例: # 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.523 ms # time=0.523 ms 就是延迟时间(越小越好)

4. 测试网络质量

# 检查丢包率 ping -c 100 192.168.0.160 | grep loss # 输出示例:0% packet loss(最好)、5% packet loss(有问题) # 快速 ping 测试(每秒发多个包) ping -f 192.168.0.1 # flood ping(需要 root 权限)
  • ping的结果解读

1. 关键信息:

  • time=0.523 ms:延迟时间(越小越快)

  • 0% packet loss:丢包率(0% 最好)

  • ttl=64:生存时间(Linux 通常是 64)

2. 失败的输出含义

输出含义常见原因
Destination Host Unreachable目标主机不可达网络不通、路由错误、交换机问题
Request timeout请求超时防火墙拦截、主机宕机、网络拥塞
Unknown host未知主机名DNS 解析失败、域名写错
Network is unreachable网络不可达网卡没配置、网线没插、路由表错误

2.telnet(TCP 端口连通性测试)

  • 用途:Telnet 现在基本不用来远程管理了(因为不安全,明文传输),但作为网络排查工具依然非常有用。尤其是:测试A到B的某个端口是否通畅。

  • 实例:

1. 简单用法:测试端口连通性

# 1. 测试 Web 服务是否正常 telnet 192.168.0.160 80 # 2. 测试 MySQL 数据库端口 telnet 192.168.0.160 3306 # 3. 测试 Redis 缓存 telnet 192.168.0.160 6379 # 4. 测试 HTTPS(虽然看不懂,但能连上就说明通的) telnet www.baidu.com 443

2. 进阶用法手动与文本协议交互

对于HTTP、SMTP等明文协议,可以手动模拟客户端请求

(1)测试HTTP服务

telnet 192.168.0.160 80 Trying 192.168.0.160... Connected to 192.168.0.160. GET / HTTP/1.1 Host: 192.168.0.160 # 按两次回车,会看到服务器返回的 HTTP 响应
  • GET= 请求获取资源(HTTP方法)

  • /= 网站根目录/首页像:index.html(请求路径)

  • HTTP/1.1= 协议版本为HTTP1.1版本

请求行含义
GET /index.html HTTP/1.1获取 index.html 文件
GET /api/users HTTP/1.1调用 API 接口
POST /login HTTP/1.1提交登录表单(POST 方法)
GET /images/logo.png HTTP/1.1获取图片资源

(2)测试Redis服务

telnet 192.168.0.160 6379 Trying 192.168.0.160... Connected to 192.168.0.160. PING # 会看到 +PONG 响应

(3)测试SMTP服务

telnet smtp.example.com 25 HELO test.com MAIL FROM:<test@test.com> RCPT TO:<user@example.com> DATA Subject: Test Hello . QUIT
操作快捷键
退出 Telnet 连接Ctrl + ],然后输入quit回车
断开但保留客户端Ctrl + ],然后输入close
查看帮助Ctrl + ],然后输入?
  • 结果与含义

结果表现含义下一步
Connected to xxx端口通,有服务监听服务正常,可以用对应客户端连接
Connection refused端口没开,或服务没启动启动服务,或检查端口号是否正确
卡在Trying...防火墙拦截,或主机不可达检查防火墙规则、安全组、网络路由
Connection timed out网络超时(通常也是防火墙)同上方,检查中间网络设备

3. nc(netcat,端口测试与数据传输)

  • NC 被称为"网络工具中的瑞士军刀",功能比pingtelnet强大得多。它既能做客户端,也能做服务端,支持 TCP 和 UDP。

  • 常见的应用场景

1. 测试端口连通性(代替telnet)

# 测试 TCP 端口 nc -zv 192.168.0.160 22 # -z: 只扫描不发送数据 # -v: 显示详细信息 # 输出示例: # Connection to 192.168.0.160 22 port [tcp/ssh] succeeded! # 测试 UDP 端口(telnet 做不到) nc -zvu 192.168.0.160 53 # -u: UDP 模式 # 扫描常见端口(但如果第一个端口没开放,就直接显示失败,感觉不太好用) nc -zv 192.168.0.160 20-100 # 一般就只扫描1个端口 nc -zv 192.168.0.160 80 # 不能几个一起:nc -zv 192.168.0.160 80 22 3306 # 扫描并显示开放的端口 nc -zv 192.168.0.160 1-1000 2>&1 | grep -i succeeded | connected

2. 传输文件

# 接收端(目标机器上监听) nc -l 9999 > received_file.txt # 发送端(源机器上推送) nc 192.168.0.160 9999 < send_file.txt # 传输完成后自动断开

3. 快速创建临时聊天/通信

# 机器 A:监听端口 nc -l 8888 # 机器 B:连接过去 nc 192.168.0.100 8888 # 双方输入文字,实时看到(类似聊天室)

4. 手动与各种服务交互

# HTTP 服务 echo -e "GET / HTTP/1.1\nHost: example.com\n" | nc example.com 80 # Redis 服务 echo "PING" | nc 192.168.0.160 6379 # 抓取网页标题 echo -e "GET / HTTP/1.1\nHost: baidu.com\n" | nc www.baidu.com 80 | grep -i title
  • 这是一个标准的 HTTP/1.1 请求格式:

    • GET /:请求根路径

    • HTTP/1.1:使用 HTTP 1.1 协议

    • Host: example.com:指定要访问的主机名(HTTP/1.1 必需)

    • 最后的空行表示请求头结束

6. 端口转发/代理(高级用法)

# 将本地 8080 转发到远程 80 nc -l 8080 -c "nc 192.168.0.160 80" # 访问 localhost:8080 等于访问 192.168.0.160:80
  • -l(Listen 模式)
    • 监听模式:让nc作为服务器,在本地监听指定端口
    • 等待其他客户端来连接,而不是主动连接别人
    • 相当于nc -l 8080 会在本地8080端口启动一个服务
  • -c(Command 执行)
    • 执行命令:当有客户端连接时,执行-c后面的命令

4.tcpdump(抓包分析)

  • Tcpdump 是最强大的网络抓包工具,用于抓取和分析网络数据包。当pingtelnetnc这些工具告诉你"通"或"不通",但你想知道具体发生了什么时,就用 tcpdump。
  • 常用的应用场景

1. 抓取特定主机的所有通信

# 抓取与 192.168.0.160 的所有包(我这里默认是virb0) sudo tcpdump host 192.168.0.160 # 抓取192.168.0.160 指定网卡的包 sudo tcpdump -i enss host 192.168.0.160 # 只抓源地址(从该机器发出的) sudo tcpdump -i ens33 src host 192.168.0.160 # 只抓目标地址(发往该机器的) sudo tcpdump -i ens33 dst host 192.168.0.160

2. 抓取特定端口

# 抓取 80 和 443 端口 sudo tcpdump -i ens33 port 80 or port 443 # 抓取特定范围的端口 sudo tcpdump -i ens33 portrange 20-100

3. 排查卡在Trying的问题(也是抓取特定连接的完整过程)

# 当 telnet 卡住时,抓包看发生了什么 sudo tcpdump host 192.168.0.100 and port 23 # 在另一个终端执行 telnet telnet 192.168.0.100 # 观察抓包输出: # - 有 [S.]SYN 发出,无 SYN+ACK 返回 → 防火墙丢弃 # - 有 [P.]PSH+ACK 返回 → 连接成功 # - 有 [R.]RST 返回 → 端口拒绝 # 检查防火墙是否丢包 # - tcpdump 看到包 → 网络通,问题可能在应用层 # - tcpdump 看不到包 → 中间防火墙拦截或路由问题

4. 保存到文件供后续分析

# 抓包保存到文件(方便后续用 Wireshark 分析) sudo tcpdump -i eth0 -w capture.pcap host 192.168.0.160 # 限制抓包数量(1000个包) sudo tcpdump -c 1000 -w capture.pcap # 从文件读取分析 tcpdump -r capture.pcap tcpdump -r capture.pcap host 192.168.0.160

5. 常见过滤表达式-基础过滤

# 组合条件(and/or/not) sudo tcpdump host 192.168.0.160 and port 80 sudo tcpdump port 80 or port 443 sudo tcpdump not port 22 and not port 53 # IP 范围 sudo tcpdump net 192.168.0.0/24 # 多个 IP sudo tcpdump host 192.168.0.160 or host 192.168.0.161

6. 常见过滤表达式-协议过滤

# 只抓 TCP sudo tcpdump tcp # 只抓 UDP sudo tcpdump udp # 只抓 ICMP (ping) sudo tcpdump icmp # 只抓 ARP sudo tcpdump arp

7. TCP包标志位

Flags [S] = SYN # 发起连接 Flags [.] = ACK # 确认 Flags [P] = PSH # 推送数据 Flags [F] = FIN # 关闭连接 Flags [R] = RST # 重置连接(拒绝) Flags [S.] = SYN+ACK # 响应连接 Flags [FP.] = FIN+ACK # 关闭确认

5. 组合使用 && 对比

# 完整排查流程示例 # 1. 先 ping 看通不通 ping -c 3 192.168.0.160 # 2. 用 nc 测试端口 nc -zv 192.168.0.160 8080 # 3. 如果失败,抓包看原因 sudo tcpdump -i eth0 host 192.168.0.160 and port 8080 -nn # 4. 在另一个终端重试 telnet 192.168.0.160 8080 # 5. 分析抓包结果 # - 看到 SYN 发出,无响应 → 防火墙丢弃 # - 看到 RST 返回 → 端口没开 # - 看到 SYN+ACK 返回 → 端口通,问题在应用层
工具看到什么适合场景
ping通/不通、延迟快速检查网络状态
telnet/nc端口是否开放测试服务可达性
tcpdump每个数据包的详细内容深入排查问题、分析协议

模块二:模拟端口不通、DNS 异常故障排查知识点

1. 端口不通的排查逻辑(TCP/UDP)

可能原因

  • 服务未启动

  • 防火墙(iptables/nftables/安全组/云防火墙)

  • 监听地址错误(127.0.0.1 vs 0.0.0.0)

  • 网络 ACL / 路由不通

排查步骤(逐层):

  1. 本机检查ss -tlnp/netstat -tlnp看服务是否监听正确端口

  2. 防火墙iptables -L -nfirewall-cmd --list-all

  3. 本地端口测试nc -v 127.0.0.1 <端口>

  4. 跨机测试telnet <目标IP> <端口>nc -v <目标IP> <端口>

  5. 跟踪路由traceroute -T -p <端口> <目标IP>(TCP 模式)

  6. 抓包确认

    • 客户端发 SYN 无响应 → 丢包或被防火墙 drop

    • 收到 RST → 服务未监听或被拒绝

    • 收到 ICMP Unreachable → 路由/网络问题

2. DNS 异常故障排查

典型异常表现

  • ping domainUnknown host

  • nslookup超时或 ServFail

  • 浏览器无法打开网站但 IP 能访问

排查工具与顺序

  • 核心概念:DNS 解析流程
你输入 www.baidu.com ↓ 1. 查 /etc/hosts (本地静态文件) ↓ 2. 查 /etc/resolv.conf (看用哪个DNS服务器) ↓ 3. 向DNS服务器发请求 → 得到IP (如 110.242.68.66) ↓ 4. 用IP访问目标服务器
工具作用
nslookup <域名> [DNS服务器]手动查询,可指定 DNS
dig <域名>更详细:查询类型、权威、TTL
host <域名>简洁结果
cat /etc/resolv.conf查看本机 DNS 服务器配置
ping 8.8.8.8排除基础网络不通
  • nslookup - 手动查询,可指定DNS

1. 基本用法

# 使用本机默认DNS查询 nslookup www.baidu.com # 指定DNS服务器查询(绕过本机配置) nslookup www.baidu.com 8.8.8.8 nslookup www.baidu.com 114.114.114.114

2. 输出解读

$ nslookup www.baidu.com Server: 8.8.8.8 # 使用的DNS服务器 Address: 8.8.8.8#53 # DNS端口53 Non-authoritative answer: # 非权威答案(从缓存中来的) www.baidu.com canonical name = www.a.shifen.com. # 别名 www.a.shifen.com canonical name = www.wshifen.com. Name: www.wshifen.com # 解析的IP Address: 103.235.46.102 Name: www.wshifen.com Address: 103.235.46.115

3. 一般使用场景

# 1. 查询特定类型的记录 nslookup -type=A www.baidu.com # A记录(IPv4地址) nslookup -type=AAAA www.baidu.com # AAAA记录(IPv6地址) nslookup -type=CNAME www.baidu.com # CNAME记录(别名) nslookup -type=MX baidu.com # MX记录(邮件服务器) nslookup -type=NS baidu.com # NS记录(域名服务器) # 2. 反向查询(IP查域名) nslookup 110.242.68.66 # 3. 进入交互模式 nslookup > set type=MX > baidu.com > exit
  • dig - 最详细的DNS查询工具
# 标准查询 dig www.baidu.com # 指定服务器查询 dig @8.8.8.8 www.baidu.com # 只显示答案部分 dig www.baidu.com +noall +answer # 只显示短IP dig www.baidu.com +short # 输出:110.242.68.66 # 查询特定类型 dig baidu.com MX # 邮件服务器 dig baidu.com NS # 权威域名服务器 dig baidu.com TXT # TXT记录(如SPF验证)
  • host - 简洁结果
# 标准查询 host www.baidu.com # 指定DNS服务器 host www.baidu.com 8.8.8.8 # 查询特定类型 host -t MX baidu.com host -t NS baidu.com # 反向查询 host 110.242.68.66 # 详细输出 host -v www.baidu.com
  • /etc/resolv.conf
cat /etc/resolv.conf # 典型输出: nameserver 192.168.0.1 # 主DNS服务器 nameserver 114.114.114.114 # 备用DNS服务器 search localdomain # 搜索域(自动补全) options timeout:2 attempts:3 # 超时和重试

3. 快速参考卡

需求命令
快速查IPdig +short 域名
查特定DNSdig @8.8.8.8 域名
查看本机DNScat /etc/resolv.conf
反向查询nslookup IP
查邮件服务器dig 域名 MX
查权威服务器dig 域名 NS
追踪解析路径dig 域名 +trace
测试网络ping 8.8.8.8

4. 常见错误及解决

错误原因解决
Unknown hostDNS解析失败检查DNS配置、网络连通
Connection timed outDNS服务器无响应换DNS服务器
NXDOMAIN域名不存在检查域名拼写
SERVFAILDNS服务器内部错误换DNS服务器重试

记忆口诀

  • 网络不通先ping 8.8.8.8

  • DNS问题用dig

  • 配置查/etc/resolv.conf

  • 指定DNS用@符号

http://www.cnnetsun.cn/news/2512830.html

相关文章:

  • 4.8.3 利用SparkSQL统计每日新增用户
  • 如何用3步将B站缓存视频变回可播放的MP4文件?
  • 短视频文案为什么总能让你心甘情愿停下来?
  • 抖音内容批量下载解决方案:告别手动保存的智能工具指南
  • 小白入门AI|跟着吴恩达学AI for Everyone,用Prompt轻松撸出一个生日贺卡应用✨
  • 博德之门3模组管理器终极指南:5分钟快速上手解决模组冲突
  • 在taotoken模型广场中根据任务与预算选择合适模型的实践
  • 彻底搞懂ARP协议:从底层原理到安全攻防,万字长文带你吃透局域网通信的“隐形桥梁”
  • 3步快速搞定抖音资源批量下载:免费高效的开源工具完整指南
  • Cursor Free VIP深度解析:如何永久突破AI编程助手试用限制的完整指南
  • SMAPI模组加载器:终极星露谷物语模组管理完全指南
  • 当 AI 开始互相分工:真正的问题才刚刚开始
  • RK3588开发板Ubuntu系统实战攻略:从零构建高性能嵌入式平台
  • 如何通过 curl 命令直接测试 Taotoken 的聊天补全接口与模型响应
  • 3个步骤解锁NVIDIA显卡隐藏性能:免费工具终极指南
  • 专业级开源字体解决方案:Adobe Source Sans 3技术深度解析
  • 网盘直链解析工具完整指南:如何实现九大平台免登录高速下载
  • 54种字体样式革新设计:Barlow如何成为现代排版的瑞士军刀
  • 原来选床垫也有这么多讲究?
  • ARMv8-A架构TCR2_EL2寄存器详解与应用
  • Chrome for Testing架构深度解析:构建企业级浏览器自动化测试的5大技术优势
  • 如何在Linux上安装SOLIDWORKS:完整中文指南与实战教程
  • 3分钟快速上手:免费解锁加密音乐的终极浏览器解决方案
  • FastbootEnhance:告别命令行,Windows上最直观的Fastboot工具箱
  • Keil MDK许可证错误解析与中间件组件匹配方案
  • 5分钟掌握抖音资源批量下载:开源douyin-downloader终极指南
  • 顺丰邮政仓库干活的机器人,顺手拿了个具身高考第一
  • Sunshine游戏串流完全指南:打造你的专属云游戏平台
  • C++重载、重写、重定义
  • 使用Python快速上手Taotoken调用OpenAI兼容接口