我有在Ubuntu上运行的apache服务器。客户端连接并下载图像。我需要提取基础TCP连接的RTT估算值。有没有办法做到这一点?也许像在 Debug模式下运行我的tcp堆栈以使其将此信息记录到某处?

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

UPDATE :

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

最佳答案

这可以使用tcpprobe完成,该模块是使用kprobe记录响应于传入数据包的TCP连接状态而将钩子(Hook)插入tcp_recv处理路径的模块。

假设您要探测端口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 :仅登录公寓更改(如果使用此选项,则您的输出可能为空)

现在pid是记录探针的过程。要停止,只需终止此过程:
kill $pid

output.out的格式(根据198行的source):
[time][src][dst][length][snd_nxt][snd_una][snd_cwnd][ssthresh][snd_wnd][srtt][rcv_wnd]

10-08 06:57