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



我正在编写一个Java服务器(java.net.Socket, java.net.ServerSocket, java.io.ObjectOutputStream, java.io.ObjectInputStream),我知道我将为它分配有限的带宽。

我已经为我的输出和输入流写了一个装饰器对象,这样我就可以计算出有多少字节通过它来进行分析。但是,这不会给我任何指示,我正在使用的连接开销的数量。

我不认为会有很多,但我想为此做些准备。我不打算优化它,我只是想知道出于后勤原因(我必须请求多少带宽等)它将是多少

我不可能是第一个尝试获得此信息的人,但我似乎找不到关于Java套接字和TCP/IP开销的良好资源。(也许这是因为没有什么值得注意的发现……如果我们是每分钟kb,这真的不是一个太大的问题,但我仍然想知道!

谢谢!

根据我们目前掌握的信息,这个问题很难回答……例如,你所说的"开销"是什么?它只是TCP ACK数据包,还是所有数据包开销(例如以太网、IP和TCP头),而不是数据负载?

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

老实说,你最好在实验室里建模,并对每分钟的命中率和并发客户端做一些假设……这会给你一些大概的数字。将应用程序的带宽限制在您的预算允许的最大范围内……然后开始后退……您可以通过在双端口Linux机器上使用wanem来限制带宽。

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

HTH,mike(整天都在测试网络设备)

TCP开销根据许多因素而变化,但在满负荷时通常在5%左右。

基本上每个"包"有20个字节的IP报头(如果是IPv6则更多)加上20-32个字节的TCP报头。数据包大小根据网络设备和条件而变化,但通常在1500字节左右。

本页有一些详细信息:http://sd.wareonearth.com/~phil/net/overhead/

在我看来,你可以完全忽略keep-alive,因为它们只在连接空闲时使用。

最新更新