程式狂想筆記

一個攻城師奮鬥史

0%

0.0.0.0 是什麼小知識

我們常常使用架一些程式服務
都會設定 host(0.0.0.0)
通常都會認為開 port
也知道對 ip 設定 192.168.1.111
也有看過對 192.168.1.0 設定(會當下看網路卡 ip)
我沒認真探討
此篇可能有誤,歡迎指正,請手下留情

故事是這樣的,最近我們公司有多個專案,聽到都是放在獨立機器,各自一組IP。
最近我不小心 FTP 設定錯 IP,但是上傳檔案上去。發現 http server(IP對的)竟然更新了。
我覺得很奇怪不是不同台電腦,後來發現那一台設定很多虛擬 IP。

這之後也會寫一個文章,怎麼實做看看。
不過…,為什麼可以在很多台開同一個 port 呢?

後來發現 port 是綁在網卡上面…,一台電腦多個IP綁很多個 http (80port)

簡單敘說 IP

基本 IPv4 就不仔細說

  1. IP 預設常見 Class 分級

Class A
Class B
Class C

很多網頁有說,這邊不仔細講,主要預設切出來網址都是固定的。
可參考:IP位址分五種等級

  1. CIDR 網域切割

通常我一直搞不懂為什麼有分Class A,Class B, Class C ,然後後續討論可以自訂網路遮罩切割網域
後來最近爬了一下,因為有了 CIDR,所以每一台電腦都可以設定網路遮罩
可細分切出多種網路 IP

詳細: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