【问题标题】:Extract TCP round trip time (RTT) estimations on linux在 Linux 上提取 TCP 往返时间 (RTT) 估计
【发布时间】:2016-01-20 18:25:56
【问题描述】:

我在 Ubuntu 上运行 apache 服务器。客户端连接并下载图像。我需要提取底层 TCP 连接的 RTT 估计。有没有办法做到这一点?也许像在调试模式下运行我的 tcp 堆栈以让它在某处记录此信息?

请注意,我不想运行 tcpdump 并从记录的跟踪中提取 RTT!我需要 TCP 堆栈的 RTT 估计(显然这是您可以使用 TCP_INFO 套接字选项获得的信息的一部分)。基本上需要像 tcprob (kprobe) 这样的东西来插入一个钩子并记录每个传入数据包(或每次更改)的 TCP 连接的估计 RTT。

更新

我找到了解决方案。 rtt、拥塞窗口等可以使用 tcpprobe 记录。我在下面发布了一个答案。

【问题讨论】:

  • 谢谢!是的,我对“ss”很熟悉,但这并不是我所需要的,因为它会给我一个非常粗略的 RTT 采样。我需要像 tcpprob (kprobe) 这样的东西来插入一个钩子,并在每个传入数据包(或每次更改)上记录 TCP 连接的估计 RTT。
  • 嗯。 Linux 拥塞控制算法是net/ipv4/ 目录中的可插拔模块。每个都以不同的方式计算 rtt (reno 根本不计算它!),所以我认为你必须挂钩到特定的实现。我看到你标记为cubic,所以那是tcp_cubic.c。我认为没有获取 rtt 的通用方法,但我肯定是错的......
  • 谢谢@indiv!是的,我还没有找到通用的方法来做到这一点,我可能需要自己动手做。我也在试验 ss ,看看它是否真的足以满足我的需要。我会及时通知你。
  • 天哪!我不敢相信 tcpprobe 一直在为我做这件事,我错过了!哈哈,我会尽快发布答案

标签: linux sockets tcp linux-kernel cubic


【解决方案1】:

这可以使用tcpprobe 来完成,这是一个模块,它使用kprobe 将一个钩子插入到tcp_recv 处理路径中,记录TCP 连接的状态以响应传入的数据包。

假设你想探测端口 443 上的 tcp 连接,你需要执行以下操作:

sudo modprobe tcp_probe port=443 full=1
sudo chmod 444 /proc/net/tcpprobe
cat /proc/net/tcpprobe > /tmp/output.out &
pid=$!

full=1:记录收到的每个 ack 数据包

full=0:仅登录 condo 更改(如果使用此选项,您的输出可能为空)

现在 pid 是记录探测的进程。要停止,只需终止此进程:

kill $pid

output.out的格式(根据第198行source):

[time][src][dst][length][snd_nxt][snd_una][snd_cwnd][ssthresh][snd_wnd][srtt][rcv_wnd]

【讨论】:

  • RTT 以“毫秒”为单位
  • 至少从 5.1.x 开始似乎不可用。你知道它是被删除还是只是重命名?
  • 嗯...不幸的是我不知道,因为我已经有一段时间没有使用这个了。
【解决方案2】:

使用ss 命令(iproute 包的一部分)可以在不需要任何额外内核模块的情况下完成此操作,该命令可以提供有关打开套接字的详细信息。它不会为每个数据包都显示它,但大多数信息是根据多个数据包计算的。例如。列出当前打开的 TCP(t 选项)套接字和相关的内部 TCP 信息(i)信息 - 包括拥塞控制算法、rttcwnd 等:

ss -ti

这是一些示例输出:

State       Recv-Q Send-Q        Local Address:Port        Peer Address:Port
ESTAB       0      0             192.168.56.102:ssh        192.168.56.1:46327
  cubic wscale:6,7 rto:201 rtt:0.242/0.055 ato:40 mss:1448 rcvmss:1392
advmss:1448 cwnd:10 bytes_acked:33169 bytes_received:6069 segs_out:134
segs_in:214 send 478.7Mbps lastsnd:5 lastrcv:6 lastack:5 
pacing_rate 955.4Mbps rcv_rtt:3 rcv_space:28960

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多