Contents

0.0.0.0 是什麼小知識

我們在架設一些程式服務時,常常會設定 host 為 0.0.0.0。這通常意味著開放所有的 IP 地址和端口。我們也知道可以對 IP 進行設定,例如設定為 192.168.1.111。有時候,我們也會看到對 192.168.1.0 進行設定,這通常會根據網路卡的 IP 進行設定。我尚未深入探討這個議題,如果有任何錯誤,歡迎指正。請手下留情。

最近,我們公司有多個專案,每個專案都在獨立的機器上運行,並且每個機器都有自己的 IP 地址。有一次,我在使用 FTP 時不小心設定錯誤的 IP,但我仍然能夠上傳檔案,並且發現 http 伺服器(IP 是正確的)也更新了。這讓我感到非常奇怪,因為這兩台機器應該是獨立的。後來,我發現那台機器設定了很多虛擬 IP。

我計劃在未來寫一篇文章來詳細解釋如何實現這種設定。但是,我還有一個疑問:為什麼我可以在多台機器上開啟相同的 port 呢?

後來我發現,port 是綁定在網卡上的,所以一台機器可以有多個 IP,並且每個 IP 都可以綁定多個 http(例如 80 port)。

簡述 IP

IPv4 的基本知識這裡就不再詳述

  1. IP 預設常見 Class 分級
  • Class A
  • Class B
  • Class C

這些分級的詳細說明,很多網頁都有提供,這裡就不再詳述。主要是這些預設的分級,提供了固定的網址範圍。
參考資料:IP位址分五種等級

  1. CIDR 網域切割

通常我一直搞不懂為什麼有分Class A,Class B, Class C ,這些設定都沒有很彈性。後來最近爬了一下,因為有了 CIDR,所以每一台電腦都可以設定網路遮罩,
可以分出多種網路 IP。

詳細資訊:CIDR 路徑協定

Tip

CIDR,全名為 Classless Inter-Domain Routing,是一種用於 IP 網路地址的分配方法。它允許更細緻的 IP 地址分配,以達到更有效的 IP 地址使用。

  1. 什麼是 CIDR?

    CIDR 是一種將 IP 地址和其對應的網路遮罩組合在一起的方式,以指定一個網路的 IP 地址範圍。CIDR 通常以 “IP地址/前綴長度” 的形式表示,例如 “192.0.2.0/24”。

  2. 為什麼需要 CIDR?

    在 CIDR 出現之前,IP 地址是按照 Class A、B、C 來分配的,這種分配方式在 IP 地址稀缺的今天顯得非常浪費。CIDR 通過變動網路遮罩的長度,允許 IP 地址以更細緻的方式分配,從而更有效地利用 IP 地址空間。

  3. CIDR 如何工作?

    CIDR 通過變動網路遮罩的長度來改變子網的大小。網路遮罩的長度越長,子網就越小,可分配的 IP 地址就越少;網路遮罩的長度越短,子網就越大,可分配的 IP 地址就越多。這種方式允許網路管理員根據需要來分配 IP 地址,達到 IP 地址使用的最大效率。

  4. CIDR 的優點

    CIDR 的最大優點是提高了 IP 地址的使用效率。此外,CIDR 也簡化了路由表的大小,因為它允許多個連續的 IP 地址範圍用一個單一的 CIDR 表示法來表示,這大大減少了路由器需要處理的路由條目數量。

以上就是 CIDR 網域切割的基本知識,希望對你有所幫助。

特殊 IP

127.0.0.1

這是我們常用的 localhost

127.0.0.1屬於{127,}集合中的一個,而所有網絡號為127的地址都被稱之為迴環地址,所以迴環地址!=127.0.0.1,它們是包含關係,即迴環地址包含127.0.0.1。

0.0.0.0

這邊127.0.0.1和0.0.0.0地址的区别 - 知乎有爬到一些相關知識
不過內容好像也不是很正確
擷取一些回覆

「0.0.0.0是本網絡中的本主機」這種老掉牙中文教科書說法就不要提了。實際上外文資料/軟件裡一般把0.0.0.0稱為「unspecified」,即未指定(即無效的,無意義的)地址。從功能上看,一般用於某些程序/網絡協議中不便使用具體ip的特殊情況(說白了就是一個用於某些比較坑的情況的「佔位符」),比如DHCP客戶端還未獲取到ip的時候規定使用0.0.0.0作「源地址」,或者服務器不指定在哪個網卡上監聽時,也使用0.0.0.0。

其他也有找到ip - What is the difference between 0.0.0.0, 127.0.0.1 and localhost? - Stack Overflow

IPV4中,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表示的是默認路由,即當路由表中沒有找到完全匹配的路由的時候所對應的路由。
    ————————————————
    版权声明:本文为CSDN博主「ythunder」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/ythunder/java/article/details/61931080

INADDR_ANY

NADDR_ANY介紹

INADDR_ANY 指定地址為0.0.0.0的地址,這個地址事實上表示不確定地址或“所有地址”、“任意地址”。一般來說,在各個系統中均定義成為0值。

INADDR_ANY 的具體含義是,綁定到0.0.0.0。此時,對所有的地址都將是有效的,如果系統考慮採用多個網卡的話,那麼使用此種bind,將在所有網卡上進行綁定。在這種情況下,你可以收到發送到所有有效地址上封包。
參考:【Socket】INADDR_ANY of SOCKET Programming «*~【BubUsHaRe】~* *~【BubUsHaRe】~*

其他特殊IP

2.3 特殊IP地址

特殊IP地址就是用來做一些特殊的事情。RFC1700中定義了以下特殊IP地址。

{0,0}:網絡號和主機號都全部為0,表示「本網絡上的本主機」,只能用作源地址。
{0,host-id}:本網絡上的某台主機。只能用作源地址。
{-1,-1}:表示網絡號和主機號的所有位上都是1(二進制),用於本網絡上的廣播,只能用作目的地址,發到該地址的數據包不能轉發到源地址所在網絡之外。

{net-id,-1}:直接廣播到指定的網絡上。只能用作目的地址。
{net-id,subnet-id,-1}:直接廣播到指定網絡的指定子網絡上。只用作目的地址。
{net-id,-1,-1}:直接廣播到指定網絡的所有子網絡上。只能用作目的地址。
{127,}:即網絡號為127的任意ip地址。都是內部主機迴環地址(loopback),永遠都不能出現在主機外部的網絡中。

這編原本我看不懂{}裡面的意思
後來查了一下 IP 有分{Net_id,Host_id}
簡單來說這邊 Host_id 就把他想成能用的 IP
0是整個填 0,-1就是整個填1

10.x.x.x

172.16。x。x∼172.31。x。x

192.168。x。x

私有位址,這些位址被大量用於企業內部網路中。

224.0.0.1

其他參考:
【TCP/IP】IP地址分类和特殊IP地址_网络_Yngz_Miao的博客-CSDN博客
網路教學-IP 位址

觀察監聽 port

windows

netstat -ano

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
C:\Users\Administrator>netstat -ano

使用中連線

  協定   本機位址               外部位址               狀態            PID
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       480
  TCP    127.0.0.1:10400        0.0.0.0:0              LISTENING       7708
  TCP    127.0.0.1:10401        0.0.0.0:0              LISTENING       7708
  TCP    127.0.0.1:10402        0.0.0.0:0              LISTENING       7708
  TCP    127.0.0.1:10403        0.0.0.0:0              LISTENING       7708
  TCP    127.0.0.1:10403        127.0.0.1:2362         ESTABLISHED     7708
  TCP    127.0.0.1:15292        0.0.0.0:0              LISTENING       6320
  TCP    192.168.1.107:139      0.0.0.0:0              LISTENING       4

看邊主要看 LISTENING 可以看到有開那些 port
第一個 80 port 會對所有網路卡

Linux

1
netstat -pnltu

更多可看:Linux 安裝及使用 netstat

設定 apache port 觀察

0.0.0.0

1
2
3
4
5
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:56081           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:7070            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:160             0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:54401           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:42979           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:51523           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::111                  :::*                    LISTEN      -                   
tcp6       0      0 :::80                   :::*                    LISTEN      -    

192.168.1.x

1
2
3
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      -                   
tcp        0      0 192.168.1.117:80        0.0.0.0:*               LISTEN      -       

192.168.1.0

1
2
3
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      -                   
tcp        0      0 192.168.1.0:80          0.0.0.0:*               LISTEN      -     

這個目前沒找到相關文獻
但是我發現 這個好像是廣播網路?
預設會跟所有 192.168 網路卡做 bind port(尚未測試兩個相同網段IP)

這邊也不是打 192.0.0.0 就可以設定

其他有趣東西

iperf

指令測試 IP 傳輸速度
通常我們在 Linux 下面可以透過 Iometer 去測試硬碟的效能速度,那網路呢!!要以免費最簡單使用的就算是 iperf 了.

Linux command – iperf – Benjr.tw
Linux – iperf (Bind to host) – Benjr.tw