2016-11-15 7 views
1

私は、新しい情報が利用可能であることを通知するために、別のサーバにUDPパケットを送信しようとしています。パケットのデータはかなり小さく、およそ100バイトです。基本的にイベントタイプとUUIDです。単一のパケットを送信すると、サイズはどれくらいかかりますか?

私は1つのパケット(What is the largest Safe UDP Packet Size on the Internet)にどれくらいの情報が収まるかという制限があることに気付きましたが、それに問題はないようです。私の場合はUDPパケットが落とされる可能性があることを知っています。私のケースではパケットは単なる提案で、他のサーバが新しいデータを知っている時間を最適化します。物を壊さないでください。

これを念頭に置いて、私の質問は、そのパケットのサイズがどのくらい重要かということです。 JSONとして情報をエンコードすると、約75-100バイトのように見えます。私はまた、はるかに小さくなる生のバイナリ形式で情報をエンコードすることができます(私はおそらく30バイト以下のようなものに収めることができます)。

100バイトペイロードのUDPパケットは、30バイトペイロードよりも「低速」に移動しますか?私は各パケットにオーバーヘッドがあることを知っていますが、断片化を避けているとパケットサイズがパフォーマンスにどのくらいの影響を与えるかはわかりません(明らかに遅く、信頼性の低いものになります)。ペイロードのサイズは、パケットが廃棄される可能性に影響しますか?

要約すれば、よりわかりやすくコンパクトなフォーマットを作成する方が良いか、アプリケーションの進化に伴って下位互換性を維持しやすくするためにJSONを使うのが良いかどうかを判断しようとしていますが、各パケットのサイズの点で。

+1

あなたが言っている限界はそれほど重要ではありません。イーサネットにも*最小*サイズがあることに注意する必要があります。したがって、実際に小さくすると効果が全くないかもしれません。 – EJP

+0

もう少し考えてみると、ネットワークが飽和していない場合には、実質的に違いはないようです。パケットは送信されますが、それより長い場合は、比較的少ないナノ秒(1Gbネットワークではビットあたり約1ナノ秒)かかることがあります。これらのパケットがネットワークを飽和させた場合、余分な60%のスペースが問題になる可能性があります(小さいサイズによるネットワークの飽和を避けることによって)。さもなければ、それは本当に何の具体的な効果もないようです。私のユースケースはネットワークをまったく飽和させるとは思わないが、私はそれについて本当に考えなかった。 –

答えて

0

約100バイトまたは30バイトのデータサイズは問題ではありません。アプリケーションのパフォーマンスが低下することはありません。また、サイズは、ルータでデータグラムが廃棄される可能性に影響しません。ルータは、輻輳が発生したときにデータグラムをドロップします。

ただし、アプリケーションによっては、単一のUDPメッセージでさらにイベントを送信することができます。ここでは100バイトと30バイトの違いがあります。 UDPデータグラムには、IPヘッダーの場合は20バイト、UDPヘッダーの場合は8バイトのオーバーヘッドがあります(+イーサネットヘッダー)。ネットワークとCPUリソースをより有効に活用するには、データグラムごとにさらに多くのデータを送信する方がよいので、30バイトで1つのデータグラムに〜3倍のデータを送信できます。これはパフォーマンスに影響します。 1つのデータグラムにN個のイベントを送信すると、ネットワークリソースとCPUリソースが節約されます(メッセージが少なく、メッセージオーバーヘッドが少なくなり、割り込みなどが少なくなります)。N個のイベントを1つのデータグラムにパックする場合、データグラムあたりの推奨制限はMTUで、 IPヘッダーの場合は20バイト、UDPヘッダーの場合は8バイトを考慮すると、最大1472バイト(100バイトの14イベント)のペイロードを送信できます。