我想尝试计算通过网络发送/接收的数据量(字节数)。我发送/接收TCP和UDP数据包,因此我需要能够计算这些数据包的大小,包括它们各自的标头。我看了这个问题:Size of empty UDP and TCP packet它列出了标题的最小大小,但是要改变的诽谤是什么?我应该只添加我在数据包中发送的字节数,但是最小标头的大小是多少?另外,我知道在某些时候(n字节)数据太大而不能只适合一个数据包。
另一件事,客户端是移动设备,因此可以通过蜂窝或wifi接收。我不确定两者之间的数据包大小是否存在差异,但我可能只想假设更大的数据包。
所以我的问题是,假设数据长度为n个字节:
1)TCP数据包有多大,假设它只适合一个数据包?
2)UDP数据包有多大,假设它只适合一个数据包?
3)是否有一种简单的方法可以确定超出一个数据包所需的字节数?对于TCP和UDP。
答案 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)
。
您的接口MTU是您的驱动程序允许您封装到线路上的最大以太网负载。我减去因为我们假设我们从MTU开始并处理封装链(即eth -> ip -> tcp|udp
);你不能发送没有IP头的TCP或UDP,所以必须考虑到这一点..
关于应用程序产生的开销的理论计算很好,但如果你想要有意义的数字,我suggest lab testing。诸如每个客户端会话的平均数据传输,每分钟客户端命中率和并发客户端等使用因素可以在某些(异常)情况下产生影响。
答案 1 :(得分:0)
遗憾的是,不可能完全确定这一点。数据包可能会通过网络硬件在接收器的路径上进行拆分,重组等,因此无法保证计算确切的字节数。
以太网将帧大小定义为1500字节,如果减去标头,则会使剩余1460字节。使用高达9k字节的巨型帧通常仅在本地支持。当数据包到达WAN时,它将被分段。