【发布时间】: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