写在前面
说实话,网络设备这块内容,很多同学学完之后脑子里还是一团浆糊。集线器、交换机、路由器到底有啥区别?ping不通到底该从哪开始查?我见过太多人在面试的时候被问到"交换机和路由器的区别",支支吾吾说不清楚。更别提实际工作中遇到网络故障,连个tcpdump都不会抓,全靠重启大法。今天咱们就把这些设备的工作原理和故障排查工具彻底搞明白,这可是你以后工作中用得最多的硬技能之一。

文章目录
-
- 一、网络设备全景图:按OSI层次分类
- 二、集线器Hub:已经被淘汰的"笨设备"
- 三、交换机Switch:局域网的核心设备
-
- [3.1 交换机三大工作机制(快递员通讯录类比)](#3.1 交换机三大工作机制(快递员通讯录类比))
- [3.2 VLAN:虚拟局域网](#3.2 VLAN:虚拟局域网)
- 四、路由器Router:连接不同网络的桥梁
-
- [4.1 路由表与最长前缀匹配(导航地图类比)](#4.1 路由表与最长前缀匹配(导航地图类比))
- [4.2 路由器 vs 交换机](#4.2 路由器 vs 交换机)
- 五、其他重要网络设备
-
- [5.1 三层交换机](#5.1 三层交换机)
- [5.2 防火墙](#5.2 防火墙)
- [5.3 无线AP](#5.3 无线AP)
- 六、故障排查工具详解(上):ping与traceroute
-
- [6.1 ping命令:网络排查的第一招](#6.1 ping命令:网络排查的第一招)
- [6.2 traceroute/tracert:逐跳追踪路径](#6.2 traceroute/tracert:逐跳追踪路径)
- 七、故障排查工具详解(中):DNS与网络状态
-
- [7.1 nslookup/dig:DNS查询工具](#7.1 nslookup/dig:DNS查询工具)
- [7.2 netstat/ss:查看网络状态与端口监听](#7.2 netstat/ss:查看网络状态与端口监听)
- 八、故障排查工具详解(下):抓包与性能测试
-
- [8.1 tcpdump:命令行抓包神器](#8.1 tcpdump:命令行抓包神器)
- [8.2 Wireshark:图形化抓包分析](#8.2 Wireshark:图形化抓包分析)
- [8.3 iperf:网络吞吐量测试](#8.3 iperf:网络吞吐量测试)
- [8.4 curl:HTTP请求测试](#8.4 curl:HTTP请求测试)
- 九、网络故障排查方法论(看病类比)
-
- [9.1 七层排查法](#9.1 七层排查法)
- [9.2 实战排查流程](#9.2 实战排查流程)
- 十、常见网络故障案例
-
- [10.1 案例一:ping不通外网](#10.1 案例一:ping不通外网)
- [10.2 案例二:DNS解析失败](#10.2 案例二:DNS解析失败)
- [10.3 案例三:端口不通](#10.3 案例三:端口不通)
- 问题与解答
- 新手常见误区
-
- 误区1:交换机和路由器搞混,以为越贵越高级
- [误区2:以为ping不通 = 网络断了](#误区2:以为ping不通 = 网络断了)
- 误区3:VLAN就是"把端口分组"
- 误区4:以为MAC地址和IP地址是一回事
- 面试高频考点汇总
- 模拟测试题
- 互动话题
- 参考资料
一、网络设备全景图:按OSI层次分类
网络设备种类很多,但只要你记住它们工作在OSI的哪一层,就能理解它们的核心功能。下面这张表格帮你一次性梳理清楚:
| 设备名称 | 工作层次 | 核心功能 | 关键特点 |
|---|---|---|---|
| 集线器(Hub) | 物理层(第1层) | 信号广播转发 | 无智能、共享带宽、半双工 |
| 交换机(Switch) | 数据链路层(第2层) | 基于MAC地址转发 | 学习MAC地址表、全双工、隔离冲突域 |
| 路由器(Router) | 网络层(第3层) | 基于IP地址路由转发 | 路由表、隔离广播域、NAT |
| 三层交换机 | 第2层+第3层 | 硬件加速路由转发 | 兼具交换和路由功能、性能高 |
| 防火墙(Firewall) | 第3层~第7层 | 网络安全过滤 | 包过滤/状态检测/应用层网关 |
| 无线AP | 第2层 | 无线信号桥接 | 有线转无线、802.11协议族 |
踩坑提醒:面试的时候千万别把交换机和集线器混为一谈。集线器是"笨设备",收到什么就广播什么;交换机是"聪明设备",会学习MAC地址表,精准转发。这个区别是高频考点,一定要记住。
城市交通类比:一眼看懂网络设备
新手学网络设备,最容易搞混它们的分工。我用一个城市交通系统的类比,帮你一次性记住:
| 网络设备 | 城市交通类比 | 核心特点 |
|---|---|---|
| Hub(集线器) | 老式转盘(所有车都往一个方向走,没脑子) | 不管谁来,全部广播,所有车挤一条路 |
| Switch(交换机) | 智能红绿灯(知道每辆车该往哪走) | 学习每辆车的目的地,精准指路,不堵车 |
| Router(路由器) | 导航+收费站(规划路线、跨网收费) | 看地图(路由表)选最优路线,跨区要收费(NAT) |
| 防火墙 | 安检站(检查每辆车和乘客) | 查身份证、查违禁品,坏人不让过 |
类比详解:
- Hub = 老式转盘:想象一个没有红绿灯的圆形转盘,所有车进去以后只能往一个方向走,不管你要去哪。Hub就是这样,收到数据就往所有端口广播,完全没有"脑子"。
- Switch = 智能红绿灯:交换机像装了摄像头的智能红绿灯,它会"记住"每辆车(MAC地址)常走的路线,下次这辆车再来,直接放行到对应路口,不需要再广播。
- Router = 导航+收费站:路由器像手机导航+高速收费站,它知道全市的路网(路由表),能帮你规划从A区到B区的最优路线。而且跨区通行需要"收费"(NAT地址转换)。
- 防火墙 = 安检站:每辆车和乘客都要过安检,查身份证(IP地址)、查行李(数据包内容),发现可疑人员直接拦截。
踩坑提醒:很多新手以为"交换机比路由器高级",这是错的。它们分工不同:交换机管"一个小区内部"的路,路由器管"跨小区、跨城市"的路。两者缺一不可。
二、集线器Hub:已经被淘汰的"笨设备"
集线器工作在物理层,它做的事情非常简单------收到信号就往所有端口广播。
你可以把集线器想象成一个大喇叭,不管谁跟它说话,它都把消息喊给所有人听。
集线器的主要问题:
- 共享带宽:所有端口共享总带宽,比如100Mbps的Hub接了10台设备,每台平均只有10Mbps
- 冲突域大:所有设备在同一个冲突域里,数据容易"撞车"
- 半双工通信:不能同时收发数据
正因为这些缺陷,集线器基本已经被交换机完全取代了。现在你在市场上几乎买不到纯集线器了。
三、交换机Switch:局域网的核心设备
交换机是现代局域网中最常见的设备,它工作在数据链路层,核心能力是基于MAC地址进行精准转发。
3.1 交换机三大工作机制(快递员通讯录类比)
想象交换机是一个快递分拣中心 ,MAC地址表就是快递员的通讯录,记录了"收件人地址(MAC地址)→ 负责片区(端口号)"的对应关系。
(1)学习 = 记新地址
快递员第一次给某个地址送货,会把这个地址记到自己的通讯录里。
交换机也一样:当设备A第一次通过端口1发送数据时,交换机会把设备A的MAC地址和端口1记录下来。这个过程就是"学习"。
交换机MAC地址表(快递员通讯录):
+----------------+----------------+
| MAC地址 | 端口号 |
+----------------+----------------+
| AA:BB:CC:11 | 1 | ← 新学的:设备A在1号口
| (其他记录) | (其他口) |
+----------------+----------------+
(2)转发 = 直接送货
快递员知道地址在哪,直接把包裹送过去,不需要问别人。
交换机收到数据帧后查看目标MAC地址:
- 如果MAC地址表里有记录,就只往对应端口转发
- 就像快递员直接把包裹送到收件人手里,不会敲邻居的门
(3)泛洪 = 挨家挨户问
快递员不知道收件人住哪,只能挨家挨户敲门问:"这是您家的包裹吗?"
如果交换机收到目标MAC地址不在表中的帧 ,就会泛洪(往除源端口外的所有端口广播)。
泛洪过程:
设备A(端口1)发送数据给设备X(未知MAC)
↓
交换机:"设备X在哪?"
↓
同时转发到端口2、3、4、5...(除端口1外的所有端口)
↓
设备X收到后回复 → 交换机学习到X的位置 → 下次直接转发
(4)老化 = 定期清理通讯录
MAC地址表中的条目有老化时间(通常5分钟),如果一段时间没收到某MAC地址的帧,就会自动删除该条目。就像快递员会定期清理很久没送过的地址,避免通讯录太臃肿。
踩坑提醒:泛洪不是bug,是交换机的正常行为!但泛洪太多会造成广播风暴,影响网络性能。VLAN的作用之一就是缩小泛洪范围。
3.2 VLAN:虚拟局域网
VLAN(Virtual Local Area Network)允许你在物理上同一台交换机上,逻辑上划分出多个独立的广播域。
交换机配置VLAN示例:
Switch(config)# vlan 10
Switch(config-vlan)# name Sales
Switch(config-vlan)# exit
Switch(config)# interface fastethernet 0/1
Switch(config-if)# switchport mode access
Switch(config-if)# switchport access vlan 10
VLAN的好处很明显:隔离广播域、提高安全性、灵活管理。不同VLAN之间的通信必须通过路由器或三层交换机。
踩坑提醒 :很多初学者以为VLAN就是"把端口分组",这个理解太浅了。VLAN的核心价值是隔离广播域,减少不必要的广播流量,同时提升安全性。
四、路由器Router:连接不同网络的桥梁
路由器工作在网络层,它的核心任务是根据IP地址在不同网络之间转发数据包。
4.1 路由表与最长前缀匹配(导航地图类比)
路由器内部维护一张路由表 ,就像司机手机里的导航地图,记录了"目标区域 → 下一跳路口 → 出口"的映射。
路由表(导航地图):
Destination Gateway Genmask Flags Iface
192.168.1.0 0.0.0.0 255.255.255.0 U eth0 ← 本小区的路,直接走
10.0.0.0 192.168.1.254 255.0.0.0 UG eth0 ← 隔壁市的路,走高速口
0.0.0.0 192.168.1.1 0.0.0.0 UG eth0 ← 其他所有路,走默认网关
导航类比理解:
- Destination(目标网络) = 目的地城市/区域
- Gateway(网关/下一跳) = 下一个路口/收费站
- Genmask(子网掩码) = 目的地的精确范围
- Iface(出接口) = 从哪个出口上高速
最长前缀匹配 = 找最精确的地址
想象你要去"北京市海淀区中关村大街1号":
- 导航里有
北京市/8的记录(匹配,但太粗略) - 导航里有
北京市海淀区/16的记录(匹配,更精确) - 导航里有
北京市海淀区中关村大街/24的记录(匹配,最精确)
路由器会选择最精确 的那条(/24),就像你会选导航里最详细的那个地址。
实际例子,目标IP是10.1.2.3:
10.0.0.0/8匹配(匹配了前8位)10.1.0.0/16也匹配(匹配了前16位)10.1.2.0/24也匹配(匹配了前24位,最精确)
路由器会选择/24这条路由,因为它最精确。
踩坑提醒 :
0.0.0.0/0是默认路由,匹配所有IP,前缀长度为0。只有当没有其他路由匹配时才会走默认路由。就像导航里"其他所有地方都往北京站走",只有找不到更精确的路线时才用它。
4.2 路由器 vs 交换机
| 对比项 | 交换机 | 路由器 |
|---|---|---|
| 工作层次 | 数据链路层 | 网络层 |
| 寻址依据 | MAC地址 | IP地址 |
| 核心功能 | 局域网内转发 | 被网间路由转发 |
| 隔离能力 | 隔离冲突域 | 隔离广播域 |
| 典型场景 | 办公室/机房内部 | 连接不同网段/网络 |
五、其他重要网络设备
5.1 三层交换机
三层交换机 = 二层交换机 + 三层路由功能,但路由是通过硬件ASIC芯片来做的,速度比传统路由器快得多。
适用场景:大型局域网内部不同VLAN之间的高速互联。但三层交换机通常不支持复杂的路由协议(如BGP),所以不能完全替代路由器。
5.2 防火墙
防火墙是网络安全的第一道防线,主要有三种类型:
- 包过滤防火墙:基于IP地址、端口号、协议类型进行过滤,工作在网络层
- 状态检测防火墙:跟踪连接状态,能识别一个数据包是属于新连接还是已有连接的一部分
- 应用层网关(代理防火墙):深入到应用层协议,能理解HTTP/FTP等协议内容
5.3 无线AP
无线AP(Access Point)就是把有线网络信号转换成无线信号,让Wi-Fi设备可以接入网络。
现在家庭里常见的"无线路由器"其实是路由器 + 交换机 + 无线AP三合一的设备。
六、故障排查工具详解(上):ping与traceroute
6.1 ping命令:网络排查的第一招
ping命令基于ICMP协议(Internet Control Message Protocol),通过发送ICMP Echo Request报文,等待Echo Reply报文来判断目标主机是否可达。
bash
# 基本用法
ping 8.8.8.8
# 指定发送次数
ping -c 4 8.8.8.8
# 指定发送间隔(秒)
ping -i 0.5 8.8.8.8
# 指定数据包大小
ping -s 1024 8.8.8.8
# 不做DNS反解析(加速显示)
ping -n 8.8.8.8
真实命令输出示例与解读:
bash
$ ping -c 4 www.baidu.com
PING www.baidu.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38: icmp_seq=1 ttl=55 time=15.2 ms
64 bytes from 14.215.177.38: icmp_seq=2 ttl=55 time=14.8 ms
64 bytes from 14.215.177.38: icmp_seq=3 ttl=55 time=15.5 ms
64 bytes from 14.215.177.38: icmp_seq=4 ttl=55 time=14.9 ms
--- www.baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 14.812/15.100/15.512/0.280 ms
输出解读:
64 bytes from 14.215.177.38:收到64字节的回复,来自目标IPicmp_seq=1:第1个ICMP包的序列号ttl=55:生存时间还剩55跳(每经过一个路由器减1,初始值通常是64或128)time=15.2 ms:往返时间15.2毫秒,说明网络很通畅0% packet loss:没有丢包,网络质量良好rtt min/avg/max:最小/平均/最大往返时间
踩坑提醒:很多服务器会禁用ICMP响应(防火墙规则),所以ping不通不代表目标主机宕机了。这个坑我踩过很多次,别一看到ping不通就慌。
6.2 traceroute/tracert:逐跳追踪路径
traceroute利用IP报文的**TTL(生存时间)**字段逐跳递减的原理,探测数据包到达目标主机经过了哪些路由器。
工作原理:
- 发送TTL=1的UDP报文,第一个路由器收到后TTL减为0,返回ICMP Time Exceeded
- 发送TTL=2的报文,第二个路由器返回ICMP Time Exceeded
- 依此类推,直到到达目标主机
bash
# Linux/macOS
traceroute -n 8.8.8.8
# Windows
tracert -d 8.8.8.8
# 使用ICMP协议探测(避免UDP被防火墙拦截)
traceroute -I 8.8.8.8
真实命令输出示例与解读:
bash
$ traceroute -n www.baidu.com
traceroute to www.baidu.com (14.215.177.38), 30 hops max, 60 byte packets
1 192.168.1.1 1.234 ms 1.123 ms 1.089 ms ← 第1跳:我的路由器(网关)
2 10.10.0.1 3.456 ms 3.321 ms 3.289 ms ← 第2跳:运营商接入设备
3 172.16.5.1 5.678 ms 5.543 ms 5.489 ms ← 第3跳:运营商汇聚层
4 219.158.10.1 8.901 ms 8.765 ms 8.712 ms ← 第4跳:运营商骨干网
5 14.215.177.38 15.234 ms 15.123 ms 15.089 ms ← 第5跳:目标服务器!到了!
输出解读:
1 192.168.1.1:第1跳,IP是192.168.1.1(通常是你的家用路由器),耗时约1ms2 10.10.0.1:第2跳,进入运营商网络5 14.215.177.38:第5跳到达目标,总共经过4个中间路由器- 每一行有3个时间值,是因为traceroute每个TTL发3个包,取3次测量的结果
如果某一行显示 * * * 是什么意思?
bash
4 * * * ← 第4跳没有回应,可能防火墙过滤了ICMP
5 14.215.177.38 15.234 ms 15.123 ms 15.089 ms ← 但第5跳能到,说明路是通的
* * * 表示这一跳的设备没有返回ICMP Time Exceeded,通常是防火墙配置拒绝了。但只要后面的跳能显示,说明数据包还是成功穿过去了。
踩坑提醒 :Linux的traceroute默认用UDP探测,Windows的tracert默认用ICMP探测。如果中间有防火墙过滤了UDP,Linux的traceroute可能显示全是
* * *,这时候加上-I参数改用ICMP试试。
七、故障排查工具详解(中):DNS与网络状态
7.1 nslookup/dig:DNS查询工具
bash
# nslookup基本用法
nslookup www.baidu.com
# 指定DNS服务器查询
nslookup www.baidu.com 8.8.8.8
# dig更详细的输出
dig www.baidu.com
# 只看简短回答
dig +short www.baidu.com
# 查询MX记录
dig MX baidu.com
# 查询NS记录
dig NS baidu.com
真实命令输出示例与解读(dig):
bash
$ dig www.baidu.com
; <<>> DiG 9.16.1-Ubuntu <<>> www.baidu.com
;; 全局选项: +cmd
;; 获得答案:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; 问题部分:
;www.baidu.com. IN A
;; 答案部分:
www.baidu.com. 600 IN CNAME www.a.shifen.com.
www.a.shifen.com. 300 IN A 14.215.177.38
www.a.shifen.com. 300 IN A 14.215.177.39
;; 查询时间: 15 msec
;; 服务器: 192.168.1.1#53(192.168.1.1)
;; 时间: Mon Jun 10 10:00:00 CST 2026
;; 消息大小: 101
输出解读:
status: NOERROR:查询成功(如果显示NXDOMAIN表示域名不存在)CNAME www.a.shifen.com:www.baidu.com是别名,真实域名是www.a.shifen.comA 14.215.177.38:解析到的IP地址(有两个IP,表示负载均衡)600/300:TTL(缓存时间),单位秒查询时间: 15 msec:DNS查询耗时15毫秒服务器: 192.168.1.1#53:使用的DNS服务器地址和端口(53是DNS默认端口)
7.2 netstat/ss:查看网络状态与端口监听
bash
# 查看所有TCP连接
netstat -t -n -a
# 查看正在监听的端口
netstat -t -n -l
# 查看指定端口的连接
netstat -t -n -a | grep :80
# ss是netstat的现代替代品,速度更快
ss -t -n -l # 查看TCP监听端口
ss -t -n -a # 查看所有TCP连接
ss -s # 查看网络统计摘要
真实命令输出示例与解读(ss):
bash
$ ss -t -n -l
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 127.0.0.1:631 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
输出解读:
State LISTEN:表示这个端口正在监听,等待连接Local Address:Port:本地监听的地址和端口0.0.0.0:22:在所有网卡的22端口监听(SSH服务)127.0.0.1:631:只在本地回环地址的631端口监听(CUPS打印服务)[::]:22:IPv6的22端口也在监听
Recv-Q / Send-Q:接收队列和发送队列的当前长度(如果数值很大说明有拥塞)0.0.0.0:*:表示接受来自任何IP的连接请求
查看已建立的连接:
bash
$ ss -t -n state established
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.1.100:54321 14.215.177.38:443
这表示本机(192.168.1.100)的54321端口与百度服务器(14.215.177.38)的443端口建立了连接。
踩坑提醒 :netstat在一些新系统上已经被标记为deprecated,建议用ss替代。ss的过滤语法也更强大,比如
ss -t state established '( dport = :80 or sport = :80 )'。
八、故障排查工具详解(下):抓包与性能测试
8.1 tcpdump:命令行抓包神器
bash
# 抓取指定网卡的所有流量
tcpdump -i eth0
# 抓取指定主机的流量
tcpdump -i eth0 host 192.168.1.100
# 抓取指定端口的流量
tcpdump -i eth0 port 80
# 抓取HTTP流量(基于端口)
tcpdump -i eth0 port 80 or port 8080
# 保存到文件(pcap格式,可用Wireshark打开)
tcpdump -i eth0 -w capture.pcap
# 读取pcap文件
tcpdump -r capture.pcap
真实命令输出示例与解读:
bash
$ sudo tcpdump -i eth0 port 80 -nn -c 5
tcpdump: verbose output suppressed, use -v for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:32:10.123456 IP 192.168.1.100.54321 > 14.215.177.38.80: Flags [S], seq 1234567890, win 29200, options [mss 1460,sackOK,TS val 123456789 ecr 0,nop,wscale 7], length 0
14:32:10.234567 IP 14.215.177.38.80 > 192.168.1.100.54321: Flags [S.], seq 9876543210, ack 1234567891, win 28960, options [mss 1460,sackOK,TS val 987654321 ecr 123456789,nop,wscale 8], length 0
14:32:10.234589 IP 192.168.1.100.54321 > 14.215.177.38.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 123456790 ecr 987654321], length 0
14:32:10.235123 IP 192.168.1.100.54321 > 14.215.177.38.80: Flags [P.], seq 1:78, ack 1, win 229, options [nop,nop,TS val 123456791 ecr 987654321], length 77: HTTP: GET / HTTP/1.1
14:32:10.345678 IP 14.215.177.38.80 > 192.168.1.100.54321: Flags [.], ack 78, win 288, options [nop,nop,TS val 987654322 ecr 123456791], length 0
输出解读:
192.168.1.100.54321 > 14.215.177.38.80:从本机54321端口发往百度服务器80端口Flags [S]:SYN标志,表示这是三次握手的第一个包(客户端发起连接)Flags [S.]:SYN + **.**ACK,表示这是三次握手的第二个包(服务端回应)Flags [P.]:PSH + **.**ACK,表示推送数据(这里是HTTP GET请求)seq 1234567890:序列号,TCP用来保证数据顺序ack 1234567891:确认号,表示"我期望收到序列号为1234567891的数据"length 77: HTTP: GET / HTTP/1.1:数据长度77字节,内容是HTTP GET请求
踩坑提醒 :tcpdump需要root权限才能运行(因为要设置网卡为混杂模式)。
-nn参数表示不解析域名和端口名(显示数字而不是www.baidu.com和http),能大幅提升性能。
8.2 Wireshark:图形化抓包分析
Wireshark是tcpdump的图形化版本,功能强大得多。以下是常用过滤表达式:
| 过滤需求 | 过滤表达式 |
|---|---|
| 按IP过滤 | ip.addr == 192.168.1.100 |
| 按源IP过滤 | ip.src == 192.168.1.100 |
| 按目标IP过滤 | ip.dst == 8.8.8.8 |
| 按TCP端口过滤 | tcp.port == 80 |
| 按协议过滤 | http 或 dns 或 icmp |
| 按MAC地址过滤 | eth.addr == 00:11:22:33:44:55 |
| 组合过滤 | ip.src == 192.168.1.100 && tcp.port == 443 |
| 排除某IP | !(ip.addr == 192.168.1.1) |
| TCP SYN包 | tcp.flags.syn == 1 |
| HTTP GET请求 | http.request.method == "GET" |
踩坑提醒:用Wireshark抓包时,如果发现流量特别多很难分析,先在抓包前想清楚你要看什么,用过滤表达式精准过滤。不然几秒钟就能抓几万个包,根本看不过来。
8.3 iperf:网络吞吐量测试
bash
# 服务端先启动
iperf3 -s
# 客户端发起测试
iperf3 -c 192.168.1.100
# 指定测试时长
iperf3 -c 192.168.1.100 -t 30
# UDP测试
iperf3 -c 192.168.1.100 -u -b 100M
# 多线程并发测试
iperf3 -c 192.168.1.100 -P 4
真实命令输出示例与解读:
bash
# 服务端启动
$ iperf3 -s
Server listening on 5201
# 客户端测试
$ iperf3 -c 192.168.1.100
Connecting to host 192.168.1.100, port 5201
[ 5] local 192.168.1.101 port 54321 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 112 MBytes 941 Mbits/sec
[ 5] 1.00-2.00 sec 113 MBytes 948 Mbits/sec
[ 5] 2.00-3.00 sec 112 MBytes 941 Mbits/sec
[ 5] 3.00-4.00 sec 113 MBytes 948 Mbits/sec
[ 5] 4.00-5.00 sec 112 MBytes 941 Mbits/sec
[ 5] 5.00-6.00 sec 113 MBytes 948 Mbits/sec
[ 5] 6.00-7.00 sec 112 MBytes 941 Mbits/sec
[ 5] 7.00-8.00 sec 113 MBytes 948 Mbits/sec
[ 5] 8.00-9.00 sec 112 MBytes 941 Mbits/sec
[ 5] 9.00-10.00 sec 113 MBytes 948 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 1.10 GBytes 941 Mbits/sec sender
[ 5] 0.00-10.00 sec 1.10 GBytes 939 Mbits/sec receiver
iperf Done.
输出解读:
Bitrate 941 Mbits/sec:带宽约941Mbps,接近千兆网线的理论上限(1000Mbps)Transfer 112 MBytes:每秒传输112MB数据sender / receiver:发送端和接收端的统计(如果两者差距大,说明中间有丢包)- 测试结果显示网络带宽正常,接近千兆水平
如果带宽远低于预期,可能的原因:
- 网线质量问题(Cat5网线最高只支持100Mbps)
- 网卡协商速率降速了(检查网卡设置)
- 中间设备(交换机、路由器)性能瓶颈
- 防火墙或QoS限制了带宽
8.4 curl:HTTP请求测试
bash
# 基本GET请求
curl http://www.example.com
# 只看响应头
curl -I http://www.example.com
# 查看详细过程(包括SSL握手)
curl -v https://www.example.com
# 指定Host头
curl -H "Host: www.test.com" http://192.168.1.100
# POST请求
curl -X POST -d "key=value" http://www.example.com/api
# 测试连通性和响应时间
curl -o /dev/null -s -w "time_total: %{time_total}s\n" http://www.example.com
真实命令输出示例与解读:
bash
$ curl -I https://www.baidu.com
HTTP/2 200
accept-ranges: bytes
cache-control: private, no-cache, no-store, proxy-revalidate, no-transform
content-length: 2443
content-type: text/html
date: Mon, 10 Jun 2026 06:00:00 GMT
etag: "588604c8-98b"
last-modified: Mon, 23 Jan 2017 13:24:24 GMT
server: bfe/1.0.8.18
set-cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
输出解读:
HTTP/2 200:使用HTTP/2协议,状态码200表示请求成功cache-control: private, no-cache...:缓存控制头,告诉浏览器不要缓存这个页面content-type: text/html:响应内容的类型是HTMLserver: bfe/1.0.8.18:服务器软件信息(BFE是百度自研的负载均衡器)set-cookie:服务器设置了Cookie
测试响应时间的详细输出:
bash
$ curl -o /dev/null -s -w "DNS解析: %{time_namelookup}s\nTCP连接: %{time_connect}s\nSSL握手: %{time_appconnect}s\n首字节: %{time_starttransfer}s\n总耗时: %{time_total}s\n" https://www.baidu.com
DNS解析: 0.005s
TCP连接: 0.015s
SSL握手: 0.045s
首字节: 0.052s
总耗时: 0.055s
这个输出非常有用,可以精确分析每个阶段的耗时:
DNS解析 5ms:DNS查询很快TCP连接 15ms:到百度的TCP握手耗时10ms(15-5=10)SSL握手 45ms:TLS握手耗时30ms(45-15=30)首字节 52ms:服务器处理请求并返回第一个字节耗时7ms(52-45=7)总耗时 55ms:整个请求完成
九、网络故障排查方法论(看病类比)
排查网络故障不能瞎猜,得有一套系统的方法论。我推荐从底层到上层的排查思路。
用看病的流程来类比网络故障排查,新手更容易理解:
| 看病流程 | 网络排查 | 对应工具/命令 |
|---|---|---|
| 症状(发烧、咳嗽) | ping不通、网页打不开 | ping、curl |
| 问诊(问病史、哪里不舒服) | 看哪一跳断了 | traceroute |
| 检查(验血、拍片) | 抓包看细节 | tcpdump、Wireshark |
| 确诊(找到病因) | 找到根因 | 综合分析 |
| 治疗(开药、手术) | 修复问题 | 改配置、换设备 |
9.1 七层排查法
第7层:应用层 → 检查应用配置、版本、日志
第6层:表示层 → 检查数据编码、加密、压缩
第5层:会话层 → 检查会话状态、连接保持
第4层:传输层 → 检查端口、防火墙规则、TCP/UDP
第3层:网络层 → 检查IP地址、路由表、ping测试
第2层:数据链路层 → 检查MAC地址、交换机、VLAN
第1层:物理层 → 检查网线、接口、指示灯
9.2 实战排查流程
遇到网络问题,按这个顺序来:
- 先看物理层:网线插好了吗?接口灯亮不亮?换根网线试试
- 再查网络层 :
ip addr看IP配置,ping网关,ping外网 - 然后查DNS :
nslookup看解析是否正常 - 接着查端口 :
telnet或curl测试目标端口 - 最后抓包分析 :
tcpdump/Wireshark看具体报文交互
完整排查案例(ping不通外网):
症状:ping不通 www.baidu.com
↓
问诊(traceroute):traceroute www.baidu.com
→ 发现第1跳(网关)就断了
↓
检查(ip addr):本机IP是 169.254.x.x(APIPA地址)
→ 说明没有从DHCP获取到IP
↓
确诊:DHCP服务器没响应,或网线没插好
↓
治疗:检查网线 → 检查交换机 → 重启DHCP服务
踩坑提醒 :我见过太多人一上来就抓包,结果抓了半天发现是网线没插好。排查一定要从底层往上层来,别跳步。
十、常见网络故障案例
10.1 案例一:ping不通外网
现象 :能ping通网关,但ping不通8.8.8.8
排查步骤:
bash
# 1. 确认本机IP配置
ip addr show
# 2. 确认路由表
ip route show
# 3. ping网关
ping 192.168.1.1
# 4. ping外网IP(跳过DNS)
ping 8.8.8.8
# 5. ping域名(测试DNS)
ping www.baidu.com
常见原因:
- 路由器没有配置NAT或默认路由
- 上游运营商线路故障
- 防火墙拦截了ICMP
10.2 案例二:DNS解析失败
现象 :ping 8.8.8.8正常,但ping www.baidu.com失败
排查步骤:
bash
# 1. 检查DNS配置
cat /etc/resolv.conf
# 2. 手动指定DNS服务器测试
nslookup www.baidu.com 8.8.8.8
# 3. 检查DNS服务是否运行
systemctl status systemd-resolved
常见原因:
- DNS服务器配置错误
- DNS服务器本身故障
- 防火墙拦截了53端口
10.3 案例三:端口不通
现象:能ping通目标服务器,但访问其Web服务失败
排查步骤:
bash
# 1. 测试端口连通性
curl -v http://192.168.1.100:80
# 或使用telnet
telnet 192.168.1.100 80
# 2. 在服务端检查端口监听
ss -t -n -l | grep :80
# 3. 检查服务端防火墙
iptables -L -n | grep 80
常见原因:
- 服务没有启动
- 防火墙拦截了端口
- 服务监听了错误的地址(比如只监听了127.0.0.1)
问题与解答
Q1:交换机和集线器的本质区别是什么?
A:本质区别在于是否具有智能转发能力。集线器是物理层设备,收到信号就往所有端口广播,所有设备共享带宽,属于同一个冲突域。交换机是数据链路层设备,通过学习MAC地址表实现精准转发,每个端口独享带宽,能隔离冲突域。用一句话概括:集线器是"大喇叭",交换机是"快递分拣员"。
Q2:为什么traceroute在Linux和Windows上行为不一样?
A:因为它们默认使用的探测协议不同。Linux的traceroute默认发送UDP报文(目标端口33434起递增),而Windows的tracert默认使用ICMP Echo Request。很多中间路由器的防火墙会过滤UDP但不拦截ICMP,所以Linux上可能出现* * *但Windows上能正常显示。解决方法是在Linux上加-I参数改用ICMP探测。
Q3:ping不通就说明网络有问题吗?
A:不一定。ping基于ICMP协议,很多服务器和防火墙会主动丢弃ICMP报文来"隐藏"自己。ping不通可能只是ICMP被拦截了,但HTTP、SSH等服务可能完全正常。所以排查时不要只依赖ping,还要结合curl、telnet等工具做端口级别的测试。
新手常见误区
学网络设备这块,新手最容易踩这几个坑:
误区1:交换机和路由器搞混,以为越贵越高级
错误理解:"交换机比路由器高级,因为企业里交换机更贵。"
正确理解:它们分工完全不同。交换机管"小区内部"的路(同一局域网),路由器管"跨小区、跨城市"的路(不同网络之间)。两者缺一不可,没有高低之分。
类比:小区里的道路指示牌(交换机)和高速公路导航系统(路由器),你说哪个更高级?没法比,作用不同。
误区2:以为ping不通 = 网络断了
错误理解:"ping不通百度,肯定是网络断了。"
正确理解 :ping基于ICMP协议,很多服务器和防火墙会主动丢弃ICMP报文。ping不通不代表网络断了,可能只是ICMP被过滤了。要用curl或telnet测试端口才能确认。
踩坑提醒:排查时别只依赖ping,要结合多种工具验证。
误区3:VLAN就是"把端口分组"
错误理解:"VLAN就是把交换机的端口分成几组。"
正确理解 :VLAN的核心价值是隔离广播域,减少广播风暴,提升安全性。端口分组只是实现手段,不是目的。
踩坑提醒:面试时说"VLAN隔离广播域"比"VLAN分组端口"得分高得多。
误区4:以为MAC地址和IP地址是一回事
错误理解:"MAC地址就是物理地址,IP地址就是网络地址,反正都是地址。"
正确理解:MAC地址是"身份证号"(出厂固定,终身不变),IP地址是"住址"(可以变)。MAC工作在数据链路层(局域网内),IP工作在网络层(跨网络)。ARP协议就是用来查"身份证号"的。
踩坑提醒:记住这个类比:MAC = 身份证号,IP = 住址。寄快递先用住址(IP),到了小区再看身份证(MAC)确认收件人。
面试高频考点汇总
面试题1:交换机和路由器的区别是什么?
参考答案:
交换机工作在数据链路层(第2层),基于MAC地址转发数据帧,用于局域网内部设备互联,能隔离冲突域但不能隔离广播域。路由器工作在网络层(第3层),基于IP地址转发数据包,用于连接不同的网络(网段),能隔离广播域。交换机通过学习MAC地址表实现精准转发,路由器通过路由表和路由协议决定转发路径。此外,路由器还支持NAT、ACL、VPN等高级功能。
面试题2:ping不通的排查思路是什么?
参考答案:
按照从底层到上层的思路排查:
- 物理层:检查网线、接口、指示灯是否正常
- 网络层 :检查本机IP配置(
ip addr),检查路由表(ip route),先ping网关再ping外网 - 传输层/应用层 :用
telnet或curl测试目标端口是否可达 - DNS :如果IP能通但域名不通,检查DNS配置(
/etc/resolv.conf),用nslookup验证 - 抓包:以上都无法定位时,用tcpdump/Wireshark抓包分析具体报文交互
面试题3:Wireshark常用的过滤语法有哪些?
参考答案:
- 按IP:
ip.addr == 192.168.1.100(源或目标)、ip.src、ip.dst - 按端口:
tcp.port == 80、udp.port == 53 - 按协议:
http、dns、icmp、tls - 按MAC:
eth.addr == 00:11:22:33:44:55 - 组合:
&&(与)、||(或)、!(非) - TCP标志位:
tcp.flags.syn == 1、tcp.flags.reset == 1 - HTTP方法:
http.request.method == "GET"
面试题4:什么是MAC地址泛洪?交换机如何应对?
参考答案:
MAC地址泛洪是一种攻击手段,攻击者向交换机发送大量伪造源MAC地址的数据帧,填满交换机的MAC地址表。当MAC地址表满了之后,交换机无法学习新的MAC地址,只能对所有帧进行泛洪,这样攻击者就能截获其他端口之间的通信。
应对方法:
- 配置端口安全(Port Security),限制每个端口学习的MAC地址数量
- 配置MAC地址表的老化时间和最大条目数
- 使用VLAN隔离,缩小泛洪范围
面试题5:三层交换机和路由器的区别?
参考答案:
三层交换机在二层交换的基础上增加了三层路由功能,但路由是通过硬件ASIC芯片实现的,转发速度远快于传统路由器。然而,三层交换机主要面向局域网内部 的VLAN间路由,通常不支持复杂的路由协议(如BGP、OSPF的完整功能),接口类型也较少。路由器则面向广域网互联,支持丰富的路由协议、NAT、ACL、VPN等功能,接口类型多样(串口、光纤等)。简单说:三层交换机是"快但不全",路由器是"全但相对慢"。
模拟测试题
1. 集线器工作在OSI模型的哪一层?
A. 数据链路层
B. 网络层
C. 物理层
D. 传输层
2. 交换机收到一个数据帧,目标MAC地址不在MAC地址表中,交换机会怎么做?
A. 丢弃该帧
B. 向源端口发送错误通知
C. 向除源端口外的所有端口泛洪
D. 直接转发到默认网关
3. traceroute命令利用了IP报文哪个字段的特性来实现逐跳探测?
A. Identification
B. TTL(生存时间)
C. Protocol
D. Checksum
4. 以下哪个命令可以查看当前系统正在监听的TCP端口?
A. ping -l
B. netstat -t -n -l
C. traceroute -n
D. nslookup -t
5. 在Wireshark中,要过滤源IP为192.168.1.100且目标端口为443的流量,应该使用哪个过滤表达式?
A. ip.src == 192.168.1.100 and port == 443
B. ip.dst == 192.168.1.100 and tcp.port == 443
C. ip.src == 192.168.1.100 && tcp.dstport == 443
D. host 192.168.1.100 && port 443
参考答案
- C。集线器是物理层设备,只负责信号广播转发。
- C。交换机对未知MAC地址进行泛洪(Flooding),向除源端口外的所有端口转发。
- B。traceroute利用TTL逐跳递减为0时路由器返回ICMP Time Exceeded的特性。
- B 。
netstat -t显示TCP连接,-n显示数字格式,-l显示监听状态。 - C 。
ip.src指定源IP,tcp.dstport指定TCP目标端口,&&是逻辑与。
互动话题
你在实际工作或学习中遇到过哪些网络故障?当时是怎么排查解决的?有没有什么"奇葩"的经历(比如排查了半天发现是网线松了)?欢迎在评论区分享你的踩坑故事,说不定你的经验正好能帮到别人。