127.0.0.1和0.0.0.0地址的區(qū)別
1. 問題引入
之前在使用Tomcat的時候,啟動tomcat默認(rèn)都會綁定到127.0.0.1這個地址,最近在使用hexo寫博客的時候發(fā)現(xiàn)通過 hexo server命令啟動服務(wù)的時候綁定的ip地址是0.0.0.0。那么這兩個IP地址到底有什么不同呢?
在講解兩個地址的不同之前,我們先回顧一下IP地址的基礎(chǔ)知識。
2. IP地址分類
2.1 IP地址表示
IP地址由兩個部分組成,net-id和host-id,即網(wǎng)絡(luò)號和主機(jī)號。 net-id:表示ip地址所在的網(wǎng)絡(luò)號。 host-id:表示ip地址所在網(wǎng)絡(luò)中的某個主機(jī)號碼。
即:
IP-address ::= { <Network-number>, <Host-number> }
復(fù)制代碼
2.2 IP地址分類
IP地址一共分為5類,即A~E,它們分類的依據(jù)是其net-id所占的字節(jié)長度以及網(wǎng)絡(luò)號前幾位。
- A類地址:網(wǎng)絡(luò)號占1個字節(jié)。網(wǎng)絡(luò)號的第一位固定為0。
- B類地址:網(wǎng)絡(luò)號占2個字節(jié)。網(wǎng)絡(luò)號的前兩位固定為10。
- C類地址:網(wǎng)絡(luò)號占3個字節(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ò)上的某臺主機(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地址。
接下來我們分別看下這兩個地址:
0.0.0.0
IPV4中,0.0.0.0地址被用于表示一個無效的,未知的或者不可用的目標(biāo)。
- 在服務(wù)器中,0.0.0.0指的是本機(jī)上的所有IPV4地址,如果一個主機(jī)有兩個IP地址,192.168.1.1 和 10.1.2.1,并且該主機(jī)上的一個服務(wù)監(jiān)聽的地址是0.0.0.0,那么通過兩個ip地址都能夠訪問該服務(wù)。
- 在路由中,0.0.0.0表示的是默認(rèn)路由,即當(dāng)路由表中沒有找到完全匹配的路由的時候所對應(yīng)的路由。
用途總結(jié)
- 當(dāng)一臺主機(jī)還沒有被分配一個IP地址的時候,用于表示主機(jī)本身。(DHCP分配IP地址的時候)
- 用作默認(rèn)路由,表示”任意IPV4主機(jī)”。 用來表示目標(biāo)機(jī)器不可用。
- 用作服務(wù)端,表示本機(jī)上的任意IPV4地址。
127.0.0.1
127.0.0.1屬于{127,}集合中的一個,而所有網(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 測試某臺機(jī)器上的網(wǎng)絡(luò)設(shè)備,操作系統(tǒng)或者TCP/IP實(shí)現(xiàn)是否工作正常。
- DDoS攻擊防御:網(wǎng)站收到DDos攻擊之后,將域名A記錄到127.0.0.1,即讓攻擊者自己攻擊自己。
- 大部分Web容器測試的時候綁定的本機(jī)地址。
localhost
相比127.0.0.1,localhost具有更多的意義。localhost是個域名,而不是一個ip地址。之所以我們經(jīng)常把localhost與127.0.0.1認(rèn)為是同一個是因?yàn)槲覀兪褂玫拇蠖鄶?shù)電腦上都講localhost指向了127.0.0.1這個地址。 在ubuntu系統(tǒng)中,/ets/hosts文件中都會有如下內(nèi)容:
127.0.0.1 localhost 127.0.1.1 jason-Lenovo-V3000 # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 復(fù)制代碼
上面第一行是幾乎每臺電腦上都會有的默認(rèn)配置。 但是localhost的意義并不局限于127.0.0.1。
localhost是一個域名,用于指代this computer或者this host,可以用它來獲取運(yùn)行在本機(jī)上的網(wǎng)絡(luò)服務(wù)。 在大多數(shù)系統(tǒng)中,localhost被指向了IPV4的127.0.0.1和IPV6的::1。
127.0.0.1 localhost ::1 localhost 復(fù)制代碼
所以,在使用的時候要注意確認(rèn)IPV4還是IPV6
4. 總結(jié)
127.0.0.1 是一個環(huán)回地址。并不表示“本機(jī)”。0.0.0.0才是真正表示“本網(wǎng)絡(luò)中的本機(jī)”。 在實(shí)際應(yīng)用中,一般我們在服務(wù)端綁定端口的時候可以選擇綁定到0.0.0.0,這樣我的服務(wù)訪問方就可以通過我的多個ip地址訪問我的服務(wù)。
比如我有一臺服務(wù)器,一個外放地址A,一個內(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)地址。






