題 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之間有什麼區別?


178
2017-08-02 13:17


起源


你可能感興趣 這個Chrome bug跟踪器討論 關於如何處理 0.0.0.0 在地址輸入中。 - Shareware
在大多數服務器配置中,0.0.0.0表示監聽所有地址!這將使您的服務器在互聯網上可用。如果你為一些沒有任何安全性的本地服務器執行此操作(它只在localhost上監聽,對嗎?)這很糟糕。不要那樣做! - Josef
從字面上回答你的問題,區別在於 2130706433。 - Shaz
@Mast哦,你是設置一個完全不安全的系統的人之一,因為防火牆會解決所有問題?通常,這個系統可以找到 shodan.io :3這種心態的下一個層面是“我們完全可以使用5年前的WordPress安裝,我們得到了一個WAF”。我不建議有人沿著這條路走下去! - Josef
@Shaz我想贊成你的評論,但由於現在是42,我不能讓自己去做... - Jenny D


答案:


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   連接到最終用戶使用的同一台機器或計算機。

為支持IPv6的計算機定義了相同的約定   使用:: 1的內涵進行尋址。建立連接   使用地址127.0.0.1是最常見的做法;然而,   使用127範圍內的任何IP地址。。*將起作用   相同或相似的方式。 loopback構造給計算機或   能夠聯網驗證或建立能力的設備   機器上的IP堆棧。

資源: 127.0.0.1 - 它的用途是什麼,為什麼重要?


特別地址

A類網絡號127被分配為“環回”            功能,即由更高級別協議發送的數據報            到網絡127地址應該循環回主機內部。沒有            數據報“發送”到網絡127地址應該出現在            任何網絡。

資源: 網絡號碼


如果它是整個A類,那麼最後三個八位字節的其他任意值的重點是什麼?

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

資源: IP保留,環回和私有地址

有關更多信息,請參閱 https://askubuntu.com 題 什麼是環回設備以及如何使用它? 和 為什麼環回IP地址從127.0.0.1到127.255.255.254?


什麼是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是a   用於指定無效,未知或非無效的不可路由的元地址   適用目標。賦予其他無效的特殊含義   數據是帶內信令的應用。

在服務器環境中,0.0.0.0表示“本地計算機上的所有IPv4地址”。如果主機有兩個IP地址,192.168.1.1和10.1.2.1,並且主機上運行的服務器偵聽0.0.0.0,則可以在這兩個IP上訪問它。

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

用途包括:

  • 主機在尚未分配地址時聲明為自己的地址。比如發送初始DHCPDISCOVER時   使用DHCP時的數據包。
  • 如果主機的IP堆棧支持,則當通過DHCP的地址請求失敗時,主機為自己分配的地址。在現代操作中,這種用法已經被APIPA機制所取代   系統。
  • 一種指定“任何IPv4主機”的方法。在指定默認路由時以此方式使用它。
  • 一種明確指定目標不可用的方法。1
  • 一種指定“任何IPv4地址”的方法。在配置服務器時(即綁定偵聽套接字時),它以這種方式使用。   TCP程序員將其稱為INADDR_ANY。 (bind(2)綁定到   地址,而不是接口。)

在IPv6中,全零地址寫為“::”。

資源: 0.0.0.0


DHCP發現/請求

當客戶第一次啟動時,據說它就在   初始化狀態,並在其本地發送DHCPDISCOVER消息   用戶數據報協議(UDP)端口67(BootP   服務器)。 由於客戶端無法知道它所在的子網   屬於,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)或路由器(例如,Cisco路由器)   配置了接口級IP幫助器語句)。

...

在客戶端收到DHCPOFFER後,它會響應DHCPREQUEST消息,指示其接受DHCPOFFER中的參數的意圖,並進入請求狀態。客戶端可以從接收到原始DHCPDISCOVER消息的每個DHCP服務器接收多個DHCPOFFER消息。客戶端選擇一個DHCPOFFER並僅響應該DHCP服務器,隱式拒絕所有其他DHCPOFFER消息。客戶端通過使用DHCP服務器的IP地址填充服務器標識符選項字段來標識所選服務器。 DHCPREQUEST也是廣播,因此發送DHCPOFFER的所有DHCP服務器都將看到DHCPREQUEST,並且每個服務器都將知道其DHCPOFFER是被接受還是被拒絕。客戶端要求的任何其他配置選項都將包含在DHCPREQUEST消息的選項字段中。 即使為客戶端提供了IP地址,它也會發送源IP地址為0.0.0.0的DHCPREQUEST消息。此時,客戶端尚未收到使用IP地址明確的驗證。

...

客戶端 - 服務器對話,獲取客戶端和DHCP服務器駐留在同一子網上的DHCP地址

Enter image description here

資源: 了解和排除Catalyst交換機或企業網絡中的DHCP故障


默認路線

本文檔介紹瞭如何配置默認路由或網關   最後一招。使用這些IP命令:

  • ip default-gateway

  • ip default-network

  • 和ip route 0.0.0.0 0.0.0.0

ip route 0.0.0.0 0.0.0.0

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

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

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


173
2017-08-02 18:33





他們不一樣。

127.0.0.1 是127/8網絡的一部分,它被保留並指向同一台計算機。

0.0.0.0 是一個特殊的IP地址,根據上下文意味著不同的東西。

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

當您查看netstat並將本地地址監聽為0.0.0.0時,您可能會錯誤地將0.0.0.0誤認為127.0.0.1,但這是使用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通常表示默認路由,   即導致“互聯網的其餘部分”的路線,而不是   在本地網絡的某個地方。

https://en.wikipedia.org/wiki/0.0.0.0


106
2017-08-02 13:55



0.0.0.0 有時也可以指示廣播,這對網絡上的所有計算機都是有意義的。 - KronoS
@KronoS我認為廣播是這樣的 255.255.255.255 (或更現實的東西 192.168.1.255 對於本地網絡) - Nick T
@NickT你好啊 正確: A special definition exists for the IP broadcast address 255.255.255.255. It is the broadcast address of the zero network or 0.0.0.0, which in Internet Protocol standards stands for this network, i.e. the local network. Transmission to this address is limited by definition, in that it is never forwarded by the routers connecting the local network to other networks. - KronoS
@KronoS你將廣播地址與環回混淆。環回是0.0.0.0,如上所述,它監聽所有本地地址。廣播(以簡單的方式)是“廣播”到該網絡中所有地址的255個網絡。 - Desorder
這是不完整的 - 許多操作系統實際上讓你 連接至 0.0.0.0,然後表現得像一個環回地址。 - grawity


127.0.0.1本地計算機的地址之一,但任何地址127.xyz也是計算機的另一個地址(稱為“環回地址”),127.0.0.0(環回子網)和127.255.255.255(環回的廣播地址除外)子網)。

127.x.y.z的意思是“這裡”。

0.0.0.0完全不同: 0.0.0.0不是任何東西的地址,這是小丑,因為 * 在殼中。

您無法將數據發送到0.0.0.0或主動打開到0.0.0.0的TCP連接,因為那裡沒有任何內容; 0.0.0.0甚至不是無法到達或不可路由的地址, 在預期地址的情況下,它毫無意義

您可以在上下文中使用joker 0.0.0.0,其中可以選擇提供地址,意思是 我不在乎

例如,當您主動打開到某個TCP服務器的TCP連接(TCP服務器由被動TCP打開創建)時,您需要指定TCP服務器的地址(IP和端口號),您可以 可選 選擇一個本地地址。 (因為您的套接字不是服務器套接字,所以沒有人可以打開它的連接,並且連接側的地址通常不是很重要。)

bind 系統調用用於選擇TCP套接字的本地地址。數據傳遞給 bind 實際上是一組約束:對IP地址的約束,對TCP端口的約束。通常的文本符號是IP:port。 0.0.0.0:0表示任何IP都可以接受任何端口,它是空約束。 0.0.0.0:20表示本地端口必須為20,任何IP都是可接受的(符合FTP服務器使用0.0.0.0:20進行活動模式下的數據連接)。

TCP / IP子系統將為您選擇TCP連接的地址 如果您不使用路由表,則根據目標地址選擇一個:本地TCP套接字地址將是與目標地址對應的路由關聯的本地地址。

我之前提到過shell“元字符” *,但結合元字符與字符的力量 *foo* (任何包含“foo”的文件名)都不存在IP地址限制,它是全部或全部:單個IP地址被認為是可接受的或所有地址都是。邏輯呢  要求它一定是這樣的。您可以使用更豐富的約束語言擴展接口。

精確:

這句話 127.x.y.z的意思是“這裡” 並不意味著所有這些地址都是一樣的。它們實際上代表本地“計算機”內部的不同“位置”(套接字地址)。

備註:具有虛擬化的計算機(仿真,硬件虛擬化,半虛擬化,無論您能想到什麼......)都有多個獨立的IP堆棧。


13
2017-08-03 16:38



當我在瀏覽器中輸入以127開頭的隨機地址(例如127.16.23.42)時,它沒有連接到localhost。 - whoKnows
@whoKnows當然。 localhost是127.0.0.1,而不是127.16.23.42。 - curiousguy
我知道了。所以127.0.0.1表示localhost,但是127.x.y.z 可以 是指本地計算機,如果它是這樣設置的? - whoKnows
@whoKnows號: 對於任何x y z,127.x.y.z都屬於這台計算機。 “localhost”只是127.0.0.1的名稱,所以忘記“localhost”。使用 -n 要么 -d 國旗 netstat 以及顯示數字地址的相關程序,而不是名稱。 127.0.0.1與127.16.23.42的IP地址不同。 因此,127.0.0.1:80和127.16.23.42:80表示不同的TCP端點地址,在另一個地址處找不到一個地址的Web服務器。 - curiousguy


通常,您使用bind-address 0.0.0.0來允許來自外部網絡和源的連接。像MySQL這樣的許多服務器通常綁定到127.0.0.1,只允許環回連接,要求管理員將其更改為0.0.0.0以啟用外部連接。


3
2017-08-03 05:55