127.0.0.1 和 0.0.0.0 有什麼區別?

已發表: 2022-01-29

我們大多數人都聽說過“127.0.0.1 和 0.0.0.0”,但可能沒有過多考慮它們,但如果兩者實際上似乎都指向同一個位置,那麼兩者之間的實際區別是什麼? 今天的超級用戶問答帖子有助於為困惑的讀者澄清問題。

今天的問答環節由 SuperUser 提供——Stack Exchange 的一個分支,一個由社區驅動的問答網站分組。

照片由凱特·加德納 (Flickr) 提供。

問題

超級用戶 Sagnik Sarkar 想知道 127.0.0.1 和 0.0.0.0 之間的區別是什麼:

我知道 127.0.0.1 指向localhost並且 0.0.0.0 也可以(如果我錯了,請糾正我)。 那麼,127.0.0.1 和 0.0.0.0 有什麼區別呢?

127.0.0.1 和 0.0.0.0 有什麼區別?

答案

超級用戶貢獻者 DavidPostill 為我們提供了答案:

127.0.0.1 和 0.0.0.0 有什麼區別?

  • 127.0.0.1 是環回地址(也稱為 localhost)。
  • 0.0.0.0 是一個不可路由的元地址,用於指定無效、未知或不適用的目標(“無特定地址”佔位符)。

在路由條目的上下文中,它通常表示默認路由。

在服務器的上下文中,0.0.0.0 表示本地機器上的所有 IPv4 地址。 如果主機有兩個 IP 地址,192.168.1.1 和 10.1.2.1,並且在主機上運行的服務器偵聽 0.0.0.0,那麼這兩個 IP 都可以訪問它。

IP 地址 127.0.0.1 是什麼?

127.0.0.1 是環回 Internet 協議 (IP) 地址,也稱為localhost 。 該地址用於與最終用戶使用的同一台機器或計算機建立 IP 連接。

使用 ::1 的內涵為支持 IPv6 尋址的計算機定義了相同的約定。 使用地址 127.0.0.1 建立連接是最常見的做法; 但是,使用 127...* 範圍內的任何 IP 地址都將以相同或相似的方式運行。 環回結構使能夠聯網的計算機或設備能夠驗證或建立機器上的 IP 堆棧。

來源: 127.0.0.1 – 它的用途是什麼,為什麼重要?

特殊地址

A類網絡號127被分配了環回功能,即更高層協議發送到網絡127地址的數據報應該在主機內部環回。 發送到網絡 127 地址的任何數據報都不應該出現在任何地方的任何網絡上。

來源:網絡號碼

如果是整個 A 類,最後三個八位組的其他任意值的意義何在?

環回範圍的目的是測試主機上的 TCP/IP 協議實現。 由於較低層是短路的,因此發送到環回地址可以有效地測試較高層(IP 及以上),而不會出現較低層出現問題的機會。 127.0.0.1 是最常用於測試目的的地址。

來源: IP 保留、環回和私有地址

有關更多信息,請參閱詢問 Ubuntu問題:什麼是環回設備以及如何使用它?

IP 地址 0.0.0.0 是什麼?

0.0.0.0 是有效的地址語法。 因此,它應該在任何需要傳統點分十進製表示法的 IP 地址的地方解析為有效。 一旦解析並轉換為可用的數字形式,它的值就決定了接下來會發生什麼。

全零值確實具有特殊含義。 所以它是有效的,但對於特定情況可能不合適(因此被視為無效)。 它基本上是“無特定地址”佔位符。 對於諸如網絡連接的地址綁定之類的事情,結果可以是為連接分配適當的接口地址。 如果您使用它來配置接口,它可以改為從接口中刪除地址。 這取決於使用的​​上下文來確定“沒有特定地址”的真正作用。

在路由條目的上下文中,它通常表示默認路由。 發生這種情況的結果是更多的地址掩碼,它選擇要比較的位。 掩碼 0.0.0.0 不選擇任何位,因此比較將始終成功。 因此,當配置了這樣的路由時,數據包總是可以到達某個地方(如果配置了有效的目的地)。

在某些情況下,僅“0”也可以工作並具有相同的效果。 但這不能保證。 0.0.0.0 形式是說“沒有特定地址”的標準方式(在 IPv6 中是::0或只是:: )。

來源: IP地址0.0.0.0是什麼意思?

在 Internet 協議版本 4 中,地址 0.0.0.0 是不可路由的元地址,用於指定無效、未知或不適用的目標。 賦予無效數據塊特殊含義是帶內信令的應用。

在服務器的上下文中,0.0.0.0 表示本地機器上的所有 IPv4 地址。 如果主機有兩個 IP 地址,192.168.1.1 和 10.1.2.1,並且在主機上運行的服務器偵聽 0.0.0.0,則可以在這兩個 IP 上訪問它(注意:此特定文本從上面重複作為一部分的總體答案)。

在路由的上下文中,0.0.0.0 通常表示默認路由,即通向 Internet 的“其餘部分”而不是本地網絡某處的路由。

用途包括:

  • 主機在尚未分配地址時聲明為自己的地址。 例如在使用 DHCP 時發送初始 DHCPDISCOVER 數據包時。
  • 當通過 DHCP 的地址請求失敗時,主機分配給自己的地址,前提是主機的 IP 堆棧支持這一點。 這種用法已被現代操作系統中的 APIPA 機制所取代。
  • 一種完全指定任何 IPv4 主機的方法。 指定默認路由時以這種方式使用它。
  • 一種明確指定目標不可用的方法。 來源: 127.0.0.1 – 它的用途是什麼,為什麼重要?
  • 一種完全指定任何 IPv4 地址的方法。 在配置服務器時(即綁定監聽套接字時)以這種方式使用。 TCP 程序員將其稱為 INADDR_ANY。 [ bind(2) 綁定到地址,而不是接口。 ]

在 IPv6 中,全零地址寫為::

來源: 0.0.0.0 [維基百科]

DHCP 發現/請求

當客戶端第一次啟動時,它被稱為處於初始化狀態,並通過用戶數據報協議 (UDP) 端口 67(BootP 服務器)在其本地物理子網上傳輸 DHCPDISCOVER 消息。 由於客戶端無法知道自己所屬的子網,所以DHCPDISCOVER是一個全子網廣播(目的IP地址為255.255.255.255),源IP地址為0.0.0.0。 源 IP 地址為 0.0.0.0,因為客戶端沒有配置的 IP 地址。

如果該本地子網上存在 DHCP 服務器並且配置和運行正確,則 DHCP 服務器將聽到廣播並以 DHCPOFFER 消息進行響應。 如果本地子網上不存在 DHCP 服務器,則該本地子網上必須有 DHCP/BootP 中繼代理,以將 DHCPDISCOVER 消息轉發到包含 DHCP 服務器的子網。

此中繼代理可以是專用主機(例如 Microsoft Windows Server)或路由器(例如配置有接口級 IP 幫助程序語句的 Cisco 路由器)。

客戶端收到 DHCPOFFER 後,會以 DHCPREQUEST 消息進行響應,表明其意圖接受 DHCPOFFER 中的參數,並進入請求狀態。 客戶端可能會收到多個 DHCPOFFER 消息,每個 DHCP 服務器收到一個原始 DHCPDISCOVER 消息。 客戶端選擇一個 DHCPOFFER 並僅響應該 DHCP 服務器,隱式拒絕所有其他 DHCPOFFER 消息。 客戶端通過使用 DHCP 服務器的 IP 地址填充服務器標識符選項字段來識別所選服務器。

DHCPREQUEST 也是一個廣播,因此所有發送 DHCPOFFER 的 DHCP 服務器都會看到 DHCPREQUEST,並且每個服務器都會知道它的 DHCPOFFER 是被接受還是被拒絕。 客戶端需要的任何其他配置選項都將包含在 DHCPREQUEST 消息的選項字段中。 即使已經為客戶端提供了 IP 地址,它也會發送源 IP 地址為 0.0.0.0 的 DHCPREQUEST 消息。 此時,客戶端還沒有收到可以使用IP地址的驗證。

客戶端獲取 DHCP 地址的客戶端-服務器對話,其中客戶端和 DHCP 服務器位於同一子網上:

資料來源:了解 Catalyst 交換機或企業網絡中的 DHCP 並對其進行故障排除

默認路由

本文檔說明如何配置默認路由或最後的網關。 使用這些 IP 命令:

  • ip 默認網關
  • ip 默認網絡
  • ip 路由 0.0.0.0 0.0.0.0

IP 路由 0.0.0.0 0.0.0.0

創建到網絡 0.0.0.0 0.0.0.0 的靜態路由是在路由器上設置最後網關的另一種方法。 與ip default-network命令一樣,使用到 0.0.0.0 的靜態路由不依賴於任何路由協議。 但是,必須在路由器上啟用 IP 路由。

注意: IGRP 不理解到 0.0.0.0 的路由。 因此,它無法傳播使用ip route 0.0.0.0 0.0.0.0命令創建的默認路由。 使用ip default-network命令讓 IGRP 傳播默認路由。

資料來源:使用 IP 命令配置最後的網關


有什麼要補充的嗎? 在評論中關閉聲音。 想要閱讀其他精通技術的 Stack Exchange 用戶的更多答案? 在此處查看完整的討論主題。