如何被动地监控TCP数据包丢失? (Linux)的

我怎样才能被动地监视TCP / TCP连接上的数据包丢失?

基本上,我想要一个位于后台的工具,通过观看TCP ack / nak /重新传输来生成一个关于哪个对等IP地址“似乎”遭受严重损失的报告。

像我发现SF这样的大多数问题build议使用像iperf这样的工具。 但是,我需要监视从我的机器上真正的应用程序的连接。

这个数据只是坐在那里的Linux TCP堆栈?

    对于您的问题规模的一般意义, netstat -s会跟踪您的总重传次数。

     # netstat -s | grep retransmitted 368644 segments retransmitted 

    您可以asu grep segments获得更详细的视图:

     # netstat -s | grep segments 149840 segments received 150373 segments sent out 161 segments retransmitted 13 bad segments received 

    为了更深入的潜水,你可能会想要启动Wireshark。

    在Wireshark中,将filter设置为tcp.analysis.retransmission以查看按stream重传。

    这是我能想出的最好的select。

    其他死angular探讨:

    • netfilter / conntrack工具似乎不会继续转发
    • stracing netstat -s显示它只是打印/proc/net/netstat
    • / proc / net / tcp中的第9列看起来很有希望,但不幸的是似乎没有被使用。

    这些统计信息位于/ 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 

    当然,如果你想和networkingstream量并行,只需要在-s包含n

     [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 

    您可以使用ss工具来获取详细的TCP统计信息:

     $ /sbin/ss -ti 

    在Debian下,使用apt-get install iproute来获取二进制文件。

    看起来北卡罗来纳大学(UNC)的一些人build立了一个实用程序来调查这个:

    方法

    TCP是一个经过修改的传统协议的典型例子。 不幸的是,对TCP丢失检测/恢复机制等基础的评估并不全面。 我们的目标是对TCP丢失及其对TCP性能的影响进行完整的现实评估。

    我依靠对实际TCP连接的被动分析来达到分析中所需的细节和真实性水平。

    http://www.cs.unc.edu/~jasleen/Research-passivetcp.htm#Tool

    工具

    该工具的目的是提供比由tcpanaly,tcpflows,LEAST和Mystery等在先工具提供的更加完整和准确的结果来识别和表征不按顺序的段。 我们的方法将每个数据包追踪中出现的无序(OOS)段分类为以下类别之一:由超时,重复ACK,部分ACK,select性ACK或隐式恢复触发的networking重新sorting或TCP重新传输。 此外,还要评估每个转发是否需要。

    我不会说这是生产质量。 以前我已经构build了快速Perl脚本来将ip / port / ack元组存储在内存中,然后报告扫描pcap输出中的重复数据,这看起来像提供了更彻底的分析。

    你可能想看看dropwatch工具。