跳至內容

Localhost

維基百科,自由的百科全書

這是本頁的一個歷史版本,由XL-028對話 | 貢獻2018年10月15日 (一) 12:16 (空格)編輯。這可能和目前版本存在着巨大的差異。

計算機網絡中,localhost是一個主機名稱,意為「本機」,「本地主機」。通過本地環回網絡接口,它被用來訪問本機運行的服務。本地環回網絡會繞過任何本地網絡接口硬件。

本地環回

本地環回機制可以用於在主機上運行的網絡服務,而不需要物理網絡接口,亦無需從通過可用網絡連接訪問該服務。例如,可以通過訪問 URL http://localhost 從 Web 瀏覽器訪問運行在本地的網站。

一般把本地主機解析為 IPv4 本地環回地址 127.0.0.1 或 IPv6 本地環回地址 [::1]。[1]

名稱解析

IPv4 網絡標準為本地環回保留了整個 127.0.0.0/8 地址塊。這意味着發送到任何這些地址(127.0.0.1 到 127.255.255.255)的任何數據包都被循環回去。 地址 127.0.0.1 是 IPv4 環回的常用標準地址; 其餘的地址並不是所有的作業系統都支持(多數人不知道它們的存在)。但是,它們可以用來在本地機器上設置多個伺服器,讓所有伺服器都在相同的端口上偵聽。 IPv6 標準僅為本地環回分配一個地址:[::1]。

本地主機名解析到一個或多個 IP 地址,一般是由作業系統中 hosts 文件中的幾行配置的:

127.0.0.1    localhost
::1          localhost

該名稱也可以由 DNS 伺服器解析,但是它應該在本地被解析,而非被發送到遠程伺服器。

除了將本地主機映射到環回地址(127.0.0.1 和 ::1)之外,localhost 還可以映射到其他 IPv4 環回地址,還可以將其他名稱或附加名稱分配給任何迴環地址。 hosts 或 DNS 中指定的環回地址範圍之外的地址到本地主機的映射不能保證達到預期的效果,因為應用程式可能會在內部映射本地主機名稱。

域名系統中,localhost 被留作頂級域名,最初被留出以避免與用於回送目的的主機名混淆。IETF 標準禁止域名註冊商分配 localhost 名稱。[2]

IETF 標準

名稱 localhost 由 RFC 6761(特殊用途域名)保留,用於環回。[3]該域名在2013年2月達到了建議標準成熟度級別。該標準規定了一些特殊的考慮因素,規範其在域名解析系統中的使用:

  • localhost 的 IPv4 或 IPv6 地址查詢必須始終解析為相應的環回地址,該地址在單獨的標準中指定。
  • 應用可以自行解析環回地址,或者將他們交由本地解析器機制。
  • 當名稱解析器收到 localhost 的地址(A 或 AAAA)查詢時,它應該返回適當的環回地址,以及其他請求的記錄類型的請求響應。不應將本地主機的查詢轉發到緩存名稱伺服器。
  • 為了避免使域名系統根伺服器負擔流量,緩存名稱伺服器不應請求本地主機的名稱伺服器記錄,也不要向權威名稱伺服器轉發解析。
  • DNS 註冊商不能在頂級域 localhost 中委派域名。
  • 在上述規定的前提下,當權威名稱伺服器收到 'localhost' 查詢請求時,應該適當處理。
  • IPv4 環回地址由 IETF 特殊用途 IPv4 地址標準(RFC 5735)在 IPv4 地址中保留空間,[4]可以追溯到 1986 年 11 月分配號碼標準(RFC 990)。

IPv4 環回地址由 IETF 特殊用途 IPv4 地址標準(RFC 5735)在 IPv4 地址中保留空間,可以追溯到 1986 年 11 月分配號碼標準(RFC 990)。

相比之下,IETF IPv6 尋址體系結構標準(RFC 4291)在IPv6地址空間內保留單個IPv6 環回地址 ::1。 該標準排除了將該地址分配給任何物理接口,以及在任何數據包中,將其用作發送到遠程主機的源地址或目標地址的用途。任何這類被錯誤傳輸的數據包都不應該被路由轉發,並且應該被接收它的所有路由器或主機丟棄。

數據包處理

發送到環回地址的任何數據包的處理都在 TCP/IP 協議棧的鏈路層中實現。這些數據包不會被傳遞到任何網絡接口控制器(NIC)或硬件設備驅動程序,也不能出現在計算系統之外,也不能被任何路由器轉發。這允許在沒有任何硬件網絡接口的情況下,進行軟件測試和本地服務。 

環回數據包與其他任何通過 TCP/IP 協議棧的數據包僅通過尋址到的特殊IP位址進行區分。因此,最終接收到的服務將根據指定的目的地進行響應。例如,HTTP服務可以將發往127.0.0.99:80 和 127.0.0.100:80 的數據包路由到不同的 Web 伺服器,或發送到返回不同網頁的單一伺服器。為了簡化這種測試,可以將 hosts 文件配置為為每個地址提供合適的名稱。

具有環回源地址或目標地址的數據包,在非環回接口上收到則必須被刪除。這種數據包有時被稱為火星包。和其他虛假數據包一樣,它們可能是惡意的,它們帶來的問題可以通過 bogon 濾波避免。[5]

特殊情況

MySQL 數據庫的版本區分使用主機名 localhost 與使用地址 127.0.0.1 和 ::1。[6][7]當在應用程式的客戶端連接器接口中使用 localhost 作為目標時,MySQL 應用程式編程接口使用 Unix 域套接字連接到數據庫,而通過環回接口的 TCP 連接需要直接使用顯式地址。

使用 127.0.0.0/8 網絡地址時,一個值得注意的例外是,它們用在多協議標籤交換(MPLS)跟蹤路由錯誤檢測中,它們的不可路由屬性提供了一種方便的方法來避免向最終用戶傳送錯誤數據包。

另見

  • 私有網絡
  • 保留的 IP 地址

參見