【发布时间】:2010-04-21 21:37:34
【问题描述】:
我还有一个关于这个问题的问题,但我没有正确地问,所以我又来了!
我通过分块发送文件来发送文件。现在,我正在为该块的大小使用不同的数字,看看哪种大小最有效。
在 localhost 上进行测试时,任何块大小似乎都可以正常工作。但是当我通过网络对其进行测试时,似乎最大块大小为 8191 字节。如果我尝试更高的东西,传输会变得非常、痛苦、缓慢。
为了说明会发生什么,这里是当我使用 8191 字节的块大小和使用 8192 字节的块大小时 Wireshark 日志的前 100 行:(发送方是 192.168.0.102,接收方是192.168.0.100)
8191:http://pastebin.com/E7jFFY4p
8192:http://pastebin.com/9P2rYa1p
请注意在 8192 日志中的第 33 行,接收方需要很长时间才能确认数据。这在第 103 行和第 132 行再次发生。我相信这种延迟是问题的根源。
请注意,我没有修改 SO_SNDBUF 选项和 TCP_NODELAY 选项。
所以我的问题是,为什么我在发送 8192 字节的文件时收到延迟的 ACK,而在使用 8191 字节的块时一切正常?
【问题讨论】:
-
你能显示一些代码吗?这可能会让我们更好地了解正在发生的事情。另外,您的代码是否在双方都运行?还是只是连接的一侧?
-
我添加了一些相关部分的伪代码。
标签: windows networking sockets winsock