為什麼本機 IP 是 127.0.0.1?

為什麼本機 IP 是 127.0.0.1?

localhost我想知道IP位址的決定的由來是什麼127.0.0.1。是什麼意思127?是什麼意思0.0.1

答案1

127 是子網路遮罩為 的 A 類網路中的最後一個網路號碼255.0.0.0127.0.0.1是子網路中第一個可指派的位址。127.0.0.0無法使用,因為那會是線號。但是對主機部分使用任何其他數字應該可以正常工作並恢復使用127.0.0.1.127.1.1.1如果您願意,可以透過 ping 來親自嘗試。為什麼他們要等到最後一個網路號碼才實施這個?我認為沒有記錄。

答案2

我能找到的關於 127 分配為環回的最早提及是 1986 年 11 月RFC 990雷諾茲和波斯特爾撰寫:

位址零被解釋為「這個」的意思,如「這個網路」中的那樣。

例如,位址 0.0.0.37 可以解釋為該網路上的主機 37。

A類網路號127被賦予了「環回」功能,也就是由更高層協定傳送到網路127位址的資料封包應該在主機內部環回。 「發送」到網路 127 位址的資料封包不應出現在任何網路的任何地方。

甚至早在1981年9月RFC 790、0 和 127 已保留:

000.rrr.rrr.rrr 保留 [JBP]
127.rrr.rrr.rrr 保留 [JBP]

到 1981 年,0 和 127 是唯一保留的 A 類網路。

我知道這並不能回答問題,但這已經是我所能挖掘的最久遠的了。選擇 1.0.0.0 進行環回可能更有意義,但這已經提供給 BBN 分組無線網路。

答案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 個字)對這些測試進行編碼,而這些特定測試都可能在每個時脈週期內執行。使用任何其他值可能每個需要 4 個字(總共 12 個字),程式碼大小會增加 50%,執行時間也可能會增加 50%。

答案4

如果您考慮本機或環回 IP 位址的含義,您就會意識到您永遠不想在主機外部看到該位址或該位址所屬的網路。 (在主機內部,太暗了,看不到它。向馬克吐溫道歉。)

因此,必須有人選擇一個 IP 網路來代表這個本地主機位址。我不記得是誰首先選擇了它,但在定期發布的“主機要求”的 IETF 徵求意見中指定了它。

這是很久以前的事情了,以至於當時沒有人想到「浪費」整個 A 類位址的想法。

localhost 的實用性在於您可以使用硬編碼的 IP 位址與自己對話。它早在域名系統出現之前就已經被使用。您實際上可以使用 127.xxx 有效地址中的任何一個,但從來沒有人這樣做過。您無法偷偷使用 127 作為真實網絡,因為「路由器要求」RFC 不允許在任何互聯網上路由該網路。

相關內容