質問: 127.0.0.1と0.0.0.0の違いは何ですか? 私は127.0.0.1がlocalhostを指していることを理解しています、そして0.0.0.0もそうです(私が間違っていたら私を修正してください)。それで、127.0.0.1と0.0.0.0の違いは何ですか?
回答: 127.0.0.1ローカルコンピュータのアドレスの1つですが、アドレス127.xyzもコンピュータの別のアドレス(「ループバックアドレス」と呼ばれます)です。ただし、127.0.0.0(ループバックサブネット)と127.255.255.255(ループバックのブロードキャストアドレス)は除きます。サブネット)。 127.x.y.zは「ここ」を意味します。 0.0.0.0はまったく違います: 0.0.0.0は何のアドレスでもありません 、shellの*のようにジョーカーです。0.0.0.0にデータを送信したり、0.0.0.0へのtcp接続をアクティブに開いたりすることはできません。 0.0.0.0は到達不可能なアドレスでもルーティング不可能なアドレスでもありません。アドレスが予想される状況では意味がありません。 アドレスを任意に指定できる状況では、ジョーカー0.0.0.0を使用できます 、を指定しても構いません。たとえば、あるtcpサーバーへのtcp接続をアクティブに開くとき(tcpサーバーは、パッシブtcp openによって作成されます)あなたはtcpサーバのアドレス(ipとポート番号)を指定する必要があります、そして任意にローカルアドレスを選択することができます。 (あなたのソケットはサーバソケットではないので、誰もそれへの接続を開くことができず、接続のあなたの側のアドレスは通常あまり重要ではありません。)bindシステムコールは、tcpソケットのローカルアドレスを選択するために使用されます。 bindに渡されるデータは、実際には一連の制約です。ipアドレスに対する制約、tcpportに対する制約です。通常のテキスト表記はip:portです。 0.0.0.0:0は、どのポートでも受け入れ可能なipを意味します。これはnull制約です。 0.0.0.0:20はローカルポートが20でなければならないことを意味し、どのipでも構いません(0.0.0.0:20はアクティブモードでのデータ接続に準拠するftpサーバーによって使用されます)。 tcp/ipサブシステムはtcp接続の自分側のアドレスを選択します 宛先アドレスに基づいて、ルーティングテーブルを使用して選択しない場合はローカルtcpソケットアドレスは、宛先アドレスに対応する経路に関連付けられたローカルアドレスになります。先ほどシェルの "メタ文字" *について述べましたが、メタ文字と*foo*( "foo"を含む任意のファイル名)のような文字とを組み合わせることの力は、ipアドレスの制約にはありません。 ipアドレスは許容できると見なされるか、すべてのアドレスが許容されます。 logicはnotとしているので、このようにする必要があります。より豊富な制約言語でインターフェースを拡張することができます。精度:127.x.y.zという文は「こちら」を意味しますは、これらすべてのアドレスが同じであることを意味するものではありません。実際には、ローカルの「コンピュータ」内、ローカルipスタック内の、さまざまな「場所」(ソケットアドレス)を表します。備考:仮想化(エミュレーション、ハードウェア仮想化、準仮想化、あなたが考えることができるものは何でも)を備えたコンピュータは複数の独立したipスタックを持っています。