127.0.0.1、0.0.0.0和網(wǎng)卡ip地址的區(qū)別及原理剖析
問(wèn)題描述
在最近一次采用前后端分離的方式部署本地應(yīng)用的過(guò)程中發(fā)現(xiàn),前端的node服務(wù)啟動(dòng)在5173端口上,而后端的springboot服務(wù)配置文件中定義的服務(wù)端口server.port
也是5173端口,且兩者都能夠正常啟動(dòng)和通信。
面對(duì)上面的問(wèn)題,就有點(diǎn)疑惑,按理說(shuō)兩個(gè)服務(wù)應(yīng)該是不能同時(shí)都監(jiān)聽(tīng)本機(jī)ip地址的同一5173端口的,應(yīng)該會(huì)發(fā)生端口沖突才對(duì)的呀,怎么就能正常執(zhí)行呢。
于是,使用lsof
命令查看一下監(jiān)聽(tīng)5173端口的進(jìn)程情況:
可以看到,上面的node服務(wù)監(jiān)聽(tīng)的是我本機(jī)10.xxx.xxx.xxx:5173
的IP地址+端口,而springboot的java服務(wù)監(jiān)聽(tīng)的是*:5173地址,可見(jiàn)兩個(gè)服務(wù)的端口沒(méi)有發(fā)生沖突是由于監(jiān)聽(tīng)在不同的IP地址上,這里的*
表示的就是0.0.0.0
的IP地址。
為此,我們借這個(gè)機(jī)會(huì),來(lái)探討下,127.0.0.1、0.0.0.0和網(wǎng)卡ip地址的區(qū)別及原理
127.0.0.1
127.0.0.1是一個(gè)特殊的IP地址,在本地網(wǎng)絡(luò)中表示一個(gè)回環(huán)地址(loopback interface),訪問(wèn)該地址的請(qǐng)求數(shù)據(jù)包是通過(guò)操作系統(tǒng)內(nèi)核中的網(wǎng)絡(luò)協(xié)議棧進(jìn)行處理的。當(dāng)數(shù)據(jù)包將被發(fā)送到計(jì)算機(jī)的網(wǎng)絡(luò)接口后,會(huì)立即返回到同一計(jì)算機(jī)的網(wǎng)絡(luò)協(xié)議棧,而不需要通過(guò)物理網(wǎng)卡和網(wǎng)絡(luò)設(shè)備進(jìn)行傳輸。 這種機(jī)制稱為本地回環(huán)(loopback)。這樣做的好處是可以提高請(qǐng)求的處理速度,并且避免了與外部網(wǎng)絡(luò)的交互。
127.0.0.1 是一個(gè)保留的 IP 地址,不屬于任何特定的網(wǎng)絡(luò)。它被用于測(cè)試網(wǎng)絡(luò)連接和應(yīng)用程序的功能,也被用于本地開(kāi)發(fā)和調(diào)試。
0.0.0.0
0.0.0.0 是一個(gè)特殊的 IP 地址,表示未指定或未知的地址。在網(wǎng)絡(luò)編程中,0.0.0.0 通常被用作服務(wù)器綁定地址,表示服務(wù)器將監(jiān)聽(tīng)本機(jī)所有可用的網(wǎng)絡(luò)接口或網(wǎng)卡,而不是僅限于特定的 IP 地址。
例如,如果我們創(chuàng)建一個(gè) ServerSocket 對(duì)象,使用 bind(new InetSocketAddress(“0.0.0.0”, port)) 方法綁定到 0.0.0.0 地址上,那么該ServerSocket就會(huì)監(jiān)聽(tīng)所有可用的網(wǎng)絡(luò)接口上的指定端口上的連接請(qǐng)求。包括本地回環(huán)接口(127.0.0.1)和所有物理網(wǎng)卡的 IP 地址。這意味著任何連接到該服務(wù)器的客戶端都可以使用任何網(wǎng)絡(luò)接口或網(wǎng)卡進(jìn)行通信。
使用這種方式綁定套接字的優(yōu)點(diǎn)是可以同時(shí)監(jiān)聽(tīng)所有的網(wǎng)絡(luò)接口上的請(qǐng)求,而不必對(duì)每個(gè)接口都進(jìn)行監(jiān)聽(tīng),這在某些場(chǎng)景下會(huì)非常有用。例如,在多網(wǎng)卡服務(wù)器上運(yùn)行的應(yīng)用程序,可能需要同時(shí)監(jiān)聽(tīng)不同的網(wǎng)絡(luò)接口上的請(qǐng)求。
需要注意的是,雖然 0.0.0.0 可以用作服務(wù)器綁定地址,但它不是一個(gè)可尋址的 IP 地址,不能用于直接通信。如果要在網(wǎng)絡(luò)上通信,則需要使用真實(shí)的 IP 地址或域名。
網(wǎng)卡ip地址
網(wǎng)卡(Network Interface Card,NIC)是一種計(jì)算機(jī)硬件設(shè)備,用于將計(jì)算機(jī)連接到網(wǎng)絡(luò)并實(shí)現(xiàn)數(shù)據(jù)傳輸。網(wǎng)卡通常被安裝在計(jì)算機(jī)的擴(kuò)展槽或主板上,與計(jì)算機(jī)的主處理器和內(nèi)存進(jìn)行通信,并通過(guò)電纜或無(wú)線信號(hào)連接到網(wǎng)絡(luò)。
物理網(wǎng)卡是一個(gè)硬件設(shè)備,硬件設(shè)備要在操作系統(tǒng)上工作,需要有對(duì)應(yīng)的驅(qū)動(dòng)程序。物理網(wǎng)卡的驅(qū)動(dòng)程序向操作系統(tǒng)內(nèi)核注冊(cè)該網(wǎng)卡設(shè)備,從而讓內(nèi)核識(shí)別該物理網(wǎng)卡。
網(wǎng)卡注冊(cè)成功后,用戶就可以看到該物理網(wǎng)卡對(duì)應(yīng)的網(wǎng)卡接口(如eth0、本地連接等名稱),再經(jīng)過(guò)一番配置,就可以啟動(dòng)該網(wǎng)卡設(shè)備使其工作。
每個(gè)網(wǎng)卡都有一個(gè)唯一的 MAC 地址,用于識(shí)別該網(wǎng)卡的硬件地址。在使用 TCP/IP 協(xié)議的網(wǎng)絡(luò)中,網(wǎng)卡的 IP 地址是由 Internet 協(xié)議(IP)分配的。我們常說(shuō)的主機(jī)IP地址,實(shí)際上指的是主機(jī)某個(gè)網(wǎng)卡的IP地址。 需要注意的是,一個(gè)計(jì)算機(jī)可能有多個(gè)網(wǎng)卡,每個(gè)網(wǎng)卡都有自己的 IP 地址。在這種情況下,每個(gè)網(wǎng)卡都可以與網(wǎng)絡(luò)中的其他計(jì)算機(jī)進(jìn)行通信,并具有自己的網(wǎng)絡(luò)標(biāo)識(shí)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-669831.html
這里對(duì)相關(guān)概念進(jìn)行了簡(jiǎn)單介紹。實(shí)際上,回到我們最初的問(wèn)題來(lái)說(shuō),端口沒(méi)有沖突的原因就是端口號(hào)是綁定在不同的IP地址上的,這里著重分析的就是0.0.0.0
ip地址的作用,之前沒(méi)怎么遇到過(guò),因此這次做個(gè)記錄,后續(xù)如果遇到其他特殊ip地址的情況,再進(jìn)行補(bǔ)充。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-669831.html
到了這里,關(guān)于127.0.0.1、0.0.0.0和網(wǎng)卡ip地址的區(qū)別及原理剖析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!