UDP ソケットから等間隔でパケットを送信すると、最初に送信されたパケットが遅延しているように見えることに気付きました。たとえば、パケットを 100 ミリ秒ごとに送信している場合、パケットを受信する間の遅延は、ネットワーク上で平均 100 ミリ秒、平均標準偏差 4 で正規分布することがわかります。ただし、最初のパケットと 2 番目のパケットの受信時間のギャップは、通常 10 ~ 40 ミリ秒程度です。ご覧のとおり、これは明らかに統計的に有意な差です。私の質問は、何が原因でしょうか?
Linux で C の sendto 関数を使用しています。宛先IPがMACアドレスに変換されるまでパケットが送信されないようにするARP解決が遅延の原因である可能性があると誰かが示唆しました-これは可能性が高いですか? 送信プログラムを再起動すると、最初のパケットに再び時間がかかりすぎて、遅延に一貫性がなくなります.10から40ミリ秒はかなり大きな範囲です.
この最初のパケットに時間がかかりすぎる理由と、それを回避する方法を見つける必要があります。
編集: pcap を使用してさらに分析すると、送信プログラムが適切な間隔でパケットを送信していることが示されます。select() を使用して読み取り可能なソケットを待機し、recvfrom を呼び出してパケットを出力している受信側に問題があるはずです。私が知らないかもしれない何らかのバッファリングが行われていますか?