127.0.0.1和0.0.0.0地址的區(qū)別
1. 問(wèn)題引入
之前在使用tomcat的時(shí)候,啟動(dòng)tomcat默認(rèn)都會(huì)綁定到127.0.0.1這個(gè)地址,最近在使用hexo寫(xiě)博客的時(shí)候發(fā)現(xiàn)通過(guò) 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ò)號(hào)和主機(jī)號(hào)。
net-id:表示ip地址所在的網(wǎng)絡(luò)號(hào)。
host-id:表示ip地址所在網(wǎng)絡(luò)中的某個(gè)主機(jī)號(hào)碼。
即:
IP-address ::= { , } 2.2 IP地址分類
IP地址一共分為5類,即A~E,它們分類的依據(jù)是其net-id所占的字節(jié)長(zhǎng)度以及網(wǎng)絡(luò)號(hào)前幾位。
A類地址:網(wǎng)絡(luò)號(hào)占1個(gè)字節(jié)。
網(wǎng)絡(luò)號(hào)的第一位固定為0。
B類地址:
網(wǎng)絡(luò)號(hào)占2個(gè)字節(jié)。
網(wǎng)絡(luò)號(hào)的前兩位固定為10。
C類地址:
網(wǎng)絡(luò)號(hào)占3個(gè)字節(jié)。
網(wǎng)絡(luò)號(hào)的前三位固定位110。
D類地址:
前四位是1110,用于多播(multicast),即一對(duì)多通信。
E類地址:
前四位是1111,保留為以后使用。
其中,ABC三類地址為單播地址(unicast),用于一對(duì)一通信,是最常用的。
2.3 特殊IP地址
特殊IP地址就是用來(lái)做一些特殊的事情。RFC1700中定義了以下特殊IP地址。
{0,0}:網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)都全部為0,表示“本網(wǎng)絡(luò)上的本主機(jī)”,只能用作源地址。
{0,host-id}:本網(wǎng)絡(luò)上的某臺(tái)主機(jī)。
只能用作源地址。
{-1,-1}:
表示網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)的所有位上都是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ò)號(hào)為127的任意ip地址。
都是內(nèi)部主機(jī)回環(huán)地址(loopback),永遠(yuǎn)都不能出現(xiàn)在主機(jī)外部的網(wǎng)絡(luò)中。
接下來(lái)我們來(lái)看之前問(wèn)過(guò)的問(wèn)題:127.0.0.1和0.0.0.0地址的區(qū)別是什么?
我們先來(lái)看下共同點(diǎn):
都屬于特殊地址。
都屬于A類地址。
都是IPV4地址。
接下來(lái)我們分別看下這兩個(gè)地址:
0.0.0.0
IPV4中,0.0.0.0地址被用于表示一個(gè)無(wú)效的,未知的或者不可用的目標(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)聽(tīng)的地址是0.0.0.0,那么通過(guò)兩個(gè)ip地址都能夠訪問(wèn)該服務(wù)。
在路由中,0.0.0.0表示的是默認(rèn)路由,即當(dāng)路由表中沒(méi)有找到完全匹配的路由的時(shí)候所對(duì)應(yīng)的路由。
用途總結(jié)
當(dāng)一臺(tái)主機(jī)還沒(méi)有被分配一個(gè)IP地址的時(shí)候,用于表示主機(jī)本身。
(DHCP分配IP地址的時(shí)候)
用作默認(rèn)路由,表示”任意IPV4主機(jī)”。
用來(lái)表示目標(biāo)機(jī)器不可用。用作服務(wù)端,表示本機(jī)上的任意IPV4地址。
127.0.0.1
127.0.0.1屬于{127,}集合中的一個(gè),而所有網(wǎng)絡(luò)號(hào)為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)測(cè)試,通過(guò)使用ping 127.0.0.1 測(cè)試某臺(tái)機(jī)器上的網(wǎng)絡(luò)設(shè)備,操作系統(tǒng)或者TCP/IP實(shí)現(xiàn)是否工作正常。
DDos攻擊防御:
網(wǎng)站收到DDos攻擊之后,將域名A記錄到127.0.0.1,即讓攻擊者自己攻擊自己。
大部分Web容器測(cè)試的時(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)容:
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上面第一行是幾乎每臺(tái)電腦上都會(huì)有的默認(rèn)配置。
但是localhost的意義并不局限于127.0.0.1。
localhost是一個(gè)域名,用于指代this computer或者this host,可以用它來(lái)獲取運(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所以,在使用的時(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)用中,一般我們?cè)诜?wù)端綁定端口的時(shí)候可以選擇綁定到0.0.0.0,這樣我的服務(wù)訪問(wèn)方就可以通過(guò)我的多個(gè)ip地址訪問(wèn)我的服務(wù)。
比如我有一臺(tái)服務(wù)器,一個(gè)外網(wǎng)地址A,一個(gè)內(nèi)網(wǎng)地址B,如果我綁定的端口指定了0.0.0.0,那么通過(guò)內(nèi)網(wǎng)地址或外網(wǎng)地址都可以訪問(wèn)我的應(yīng)用。但是如果我只綁定了內(nèi)網(wǎng)地址,那么通過(guò)外網(wǎng)地址就不能訪問(wèn)。所以如果綁定0.0.0.0,也有一定安全隱患,對(duì)于只需要內(nèi)網(wǎng)訪問(wèn)的服務(wù),可以只綁定內(nèi)網(wǎng)地址。
推薦閱讀:
喜歡我可以給我設(shè)為星標(biāo)哦

好文章,我?在看?

