电竞比分网-中国电竞赛事及体育赛事平台

分享

你真的了解127.0.0.1和0.0.0.0嗎~

 昵稱10087950 2022-07-27 發(fā)布于江蘇
作者丨Monica23334 
來源丨碼農(nóng)知識點(gh_261b51b112fe

事出有因,前段時間老大讓小姐姐在測試環(huán)境搭建一個ELK。我說我搭好了,但Kibana端口不知為啥沒暴露出去,其他機子訪問不了我的Kibana但確可以ping通這臺機子...一個小伙伴馬上用netstat命令確定到我把Kibana IP綁到127.0.0.1上了,然后我就收到了組內(nèi)一堆 “ ..... ” 的回復(fù)。。
幸好阿姨帶著口罩上班,不然他們可能看到我沒洗的小紅臉(??。。嗯,做人就是要臉皮厚)。。
在了解127.0.0.1和0.0.0.0是啥之前(因為這個問題實在太常識了),我們先看一下為啥會有IP。

網(wǎng)絡(luò)傳輸需要解決的主要問題有兩個: 發(fā)給誰 和 通過怎么樣的路線才能發(fā)給他(也就是路由)。

IP的作用


我們先來看一下TCP/IP封裝的數(shù)據(jù)包結(jié)構(gòu):

圖片

當(dāng)我們發(fā)送數(shù)據(jù)時,按照應(yīng)用層 —>數(shù)據(jù)鏈路層自上而下封裝數(shù)據(jù)包。當(dāng)我們接收數(shù)據(jù)時,按照數(shù)據(jù)鏈路層 —>應(yīng)用層 進行拆包。這里我們再來看一下數(shù)據(jù)鏈路層以太網(wǎng)幀的結(jié)構(gòu):

圖片

每個網(wǎng)卡在出廠時就會有一個全世界唯一的MAC地址,就相當(dāng)于是我們每個人在世界上都是唯一的。那MAC地址其實就能解決第一個 發(fā)給誰 的問題。那為啥還需要IP層呢?
想象你到世界上找一個叫Monica2333的人,你不可能大街上隨便逮到一個人就問你認(rèn)識Monica2333嗎..(當(dāng)然如果你真這么干了,請關(guān)注公眾號 碼農(nóng)知識點,小姐姐在這里等你~) 你應(yīng)該先搞清楚 Monica2333住址是在哪個國家哪個城市哪個區(qū)哪個街道,從國家-》城市-》區(qū)-》小區(qū)一步步定位,這么找人就符合常理了。。IP解決的就是網(wǎng)絡(luò)上數(shù)據(jù)包的路由定位困難問題。

IP的定義


IP怎么表達出“國家城市區(qū)”的概念呢,這就是IP地址定義的事了。
IP 地址用32位來表示,通常被分割為4個“8位”。以“點分十進制”表示成 [a.b.c.d] 的形式。同時這32bit又被劃分為網(wǎng)絡(luò)號主機號組成。比如10.100.122.2/24 這個IP:10.100.122.2是“點分十進制”表示形式,/24 表示的是前24位是網(wǎng)絡(luò)號,后8位是主機號。這個網(wǎng)絡(luò)號其實充當(dāng)?shù)木褪?/span>“國家城市區(qū)”的概念。比如我們只需要記住怎么去往10.100.122.x,就知道怎么去找10.100.122.1/24和10.100.122.2/24了。為了方便獲取網(wǎng)絡(luò)號 ,又出現(xiàn)一個子網(wǎng)掩碼的概念。子網(wǎng)掩碼就是網(wǎng)絡(luò)號位上全為1,主機號全為0的IP地址。這樣當(dāng) IP&子網(wǎng)掩碼得到的就是IP的網(wǎng)絡(luò)號。所以10.100.122.2/24的子網(wǎng)掩碼就是255.255.255.0
好了,我們來看一下IPv4對IP地址的劃分:

圖片

其中A/B/C類可用于表示公網(wǎng)IP。D類用于多播組號,使用這一類地址,屬于某個組(相同網(wǎng)絡(luò)號的)的機器都能收到,E類還留待使用。但是我們并不用記住公網(wǎng)IP是屬于A/B/C類中哪一類,我們只需要用/24或/16這樣的CIDR方式去區(qū)分IP的網(wǎng)絡(luò)號和主機號就可以。
實際上,A/B/C類劃分的IP顯然是不夠用每個地球人用的,我們?nèi)粘T诮尤牍W(wǎng)時,都需要走能有公網(wǎng)IP的網(wǎng)關(guān)。在整個公網(wǎng)內(nèi)部,再分配私有IP地址給每個人上網(wǎng)使用就可以了。比如家庭常用的192.168.0.x/24 私有IP網(wǎng)段。
此外,在這五類IP地址基礎(chǔ)上還劃分出了特殊的IP網(wǎng)段

圖片

我看心情選了一部分。小伙伴也發(fā)現(xiàn)了,127.0.0.1和0.0.0.0終于出現(xiàn)了,但我們現(xiàn)在先不講他們倆。我們再回到開始的第二個問題: 通過怎么樣的路線才能發(fā)給他。

IP路由


上面我們說了IP的目的就是將路由簡單化,IP的網(wǎng)絡(luò)號承擔(dān)了"一組IP 的路由"出入口的作用。實際上網(wǎng)關(guān)就是這個出入口。不同局域網(wǎng)(IP網(wǎng)絡(luò)號不同)的網(wǎng)絡(luò)通信必須經(jīng)過網(wǎng)關(guān),相同局域網(wǎng)的網(wǎng)絡(luò)通信可以靠廣播和MAC地址來送達目標(biāo)機器(也就是二層協(xié)議行的通)。
好了,假使我們從203.16.20.5/24 —> 203.16.24.4/24 發(fā)一個包,其中源IP和目標(biāo)IP都是公網(wǎng)IP。那包的路由過程如下:

圖片


源機器網(wǎng)絡(luò)程序在封裝數(shù)據(jù)包的過程中發(fā)現(xiàn)目標(biāo)機器和自己的IP不在同一局域網(wǎng)內(nèi),則需要通過網(wǎng)關(guān)將包從網(wǎng)卡發(fā)出去。1處的數(shù)據(jù)包結(jié)構(gòu)為:

圖片


到了網(wǎng)關(guān)1,拆包發(fā)現(xiàn)目標(biāo)IP地址是 203.16.24.4/24。查了下自己的路由表,發(fā)現(xiàn)要想訪問 203.16.24.4/24,要從 203.16.22.2/24 這個口出去,下一跳為 203.16.22.4/24。此時2處的數(shù)據(jù)包結(jié)構(gòu)為:

圖片


到了網(wǎng)關(guān)2,拆包發(fā)現(xiàn)目標(biāo)IP地址是 203.16.24.4/24。查了下自己的路由表,發(fā)現(xiàn)要想訪問 203.16.24.4/24,要從 203.16.24.1/24 這個口出去。此時3處的數(shù)據(jù)包結(jié)構(gòu)為:

圖片


到了目標(biāo)機器,拆包發(fā)現(xiàn)目標(biāo)IP地址就是自己呀,所以進行更上層的拆包,把數(shù)據(jù)收進來就可以了。
我們可以發(fā)現(xiàn)這種方式的路由每經(jīng)過一次局域網(wǎng),MAC地址需要改變,但IP地址不需要改變。這種網(wǎng)關(guān)稱為轉(zhuǎn)發(fā)網(wǎng)關(guān)。而實際上還存在一種改變 IP 地址的網(wǎng)關(guān),稱為NAT 網(wǎng)關(guān)。我們就不展開了,小伙伴可以自行搜索。

現(xiàn)在我們知道IP/MAC地址/網(wǎng)關(guān)等怎么解決上述兩個 發(fā)給誰 和 通過怎么樣的路線才能發(fā)給目標(biāo)機器 的問題了(當(dāng)然還有路由策略等內(nèi)容沒有展開,我們這里只討論如果有路由路線,咋發(fā)的問題)。但特么127.0.0.1和0.0.0.0到底有啥特殊的啊。。。


127.0.0.1 & 0.0.0.0


終于要切入正題了。。
127.0.0.1 
從上面 特殊的IP網(wǎng)段中我們可以知道127.0.0.1表示的是回環(huán)IP地址(loopback address)。啥意思呢?所有發(fā)往目標(biāo)IP為127.0.0.1的數(shù)據(jù)包都不會通過網(wǎng)卡發(fā)送到網(wǎng)絡(luò)上,而是在數(shù)據(jù)離開網(wǎng)絡(luò)層時將其回送給本機的有關(guān)進程。
形象些說就是因為發(fā)送數(shù)據(jù)包是從應(yīng)用層 —>數(shù)據(jù)鏈路層自上而下一層層按照程序封裝的,當(dāng)?shù)搅司W(wǎng)絡(luò)層時,發(fā)現(xiàn)目標(biāo)IP是127.0.0.1,就不會再往下封裝數(shù)據(jù)鏈路層了,而是把包又丟給需要往上層解析的隊列中了。

圖片


實際上localhost通常也代表127.0.0.1。這是因為通常在本機Hosts文件會把localhost映射為127.0.0.1 。此外以127開頭的IP地址都是回環(huán)地址,只是我們通常使用127.0.0.1。所以這只能在本機來回收發(fā)包的地址有啥用呢?本機測試用!!

圖片


0.0.0.0
0.0.0.0這個IP地址指的是沒有路由的元地址,通常被用來表示無效的,未知的 或是 沒有指定目標(biāo)IP的地址。看不懂沒關(guān)系,它其實相當(dāng)于Java中的this,真表示啥要放到實際所處環(huán)境中去考慮。用處主要有:
  • 本機所有IP
    當(dāng)考慮它在一臺服務(wù)器中的作用時,它指代的就是這臺機器上所有的IP。假如一臺機器上有兩個IP:203.16.20.5/24 和 203.16.24.4/24。如果我們把一個Java應(yīng)用的IP綁定到了0.0.0.0:8080,那訪問203.16.20.5:8080 和 203.16.24.4:8080都可以與這個Java應(yīng)用建立連接。
  • 默認(rèn)路由
上面講IP路由的時候我們提到了路由表。路由表就是一個記錄數(shù)據(jù)包下一跳應(yīng)該去哪的路由規(guī)則。每一條規(guī)則至少包含三項信息:
網(wǎng)絡(luò)ID:就是目標(biāo)地址的網(wǎng)絡(luò)ID。 
子網(wǎng)掩碼:用來判斷IP所屬網(wǎng)絡(luò)。 
下一跳地址/接口:就是數(shù)據(jù)在發(fā)送到目標(biāo)地址的旅途中下一站的地址。
假設(shè)一個IP匹配了多條路由規(guī)則,則子網(wǎng)越小的越優(yōu)先,也就是/n這樣的CIDR越大的越優(yōu)先。而假如配置了0.0.0.0/0 -> via 111.222.1.254這樣的路由策略,表示的是當(dāng)解析不到任何精確的路由規(guī)則時,下一跳就統(tǒng)統(tǒng)跳往111.222.1.254。0.0.0.0在這里就是默認(rèn)路由的意思。
  • DHCP

    當(dāng)一個網(wǎng)絡(luò)設(shè)備初次啟動時,假如沒有配置IP。它需要通過DHCP協(xié)議向所處局域網(wǎng)要一個IP。但DHCP是建立在UDP 上的協(xié)議,沒IP咋發(fā)包要IP啊。這里0.0.0.0/0的作用就是在沒要到IP時所使用的源IP。放張協(xié)議圖,感興趣的小伙伴可進一步了解:

    圖片


為了首尾呼應(yīng),小姐姐再講一個網(wǎng)上看到的一個不那么冷的笑話吧。。
bitchcheker是一個揚言要攻擊Elch的黑客:

圖片

參考資料:
https://www.zhihu.com/question/20717354 
https://time./column/article/8590 https://www./127-0-0-1.html 
https://www./225487/what-is-the-difference-between-127.0.0.1-and-0.0.0.0/
https://blog.csdn.net/qq_38410730/article/details/80980749
https:///memes/hack-127001

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多