IP 0.0.0.0に正常に接続されました。どのように?なぜ?

IP 0.0.0.0に正常に接続されました。どのように?なぜ?

localhostにポートを提供しており、そのポートが他のプロセスで利用可能であることを確認したいと思います。コードのバグのために実際にIPに接続しようとしており、0.0.0.0:<port>何らかの理由でstraceで説明したように成功します。

[...]
connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[...]

どういう意味ですか?なぜ動作しますか?

ベストアンサー1

0.0.0.0は、宛先アドレスにルーティングできないホストまたは「このホスト」をさまざまに表します(RFC 5735セクション3)。実際、ほとんどの場合、0.0.0.0に接続するのはlocalhostに接続するのと同じです。厳密に言えば、回線の宛先アドレスとして無効です(RFC 1122セクション3.2.1.3)は送信元アドレスとしてのみ使用されるため、オペレーティングシステムは宛先アドレスが0.0.0.0のパケットが変更されず、システムを離れないようにする必要があります。実際、Linuxカーネルはターゲットアドレスを0.0.0.0(つまり宛先住所なし)、送信元アドレスを宛先アドレスにコピーします。、パケットにもソースアドレスがない場合、両方ともループバックアドレスに設定されます。どちらの場合も、パケットはループバックインターフェイスを介して「転送」され、システムを離れません。

バインドすると、「このホスト」は「このホストのすべてのアドレス」に展開されます。したがって、アプリケーションは通常0.0.0.0にバインドして接続を許可します。これは、システムデータパックのすべてのIPv4アドレスにアドレス指定された接続を受信することを意味します。

おすすめ記事