0

IP キューに問題があるようです。

いくつかの実験を実行するために使用している Linux マシンがあります。Linux マシンはルーターとして構成され、2 つの NIC を持ち、他の 2 台のコンピューターを接続し、それらのネットワーク トラフィックを管理します。すべての着信パッケージは、iptables を使用してキャプチャされ、C アプリケーションによって分析されます。

実験の一環として、パケットを分析するアプリケーションには遅延が組み込まれています。

そのため、Linuxルーターを介してパケットを送信する1台の非常に高速なコンピューターと、パケットを1つずつ分析して処理する(比較的)遅いLinuxルーターがあります。

この状況は、linux-router に接続されたコンピューターの 1 つで送信側アプリケーションを起動すると、linux-router の IP キューが (ほぼ) 瞬時にいっぱいになるという事実につながります。

IP キューの最大長は現在 1024 に設定されており、オーバーフローした場合、パケットはドロップされます。これは想定内であり、問​​題ありません。

しかし、(ここが興味深いところです)、時々次のエラーが発生します。

「netlink メッセージを受信できませんでした: 利用可能なバッファ領域がありません」

最初は、これは IP キューのオーバーフローが原因だと思っていましたが、いくつかの分析の結果、IP キューのバッファーがオーバーフローしていなくてもエラーが発生することがあり、バッファーが DID であってもメッセージが表示されない場合があることがわかりました。オーバーフロー。

を実行する> cat /proc/net/ip_queueと、次の表が表示されます (IP キューのオーバーフローの監視にも使用されます)。

Peer PID          : 27389
Copy mode         : 2
Copy range        : 65535
Queue length      : 0
Queue max. length : 1024
Queue dropped     : 1166875
Netlink dropped   : 2916

最後の 2 つの値を見るとQueue dropped、バッファがいっぱいだったために IP キューに入れられなかったパケットを参照しているようです。linux-router を攻撃すると、この値が上昇するのがわかります。Netlink dropped(その名前が示すように:))私が得ているエラーに関係しているようです。

このエラーに関する資料を検索するために最善を尽くしましたが、必要な方向に私を向けているように見えるものを見つけることができませんでした.

結論:このエラーが発生するのはなぜですか? また、エラーを回避するにはどうすればよいですか?

4

1 に答える 1

0

setsockopt を使用して netlink 受信ソケットの受信バッファ スペースを増やしてみてください。これでエラーが解消されます。

于 2012-12-18T08:53:00.837 に答える