我的意图是写一个应用程序。libnids之上的层进程。之所以使用libnids API,是因为它可以模拟Linux内核TCP功能。Libnids将返回hlf->count_new,它是自上次调用TCP回调函数以来的字节数。但是,每当有新的数据包传入时,tcp_callback都会被调用,因此hlf->count_new包含单个TCP段。
然而,这款应用。层应该接收TCP窗口缓冲区,而不是单独的TCP数据段。
有没有办法获取TCP窗口(而不是TCP数据段)的数据?换句话说,为了让libnids传递TCP窗口缓冲区数据。
提前感谢!
发布于 2011-09-25 07:55:24
你误会了。TCP窗口旨在控制传输中的数据量。应用程序读取并不总是触发TCP窗口更改。所以你所寻找的信息在你所寻找的地方是不可用的。
例如,假设窗口是128KB,并且已经发送了8个字节。无论应用程序是否读取这八个字节,接收TCP堆栈都必须确认它们,否则TCP连接将超时。现在假设应用程序读取一个字节。对于TCP堆栈来说,将窗口放大一个字节是没有意义的--如果窗口缩放正在使用中,那么即使它想要这样做,它也不能这样做。
然后呢?如果四秒钟后应用程序读取了另一个单字节,是否再次调整窗口?有什么意义呢?
该窗口的目的是控制两个TCP堆栈之间的数据流,防止缓冲区无限增长,并控制“传输中”的数据量。它只是间接反映应用程序从TCP堆栈读取的内容。
同样奇怪的是,你甚至想要这个。即使你能知道应用程序读取了什么,这对你有什么用处呢?
https://stackoverflow.com/questions/7542137
复制相似问题