web-dev-qa-db-ja.com

LinuxでドロップされたUDPメッセージをデバッグする

セットアップは次のとおりです。1ギガビットイーサネット接続のホストが1つと、100メガビット接続のホストが2つあります(異なるスイッチを介して1ギガビットホストに接続されています)。

テストでは、1Gbitホストから100 mbitホストに1000個の1kbメッセージを送信します(btwn sendto()呼び出しの遅延なし)。 100メガビットのホストの1つでは、パケットはドロップされません。もう1つは、100日頃までドロップがなく、残りの大部分をドロップし始めます。非常に再現性があります。 1ミリ秒の遅延を導入すると、どちらのホストにもドロップはありません。

2つのホストで動作が異なる理由を知りたいのですが。

これを追跡するために使用する必要があるいくつかの方法/ツールは何ですか? Linux6.8を使用しています。そして、私のrmem_maxは両方のホストで10MBに設定されています。

2
gnr

これは、速度が一致せず、速度が一致しない場合に予想される動作です。 1GBのリンクを飽和させることができる場合、1000パケットを送信するまでに、もう一方の端は100パケットしか読み取っていません。ルーターが残りの900パケットをバッファリングする可能性はほとんどありません。

UDPは信頼性の低いプロトコルです。 TCP)とは異なり、信頼性の高い配信は組み込まれていません。

TCP接続で同様のテストを実行すると役立つ場合があります。両方向で実行すると、問題が単方向であるかどうかを判断するのに役立つ場合があります。

プロセスでtimeを実行すると、一方のプロセスの実行速度がもう一方のプロセスよりも遅いかどうかがわかります。 netstat -iテストの実行の前後に、到着したデータの量を計算し、エラーが生成されたかどうかを確認できます。

ethtoolは、ホストの1つが半二重モードであるかどうかを通知する場合があります。半二重接続は、あなたが見ているような問題を起こしやすいです。ケーブル接続またはその他の問題がある場合、接続は一方向または両方向で10Mビット半二重にフォールバックする可能性があります。

スイッチが管理されている場合は、関連するポートの構成およびエラーカウンターを確認する必要があります。

2つのシステムのイーサネットハードウェアが異なる場合は、それが問題になる可能性があります。一部のハードウェアは、飽和したリンクを処理できません。

2
BillThor