0

Windows TCP ソケットがあるとします。そして、アプリケーションは起動時にこのソケットを 1 回接続します。その後、長時間 TCP トラフィックを送受信します

Windows には、IP トラフィックをルーティングする機能があります。複数のネットワーク アダプターがあり、トラフィックが特定の NIC に向かうようにアプリケーションの静的ルーティングを設定する必要があるとします。

問題は、Windows が CPU サイクルを浪費して TCP ソケット接続のみをルーティングするのか、それともすべての IP パケットをルーティングするのかということです。

マイクロ秒をカウントしていますが、正確に知る必要があります。トラフィックまたは接続のみの送受信で CPU オーバーヘッドは発生しますか?

4

1 に答える 1

2

「ルーティング」とは、ローカル ルーティング テーブルを調べて発信パケットの送信先を決定するプロセスを意味すると思います。これは、最初にどのルーターを使用するかによって決定され、次にそのルーターに到達するためにどのインターフェイスを使用するかによって決定されます。

スタティック ルートを確立した場合でも、システムがそのルートを認識するために「ルーティング」が発生する必要があります。これは、わずか数ダースのマシン命令を使用するテーブル ルックアップで構成されます。パケットをコピーするコストと比較すると、まったく無視できます。

ソケットをネットワーク インターフェイスにバインドすることは、静的ルールをルーティング テーブルに入力することと同じではなく、ネットワーク インターフェイスはネットワーク インターフェイス コントローラー (NIC) と同じではないことに注意してください。特定のネットワーク インターフェイスへのバインドまたはルーティングの影響により、パケットが余分な回数コピーされ、かなりのオーバーヘッドが生じる可能性があるため、これはオーバーヘッドを考慮するときに重要です。

パケットが LAN 上で送信され、それを送信したのと同じコンピューターによって再読み取りされ、別の NIC を介して正しいルーターに再度送信されるというシナリオを考え出すことができます。ほとんどの場合、INADDR_ANY(address 0.0.0.0) にバインドし、ルーティング テーブルに最適化を処理させることで、最高のパフォーマンスが得られます。

特定のネットワーク インターフェイスへのバインドは、特定の IP アドレスが送受信に使用されるようにする必要がある場合にのみ行う必要があります。特定の NIC への静的ルーティングは、ローカル ルーティングが何らかの形で壊れていない限り、有用な結果をもたらす可能性は低いようです。そうしないと、通常のルーティング プロセスに干渉すると、オーバーヘッドが増えるリスクがあります。

于 2012-07-11T16:37:24.603 に答える