【问题标题】:Sending a single packet, how much does the size matter?发送单个数据包,大小有多大关系?
【发布时间】:2016-11-15 21:39:22
【问题描述】:

我正在尝试向另一台服务器发送一个 UDP 数据包,以通知它有新信息可用。数据包中的数据很小,大约 100 字节,它基本上是一个事件类型和一个 UUID。

我知道单个数据包 (What is the largest Safe UDP Packet Size on the Internet) 中容纳多少信息的限制,而且我对此没有任何问题。而且我知道 UDP 数据包可能会被丢弃 - 在我的情况下这很好,数据包只是一个建议,以优化其他服务器了解新数据的速度,丢失数据包会使应用程序响应速度变慢但会不要破坏东西。

考虑到这一点,我的问题是该数据包的大小有多重要?如果我将信息编码为 JSON,它看起来将是大约 75-100 个字节。我还可以将信息编码为原始二进制形式,这种形式会小得多(我可能可以将其放入 30 字节或更少的内容中)。

带有 100 字节有效负载的 UDP 数据包会比 30 字节有效负载的传输“慢”吗?我知道每个数据包都有开销,但是如果我已经避免了碎片(这显然会使事情变得更慢和更不可靠),我不清楚数据包大小对性能的影响有多大。有效载荷的大小会影响数据包被丢弃的可能性吗?

总而言之,我正在尝试决定是制作更神秘但更紧凑的格式,还是使用 JSON 更好每个数据包的大小。

【问题讨论】:

  • 在您提到的限制范围内,这并不重要。您需要注意,以太网也有一个最小大小,因此将其做得非常小可能根本没有任何效果。
  • 再想一想,在我看来,在网络不饱和的情况下,它几乎没有什么区别。数据包将传输,如果它更长,则可能需要相对更多的纳秒(在 1Gb 网络上每个比特大约 1 纳秒)。如果这些数据包使网络饱和,那么额外的约 60% 的空间可能很重要(通过避免由于较小的大小而导致网络饱和)。否则,它似乎真的不会有任何实际效果。我认为我的用例根本不会使网络饱和,但我并没有真正考虑过。

标签: performance network-programming udp p2p


【解决方案1】:

关于 100 Bytes 或 30 Bytes 的数据大小,无所谓。它不会使您的应用程序性能降低或提高。此外,大小不会影响路由器丢弃数据报的可能性。当出现拥塞时,路由器会丢弃数据报。

但是,根据您的应用程序,您可能希望在单个 UDP 消息中发送更多事件。这里有 100 字节和 30 字节的区别。 UDP 数据报的 IP 报头开销为 20 字节,UDP 报头(+以太网报头)为 8 字节。为了更好地利用网络和 CPU 资源,最好为每个数据报发送更多数据,因此使用 30 字节,您将能够在单个数据报中发送约 3 倍以上的数据。这确实会影响性能。在一个数据报中发送 N 个事件可以节省网络资源和 CPU 资源(更少的消息、更少的消息开销、更少的中断等),如果将 N 个事件打包在一个数据报中,则每个数据报的建议限制是 MTU,对于以太网是 1500 字节,考虑到 20 字节的 IP 标头和 8 字节的 UDP 标头,您可以发送高达 1472 字节的有效负载(14 个 100 字节的事件)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多