如何被动监控tcp丢包?(Linux)

non*_*ot1 71 linux performance-monitoring network-monitoring tcp packetloss

如何被动监视进出机器的 TCP 连接上的数据包丢失?

基本上,我想要一个位于后台并监视 TCP ack/nak/re-transmits 的工具,以生成关于哪些对等 IP 地址“似乎”正在遭受重大损失的报告。

我在 SF 中发现的大多数此类问题都建议使用 iperf 之类的工具。但是,我需要监视到/来自我机器上真实应用程序的连接。

这些数据是否只是位于 Linux TCP 堆栈中?

Joe*_*l K 61

一般而言,您的问题的规模netstat -s将跟踪您的重传总数。

# netstat -s | grep retransmitted
     368644 segments retransmitted
Run Code Online (Sandbox Code Playgroud)

您可以使用 grepsegments获取更详细的视图:

# netstat -s | grep segments
         149840 segments received
         150373 segments sent out
         161 segments retransmitted
         13 bad segments received
Run Code Online (Sandbox Code Playgroud)

要进行更深入的研究,您可能想要启动 Wireshark。

在 Wireshark 中,将过滤器设置tcp.analysis.retransmission为按流查看重传。

这是我能想到的最好的选择。

探索的其他死胡同:

  • netfilter/conntrack 工具似乎不保持重传
  • stracingnetstat -s显示它只是在打印/proc/net/netstat
  • /proc/net/tcp 中的第 9 列看起来很有希望,但不幸的是它似乎没有使用。

  • 出于某种原因,它对我来说拼写为“retransmited”(Ubuntu Server 14)。 (6认同)
  • 重传与发送或接收的最佳速率是多少? (2认同)

小智 14

这些统计信息位于 /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
Run Code Online (Sandbox Code Playgroud)

当然,如果你想看看,然后并排侧与网络流量,只包括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
Run Code Online (Sandbox Code Playgroud)


小智 8

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

$ /sbin/ss -ti
Run Code Online (Sandbox Code Playgroud)

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

  • @AndrewB:你可以做`watch ss -ti`。 (2认同)