TCP / IP应用程序Keepalive大小和带宽开销

时间:2011-04-14 21:02:20

标签: java performance sockets tcp

我正在编写Java服务器(java.net.Socketjava.net.ServerSocketjava.io.ObjectOutputStreamjava.io.ObjectInputStream),我知道我将为其分配有限的带宽。

我为输出和输入流编写了一个装饰器对象,因此我可以计算通过它的字节数以进行分析。但这不会给我任何关于我用于连接的开销量的指示。

我预计它不会太多,但我想为此做好准备。我不打算尝试对其进行优化,我只是想知道出于后勤原因会有多少(我必须要求多少带宽等)。

我不能成为第一个尝试获取此信息的人,但我似乎无法找到有关Java套接字和TCP / IP开销的良好资源。 (也许那是因为没有什么值得注意的......如果我们的每分钟大约为kb,那真的不是什么问题,但我还是想知道!)

谢谢!

2 个答案:

答案 0 :(得分:5)

这个问题很难回答我们现在掌握的信息......例如,你称之为'开销'是什么?是否只有TCP ACK数据包,或者除了数据有效负载以外的所有数据包开销(例如以太网,IP和tcp标头)?

每分钟有多少个连接?每个连接的平均数据传输是多少?如果存在许多非常短暂的连接,则您的开销要求会上升(由于3次握手和连接关闭要求)...如果客户端不读取大量数据,您可能也会有很高的开销,但是很多客户端保持连接一次打开几天。

老实说,在实验室中对此进行建模并对每分钟命中率和并发客户端做出一些假设,你会有50倍的优势......这会给你一些大概的数字。将限制提供给应用程序的带宽限制在预算允许的最大值...然后开始退出...您可以在双端口Linux机器上使用wanem来限制带宽。

获得这样的实验室结果远比理论计算好。

HTH, \ mike(谁花了一整天测试网络设备)

答案 1 :(得分:4)

TCP开销因许多因素而异,但在满负荷时通常约为5%。

基本上每个“数据包”都有20个字节的IP标头(如果是IPv6则还有20个字节)加上20-32字节的TCP标头。数据包大小因网络设备和条件而异,但通常在1500字节附近。

此页面包含一些详细信息:http://sd.wareonearth.com/~phil/net/overhead/

在我看来,你可以完全忽略保持活动,因为它们只在连接闲置时使用。