我试图将UDP数据包发送到另一台服务器,以通知它有新信息可用。数据包中的数据相当小,大约100字节,它基本上是一个事件类型和一个UUID。
我意识到单个数据包(What is the largest Safe UDP Packet Size on the Internet)中有多少信息的限制,并且看起来我没有任何问题。而且我知道UDP数据包可能会被丢弃 - 在我的情况下这很好,数据包只是一个建议,以优化其他服务器知道新数据的速度,丢失数据包将使应用程序响应较慢但不会破坏。
考虑到这一点,我的问题是该数据包的大小是多少重要?如果我将信息编码为JSON,它看起来大约是75-100字节。我也可以用原始的二进制形式对信息进行编码,这种形式会小得多(我可以将它放在30字节或更少的字节中)。
具有100字节有效负载的UDP数据包是否会传输"更慢"超过30字节的有效载荷?我知道每个数据包都有开销,但是如果我已经避免了碎片(这显然会让事情变得更慢,更不可靠),我不清楚数据包大小对性能的影响程度。有效载荷的大小是否会影响数据包被丢弃的可能性?
总之,我试图决定制作更加神秘但更紧凑的格式是否更好,或者使用JSON,这将更容易修改并保持与应用程序的向后兼容性发展,但在每个数据包的大小方面肯定更大。
答案 0 :(得分:0)
大约100字节或30字节的数据大小无关紧要。它不会使您的应用程序具有更低或更高的性能。此外,大小不会影响在路由器上丢弃的数据报的可能性。当拥塞时路由器丢弃数据报。
但是,根据您的应用程序,您可能希望在单个UDP消息中发送更多事件。这里有100字节和30字节之间的差异。 UDP数据报的IP报头开销为20字节,UDP报头(+以太网报头)的开销为8字节。为了更好地利用网络和CPU资源,最好每个数据报发送更多数据,因此使用30字节,您可以在单个数据报中发送大约3倍的数据。这确实会影响性能。在一个数据报中发送N个事件可以节省网络资源和CPU资源(消息减少,消息开销减少,中断次数减少等),如果在一个数据报中打包N个事件,则每个数据报的建议限制为MTU,以太网为1500字节考虑到IP头的20个字节和UDP头的8个字节,您可以发送最多1472个字节的有效载荷(14个100字节的事件)。