web-dev-qa-db-ja.com

localhostとIPアドレスの違い

Python= localhost、8200にソケットをバインドする場合、これは http:// localhost:8200 / を介してアクセスできますが、 http:// xxxx :8200 /

Python to xxxx、8200、machinename、8200にソケットをバインドする場合、これは http:// xxxx:8200 / および http:/を介してアクセスできます。/machinename:8200 / 、ただし http:// localhost:8200 /

Localhostは「このマシン」を意味し、それを使用するとマシンのIPアドレスに「ループバック」すると思っていましたが、異なるIPのようです。

127.0.0.1は常にマシンのIPアドレスとは異なるIPアドレスですか?

更新:

実際の数値が異なることは理解していますが、ループバックは何をしますか?

たとえば wikepedia
'WebブラウザにURLを指定 http://127.0.0.1/ または http:// localhost / はそのコンピュータ自身のウェブサイトにアクセスする '

しかし、そのWebサイトはx.x.x.xからもアクセスでき、おそらくx.x.x.x上の単一のソケットでセットアップされます。では、両方の参照はどのように機能するのでしょうか?

結論:

127.0.0.1とx.x.x.xがこのように機能することを最終的に理解したと思います

--127.0.0.1 ==\
               >- Computer
--x.x.x.x   ==/

ではなく

--127.0.0.1 ==\
--------------- x.x.x.x >- Computer

または

--x.x.x.x ==\
--------------- 127.0.0.1 >- Computer

助けてくれてありがとう

17
David

あなたの質問に答えるために。

127.0.0.1は、マシンのIPアドレスとは異なるIPアドレスであるだけでなく、インターフェースも異なります。 127.0.0.1はローカルネットワーク上では表示されません。これは、ループバックアダプターの特別な内部IPアドレスです。

x.x.x.xがイーサネットカードになります。

ちなみに、「localhost」は単に127.0.0.1を指すホストファイル内のエントリです

ソケットを127.0.0.1:8200にバインドすると、ローカルで実行されているクライアントのみが http://127.0.0.1:82 または http://でのみアクセスできます。 localhost:82 (または127.0.0.1を指すdnsまたはhostsファイルのエントリ)。

X.x.x.x:8200にバインドされたソケットは、 http://x.x.x.x:82 またはそれを指すdnsまたはhostsファイルエントリを通じてのみ利用できます。

ソケットを127.0.0.1にバインドしても、イーサネットインターフェースで自動的に使用可能になるわけではありません。

そのため、x.x.x.x:8200に接続できません

ポート8200を使用可能なすべてのインターフェース(0.0.0.0)にバインドすると、機能するはずです。

ループバックアダプターのその他の機能:

ループバックインターフェイスは仮想インターフェイスです。これは、プログラムが同じマシン上で互いに通信できるようにするためによく使用されます。マシンのIPアドレスを参照する方法ではありません。 127.0.0.1 ISループバック仮想アダプターのIPアドレス。

ループバックアダプターのもう1つの点は、ループバックアダプターが仮想であるため、実際にはパケットをネットワークカードに渡さないことです。

18
Matt H

たとえば、wikepediaは、「WebブラウザーにURLを指定する http://127.0.0.1/ または http:// localhost / は、そのコンピューターの独自のWebサイトにアクセスする」と述べています。

やや不正確。それはかもしれませんそうします。同様に、Webサイトが表示されないこともあり、x.x.x.xアドレスを使用したときに取得したものとは異なる内部Webサイトを表示することも可能です。

127.0.0.1は自分のマシンを指しますが、マシンに到達すると同じように動作するわけではありません

非技術的なアナロジーが必要な場合は、家への別のドアと考えることができます。

どちらも同じ家を指していますが、同じものではありません。各ドアがあなたを同じ部屋に連れて行ったり、別の部屋に連れて行ったりすることが可能です。一方のドアをロックし、もう一方のドアをロックすることもできます。

Webサイトを構成するときに、バインドするアドレスを指定します。多くの場合、答えはすべてのアドレスです。 (これは、すべてのドアが1つの部屋に入ることに相当します)

1つのアドレスのみにバインドするWebサイトを指定することもできます。 (これは、1つを除くすべてのドアをロックするのと同じです。)

2つ(またはそれ以上)のWebサイトがある場合、それらを別々のアドレスにバインドできます。 (これは、各ドアを別々の部屋に入れるのと同じです)。

両方の参照がどのように機能するかの例として、私のWindows 7コンピューターにはIISがインストールされています。IIS Managerに移動して、既定のWebサイトを右クリックすると、 「バインディングの編集」メニューオプションを選択します。これを選択すると、バインディングのリストが表示されます。1つしかありませんが、IPアドレスの場合、*があります。これは、IISすべてのIPアドレスをリッスンすることを意味します。

3
sgmoore

システム上のすべてのIPアドレスは独立しており、ソケットによってすべてのインターフェースにバインドするようにOSに指示する特別なアドレス0.0.0.0を除いて、ソケットによって個別にバインドできます。