なぜ localhost IP は 127.0.0.1 なのでしょうか?

なぜ localhost IP は 127.0.0.1 なのでしょうか?

localhostの IP アドレスを にするという決定の由来は何だろうかと思いました127.0.0.1。 の「意味」とは何でしょうか127。 の「意味」とは何でしょうか0.0.1

答え1

127 は、サブネット マスクが であるクラス A ネットワークの最後のネットワーク番号です255.0.0.0。は、127.0.0.1サブネットで割り当て可能な最初のアドレスです。127.0.0.0はワイヤ番号になるため、使用できません。ただし、ホスト部分に他の番号を使用すると正常に機能し、 に戻ります127.0.0.1。 ping を実行して自分で試すこともできます127.1.1.1。なぜ、これを実装するのに最後のネットワーク番号まで待ったのでしょうか。文書化されていないと思います。

答え2

127のループバックとしての割り当てに関して私が見つけた最も古い言及は1986年11月である。RFC990 の翻訳著者:レイノルズとポステル

アドレス 0 は、「このネットワーク」のように、「これ」を意味するものとして解釈されます。

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

...

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

1981年9月にはRFC790 の翻訳、0、127はすでに予約済みです:

000.rrr.rrr.rrr 予約済み [JBP]
...
127.rrr.rrr.rrr 予約済み [JBP]

1981 年までに予約されたクラス A ネットワークは 0 と 127 のみでした。0 は特定のホストを指すために使用されたため、ループバックには 127 が残りました。

これは質問の答えではないことは承知していますが、私が調べた限りではこれが最古のものです。ループバックに 1.0.0.0 を選択する方が合理的だったかもしれませんが、これはすでに BBN Packet Radio Network に与えられていました。

答え3

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

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% 増加する可能性があります。

答え4

ローカルホストまたはループバック IP アドレスの意味について考えると、そのアドレス、またはそのアドレスが属するネットワークをホストの外部で表示したくないことがわかります。(ホストの内部では暗すぎて見えません。マーク・トウェインに謝罪します。)

したがって、誰かがこのローカルホスト アドレスを表す IP ネットワークを選択する必要がありました。誰が最初に選択したかは覚えていませんが、これは「ホスト要件」として定期的に発行される IETF の Request for Comments で指定されています。

これはかなり昔に行われたことなので、クラス A アドレス全体を「無駄にする」という考えは当時は誰の頭にも浮かびませんでした。

localhost の便利な点は、ハードコードされた IP アドレスを使用して自分自身と通信できることです。これは、ドメイン ネーム システムが登場するずっと前から使用されていました。実際には、127.xxx の有効なアドレスのいずれかを使用できますが、誰も使用していません。127 を実際のネットワークとしてこっそり使用することはできません。これは、「ルーター要件」RFC によって、インターネット上でそのネットワークをルーティングすることが禁止されているためです。

関連情報