localhostとIPアドレスの違い


16

Pythonのソケットをlocalhost、8200にバインドする場合、http:// localhost:8200 /からアクセスできます。http:// xxxx:8200 /ではありません

Pythonのソケットを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サイトにアクセスすると述べて
います

しかし、そのWebサイトはxxxxでもアクセス可能であり、おそらくxxxxの単一のソケットでセットアップされるでしょう。

結論:

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

--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

助けてくれてありがとう


1
「127.0.0.1は常にマシンのIPアドレスとは異なるIPアドレスです」と書きました。ドット間の数字は異なります。つまり、異なるIPアドレスです。奇妙な質問です。マシンのIPアドレスで言うと、127.0.0.1以外の何かを意味する場合は、はい、別のIPアドレスになります。マシンのIPアドレスと呼ばれるものが192.168.0.1(または他の標準的なローカル範囲)である場合、それを言うことを恐れる必要はありません。xxxxの代わりに書くことができます。とにかく192アドレスはインターネット上に存在しません。
barlop

両方の参照は、Webサーバーがどのように構成されているかによって機能します。サーバーにすべてのアドレスにバインドするか、特定のアドレスのみをリッスンするように指示できます。ループバックと実際のIPは別個のアドレスであるため、構成はリッスンするIPを決定しています。localhostは127.0.0.1の単なるホストエントリであるため、Webサーバーが127.0.0.1にバインドされている場合にのみ機能します。
ピールマン

回答:


17

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

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

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

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

あなたは127.0.0.1:8200にソケットをバインドする場合は、ローカルで実行しているクライアントだけがアクセスのみとすることができるようになりますhttp://127.0.0.1:8200のhttp:// localhostを:8200(またはDNSまたはホストファイルのエントリ127.0.0.1を指します)。

xxxx:8200にバインドされたソケットは、http:// xxxx:8200またはそれを指すdnsまたはhostsファイルエントリでのみ使用できます。

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

xxxx:8200に接続できない理由

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


それで、「ループバック」ビットは何をしますか?それは何にループバックしますか?マシンのIPアドレスを参照する方法だと思ったのです。たまたま127.0.0.1 => xxxx
David

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

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

1
この概念を理解していないため、文字通り4時間無駄になりました...どうやら、一部のWebサーバーは自動的にxxxxと127.0.0.1の両方にバインドされ、混乱を招きます。素晴らしい質問と回答の人。Thx =)
jrhee17

3

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

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

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

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

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

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

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

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

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


類推!本当にありがとうございました!私はちょうど試用しました。127.0.0.1:5000Webサイトに正常にバインドし、192.168.1.104:5000別のサイトにバインドしました。重要なのはaddress:port、家(コンピューター)の別の部屋(サービス)を意味することです。
リック

1

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


1
しかし、ループバックインターフェイスの最も一般的な選択肢として、127.0.0.1も特別なアドレスです。そのアドレスは何にループバックしますか?
デビッド

それは「特別」ではなく、「ループバックインターフェイス上のアドレス」になります(「すべてのアドレスが独自の方法で特別である」と言わない限り、そこに行きません)。アドレスではなく、ループを行うのはインターフェイスです。
イグナシオバスケス-エイブラムス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.