预测Java应用程序生成的网络流量开销

时间:2011-04-17 21:37:21

标签: java networking tcp udp packet

我想尝试计算通过网络发送/接收的数据量(字节数)。我发送/接收TCP和UDP数据包,因此我需要能够计算这些数据包的大小,包括它们各自的标头。我看了这个问题:Size of empty UDP and TCP packet它列出了标题的最小大小,但是要改变的诽谤是什么?我应该只添加我在数据包中发送的字节数,但是最小标头的大小是多少?另外,我知道在某些时候(n字节)数据太大而不能只适合一个数据包。

另一件事,客户端是移动设备,因此可以通过蜂窝或wifi接收。我不确定两者之间的数据包大小是否存在差异,但我可能只想假设更大的数据包。

所以我的问题是,假设数据长度为n个字节:

1)TCP数据包有多大,假设它只适合一个数据包?

2)UDP数据包有多大,假设它只适合一个数据包?

3)是否有一种简单的方法可以确定超出一个数据包所需的字节数?对于TCP和UDP。

2 个答案:

答案 0 :(得分:2)

让我们假设我们只讨论以太网和IPv4

Look at your interface MTU, which has already subtracted 
    the size of the ethernet headers for the OS I can 
    remember (linux and FreeBSD)

Subtract 20 bytes for a normal IP header (no IP options)

Subtract 20 bytes for a normal TCP header

Or

Subtract 8 bytes for a UDP header

这就是您可以将多少数据打包到一个IPv4数据包中。因此,如果您的TCP数据长度为n字节,则您的总以太网有效负载为(n + 20 + 20); UDP的以太网负载是(n + 20 + 8)

编辑问题

RE:MTU

您的接口MTU是您的驱动程序允许您封装到线路上的最大以太网负载。我减去因为我们假设我们从MTU开始并处理封装链(即eth -> ip -> tcp|udp);你不能发送没有IP头的TCP或UDP,所以必须考虑到这一点..

RE:计算应用程序开销

关于应用程序产生的开销的理论计算很好,但如果你想要有意义的数字,我suggest lab testing。诸如每个客户端会话的平均数据传输每分钟客户端命中率并发客户端等使用因素可以在某些(异常)情况下产生影响。

答案 1 :(得分:0)

遗憾的是,不可能完全确定这一点。数据包可能会通过网络硬件在接收器的路径上进行拆分,重组等,因此无法保证计算确切的字节数。

以太网将帧大小定义为1500字节,如果减去标头,则会使剩余1460字节。使用高达9k字节的巨型帧通常仅在本地支持。当数据包到达WAN时,它将被分段。