在當今的計算機網絡中,localhost 是一個重要的主機名稱,指的是當前使用的計算機。這個名稱是保留給回送的用途,主要用來訪問運行在主機上的網絡服務。通過回送網絡接口進行訪問,可以繞過任何本地的網絡接口硬體,這使得回送機制成為一種方便的地方法來運行本地服務。
回送機制可用於在不需要物理網絡接口的情況下運行網絡服務。
例如,可以通過瀏覽器輸入網址 http://localhost
來訪問本地安裝的網站的主頁。根據IPv4的網絡標準,整個地址塊 127.0.0.0/8
(超過1600萬個地址) 被保留用於回送目的。這意味著向這些地址發送的任何封包都會被回送。地址 127.0.0.1
是IPv4回送流量的標準地址,而其餘的地址並不是所有操作系統都支持。然而,它們可以用於在主機上設置多個伺服器應用程式,所有這些應用程式都可以聆聽相同的端口號。
在IPv6的地址架構中,只有一個地址被分配給回送,即 ::1
。這個標準禁止將該地址分配給任何物理接口,也不允許其作為發送或接收封包的源或目的地址。這保證了回送地址的合適使用,並防止了不必要的路由問題。
通常情況下,localhost 名稱解析為IPv4回送地址 127.0.0.1
和IPv6回送地址 ::1
。這種解析通常是通過操作系統的 hosts 文件配置的,內容為:
127.0.0.1 localhost
::1 localhost
這個名稱也可以通過域名系統(DNS)伺服器解析,但在使用該名稱時有一些特殊考慮。IPv4或IPv6地址查詢名稱 localhost 必須始終解析到相應的回送地址。當名稱解析器收到一個地址查詢(A或AAAA查詢)時,它應該返回適當的回送地址,並對任何其他請求的記錄類型給出否定的響應。
查詢localhost時,應該避免向緩存的名稱伺服器發送請求,以免對域名系統根伺服器造成流量負擔。
在域名系統中,名稱 .localhost
被保留為一個頂級域名,最初是為了避免與主機名稱 localhost 之間的混淆。域名註冊商被禁止將頂級 .localhost
域中的域名分配給任何用戶。
早在1981年,網絡地址塊 127.0.0.0/8
被標記為「保留」狀態,以避免其被分配為一般用途的類A IP網絡。這個塊在1986年被正式指定用於回送目的。到1994年、2002年、2010年以及2013年,這一用途被確認為特殊用途的IPv4地址塊。此外,1995年開始定義的IPv6回送地址 ::1
的用途和定義自那時起至今並未改變。
處理發送到回送地址的任何封包是在TCP/IP堆棧的鏈路層中實現的。這些封包不會被傳遞給任何網絡接口控制器(NIC)或硬體設備驅動程序,也不應該出現在計算系統之外,或被任何路由器路由。這允許即使在沒有任何硬體網絡接口的情況下也能進行軟體測試和本地服務。
回送封包與其他封包的區別僅在於它們的特殊IP地址。
雖然 127.0.0.0/8
地址的使用有其例外,但它們在多協議標籤交換(MPLS)的 traceroute 錯誤檢測中卻被利用,這一特性使其成為避免將故障封包傳送到最終用戶的一個方便手段。
在各種網絡專案設計中,了解回送地址的特殊性不僅對於開發而言至關重要,也對於系統管理和安全設置有著深遠的影響。你是否想過,這些看似普遍的地址,是否還隱藏著更多不為人知的秘密呢?