我正在尝试跟踪内核中特定 TCP 连接的拥塞窗口。我假设最简单的方法是使用 aprintk
或 aprintf
并打印出我假设snd_cwnd
在内核中的相应变量。
有没有更标准的方法来做到这一点?理想情况下,我想观察特定 TCP 连接的各种重要 TCP 参数如何变化。
我正在尝试跟踪内核中特定 TCP 连接的拥塞窗口。我假设最简单的方法是使用 aprintk
或 aprintf
并打印出我假设snd_cwnd
在内核中的相应变量。
有没有更标准的方法来做到这一点?理想情况下,我想观察特定 TCP 连接的各种重要 TCP 参数如何变化。
使用 printk 是正确的,实际上转储特定数据 printk 是最好的选择。
要观察特定 TCP 连接的参数,您可能需要 netfilter hooking 的帮助。使用 netfilter 内核模块 ( http://fcns.eu/2010/02/15/netfilter-hooks/ ),您可以跟踪特定连接并检查您想要的每个 tcp 数据包。
printk 仅在您使用低速传输时可用。使用快速传输,这些参数的更改数量很大,并且会溢出 printk 使用的 dmesg 缓冲区。过去,当这些参数发生变化时,我修改了一些代码以在内核和用户空间之间使用 relayfs 缓冲区。这些天来,系统窃听应该有助于以有效的方式获取内部信息。