跳至內容

Localhost

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

這是本頁的一個歷史版本,由KonaYukiCrash留言 | 貢獻2019年2月28日 (四) 16:53 另见編輯。這可能和目前版本存在著巨大的差異。

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

本地環迴

運用本地環迴機制,便可在主機上運行網絡服務,期間不須安裝實體網絡介面卡,也無須將該服務開放予主機所在網絡。比方說,在主機內部安裝好網站後,只要在瀏覽器中輸入 http://localhost 這一網址,便可訪問網站,顯示其首頁。

Localhost這一主機名稱,正常而言會解析爲 IPv4 本地環回地址 127.0.0.1 ,以及 IPv6 本地環回地址 [::1]。[1]

名稱解析

IPv4 網絡標準將整個 127.0.0.0/8 地址塊訂為保留地址,供本地環回使用,整個地址塊內有超過1600萬個IP位址。所以,發送到這些地址(127.0.0.1 到 127.255.255.255)的所有數據包都會返回本機。 地址 127.0.0.1 是 IPv4 環回的常用標準地址; 其餘地址並不是所有的作業系統都支持(多數人也不知道有這些地址)。但是,使用127.0.0.1/8內的不同地址,就可以在本機上設置偵聽相同埠的多個伺服器。 IPv6 標準只分配了一個本地環回地址:[::1]。

要將本地主機名localhost解析到一個或多個 IP 地址,一般是通過在作業系統的 hosts 文件中添加以下代碼實現的:

127.0.0.1    localhost
::1          localhost

本地主機名也可以由 DNS 伺服器解析,但這一主機名的解析請求,應在本地處理,而非發送到遠程伺服器。

除了映射到環回地址(127.0.0.1 和 ::1)之外,localhost 還可以映射到其他 IPv4 環回地址,更可以將其他名稱或附加名稱分配給任何迴環地址。不過, 在 hosts 文件或 DNS 中為localhost這個主機名設置映射地址時,假如新設置的映射地址並不在原本指定的映射地址範圍內,所作映射不一定會生效,因為應用程式內部可能已對localhost進行映射操作。

域名系統中,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)跟蹤路由錯誤檢測中,它們的不可路由屬性提供了一種方便的方法來避免向最終用戶傳送錯誤數據包。

另見

參見