
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 によって、インターネット上でそのネットワークをルーティングすることが禁止されているためです。