Performance 发送单个数据包时,大小有多重要?

Performance 发送单个数据包时,大小有多重要?,performance,network-programming,udp,p2p,Performance,Network Programming,Udp,P2p,我正在尝试向另一台服务器发送UDP数据包,通知它新信息可用。数据包中的数据相当小,大约100字节,基本上是一种事件类型和UUID 我意识到单个数据包中包含多少信息的局限性(),看起来我不会有任何问题。我知道UDP数据包可能会被丢弃——在我的情况下,这很好,数据包只是一个建议,以优化其他服务器了解新数据的速度,丢失数据包将使应用程序响应变慢,但不会中断 考虑到这一点,我的问题是,包的大小有多重要?如果我将信息编码为JSON,它看起来大约是75-100字节。我还可以将信息编码成一种原始的二进制形式,

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

我意识到单个数据包中包含多少信息的局限性(),看起来我不会有任何问题。我知道UDP数据包可能会被丢弃——在我的情况下,这很好,数据包只是一个建议,以优化其他服务器了解新数据的速度,丢失数据包将使应用程序响应变慢,但不会中断

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

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


总之,我正试图决定是制作一种更隐秘但更紧凑的格式,还是使用JSON更好,随着应用程序的发展,JSON更容易修改并保持向后兼容性,但每个数据包的大小肯定更大。

数据的大小大约是100字节还是30字节,没关系。它不会降低或提高应用程序的性能。同样,大小也不会影响在路由器上丢弃数据报的可能性。路由器在出现拥塞时丢弃数据报


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

数据的大小(大约100字节或30字节)无关紧要。它不会降低或提高应用程序的性能。同样,大小也不会影响在路由器上丢弃数据报的可能性。路由器在出现拥塞时丢弃数据报


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

在您提到的限制范围内,这并不重要。你需要知道以太网也有一个最小的尺寸,所以把它弄得很小可能根本不会有任何影响。再仔细想想,在我看来,如果网络没有饱和,它几乎不会有什么不同。数据包将进行传输,如果数据包更长,则可能需要相对更多的纳秒(1Gb网络上每比特大约需要一纳秒)。如果这些数据包使网络饱和,那么额外的约60%的空间可能会起作用(通过避免由于较小的大小而导致网络饱和)。否则,它似乎真的不会有任何实际效果。我不认为我的用例会使网络饱和,但我并没有真正考虑过它。在你提到的范围内,它并不重要。你需要知道以太网也有一个最小的尺寸,所以把它弄得很小可能根本不会有任何影响。再仔细想想,在我看来,如果网络没有饱和,它几乎不会有什么不同。数据包将进行传输,如果数据包更长,则可能需要相对更多的纳秒(1Gb网络上每比特大约需要一纳秒)。如果这些数据包使网络饱和,那么额外的约60%的空间可能会起作用(通过避免由于较小的大小而导致网络饱和)。否则,它似乎真的不会有任何实际效果。我认为我的用例根本不会使网络饱和,但我并没有真正考虑过它。