事出有因趣席,前段時間老大讓小姐姐在測試環(huán)境搭建一個ELK汰规。我說我搭好了谬俄,但Kibana端口不知為啥沒暴露出去柏靶,其他機子訪問不了我的Kibana但確可以ping通這臺機子...一個小伙伴馬上用netstat命令確定到我把Kibana IP綁到127.0.0.1上了,然后我就收到了組內一堆 “ ..... ” 的回復。溃论。
幸好阿姨帶著口罩上班屎蜓,不然他們可能看到我沒洗的小紅臉(??。钥勋。嗯炬转,做人就是要臉皮厚)。笔诵。
在了解127.0.0.1和0.0.0.0是啥之前(因為這個問題實在太常識了)返吻,我們先看一下為啥會有IP。乎婿。
網(wǎng)絡傳輸需要解決的主要問題有兩個: 發(fā)給誰 和 通過怎么樣的路線才能發(fā)給他(也就是路由)。
我們先來看一下TCP/IP封裝的數(shù)據(jù)包結構:
當我們發(fā)送數(shù)據(jù)
時街佑,按照應用層 —>數(shù)據(jù)鏈路層自上而下封裝數(shù)據(jù)包
谢翎。當我們接收數(shù)據(jù)
時,按照數(shù)據(jù)鏈路層 —>應用層 進行拆包
沐旨。這里我們再來看一下數(shù)據(jù)鏈路層以太網(wǎng)幀
的結構:
每個網(wǎng)卡在出廠時就會有一個全世界唯一的MAC地址森逮,就相當于是我們每個人在世界上都是唯一的。那MAC地址
其實就能解決第一個 發(fā)給誰
的問題磁携。那為啥還需要IP層呢褒侧?
想象你到世界上找一個叫Monica2333的人,你不可能大街上隨便逮到一個人就問你認識Monica2333嗎..(當然如果你真這么干了,請關注公眾號 碼農(nóng)知識點闷供,小姐姐在這里等你~)
你應該先搞清楚 Monica2333住址是在哪個國家哪個城市哪個區(qū)哪個街道烟央,從國家-》城市-》區(qū)-》小區(qū)一步步定位,這么找人就符合常理了歪脏。疑俭。IP解決的
就是網(wǎng)絡上數(shù)據(jù)包的路由定位困難問題
。
IP怎么表達出“國家城市區(qū)”的概念呢婿失,這就是IP地址定義的事了钞艇。
IP 地址用32位來表示,通常被分割為4個“8位”豪硅。以“點分十進制”表示成 [a.b.c.d] 的形式哩照。同時這32bit又被劃分為網(wǎng)絡號
和主機號
組成。比如10.100.122.2/24 這個IP: 10.100.122.2是“點分十進制”表示形式懒浮,/24 表示的是前24位是網(wǎng)絡號葡秒,后8位是主機號。這個網(wǎng)絡號
其實充當?shù)木褪?code>“國家城市區(qū)”的概念嵌溢。比如我們只需要記住怎么去往10.100.122.x眯牧,就知道怎么去找10.100.122.1/24和10.100.122.2/24了。為了方便獲取網(wǎng)絡號 赖草,又出現(xiàn)一個子網(wǎng)掩碼
的概念学少。子網(wǎng)掩碼就是網(wǎng)絡號位上全為1,主機號全為0
的IP地址秧骑。這樣當
IP&子網(wǎng)掩碼得到的就是IP的網(wǎng)絡號版确。所以10.100.122.2/24的子網(wǎng)掩碼就是255.255.255.0。
好了乎折,我們來看一下IPv4對IP地址的劃分:
其中A/B/C類可用于表示公網(wǎng)IP绒疗。D類用于多播組號,使用這一類地址骂澄,屬于某個組(相同網(wǎng)絡號的)的機器都能收到吓蘑,E類還留待使用。但是我們并不用記住公網(wǎng)IP是屬于A/B/C類中哪一類坟冲,我們只需要用/24或/16這樣的CIDR
方式去區(qū)分IP的網(wǎng)絡號和主機號就可以磨镶。
實際上,A/B/C類劃分的IP顯然是不夠用每個地球人用的健提,我們日常在接入公網(wǎng)時琳猫,都需要走能有公網(wǎng)IP的網(wǎng)關。在整個公網(wǎng)內部私痹,再分配私有IP地址給每個人上網(wǎng)使用就可以了脐嫂。比如家庭常用的192.168.0.x/24 私有IP網(wǎng)段统刮。
此外,在這五類IP地址基礎上還劃分出了特殊的IP網(wǎng)段
账千。
我看心情選了一部分侥蒙。小伙伴也發(fā)現(xiàn)了,127.0.0.1和0.0.0.0終于出現(xiàn)了蕊爵,但我們現(xiàn)在先不講他們倆辉哥。我們再回到開始的第二個問題: 通過怎么樣的路線才能發(fā)給他
。
IP路由
上面我們說了IP的目的就是將路由簡單化攒射,IP的網(wǎng)絡號承擔了"一組IP
的路由"出入口的作用醋旦。實際上網(wǎng)關
就是這個出入口。不同局域網(wǎng)(IP網(wǎng)絡號不同)的網(wǎng)絡通信必須經(jīng)過網(wǎng)關会放,相同局域網(wǎng)的網(wǎng)絡通信可以靠廣播和MAC地址來送達目標機器(也就是二層協(xié)議行的通)饲齐。
好了,假使我們從203.16.20.5/24 —> 203.16.24.4/24 發(fā)一個包咧最,其中源IP和目標IP都是公網(wǎng)IP捂人。那包的路由過程如下:
源機器網(wǎng)絡程序在封裝數(shù)據(jù)包的過程中發(fā)現(xiàn)目標機器和自己的IP不在同一局域網(wǎng)內,則需要通過網(wǎng)關將包從網(wǎng)卡發(fā)出去矢沿。1處
的數(shù)據(jù)包結構為:
到了網(wǎng)關1滥搭,拆包發(fā)現(xiàn)目標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ù)包結構為:
到了網(wǎng)關2愁溜,拆包發(fā)現(xiàn)目標IP地址是 203.16.24.4/24。查了下自己的路由表外厂,發(fā)現(xiàn)要想訪問 203.16.24.4/24冕象,要從 203.16.24.1/24 這個口出去。此時3處
的數(shù)據(jù)包結構為:
到了目標機器汁蝶,拆包發(fā)現(xiàn)目標IP地址就是自己呀渐扮,所以進行更上層的拆包,把數(shù)據(jù)收進來就可以了穿仪。
我們可以發(fā)現(xiàn)這種方式的路由每經(jīng)過一次局域網(wǎng)席爽,MAC地址需要改變,但IP地址不需要改變
啊片。這種網(wǎng)關稱為轉發(fā)網(wǎng)關
。而實際上還存在一種改變 IP 地址
的網(wǎng)關玖像,稱為NAT 網(wǎng)關
紫谷。我們就不展開了齐饮,小伙伴可以自行搜索。
現(xiàn)在我們知道IP/MAC地址/網(wǎng)關等怎么解決上述兩個 發(fā)給誰 和 通過怎么樣的路線才能發(fā)給目標機器 的問題了(當然還有路由策略等內容沒有展開笤昨,我們這里只討論如果有路由路線祖驱,咋發(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ā)往目標IP為127.0.0.1
的數(shù)據(jù)包都不會通過網(wǎng)卡發(fā)送到網(wǎng)絡上葛峻,而是在數(shù)據(jù)離開網(wǎng)絡層時將其回送給本機的有關進程。
形象些說就是因為發(fā)送數(shù)據(jù)包是從應用層 —>數(shù)據(jù)鏈路層自上而下一層層按照程序封裝的巴比,當?shù)搅司W(wǎng)絡層時术奖,發(fā)現(xiàn)目標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ā)包的地址有啥用呢稼病?本機測試用Q∏取!
0.0.0.0
0.0.0.0這個IP地址指的是沒有路由的元地址
然走,通常被用來表示無效的援制,未知的 或是 沒有指定目標IP的地址
∩秩穑看不懂沒關系晨仑,它其實相當于Java中的this
,真表示啥要放到實際所處環(huán)境中去考慮拆檬。用處主要有:
本機所有IP
當考慮它在一臺服務器中的作用時洪己,它指代的就是這臺機器上所有的IP
。假如一臺機器上有兩個IP:203.16.20.5/24 和 203.16.24.4/24竟贯。如果我們把一個Java應用的IP綁定到了0.0.0.0:8080答捕,那訪問203.16.20.5:8080 和 203.16.24.4:8080都可以與這個Java應用建立連接。默認路由
上面講IP路由的時候我們提到了路由表屑那。路由表就是一個記錄數(shù)據(jù)包下一跳應該去哪
的路由規(guī)則拱镐。每一條規(guī)則至少包含三項信息:
網(wǎng)絡ID:
就是目標地址的網(wǎng)絡ID艘款。
子網(wǎng)掩碼:
用來判斷IP所屬網(wǎng)絡。
下一跳地址/接口
:就是數(shù)據(jù)在發(fā)送到目標地址的旅途中下一站的地址沃琅。
假設一個IP匹配了多條路由規(guī)則哗咆,則子網(wǎng)越小的越優(yōu)先,也就是/n這樣的CIDR越大的越優(yōu)先益眉。
而假如配置了0.0.0.0/0 -> via 111.222.1.254這樣的路由策略,表示的是當解析不到任何精確的路由規(guī)則時晌柬,下一跳就統(tǒng)統(tǒng)跳往111.222.1.254。0.0.0.0在這里就是默認路由
的意思郭脂。
- DHCP
當一個網(wǎng)絡設備初次啟動時年碘,假如沒有配置IP。它需要通過DHCP協(xié)議向所處局域網(wǎng)要一個IP朱庆。但DHCP是建立在UDP 上的協(xié)議盛泡,沒IP咋發(fā)包要IP啊。這里0.0.0.0/0
的作用就是在沒要到IP時所使用的源IP
娱颊。放張協(xié)議圖傲诵,感興趣的小伙伴可進一步了解:
為了首尾呼應,小姐姐再講一個網(wǎng)上看到的一個不那么冷的笑話吧箱硕。拴竹。
bitchcheker是一個揚言要攻擊Elch的黑客:
至此你有沒有更了解127.0.0.1呀~
歡迎關注我的公眾號:「碼農(nóng)知識點」,和我交流討論~
參考資料:
https://www.zhihu.com/question/20717354
https://time.geekbang.org/column/article/8590
https://www.tech-faq.com/127-0-0-1.html
https://www.howtogeek.com/225487/what-is-the-difference-between-127.0.0.1-and-0.0.0.0/