UDP 负载长度和数据包传输

UDP payload length and packet transmission

我有 1245 MB 的数据用于通过 IPv4 上的 UDP 传输。 为了计算从 A 到 B 然后 B 中继到 C 的数据包传输的预期数量,如果数据以 320 字节大小的块(即有效负载 = 320 字节)传输,并且 header 是 20 字节,我们是否从中减去 20 320 还是加入?

For instance, 
1245MB = 1305477120 bytes
Total UDP Payload = 320 - 20 or 320 + 20?

数据包包含:

  • IP header(20 字节)
  • UDP header(8 字节)
  • 您的负载(320 字节)。

总计:348 字节。

在计算数据包数量时,您无需考虑传输层或网络层的大小 header。您指定了 320 字节的负载大小,这正好在没有分段的 UDP 负载的最大大小范围内。

每次您调用 send() 或 sendto() 时,都会创建一个数据报(数据包),因此数学只是将总大小除以您的 320 字节块:

1305477120 / 320 = 4079616 个数据包

附带一点,如果您要使 UDP 负载更大,那将减少数据包的总数。在很多网络上,MTU 是 1500 字节,所以你可以发送:

1500 字节 - IP header(20 字节)- UDP header (8) 字节 = 1472 字节用于有效载荷

作为第二个方面,如果您的 UDP 负载太大,即负载 + IP/UDP headers 超过 MTU,那么您对 ​​send() 的单次调用将导致多个 IP片段数据包。