网络故障排查工具全解析
1. mtr:结合ping和traceroute的强大工具
mtr(My Traceroute)是一款将ping和traceroute功能相结合的优秀工具,可用于捕获综合延迟、数据包丢失和问题路由器统计信息。以下是使用mtr的具体操作:
-
运行mtr并保存结果到文件
:
$ mtr -r -c100 oreilly.com >> mtr.txt
该命令会运行mtr 100次,将数据以报告格式组织,并存储在mtr.txt文件中。文件内容示例如下:
| HOST | Loss% | Snt | Last | Avg | Best | Wrst | StDev |
| — | — | — | — | — | — | — | — |
| pyramid.alrac.net | 0.0% | 100 | 0.4 | 0.5 | 0.3 | 6.8 | 0.7 |
| gateway.foo.net | 0.0% | 100 | 23.5 | 23.1 | 21.6 | 29.8 | 1.0 |
| router.foo.net | 0.0% | 100 | 23.4 | 24.4 | 21.9 | 78.9 | 5.9 |
| 12.222.222.201 | 1.0% | 100 | 52.8 | 57.9 | 44.5 | 127.3 | 10.3 |
| 12.222.222.50 | 4.0% | 100 | 61.9 | 62.4 | 50.1 | 102.9 | 9.8 |
| gbr1.st6wa.ip.att.net | 1.0% | 100 | 61.4 | 76.2 | 46.2 | 307.8 | 48.8 |
| br1 - a350s5.attga.ip.att.net | 3.0% | 100 | 57.2 | 60.0 | 44.4 | 107.1 | 11.6 |
| so0 - 3 - 0 - 2488M.scr1.SFO1.gblx | 1.0% | 100 | 73.9 | 83.4 | 64.0 | 265.9 | 27.6 |
| sonic - gw.customer.gblx.net | 2.0% | 100 | 72.6 | 79.9 | 69.3 | 119.5 | 7.5 |
| 0.ge - 0 - 1 - 0.gw.sr.sonic.net | 2.0% | 100 | 71.5 | 78.2 | 67.6 | 142.2 | 9.3 |
| gig50.dist1 - 1.sr.sonic.net | 0.0% | 100 | 81.1 | 84.3 | 73.1 | 169.1 | 12.1 |
| ora - demarc.customer.sonic.ne | 5.0% | 100 | 69.1 | 82.9 | 69.1 | 144.6 | 10.2 |
| www.oreillynet.com | 4.0% | 100 | 75.4 | 81.0 | 69.8 | 119.1 | 7.0 |
从这个结果可以看出,这是一次较为理想的运行,数据包丢失率和延迟都较低。
-
设置定时任务运行mtr
:
$ mtr -r -c100 oreillynet.com >> mtr.txt && date >> mtr.txt
此命令会将每次mtr运行的结果存储在同一个文件中,并在每个条目末尾添加日期和时间。
-
实时查看mtr结果
:
$ mtr -c100 oreillynet.com
- 跳过DNS查找 :使用 -n 开关可以跳过DNS查找。
如果mtr在同一路由器上持续出现卡顿,或者某一路由器的数据包丢失率持续超过5%且传输时间较长,那么可以确定该路由器存在问题。若该路由器由你管理,应及时修复;若不是,则可使用dig或whois工具查明其归属,并向相关方报告问题。同时,保存好记录以便对方查看具体数据。
2. tcpdump:强大的数据包捕获和分析工具
tcpdump是一款强大的数据包嗅探器,可精确过滤网络流量。以下是一些常见的过滤示例:
-
捕获单个主机的所有流量
:
# tcpdump -pi eth0 host uberpc
- 捕获多个主机的所有流量 :
# tcpdump -pi eth0 host uberpc and stinkpad and penguina
- 捕获多个主机的所有流量,但排除指定主机 :
# tcpdump -pi eth0 host uberpc and stinkpad and not penguina
- 捕获流向某一主机的流量 :
# tcpdump -pi eth0 dst host uberpc
- 捕获从某一主机流出的流量 :
# tcpdump -pi eth0 src host uberpc
- 捕获单个协议的流量 :
# tcpdump -pi eth0 tcp
- 捕获多个协议的流量 :
# tcpdump -pi eth0 tcp or udp or icmp
- 捕获特定端口的流量 :
# tcpdump -pi eth0 port 110
- 捕获多个端口的流量 :
# tcpdump -pi eth0 port 25 or port 80 or port 110
- 捕获指定端口范围的流量 :
# tcpdump -pi eth0 portrange 3000 - 4000
- 查看从某一端口流出的流量 :
# tcpdump -pi eth0 src port 110
- 查看流入某一端口的流量 :
# tcpdump -pi eth0 dst port 110
- 查找小于指定大小的数据包 :
# tcpdump -pi eth0 less 512
- 查找大于指定大小的数据包 :
# tcpdump -pi eth0 greater 512
- 查看特定主机的SSH连接 :
# tcpdump -pi eth0 src host uberpc or stinkpad and dst port 22
- 查看从一个网络流出并流入另外两个网络的流量 :
# tcpdump -pi eth0 src net 192.168.1.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
使用 -X 开关可以读取数据有效负载,但默认只读取68字节,使用 -s0 可以显示完整的数据有效负载,示例如下:
# tcpdump -X -s0 -pi eth0
10:40:14.683350 IP 192.168.1.10.35386 > 12.222.222.107.6667: P 1:65(64) ack 410 win
16022 <nop,nop,timestamp 1204830 3703450725>
0x0000: 4500 0074 c43b 4000 4006 8157 c0a8 010a E..t.;@.@..W....
0x0010: 8cd3 a66b 8a3a 1a0b 420f ddd1 bb15 eb3b ...k.:..B......;
0x0020: 8018 3e96 4309 0000 0101 080a 0012 625e ..>.C.........b^
0x0030: dcbe 2c65 5052 4956 4d53 4720 236c 696e ..,ePRIVMSG.#lin
0x0040: 7578 6368 6978 203a 746f 2062 6520 6120 uxchix.:to.be.a.
0x0050: 7375 7065 722d 7365 6b72 6974 2073 7079 super - sekrit.spy
0x0060: 2c20 7573 6520 7468 6520 2d73 2073 7769 ,.use.the.-s.swi
0x0070: 7463 680a tch.
捕获所有通过Stinkpad的流量(包括数据有效负载)并存储到文件中:
# tcpdump -pXi eth0 -w tcpdumpfile -s0 host stinkpad
可以使用以下命令读取该文件:
# tcpdump -r tcpdumpfile
将tcpdump输出定向到文件,可让你从容研究数据,也可以使用Wireshark以更美观的界面打开文件。以下命令可实时查看捕获结果并将其存储到文件中:
# tcpdump -pXi eth0 -s0 host stinkpad -l | tee tcpdumpfile
捕获发送到端口25但不是来自官方邮件服务器的流量,可用于检测发送垃圾邮件的受感染主机:
# tcpdump -pni eth0 dst port 25 and not src host mailserver1
使用 -n 开关可关闭名称解析,使用 -c 开关可限制捕获的数据包数量:
# tcpdump -c 1000 -pXi eth0 -w tcpdumpfile -s0
否则,tcpdump将一直运行直到你按下Ctrl - C。
以下是一个典型的tcpdump输出示例及解析:
# tcpdump -pi eth0
14:23:02.983415 IP xena.alrac.net.58154 > host6.foo.com.pop3s: S 3100965180:
3100965180(0) win 5840 <mss 1460,sackOK,timestamp 4546985 0,nop,wscale 2> (DF)
- 14:23:02.983415 :时间戳,格式为hh:mm:ss:fraction。
- xena.alrac.net.58154 :源主机和端口。
- host6.foo.com.pop3s :目标主机和端口。
- S :TCP三次握手的第一步(SYN)。
- 3100965180:3100965180 :字节序列/范围,初始序列号(ISN)随机生成,后续字节的序列号从ISN递增。由于此阶段未交换数据,两个数字相同。
- win 5840 :窗口大小,即主机用于接收数据的缓冲区字节数。
- mss 1460 :最大段大小,即无需分片即可处理的最大IP数据报大小。连接双方必须就该值达成一致,若不同则使用较小值,这称为路径MTU(最大传输单元)发现。MTU是整个帧的大小,包括MSS、TCP/IP头部以及发送协议所需的其他头部。
- sackOK :选择性确认,允许接收方确认乱序的数据包。在过去,数据包只能按顺序确认,若收到的100个数据包中第3个丢失,主机只能确认前两个数据包的接收,发送方需重新发送从第3个到第1000个的所有数据包。而sackOK允许仅重新发送丢失的数据包。
- timestamp 4546985 0 :测量往返时间,有两个字段:时间戳值和时间戳回显回复。第一次交换时,回显回复设置为0。当第二个主机收到数据包时,将旧数据包的时间戳值字段中的时间戳转移到新数据包的时间戳回显回复字段中,并为时间戳值字段生成一个新值。因此,时间戳值字段包含最新的时间戳,而时间戳回显回复字段包含上一个时间戳。
- nop :无操作,用于填充TCP选项,使其为4字节的倍数。
- wscale 0 :一种巧妙的方法,用于绕过原始窗口大小65,535字节的限制,可提供高达1GB的缓冲区。连接双方必须支持并同意此功能,否则窗口大小不变。
- (DF) :不要分片。
有时,为了捕获所需的信息,需要正确的物理位置。例如,要捕获受感染主机发送的垃圾邮件或监控网络之间的流量,需要在路由器上运行tcpdump。若使用的是哑交换机,可将网络管理员笔记本插入路由器和交换机之间;智能交换机有网络监控端口。将笔记本插入互联网和防火墙之间,可无过滤地查看试图进入网络的流量。
3. 捕获TCP标志
tcpdump过滤特定TCP标志(如SYN、ACK、RST等)的语法较为复杂,以下是一些常见标志的捕获命令:
-
捕获所有SYN数据包
:
# tcpdump 'tcp[13] & 2 != 0'
- 捕获所有ACK数据包 :
# tcpdump 'tcp[13] & 16 != 0'
- 捕获所有SYN - ACK数据包 :
# tcpdump 'tcp[13] = 18'
- 捕获所有FIN数据包 :
# tcpdump 'tcp[13] & 1 != 0'
- 捕获所有URG数据包 :
# tcpdump 'tcp[13] & 32 != 0'
- 捕获所有PSH数据包 :
# tcpdump 'tcp[13] & 8 != 0'
- 捕获所有RST数据包 :
# tcpdump 'tcp[13] & 4 != 0'
这些命令可与其他过滤选项(如端口、主机和网络)结合使用。在调查可疑活动或服务配置错误导致响应错误时,可能需要查找特定的TCP标志。另一种过滤方法是使用 -w 开关捕获大量数据并保存到文件,然后使用Wireshark分析文件,这样可以多次以不同方式过滤同一组数据,而无需重新捕获。Wireshark支持与tcpdump相同的过滤器,并提供了许多图形化菜单,方便组合过滤器。其“Follow TCP Stream”功能可从大量数据中提取单个TCP流。
4. iperf:测量吞吐量、抖动和数据包丢失
iperf是一款用于测量两个端点之间TCP和UDP性能的实用工具。以下是使用iperf的具体步骤:
-
基本测试
:假设在Xena和Penguina之间进行测量,先在Xena上以服务器模式启动iperf:
carla@xena:~$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
然后在Penguina上启动iperf客户端:
terry@penguina:~$ iperf -c xena
------------------------------------------------------------
Client connecting to xena, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.76 port 49215 connected with 192.168.1.10 port 5001
[ 3] 0.0-10.0 sec 111 MBytes 92.6 Mbits/sec
- 双向测试 :
terry@penguina:~$ iperf -c xena -d
- 单向测试 :
$ terry@uberpc:~$ iperf -c xena -r
通过比较双向和单向测试结果,可以了解以太网双工的效率。
对于多播故障排查,可在所有多播主机上以服务器模式运行iperf,然后从单个客户端同时测试所有主机:
admin@host1:~$ iperf -sB 239.0.0.1
admin@host2:~$ iperf -sB 239.0.0.1
admin@host3:~$ iperf -sB 239.0.0.1
carla@xena:~$ iperf -c 239.0.0.1
若使用多播进行视频或音频流传输,可使用UDP进行测试:
admin@host1:~$ iperf -sBu 239.0.0.1
admin@host2:~$ iperf -sBu 239.0.0.1
admin@host3:~$ iperf -sBu 239.0.0.1
carla@xena:~$ iperf -c 239.0.0.1 -ub 512k
调整客户端发送的数据包大小,以更接近实际情况:
terry@uberpc:~$ iperf -c xena -ub 100m -l .3K
抖动和数据包丢失是流媒体的重要统计指标。抖动超过200 ms会明显影响体验,本次测试中的0.242 ms抖动表现出色;0.88%的数据包丢失率也可忽略不计。根据端点质量,VoIP可容忍高达10%的数据包丢失,但理想情况下不应超过3 - 4%。数据包乱序对于流媒体也很重要,大量随机到达的UDP数据包会影响数据流的连贯性。
iperf默认使用TCP/UDP端口5001,也可使用 -p 开关指定端口。随着越来越多的流媒体服务在分组交换网络上运行,链路质量变得越来越重要,可与ISP沟通以提高流媒体服务的链路质量。
5. ngrep:高级数据包嗅探工具
ngrep是一款类似于tcpdump的数据包嗅探器,它结合了grep的功能,可搜索任何文本字符串或正则表达式。例如,要查看员工在IRC上对自己的评价,可使用以下命令:
# ngrep -qpd eth0 host ircserver -i carla
interface: eth0 (192.168.1.0/255.255.255.0)
match: carla
##
T 192.168.1.10:33116 -> 140.222.222.107:6667 [AP]
PRIVMSG #authors :that carla is truly wonderful and everyone loves her
##
T 192.168.1.32:39422 -> 140.222.222.107:6667 [AP]
PRIVMSG #authors :yes, carla is great, the world would be dust and ashes without her
若想查看更多上下文信息,可添加 -A 5 开关:
# ngrep -qpd eth0 -A5 host ircserver -i carla
T 192.168.1.10:33116 -> 140.222.222.107:6667 [AP]
PRIVMSG #authors :LOL thanks, I haven't laughed that hard in ages
##
T 192.168.1.32:39422 -> 140.222.222.107:6667 [AP]
PRIVMSG #authors :NP, it's a good thing the bossy little dope can't eavesdrop on us
ngrep使用与tcpdump相同的协议选项,例如只显示POP3流量:
# ngrep -qpd eth0 '' tcp port 110
ngrep还能区分Windows和Linux的ping。Windows使用字母填充有效负载,Linux使用数字,因此可根据此特点搜索特定操作系统的ping:
# ngrep -qpd eth0 'abcd' icmp
interface: eth0 (192.168.1.0/255.255.255.0)
filter: (ip or ip6) and ( icmp )
match: abcd
#
I 192.168.1.77 -> 192.168.1.10 8:0
....abcdefghijklmnopqrstuvwabcdefghi
综上所述,这些网络工具在网络故障排查和性能监测中都具有重要作用。合理使用它们,可以帮助我们快速定位和解决网络问题,确保网络的稳定运行。
graph LR
A[mtr] --> B[捕获延迟、丢包等信息]
A --> C[设置定时任务]
A --> D[实时查看结果]
E[tcpdump] --> F[过滤网络流量]
E --> G[捕获特定主机流量]
E --> H[捕获特定协议流量]
I[iperf] --> J[测量吞吐量]
I --> K[测量抖动和丢包]
I --> L[双向和单向测试]
M[ngrep] --> N[搜索文本或正则]
M --> O[查看IRC信息]
M --> P[区分不同系统ping]
通过以上工具和方法,我们可以构建一个全面的网络监测和故障排查体系,确保网络的高效稳定运行。在实际应用中,可根据具体需求选择合适的工具和方法,灵活运用以解决各种网络问题。
网络故障排查工具全解析
6. 工具使用场景总结
不同的网络工具适用于不同的场景,以下是一个总结表格,帮助你根据具体需求选择合适的工具:
| 工具名称 | 使用场景 | 操作示例 |
| — | — | — |
| mtr | 综合检查网络路径,查找存在问题的路由器,定期监测网络性能 |
mtr -r -c100 oreilly.com >> mtr.txt
|
| tcpdump | 深入分析网络流量,捕获特定主机、端口、协议的流量,排查网络异常 |
tcpdump -pi eth0 host uberpc
|
| iperf | 测量网络吞吐量、抖动和数据包丢失率,测试网络性能,排查多播故障 |
iperf -c xena
|
| ngrep | 搜索网络数据包中的文本字符串或正则表达式,监控特定内容 |
ngrep -qpd eth0 host ircserver -i carla
|
7. 案例分析
为了更好地理解这些工具的实际应用,下面通过几个案例进行说明。
案例一:网络延迟高
现象:用户反馈访问某个网站时延迟很高。
排查步骤:
1. 使用
mtr
工具检查网络路径,确定是否存在某个路由器导致延迟过高。
mtr -r -c100 targetwebsite.com >> mtr.txt
-
查看
mtr结果,如果发现某个路由器的丢包率高或延迟长,使用dig或whois工具查找该路由器的归属,并联系相关方解决问题。 -
如果
mtr结果显示网络路径正常,可以使用tcpdump捕获与该网站的通信流量,分析是否存在异常。
tcpdump -pi eth0 host targetwebsite.com
案例二:多播故障
现象:多播视频流无法正常播放。
排查步骤:
1. 在多播主机上使用
iperf
进行测试,以确定是否存在网络性能问题。
admin@host1:~$ iperf -sB 239.0.0.1
admin@host2:~$ iperf -sB 239.0.0.1
admin@host3:~$ iperf -sB 239.0.0.1
carla@xena:~$ iperf -c 239.0.0.1
- 如果测试结果显示丢包率高或抖动大,可以调整网络配置或联系网络服务提供商解决问题。
-
使用
tcpdump捕获多播流量,分析是否存在数据包丢失或错误。
tcpdump -pi eth0 src net 239.0.0.0/8
案例三:监控员工网络行为
需求:监控员工在 IRC 上的交流内容。
操作步骤:
使用
ngrep
工具搜索特定关键词。
ngrep -qpd eth0 host ircserver -i keyword
8. 注意事项
在使用这些网络工具时,需要注意以下几点:
-
权限问题
:部分工具(如
tcpdump
)需要 root 权限才能运行,确保以管理员身份执行命令。
-
网络流量
:一些工具(如
mtr
、
iperf
)会产生大量网络流量,避免在网络高峰期或对网络性能要求高的环境中频繁使用。
-
数据安全
:捕获的网络数据包可能包含敏感信息,妥善保管和处理这些数据,避免泄露。
-
工具兼容性
:不同操作系统和版本的工具可能存在差异,在使用前了解工具的兼容性和使用方法。
9. 总结与展望
网络故障排查是保障网络稳定运行的重要工作,而合适的工具可以大大提高排查效率。
mtr
、
tcpdump
、
iperf
和
ngrep
等工具各有特点,在不同的场景中发挥着重要作用。通过合理运用这些工具,我们可以快速定位和解决网络问题,确保网络的高效稳定运行。
随着网络技术的不断发展,网络环境变得越来越复杂,对网络故障排查工具的要求也越来越高。未来,我们可以期待更智能、更便捷的网络故障排查工具出现,帮助我们更好地应对各种网络挑战。
graph LR
A[网络故障] --> B[选择工具]
B --> C{mtr}
B --> D{tcpdump}
B --> E{iperf}
B --> F{ngrep}
C --> G[检查网络路径]
D --> H[分析网络流量]
E --> I[测量网络性能]
F --> J[搜索特定内容]
G --> K[定位问题路由器]
H --> L[发现异常流量]
I --> M[解决多播故障]
J --> N[监控网络行为]
K --> O[联系相关方解决]
L --> P[调整网络配置]
M --> Q[优化网络性能]
N --> R[合规管理]
通过以上的分析和总结,我们可以看到这些网络工具在网络故障排查和管理中的重要性。在实际工作中,我们要不断学习和掌握这些工具的使用方法,灵活运用它们来解决各种网络问题,为网络的稳定运行提供有力保障。同时,也要关注网络技术的发展趋势,及时更新和完善我们的故障排查方法和工具,以适应不断变化的网络环境。
超级会员免费看
1602

被折叠的 条评论
为什么被折叠?



