Hiredisでサンプルを実行しています。redisサーバーのIPとして「127.0.0.2」を使用しており、正しく実行されています。実際、redisサーバーは同じマシン上で実行されています。 「127.0.0.1」が「lo」のIPアドレスであることは知っていますが、「127.0.0.2」はどうでしょうか? 「127.0.0.1」と同じですか?
はい:
IPv4ネットワーク標準では、ループバックの目的で127.0.0.0/8アドレスブロック全体を予約しています。つまり、16,777,214アドレス(127.0.0.1から127.255.255.254)のいずれかに送信されたパケットはループバックされます。 IPv6のアドレスは1つのみです::: 1。
さまざまなインターネット技術標準化委員会(IETF)標準は、この目的のために、CIDR表記のIPv4アドレスブロック127.0.0.0/8およびIPv6アドレス:: 1を予約しています。使用される最も一般的なIPv4アドレスは127.0.0.1です。通常、これらのループバックアドレスは、ホスト名、localhostまたはループバックにマッピングされます。
またはRFC自体から:
127.0.0.0/8-このブロックは、インターネットホストループバックアドレスとして使用するために割り当てられます。上位レベルのプロトコルによってこのブロック内の任意のアドレスに送信されたデータグラムは、ホスト内でループバックする必要があります。これは通常、ループバックに127.0.0.1/32のみを使用して実装されますが、このブロック内のアドレスはどこのネットワークにも表示されません[RFC1700、5ページ]。
楽しみのために、pingを実行してみてください。
$ ping 127.127.127.127
PING 127.127.127.127 (127.127.127.127) 56(84) bytes of data.
64 bytes from 127.127.127.127: icmp_req=1 ttl=64 time=0.110 ms
64 bytes from 127.127.127.127: icmp_req=2 ttl=64 time=0.065 ms
^C
--- 127.127.127.127 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.065/0.087/0.110/0.024 ms
127.x.x.x
アドレスはローカルマシンに制限されていますか?」はい127.x.x.x
アドレスがlo
インターフェースにバインドされていますか」はい127.x.x.x
アドレスはネットワーク上でルーティングされていますか?」番号127.0.0.0/8-このブロックは、インターネットホストループバックアドレスとして使用するために割り当てられます。上位レベルのプロトコルによって送信されるデータグラム
アドレスは、このブロック内の任意の場所でホスト内にループバックします。この
は通常、ループバックに127.0.0.1/32のみを使用して実装されます。なので
[RFC1122]のセクション3.2.1.3で説明されているように、127.0.0.0/8ブロック全体のアドレスは、どこのネットワークにも正当に表示されません。 — RFC5735
127.0.0.2
は127.0.0.1
と同じですか?」 [〜#〜]いいえ[〜#〜]127.0.0.1
から127.255.255.254
はすべて、インターフェースlo
にバインドされたローカルアドレスです。彼らは同じではありません。各アドレスを使用して、異なるサービスを同じポートにバインドできます。たとえば、ポート80で1600万のWebサーバー、ローカルマシンからのみアクセス可能(最初にメモリまたは他のリソースが不足しない場合)
127.0.0.2:80
にバインドするDockerサービスを設定しました。次に、/etc/hosts
にエイリアスを追加しました。これで、http://myserver
経由で接続できますが、http://127.0.0.1
またはhttp://localhost
経由では接続できません。ただし、このマシンでのみ使用できます。現状では、lo
インターフェースのみです。
次に、127.0.0.3:80
にバインドする別のDockerサービスをセットアップし、localhost:80
にpythonサービスと127.0.0.4:80
に別のサービスをセットアップしました。
これは、すべてのオペレーティングシステムで機能するとは限りません。私はDebian(9)Gnu/Linux、Linuxカーネル4.9.0-3-AMD64を使用しています。一部のOSでは、すべてのアドレスを127.0.0.1
→127.255.255.254
を同じように扱う場合があります。一部は127.0.0.1
でのみ機能します。
も参照
包括的な一般的な回答ではありません(すでに回答があります)。 この私の答え は、127.0.0.2
が問題の解決に使用された例を示しています。
エキス:
そこでのOPは、サーバーへの接続が拒否された場合に、いくつかのソフトウェアをテストしようとしました。これは、クライアントIPからのすべてのトラフィックを拒否する一時的なiptables
ルールによってサーバーで行われました。クライアントは即座に接続を「見る」ことができ、拒否されました。
この人物がサーバーソフトウェアをクライアントと同じマシンに移動し、ループバックインターフェイスを使用しようとしたときに問題が発生しました。ルールは127.0.0.1
からの通信をブロックするように設定されていましたが、接続が拒否された情報には同じルールが適用され、ハングしたクライアントソフトウェアに到達できませんでした(おそらくタイムアウトまで)。
解決策は、サーバーアドレスとして127.0.0.2
を使用し、接続を拒否するルールを設定することでしたto。拒否に関する情報は127.0.0.1
に送信され、クライアントソフトウェアに渡すことができました。