WireShark抓包很多人都会,也知道简单的分析,我这个例子是比较经典的一个分析过程,判断是本端发送问题还是对端接收问题。
一、事件背景
我的架构是qrsyslog–>rsyslog-proxy3–>haproxy(与前者同一台)–>flume,rsyslog1作为发送端,入口流量平稳,但是出口流量总是一卡一卡的。
二、分析过程
1、使用命令工具分析是卡在那个连接上
# iftop
图形最右边三列分别表示过去 2s 10s 40s 的平均流量,可以看出当前截图的流量降到了低值。下面图为发送端(qrsyslog)和接收端(rsyslog-proxy3)。
2、开始使用tcpdump抓包分析(两端需要同时抓包)
# 发送端
# tcpdump -i eth0 host 106.75.9.217 and port 5150 -w /tmp/qrsyslog-5150-1600.cap
# 接收端
# tcpdump -i eth0 port 4444 -w /tmp/rsyslog-proxy3-1600.cap
3、取出包使用Wireshark分析
- 先分析发送端 qrsyslog-5150-1600.cap ,大致浏览一遍后,使用关键字进行查找找出滑动窗口主动降低包(谁发win=0,就代表谁处理不过来并告知对端),发现没有。 为什么看 win 这个参数?
- 使用统计分析分析整个tcp的吞吐量
可以看到在这四个时间点,带宽出现低值,但是又没丢包也没干嘛,可以看出是正常窗口收缩。 - 再分析接收端发出的包 rsyslog-proxy3-1600.cap
上面这四个包的时间刚好对上发送端带宽低值的时间点,由此可见是接收端 rsyslog-proxy3 发往 10.10.159.133(flume3)的时候,10.10.159.133处理不过来导致。