问题描述
|
我正在编写Java服务器(
java.net.socket
,java.net.ServerSocket
,java.io.ObjectOutputStream
,java.io.ObjectInputStream
),我知道将为其分配有限的带宽。
我已经为输出和输入流编写了一个装饰器对象,因此我可以计算通过它进行分析时要经过多少字节。但这不会给我任何指示我正在用于连接的开销量的迹象。
我预计不会很多,但我想为此做好准备。我不会尝试对其进行优化,我只是想知道由于后勤原因(我必须请求多少带宽等),它将达到多少?
我不能成为第一个尝试获取此信息的人,但是我似乎无法在Java套接字和TCP / IP的开销上找到很好的资源。 (也许是因为没有什么值得一提的发现...如果我们每分钟kb的数量级,那么实际上并没有太大的问题,但是我仍然想知道!)
谢谢!
解决方法
这个问题很难用我们现在拥有的信息来回答。例如,您称什么为“开销”?除数据有效负载外,它是否仅是TCP ACK数据包或所有数据包开销(例如,以太网,IP和tcp标头)?
每分钟有多少个连接?每个连接的平均数据传输量是多少?如果存在许多寿命很短的连接,则您的开销要求会上升(由于三向握手和连接关闭要求)...如果客户端读取的数据不多,但您可能会消耗很多开销客户一次可以保持连接开放数天。
坦白地说,您在实验室中建模并对每分钟的点击率和并发客户端进行一些假设时,会比您好50倍……这将为您提供一些参考。尝试将提供给应用程序的带宽限制为预算允许的最大...然后开始退缩...您可以在双端口linux计算机上使用wanem来限制带宽。
获得这样的实验室结果远胜于理论计算。
HTH,
\\ mike(全天都在测试网络设备)
,TCP开销取决于许多因素,但在全容量情况下通常约为5%。
基本上每个“数据包”都有20个字节的IP头(如果是IPv6,则还有20个字节)加上20-32个字节的TCP头。数据包的大小根据网络设备和条件的不同而有所不同,但通常在1500字节左右。
此页面有一些详细信息:http://sd.wareonearth.com/~phil/net/overhead/
我认为您可以完全忽略保持活动状态,因为它们仅在连接空闲时才使用。