你不知道的127.0.0.1和0.0.0.0地址的区别
1. 問題引入
之前在使用tomcat的時(shí)候,啟動(dòng)tomcat默認(rèn)都會(huì)綁定到127.0.0.1這個(gè)地址,最近在使用hexo寫博客的時(shí)候發(fā)現(xiàn)通過 hexo server命令啟動(dòng)服務(wù)的時(shí)候綁定的ip地址是0.0.0.0。那么這兩個(gè)IP地址到底有什么不同呢?
在講解兩個(gè)地址的不同之前,我們先回顧一下IP地址的基礎(chǔ)知識(shí)。
2. IP地址分類
2.1 IP地址表示
IP地址由兩個(gè)部分組成,net-id和host-id,即網(wǎng)絡(luò)號和主機(jī)號。
net-id:表示ip地址所在的網(wǎng)絡(luò)號。
host-id:表示ip地址所在網(wǎng)絡(luò)中的某個(gè)主機(jī)號碼。
即:
IP-address ::= { <Network-number>, <Host-number> }2.2 IP地址分類
IP地址一共分為5類,即A~E,它們分類的依據(jù)是其net-id所占的字節(jié)長度以及網(wǎng)絡(luò)號前幾位。
-
A類地址:網(wǎng)絡(luò)號占1個(gè)字節(jié)。
網(wǎng)絡(luò)號的第一位固定為0。
-
B類地址:
網(wǎng)絡(luò)號占2個(gè)字節(jié)。
網(wǎng)絡(luò)號的前兩位固定為10。
-
C類地址:
網(wǎng)絡(luò)號占3個(gè)字節(jié)。
網(wǎng)絡(luò)號的前三位固定位110。
-
D類地址:
前四位是1110,用于多播(multicast),即一對多通信。
-
E類地址:
前四位是1111,保留為以后使用。
其中,ABC三類地址為單播地址(unicast),用于一對一通信,是最常用的。
2.3 特殊IP地址
特殊IP地址就是用來做一些特殊的事情。RFC1700中定義了以下特殊IP地址。
{0,0}:網(wǎng)絡(luò)號和主機(jī)號都全部為0,表示“本網(wǎng)絡(luò)上的本主機(jī)”,只能用作源地址。
{0,host-id}:本網(wǎng)絡(luò)上的某臺(tái)主機(jī)。
只能用作源地址。
{-1,-1}:
表示網(wǎng)絡(luò)號和主機(jī)號的所有位上都是1(二進(jìn)制),用于本網(wǎng)絡(luò)上的廣播,只能用作目的地址,發(fā)到該地址的數(shù)據(jù)包不能轉(zhuǎn)發(fā)到源地址所在網(wǎng)絡(luò)之外。
{net-id,-1}:直接廣播到指定的網(wǎng)絡(luò)上。
只能用作目的地址。
{net-id,subnet-id,-1}:直接廣播到指定網(wǎng)絡(luò)的指定子網(wǎng)絡(luò)上。
只用作目的地址。
{net-id,-1,-1}:直接廣播到指定網(wǎng)絡(luò)的所有子網(wǎng)絡(luò)上。
只能用作目的地址。
{127,}:即網(wǎng)絡(luò)號為127的任意ip地址。
都是內(nèi)部主機(jī)回環(huán)地址(loopback),永遠(yuǎn)都不能出現(xiàn)在主機(jī)外部的網(wǎng)絡(luò)中。
3. 問題解答
接下來我們來看之前問過的問題:127.0.0.1和0.0.0.0地址的區(qū)別是什么?
我們先來看下共同點(diǎn):
都屬于特殊地址。
都屬于A類地址。
都是IPV4地址。
接下來我們分別看下這兩個(gè)地址:
0.0.0.0
IPV4中,0.0.0.0地址被用于表示一個(gè)無效的,未知的或者不可用的目標(biāo)。
-
在服務(wù)器中,0.0.0.0指的是本機(jī)上的所有IPV4地址,如果一個(gè)主機(jī)有兩個(gè)IP地址,192.168.1.1 和 10.1.2.1,并且該主機(jī)上的一個(gè)服務(wù)監(jiān)聽的地址是0.0.0.0,那么通過兩個(gè)ip地址都能夠訪問該服務(wù)。
-
在路由中,0.0.0.0表示的是默認(rèn)路由,即當(dāng)路由表中沒有找到完全匹配的路由的時(shí)候所對應(yīng)的路由。
用途總結(jié)
-
當(dāng)一臺(tái)主機(jī)還沒有被分配一個(gè)IP地址的時(shí)候,用于表示主機(jī)本身。
(DHCP分配IP地址的時(shí)候)
-
用作默認(rèn)路由,表示”任意IPV4主機(jī)”。
用來表示目標(biāo)機(jī)器不可用。 -
用作服務(wù)端,表示本機(jī)上的任意IPV4地址。
127.0.0.1
127.0.0.1屬于{127,}集合中的一個(gè),而所有網(wǎng)絡(luò)號為127的地址都被稱之為回環(huán)地址,所以回環(huán)地址!=127.0.0.1,它們是包含關(guān)系,即回環(huán)地址包含127.0.0.1。
回環(huán)地址:所有發(fā)往該類地址的數(shù)據(jù)包都應(yīng)該被loop back。
用途
-
回環(huán)測試,通過使用ping 127.0.0.1 測試某臺(tái)機(jī)器上的網(wǎng)絡(luò)設(shè)備,操作系統(tǒng)或者TCP/IP實(shí)現(xiàn)是否工作正常。
-
DDos攻擊防御:
網(wǎng)站收到DDos攻擊之后,將域名A記錄到127.0.0.1,即讓攻擊者自己攻擊自己。
-
大部分Web容器測試的時(shí)候綁定的本機(jī)地址。
localhost
相比127.0.0.1,localhost具有更多的意義。localhost是個(gè)域名,而不是一個(gè)ip地址。之所以我們經(jīng)常把localhost與127.0.0.1認(rèn)為是同一個(gè)是因?yàn)槲覀兪褂玫拇蠖鄶?shù)電腦上都講localhost指向了127.0.0.1這個(gè)地址。
在ubuntu系統(tǒng)中,/ets/hosts文件中都會(huì)有如下內(nèi)容:
上面第一行是幾乎每臺(tái)電腦上都會(huì)有的默認(rèn)配置。
但是localhost的意義并不局限于127.0.0.1。
localhost是一個(gè)域名,用于指代this computer或者this host,可以用它來獲取運(yùn)行在本機(jī)上的網(wǎng)絡(luò)服務(wù)。
在大多數(shù)系統(tǒng)中,localhost被指向了IPV4的127.0.0.1和IPV6的::1。
所以,在使用的時(shí)候要注意確認(rèn)IPV4還是IPV6
4. 總結(jié)
127.0.0.1 是一個(gè)環(huán)回地址。并不表示“本機(jī)”。0.0.0.0才是真正表示“本網(wǎng)絡(luò)中的本機(jī)”。
在實(shí)際應(yīng)用中,一般我們在服務(wù)端綁定端口的時(shí)候可以選擇綁定到0.0.0.0,這樣我的服務(wù)訪問方就可以通過我的多個(gè)ip地址訪問我的服務(wù)。
比如我有一臺(tái)服務(wù)器,一個(gè)外網(wǎng)地址A,一個(gè)內(nèi)網(wǎng)地址B,如果我綁定的端口指定了0.0.0.0,那么通過內(nèi)網(wǎng)地址或外網(wǎng)地址都可以訪問我的應(yīng)用。但是如果我只綁定了內(nèi)網(wǎng)地址,那么通過外網(wǎng)地址就不能訪問。所以如果綁定0.0.0.0,也有一定安全隱患,對于只需要內(nèi)網(wǎng)訪問的服務(wù),可以只綁定內(nèi)網(wǎng)地址。
總結(jié)
以上是生活随笔為你收集整理的你不知道的127.0.0.1和0.0.0.0地址的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue全家桶实战03_【从入门到放弃系列
- 下一篇: 阿里文娱测试开发专家谈《算法基石:实时数