TCP窗口大小libnids

时间:2011-09-24 21:43:36

标签: tcp libpcap

我的意图是编写一个应用程序。 libnids上的图层处理。使用libnids API的原因是因为它可以模拟Linux内核TCP功能。 Libnids将返回hlf-> count_new,它是最后一次调用TCP回调函数的字节数。但是每次有新数据包时都会调用tcp_callback,因此hlf-> count_new包含一个TCP段。

然而,该应用程序。层应该接收TCP窗口缓冲区,而不是单独的TCP段。

有没有办法获取TCP窗口的数据(而不是TCP段)?换句话说,要使libnids传递TCP窗口缓冲区数据。

提前感谢!

1 个答案:

答案 0 :(得分:1)

你有一个误解。 TCP窗口旨在控制飞行中的数据量。应用程序读取并不总是触发TCP窗口更改。因此,您所寻找的信息无法在您正在寻找的地方获得。

例如,考虑窗口是否为128KB且已发送了8个字节。无论应用程序是否读取它们,接收TCP堆栈都必须确认这8个字节,否则TCP连接将超时。现在假设应用程序读取一个字节。 TCP堆栈将窗口放大一个字节是没有意义的 - 如果正在使用窗口缩放,即使它想要,也不能这样做。

然后是什么?如果四秒钟后应用程序读取另一个字节,请再次调整窗口?有什么意义呢?

窗口的目的是控制两个TCP堆栈之间的数据流,防止缓冲区无限增长,并控制“飞行中”的数据量。它只是间接反映了应用程序从TCP堆栈中读取的内容。

你甚至想要这个也很奇怪。即使您可以告诉应用程序已阅读的内容,对您来说可能会有什么用处?