IPアドレス0.0.0.0と127.0.0.1の違いは何ですか?


220

127.0.0.1〜127.255.255.254が最新のオペレーティングシステムのループバックIPアドレスであり、これらのIPアドレスを使用して自分のコンピューターを参照できることを知っています。

しかし、0.0.0.0とは何ですか?ローカルコンピューターも参照しているようですが、違いは何ですか?

そして、私のために次のIP接続を説明してもらえますか:

netstat -an出力のスクリーンショット


6
:それは0.0.0.0が何であるかに応じて詳細を与える(とない)としても、この質問を見てserverfault.com/questions/228629/...
エリーKesselman

最新のオペレーティングシステムは::1、ループバックアドレスとして使用します。
カスペルド

回答:


157

唯一のことは、「すべてのアドレスにアクセスを許可する」と言っていないことです。これは、ファイアウォールやサーバーソフトウェア、tcpwrappersなどの他のセキュリティレイヤーで行われます。

このコンテキストでは、0.0.0.0は「ローカルマシン上のすべてのIPアドレス」(実際には、おそらく「ローカルマシン上のすべてのIPv4アドレス」)を意味します。したがって、ウェブサーバーマシンに192.168.1.1と10.1.2.1の2つのIPアドレスがあり、apacheなどのウェブサーバーデーモンが0.0.0.0でリッスンできるようにすると、これらのIPアドレスの両方で到達可能になります。しかし、それらのIPアドレスとWebポートに接続できるのはその人だけです。

異なるコンテキスト(ルーティング)では、通常0.0.0.0はデフォルトルート(ローカルネットワークなどのルートを除く、インターネットの「残り」へのルート)を意味することに注意してください。


つまり、ウェブサーバーのソケットは、0.0.0.0でリッスンするときに利用可能なアドレスにバインドされるということですか?
onmyway133

0.0.0.0デフォルトルートを意味だけで、それがプレフィックスを伴っている場合/0(またはネットマスク0.0.0.0
minmaxavg

注意:プロセスが0.0.0.0でリッスンする場合、ループバックインターフェイスの現在構成されているアドレスを含むすべてのマシンのネットワークインターフェイスのIPアドレスで到達可能です。しかし、プロセスがループバックアドレスのポート<portNumber>(例:127.0.0.1)のみでリッスンし、その後、プロセスが正確に127.0.0.1:<portNumber>をターゲットとすることにより、同じマシンからのみ到達可能である場合この pythonツール を試してみてください!
Gab是好人

77

サービスが0.0.0.0でリッスンしている場合、これは、サービスが構成されたすべてのネットワークインターフェイスでリッスンしていることを意味します。127.0.0.1でリッスンしている場合、サービスはループバックインターフェイスのみにバインドされます


38

IPアドレス0.0.0.0は、使用場所に応じて、非常に異なる意味を持つことができます。

  • これは、0.0.0.0 / 8サブネット内の他のアドレス(つまり、で始まるアドレス0.)とともに、実際のネットワークインターフェースに与えられる有効なアドレスではありません。
  • コンピュータがまだIPアドレスを知らず、IPアドレスを取得しようとしているときに発生する場合を除き、IPパケットの送信元アドレスとして使用することはできません(古典的な例:DHCP)。
  • ルーティングテーブルで使用される場合、デフォルトゲートウェイを識別します。0.0.0.0へのルートがデフォルトのルートです。つまり、宛先アドレスに利用可能な特定のルートがこれ以上ない場合に使用されるルートです。
  • 最後に、netstatコマンドの出力(要求されたもの)に表示される場合、特定のソケットがコンピューターの使用可能なすべてのIPアドレスをリッスンしていることを意味します。コンピューターに複数のIPアドレスがある場合、ソケットは特定のアドレスとポートのペア、またはポートとすべてのアドレスにのみバインドできます。そこにIPアドレスが表示されている場合、ソケットはそのポートとその特定のアドレスでのみリッスンしていることを意味します。が表示された場合0.0.0.0、それはループバック()を含むマシンのすべてのアドレスでそのポートをリッスンしていることを意味します127.0.0.1

3
0.0.0.0をカールするとどうなりますか?curlは実際に利用可能なインターフェイスを介してリクエストに接続して送信していますか?どのインターフェイスが正しいインターフェイスであるかをどのように知るのですか?サーバーがすべてのインターフェイスでリッスンする方法を理解していますが、curl 0.0.0.0やcurl [::]を実行するときなど、クライアントがすべてのインターフェイスを要求するメカニズムは何ですか。
CMCDragonkai 14年

1
ネットワークの観点からは意味をなさないので、OSはそれを行うことをブロックする可能性が非常に高いでしょう。ping 0.0.0.0Windowsシステムで実行しようとすると、エラーメッセージが表示されます。
マッシモ14年

curl 0.0.0.0connection refusedArch Linuxで生成されます。ping 0.0.0.0、一方で、エイリアスはping 127.0.0.1うまく機能しているようです。
マティアスブラウン

@MatthiasBraunはconnection refused、デフォルトでcurlがポート80 / tcpに接続しようとするためです。nmap -sV localhostたとえば、631 / tcp:で、開いているポートを見つけてくださいcurl 0.0.0.0:631
パブロA

27

Lee Bの答えは正しかったのですが、興味がある場合に備えて関連するRFCをいくつか紹介します。

0.0.0.0:

RFC1122、セクション3.1.2.3:

IPアドレスに次の表記を使用して、クラスA、B、およびCのIPアドレスの重要な特殊なケースを要約します。

            { <Network-number>, <Host-number> }

        or
            { <Network-number>, <Subnet-number>, <Host-number> }

...

          (a)  { 0, 0 }

             This host on this network.  MUST NOT be sent, except as
             a source address as part of an initialization procedure
             by which the host learns its own IP address.

まさに、「このネットワーク上のこのホスト」... Lee Bの答えは、これがホストで利用可能なすべてのIPアドレスに変換されると述べています。0.0.0.0でサービスをホストすると、アドレス可能なすべてのインターフェイスでそのサービスが自動的にホストされます。

127.0.0.1:

RFC5735から:

127.0.0.0/8-このブロックは、インターネットホストループバックアドレスとして使用するために割り当てられます。高レベルのプロトコルによってこのブロック内の任意のアドレスに送信されたデータグラムは、ホスト内でループバックします。これは通常、ループバックに127.0.0.1/32のみを使用して実装されます。[RFC1122]、セクション3.2.1.3で説明されているように、127.0.0.0 / 8ブロック全体内のアドレスは、どこのネットワークでも正当に表示されません。

0.0.0.0とループバックアドレス127.0.0.1の違いは、ループバックアドレスは、ネットワーク設定の残りの部分がどのように見えるかに関係なく、ホスト自体内で完全に機能するIPインターフェイスを許可するように設計されていることです。ループバックデバイスに送信されたトラフィックは、すぐにループバックデバイスで受信されます。ループバックネットワークが自分のホストを「参照」するのはそれほどではありません...ホストにデバイス、プロセス、ソケットがあり、開いて接続できるミニネットワークセグメントがあるようなものです。


4

簡単に言えば、0.0.0.0でリッスンすると、このコンピューター、ローカルネットワーク、インターネットなど、このコンピューターにネットワークアクセスできる任意の場所からリッスンすることを意味し、127.0.0.1でリッスンすることは、このコンピューターからのみリッスンすることを意味します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.