7

ソケットをバインドするときの INADDR_ANY の使用と結果について混乱しています。もちろん、INADDR_ANY はすべてのローカル インターフェイスをリッスンします。これがどのような結果をもたらすかについての私の質問。

特定の IP アドレスにバインドすると、カーネルは逆多重化を処理できますが、参照を見つけることができなくなることを読んだことを覚えています。

INADDR_ANY を使用すると、この種の結果が生じるのでしょうか、それとも単にすべてのローカル IP からデータを受信するだけでしょうか? それぞれの種類のバインディングを使用する利点と問題点は何ですか?

これについて議論する他の質問:

INADDR_ANY でバインド

INADDR_ANY に関する質問

編集:参照が見つかりました。Unix Network Programming (Stevens) によるものです。

ワイルドカード以外の IP アドレスをバインドする利点の 1 つは、指定されたサーバー プロセスへの指定された宛先 IP アドレスの逆多重化がカーネルによって行われることです。

これはどういう意味ですか?

4

2 に答える 2

3

特定のインターフェイスへのバインドは、アプリケーションがローカル IP アドレスと直接のネットワーク レイアウトを「認識する」必要がある、非常に特殊な状況でのみ使用するものです。ルーティング デーモン プログラムは、おそらく最良の例です。

もう 1 つの平凡な例: マルチホーム マシン (つまり、インターネットへの複数の接続、場合によっては異なる ISP を持つマシン) を使用している場合、特定のインターフェイスにバインドして、接続が特定の接続を確実に通過するようにすることができます。各ネットワーク インターフェイスに個別にバインドすることで、アプリケーションはリンク ダウンなどを検出できます。

ローカル IP アドレスを「知る」必要があるプロトコルの実装 (悪名高い例: FTP、SIP、UPnP) は、ソケットを特定のインターフェースにバインドする傾向があります。(トランスポート層とアプリケーション層の間の分離に違反しているため、それらは悪いプロトコルだと思います)。

これらの場合を除けば、通常、特定のインターフェースにバインドするのは過度のエンジニアリングです。これは、アドレスとインターフェースが変更される可能性があり、プログラムがこれらの条件を検出してそれぞれのソケットを更新する必要があるためです。

于 2014-02-04T04:03:03.880 に答える
2

特定の IP を使用する場合と、それらすべてを使用する場合のパフォーマンスの違いを測定することはできません。アプリケーションのニーズに基づいて特定のものを使用したい場合があります。セキュリティ上の理由。

于 2013-09-17T10:48:31.453 に答える