web-dev-qa-db-ja.com

0.0.0.0、127.0.0.1とlocalhostの違いは何ですか?

私のMacではJekyllVagrantを使っています。 Jekyll server0.0.0.0:4000ではなく127.0.0.1:4000にバインドされることがわかりました。またgem serverはデフォルトでこのアドレスにバインドします。私はまだhttp://localhost:portを通してそれを訪れることができます。しかしJekyllの場合、デフォルト設定(例:0.0.0.0:4000)はインターネットアクセスを必要とするようです。インターネットなしでJekyll serverを実行することはできません。これは小さなバグですか?

私はVagrantも使います。 JekyllVagrant仮想マシンにインストールし、それをMacintoshでテストしたので、Vagrantfileでポート転送(8080 => 4000)を設定しました。デフォルト設定(0.0.0.0:4000)を使用すると、うまくいきます。私のサファリからhttp://localhost:8080でそれを訪問することができます。しかし、インターネットがなければ、私は0.0.0.0:4000にバインドすることはできません。代わりにjekyll server -H 127.0.0.1を使用してサービスを127.0.0.1:4000にバインドしますが、http://localhost:8080経由でアクセスすることはできません。

誰でも0.0.0.0、127.0.0.1とlocalhostの違いを説明できますか?そして、誰が違いがこの問題を引き起こすのか説明できますか

230
Ciel

127.0.0.1は通常、「ループバック」またはローカル専用インタフェースに割り当てられているIPアドレスです。これは、同じホスト内でしか通信できない「偽の」ネットワークアダプタです。ネットワーク対応のアプリケーションが同じホスト上のクライアントにのみサービスを提供したい場合によく使用されます。 127.0.0.1で接続を待機しているプロセスは、そのソケットでローカル接続のみを受け取ります。

"localhost"は通常127.0.0.1 IPアドレスのホスト名です。通常は/etc/hosts(またはWindowsの同等物で、%WINDIR%の下のどこかに "hosts"という名前)で設定されています。他のホスト名と同じように使うことができます - それがどのように127.0.0.1に解決されるか見るために "ping localhost"を試してください。

0.0.0.0にはいくつかの異なる意味がありますが、この文脈では、サーバーが0.0.0.0をリ​​ッスンするように指示された場合、これは「利用可能なすべてのネットワークインターフェイスをリッスンする」という意味です。サーバプロセスから見たIPアドレス127.0.0.1のループバックアダプタは、マシン上の他のネットワークアダプタとまったく同じように見えるので、0.0.0.0をリ​​ッスンするように指示されたサーバはそのインタフェース上の接続も受け入れます。

うまくいけばあなたの質問の知的財産側に答えます。私はJekyllやVagrantには馴染みがありませんが、あなたのポートフォワーディング8080 => 4000はどういうわけか特定のネットワークアダプタに縛られているので、ローカルで127.0.0.1に接続するときの経路にはないと思います

345

Jekyllの現在のバージョンでは、デフォルトは http://127.0.0.1:4000/ です。
これは、ネットワークに接続していても、他の人が自分のアプリケーションにアクセスしたくない場合に適しています。

しかし、あなたのアプリケーションがどのように携帯電話や他のラップトップ/コンピュータから実行されているかを見たいことがあるかもしれません。

その場合は、あなたが使用することができます

jekyll serve --Host 0.0.0.0

これはあなたのアプリケーションをホストと他のホストから接続するための次の使用方法に結び付けます。

http://Host's IP adress/4000 
12
Sanyam Jain