2010-12-16 68 views
1

我想使用TcpClient创建带宽估计工具。我所面临的问题是,我想在预定义的时间内执行测量(而不是预定义的缓冲区数据传输长度)。如果我使用循环(重复传输小块数据),会不会降低性能(手动碎片vs自动碎片)?TcpClient带宽估计

回答

1

这取决于您是否禁用Nagle算法。如果你这样做,那么是的,你会自己分割东西。如果你不这样做,你不可能实现你的目标 - 因为当你认为它的数据可能不是实际上是 ......除非连接的另一端当然发回最后的“确认”。

我建议你使用一个小样本来计算出粗糙的速度,然后根据它创建一个更大的样本,预测它需要多长时间。无论如何,你需要测量时间 - 这不像你打预定时间的准确 - 所以它不应该有太大的不同。无论如何,你总是可以在一定程度上调整大小 - 我预计你最终会发送大量数据包,除非它是一个非常慢的网络,所以如果你决定中途只发送200K而不是300K,这应该没有太大的区别。

这可能听起来像你的原始建议,当然 - 但我只是在谈论每个呼叫发送“相当大”的数据块......说16K。 (无论如何,它比分组大小要大得多)。这应该不会影响分段,但仍然可以让你在进行时稍微调整一些东西。我不会建议你发送微小的小包。

+0

请原谅我问,但我真的不明白。如我错了请纠正我。如果我禁用nagle算法,我必须通过重复发送小块数据来手动分割我的数据。如果我不禁用nagle算法,我的数据将被自动分割。如果我不禁用nagle算法,我不可能实现我的目标(带宽估计?),因为发送的数据实际上可能在我认为收到时没有收到。有点困惑在这里。 – 2010-12-16 07:30:22

+0

@publicENEMY:我应该澄清一下......如果你可以让连接的另一端在收到所有内容时给你一些价值 - 在应用层面有效地使“ack”可见 - 那么它会好起来的......略微在发送端的计算能力方面效率不高,但与网络时间相比不太可能是重要的。 – 2010-12-16 07:33:21

+0

这里我认为tcp是可靠的(保证收到正确的数据)。是说如果我禁用老鹰,不保证发送的数据被接收? – 2010-12-16 08:09:34