我想尝试计算通过网络发送/接收的数据量(字节)。我发送/接收TCP和UDP数据包,因此我需要能够计算这些数据包的大小,包括它们各自的头。我看了这个问题:Size of empty UDP and TCP packet并且它列出了头的最小大小,但是这个诽谤是要改变的吗?我应该只加上我在数据包中发送的字节数,而不是最小报头的大小吗?另外,我知道在某个点(n字节)的数据将太大,无法容纳在一个包。
另一方面,客户机是一个移动设备,因此它可以通过蜂窝或WiFi接收。我不确定这两个包的大小是否有差别,但我可能只是想假设什么是更大的。
所以我的问题是,假设数据是n字节长:
1)假设TCP数据包都放在一个数据包中,那么它会有多大?
2)假设所有数据包都适合一个数据包,那么UDP数据包会有多大?
3)是否有一种简单的方法来确定溢出一个数据包所需的字节数?对于TCP和UDP。
最佳答案
假设我们只讨论以太网和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数据的长度小于cc>字节,那么总的以太网负载为
n
;udp的以太网负载为(n + 20 + 20)
。为问题编辑
回复:MTU
您的接口MTU是最大的以太网负载,您的驱动程序将允许您封装到电线上。我减去是因为我们假设我们从MTU开始,然后计算封装链(即
(n + 20 + 8)
);如果没有IP头,就不能发送TCP或UDP,因此必须考虑到这一点。回复:计算应用程序开销
关于您的应用程序将生成的开销的理论计算是很好的,但是如果您想要有意义的数字,我会suggest lab testing。在某些情况下,使用率因素(如每个客户端会话的平均数据传输、每分钟客户端命中率和并发客户端)可能会产生影响。