為什麼我們在 127.0.0.0 中沒有可用的 IP 位址?

為什麼我們在 127.0.0.0 中沒有可用的 IP 位址?

從理論上講,IP 位址的每個部分都是 0 到 255 之間的數字(總共 256 個可用插槽)。

但是為什麼0第四部分中沒有使用任何IP位址並且它們在IP位址計算中總是從1開始呢?

例如:

127.0.0.1 <=== logically this should start from 0 as the first usable IP address.
192.168.0.1 <=== for example even default router IP address is set to 1 rather than to be 0
10.10.0.1
.
.

為什麼0插槽總是從最後一部分跳過?

答案1

但為什麼第四部分的IP位址中沒有使用0,而IP位址的計算總是從1開始呢?

相對於該標題你的問題,至少在Linux下,127.0.0.0是一個非常有用的位址(就像任何其他127.*位址映射到環回介面一樣)。

例如,我可以在以下位置啟動網頁伺服器127.0.0.0:8080

docker run -d --rm --hostname node1 --name node1 -p 127.0.0.0:8080:8080 alpine \
  sh -c "apk add --update darkhttpd; mkdir /srv; hostname > /srv/index.html; darkhttpd /srv --port 8080"

然後啟動另一個綁定到127.0.0.1:8080

docker run -d --rm --hostname node2 --name node2 -p 127.0.0.1:8080:8080 alpine \
  sh -c "apk add --update darkhttpd; mkdir /srv; hostname > /srv/index.html; darkhttpd /srv --port 8080"

現在我可以透過各自的位址存取這些伺服器:

$ curl 127.0.0.0:8080
node1
$ curl 127.0.0.1:8080
node2

答案2

在 IPv4 中,保留子網路的第一個位址確實是出於…不清楚的原因,但很可能是因為很久以前它曾經是“廣播”位址。 (後來,最後一個位址成為標準廣播位址。)

因此,現在從技術上講,可能可以使用第一個位址,但大多數現有網路堆疊仍然將其視為「保留」(有點像整個前「E 類別」240.0.0.0/4 空間意外變得不可用)。

請注意,它具體是子網路的第一個位址,並且並不總是0地址。這些僅在 /24 子網路的情況下匹配。但例如,/16 子網路將被.0.0保留,但是不是 .1.0.47.0– 這些位於 /16 的中間,因此它們是完全有效的主機位址。

(另一方面,較小的 /27 子網不僅可以從 or 開始,.0而且可以從.32or開始.192- 這些子網將再次保留在 /27 中,即使它們沒有保留在 /24 中。)

另請注意,這僅適用於廣播子網路(例如乙太網路)。此類位址仍然可以在點對點連結中使用或作為 /32 單獨路由。

答案3

在IPv4 規格中,任何IPv4 網路中的最低位址都保留為網路位址,該位址與廣播位址具有不同的用途,而廣播位址通常是網路中的最高位址(儘管如果您想找點樂趣,可以進行不同的配置) 。在無類別網路和子網路遮罩出現之前,網路位址的想法更有意義。子網路和子網路遮罩背後的概念是原始規範中不存在的 IPv4 附加概念。

更新:以「.0」結尾的位址並沒有什麼神奇之處,只是它是子網路中的最低位址(可能不總是.0)。

最初,IPv4是有類的,分為5類; A、B、C、D 和 E。高兩位為10的IPv4位址為B類位址,對應位址128.0.0.0至191.255.255.255。 C 類在其第一個八位元組中以 110xxxxx 開始,或位址從 192.0.0.0 到 223.255.255.255。 D 類別的第一個八位元組匹配 1110xxxx,為它們提供 IP 224.0.0.0 到 239.0.0.0。最後,E 類為 1111xxxx 或 IP 240.0.0.0 至 255.255.255.255。 E 類位址被視為保留位址,除 255.255.255.255 外,沒有明確的用途。 D 類別是多播位址,用於將封包一起傳送到電腦群組。 AC 類別是普通的單播 IP,其中各個設備在某個網路上取得 IP。

話雖如此,定義每個網路大小的是它的類別。 A 類網路被定義為將前 8 位元或第一個八位元位元組作為位址的網路部分,其餘 24 位元是單一 IPv4 網路上位址的主機特定部分。 B 類將其分割為 16 位元和 16 位元或各 2 個八位元組。 C類網路使用前24位元作為網路部分,最後8位元作為主機部分。用現代術語來說,A 類網路具有 /8 子網,B 類網路具有 /16 子網,C 類網路具有 /24 子網。 IPv4 位址的網路部分和主機部分之間的分離對於路由封包非常重要,並且是任何設備決定是否可以將其直接發送到本地網路上的系統還是必須將其發送到路由器以轉發到其他地方的方式。在 IPv4 網路堆疊和協定實作子網路劃分之前,這種差異是從 IP 本身硬編碼的。

您可以在 RIPv1 路由協定等協定中看到這一點的殘餘。它只通告 IP,而不通告子網路掩碼,因此主機位址和網路位址之間的區別是關鍵。如果 RIPv1 位址通告的位址為 192.0.0.0,則該位址是 B 類網路中的最低位址,因此它是整個網路的網路位址。它將告訴其他設備從 192.0.0.0 到 192.0.255.255 的所有系統都可以透過該路由使用(因為 B 類使用前兩個八位元組作為網絡,本例中為 192.0)。但是,如果它通告 192.0.0.1,則這不是該網路中的最低位址,因此它是主機位址。這意味著 RIPv1 正在為單一特定主機而不是整個網路通告路由。也許它是一個撥接數據機,或者有其他原因需要取得唯一的路由,但該廣告僅適用於該一台主機。

現在子網路很常見,而且 RIPv2 等較新的協定將子網路遮罩與 IP 一起傳送,網路位址的整個概念有點多餘,但由於歷史原因,我們仍堅持使用它。主機特定路由可以使用子網路遮罩 255.255.255.255 進行通告,但我們仍然必須保持與假設網路位址存在於網路範圍底部的軟體的兼容性。

更新:為了進一步澄清,這裡有一些例子。如果您要將10.xxx IP 位址範圍分割為/26 子網,則每個子網路總共有64 個位址(其中62 個可用於主機),因為32 位元IP 中僅剩下6 位元可供主機部分使用。前五個子網路位址為 10.0.0.0、10.0.0.64、10.0.0.128、10.0.0.192 和 10.0.1.0。預設廣播位址是子網路中的最高位址,分別對應於 10.0.0.63、10.0.0.127、10.0.0.191 和 10.0.1.63。如果改為使用 /23 子網,則每個網路將有 512 個位址(510 個可用)。前五個子網路是 10.0.0.0、10.0.2.0、10.0.4.0 和 10.0.6.0。對應的廣播位址為10.0.1.255、10.0.3.255、10.5.255和10.7.255。請注意,在後一個範例中,10.0.1.0、10.0.3.0 等不是網路位址。它們完全可以用作主機的常規 IP,因為它們位於子網路範圍的中間。只有第一個和最後一個地址是特殊的。 10.0.0.255 也可以類似地用作常規主機。

答案4

在 IPv4 中,任何以 .0 結尾的 IP 都意味著當您使用前綴 /24 時它是一個(預設)網路位址。您不能使用該位址並將其指派給電腦。 「允許」分配的 IP 範圍為 0.1 到 0.254。您也不能使用 .255,因為它被用作網路的「廣播」位址。

相關內容