我如何才能被动地监控往返于我的机器的 TCP 连接的数据包丢失情况?
基本上,我想要一个在后台运行的工具,它监视 TCP ack/nak/重新传输,以生成一份报告,说明哪些对等 IP 地址“似乎”正在遭受严重损失。
我发现 SF 的大多数此类问题都建议使用 iperf 之类的工具。但我需要监控我机器上与真实应用程序之间的连接。
这些数据只是存在于 Linux TCP 堆栈中吗?
答案1
从总体上看,问题的规模netstat -s
将跟踪您的总重传次数。
# netstat -s | grep retransmitted
368644 segments retransmitted
您还可以使用 grep 来segments
获取更详细的视图:
# netstat -s | grep segments
149840 segments received
150373 segments sent out
161 segments retransmitted
13 bad segments received
为了更深入地了解,您可能需要启动 Wireshark。
在 Wireshark 中设置过滤器以tcp.analysis.retransmission
查看按流重新传输。
这是我能想到的最佳选择。
探索的其他死胡同:
- netfilter/conntrack 工具似乎不保留重传
- stracing
netstat -s
显示它只是打印/proc/net/netstat
- /proc/net/tcp 中的第 9 列看起来很有希望,但不幸的是它似乎未被使用。
答案2
这些统计数据位于 /proc/net/netstat 中,并且collectl
将以交互方式为您监视它们或将其写入磁盘以供以后播放:
[root@poker ~]# collectl -st
waiting for 1 second sample...
#<------------TCP------------->
#PureAcks HPAcks Loss FTrans
3 0 0 0
1 0 0 0
当然,如果您想并排查看网络流量,只需n
包含-s
:
[root@poker ~]# collectl -stn
waiting for 1 second sample...
#<----------Network----------><------------TCP------------->
# KBIn PktIn KBOut PktOut PureAcks HPAcks Loss FTrans
0 1 0 1 1 0 0 0
0 1 0 1 1 0 0 0
答案3
您可以使用该ss
工具获取详细的 TCP 统计信息:
$ ss --tcp --info
在 Debian 下,使用apt-get install iproute
获取二进制文件。
答案4
你可能想看看dropwatch
公用事业。