ネットワーク – なぜローカルホストのIP 127.0.0.1ですか?

ip localhost loopback networking

localhostのIPアドレスを127.0.0.1にしたのは何が由来なのかと。127の「意味」は何なのか、0.0.1の「意味」は何なのか

  86  Roee Adler  2009-08-29


ベストアンサー

127は、255.0.0.0のサブネットマスクを持つクラスAネットワークの最後のネットワーク番号です。127.0.0.1 はサブネット内で最初に割り当てられるアドレスです。127.0.0.0 はワイヤ番号になるので使用できません。しかし、ホスト部分に他の番号を使用しても問題なく動作し、127.0.0.1 を使用するように戻ります。もしよければ、127.1.1.1にpingを打つことで自分で試すことができます。なぜ最後のネットワーク番号まで待って実装したのか?文書化されていないと思います

88  John T  2009-08-29


127 がループバックとして割り当てられたことについて、私が見つけた最も古い言及は 1986 年 11 月の RFC 990 で、Reynolds と Postel が執筆しています

アドレスゼロは、”このネットワーク “のように、”これ “を意味すると解釈されます

例えば、アドレス 0.0.0.0.37 は、このネットワーク上のホスト 37 を意味すると解釈できます

クラスAのネットワーク番号127には「ループバック」機能が割り当てられており、つまり、上位プロトコルによってネットワーク127アドレスに送信されたデータグラムは、ホスト内でループバックするべきである。ネットワーク127アドレスに「送られた」データグラムは、どこのネットワークにも現れてはならない

1981年9月の時点でもRFC 790、0と127はすでに予約されていた

000.rrr.rrr.rrr                 Reserved                     [JBP]
...
127.rrr.rrr.rrr                 Reserved                     [JBP]

0 と 127 は 1981 年までに予約された唯一の Class A ネットワークでした。0 は特定のホストを指すために使われていたので、127 はループバックのために残されていました

これが質問の答えになっていないことは分かっていますが、私が調べた限りでは、これが答えになっています。ループバックのために 1.0.0.0.0 を選んだ方が理にかなっていたかもしれませんが、それはすでに BBN Packet Radio Network に与えられています

58  hyperslug  2009-08-29


インターネットの設計者は、ハードウェアがどのように機能するかを本当に理解していて、低レベルの実装を念頭に置いて設計していました

0, 127, 255 の値は、8 ビットのアセンブリや機械語プログラミングでは特別な値です。127は符号付き8ビット整数の中で最も高い値なので、これを1インクリメントすると符号付きオーバーフローが発生します。同様に、255 をインクリメントすると符号なしオーバーフローが発生します。値 0 をレジスタにロードするだけで、通常はチップにゼロフラグが設定されます。疑似コードでネットワーキングプログラムが以下のようになっていると想像してみてください

if (value == 0) doLocal();
if (value == 127) doLoopback();
if (value == 255) doNetwork();

チップにもよりますが、当時のほとんどのチップは、これらのテストをそれぞれ2ワード、3ワード、3ワード(合計8ワード)でエンコードすることができ、さらに、これらの特定のテストは、それぞれ1クロックサイクルで実行される可能性が高いものでした。他の値を使用すると、おそらくそれぞれ4ワード(合計12ワード)が必要になり、コードサイズが50%増加し、実行時間も50%増加します

25  Joseph Bui  2011-04-15


なぜなら、これらの標準が作成された当時のコンピュータは遅く、通常は8ビットのレジスタに制限されていたからです。数字と数字を比較するのは非常に遅く、特に数字を当時の非常に遅いメモリから取得しなければならない場合には、非常に遅くなりました。レジスタ、つまり「CPUオンボード」ストレージの方がはるかに速かったのです

また、それらの古いコンピュータは、 “ゼロに等しい”、 “ゼロとは異なる”、 “負/正の整数 “を検出するための特別な、高速な命令を持っていた(符号は…何だったか、左端のビットを推測し、今127との接続を参照してください、それは左端の=符号を除いてすべてのバイナリ “1 “を持つ数ですか?

したがって、それらは特別な数字であり、頻繁に行われる操作で多くのCPUサイクルを節約するためのプログラミングのトリックを可能にしたからです

IF CallerIP = “0 “ではなく、”IF NotZero(CallerIP) “の命令を見ることはないでしょう

BEQ, BNE」(6502 CPU)のような古代のアセンブリ命令をチェックしてみると、より長い説明が得られます。また、このページをチェックしてみてください

最後には

0, 255, 127 はすべて、最速の 1 命令でチェックすることができます。C 言語のような高レベルの言語でも、コンパイラが内部的に最適化して 1 命令にする「shortuct」比較関数を持っています

70年と80年のプログラマーは、IPナンバリングのような標準の背後にある、超希少なリソースを持つ壮大なアーキテクチャを本当に生み出し、多くの思想と天才がいます

6  Dario Fumagalli  2013-07-11


ローカルホストやループバックIPアドレスの意味を考えてみると、そのアドレスやそのアドレスが属するネットワークをホストの外では決して見たくないことに気づくでしょう。(ホストの内部は暗すぎて見えない、マーク・トウェインに謝罪)

そこで、誰かがこのlocalhostアドレスを表すIPネットワークを選ばなければなりませんでした。誰が最初にこれを選んだのかは覚えていませんが、IETFのRequest for Commentsで “Host Requirements “として定期的に発行されているものです

一昔前に行われていたことですが、当時はAクラスのアドレス全体を「無駄にする」という発想は誰の頭にも入りませんでした

localhostの有用性は、ハードコードされたIPアドレスを使って独り言ができることです。これはドメインネームシステムがあるずっと前から使われていたものです。実際には127.x.x.x.xの有効なアドレスのどれを使ってもいいのですが、誰も使ったことがありません。ルータ要件」のRFCでは、そのネットワークをインターネット上でルーティングすることは禁止されているので、こっそりと127を実際のネットワークとして使うことはできません

5  kwe  2009-08-29


まず、127.x.x.x.xの範囲全体がローカルホストを指しています。 バイナリの127は “01111111 “です。”111111111” = 255と0は予約されているので、選択は明白です 🙂

4  kolypto  2009-08-29


タイトルとURLをコピーしました