一文聊透 IP 地址的那些事
IP 地址,是一個(gè)大家都耳熟能詳?shù)拿~。以生活舉例,IP 在互聯(lián)網(wǎng)中的作用就像是寄件時(shí)的收件人地址和寄件人地址,收件人地址讓信件可以被正確送達(dá),寄件人地址則讓收到信的人可以回信。
IP 地址作為每一個(gè)互聯(lián)網(wǎng)設(shè)備都擁有的,獨(dú)一無二的地址,其本質(zhì)是 TCP/IP 協(xié)議族中網(wǎng)絡(luò)層的協(xié)議,也是 TCP/IP 協(xié)議族的核心協(xié)議。自 1981 年 Jon Postel 在 RFC791 中定義了第一次定義了 IP,到現(xiàn)在 IP 已經(jīng)是現(xiàn)今互聯(lián)網(wǎng)技術(shù)的基礎(chǔ)。目前的全球互聯(lián)網(wǎng)所采用的協(xié)議族是 TCP/IP 協(xié)議族。而 IPv4 是互聯(lián)網(wǎng)協(xié)議(Internet Protocol,IP)的第四版。
IP 地址的表示方式
IPv4 地址(下文統(tǒng)稱 IP 地址)是一個(gè) 32 位的二進(jìn)制數(shù)表示的地址。因此,除了全 0 地址用來表示一個(gè)無效的,未知的,或者不可用的目標(biāo)外,IPv4 一共擁有 2^32-1 個(gè)地址。它通常都是如下的樣子:
01111111000000000000000000000001
顯而易見,直接展示完整 32 位的 IP 地址既不直觀也不好記憶。所以為了方便使用,我們把這 32 位二進(jìn)制數(shù)分成八位一組,稱之為八位組(octet)。每個(gè)八位組書寫時(shí)用點(diǎn)分十進(jìn)制的格式標(biāo)識。每個(gè)八位組取值為 00000000~11111111(二進(jìn)制數(shù)),使用十進(jìn)制數(shù)表示則值為 0~255。這就讓 IP 地址變成了下面的樣子:
01111111 00000000 00000000 00000001
而因?yàn)槎M(jìn)制與十進(jìn)制的轉(zhuǎn)化非常簡單,只需要用二進(jìn)制數(shù)的每一位乘以 2 的 N 次方即可,這其中的 N 是相應(yīng)的位,從低位到高位以 0 次方開始,將二進(jìn)制是 1 的每位結(jié)果相加得到的就是相應(yīng)的十進(jìn)制數(shù)。
把 32 位的二進(jìn)制數(shù)的 IP 地址使用點(diǎn)分十進(jìn)制來標(biāo)識,除了全 0,這個(gè)范圍是從 000.000.000.001 到 255.255.255.255。然后再進(jìn)一步的優(yōu)化,例如對于 000.000.000.001,每個(gè)八位組中,高位的 0 可以不用寫出,即為 0.0.0.1。這一步步的最終讓 IP 地址變成了現(xiàn)在我們最熟悉的樣子,比如 10.0.0.1、192.168.33.44 這類。
順帶一提我們上面舉例用的 IP 地址轉(zhuǎn)換為點(diǎn)分十進(jìn)制后,就是大名鼎鼎的本機(jī)回送地址,這個(gè)地址是筑基內(nèi)部的 IP 地址,主要用于網(wǎng)絡(luò)軟件測試以及本地機(jī)進(jìn)程間通信,無論什么程序,一旦使用回送地址發(fā)送數(shù)據(jù),協(xié)議軟件立即返回之,不進(jìn)行任何網(wǎng)絡(luò)傳輸。
127.0.0.1
IP 地址的結(jié)構(gòu)
看到這里大家自然就會(huì)想到,除了本機(jī)地址,IP 還有其他地址嗎?沒想到吧,真的有。IP 地址可以劃分為兩個(gè)部分 :網(wǎng)絡(luò)地址和主機(jī)地址。
- 網(wǎng)絡(luò)地址:表示主機(jī)所在的網(wǎng)絡(luò)區(qū)域
- 主機(jī)地址:主機(jī)在網(wǎng)絡(luò)區(qū)域中的具體邏輯位置
如果我們把 IP 地址和電話號碼做類比:電話號碼 0571-81020204 中,0571 是區(qū)號,代表浙江杭州,類似于 IP 地址中的網(wǎng)絡(luò)地址部分。81020204 是杭州市內(nèi)某一個(gè)電話機(jī)的確切號碼,這就類似于 IP 地址中的主機(jī)地址部分。
當(dāng) IP 數(shù)據(jù)包在網(wǎng)絡(luò)中傳遞時(shí),路由器只關(guān)心目的 IP 地址的網(wǎng)絡(luò)地址部分,通過識別 IP 地址的網(wǎng)絡(luò)部分,來為 IP 數(shù)據(jù)包進(jìn)行路由操作。當(dāng)數(shù)據(jù)包達(dá)到了目的的網(wǎng)段以后,才通過 IP 地址的主機(jī)部分查找具體的接收主機(jī)。
那么,對于 IP 地址來說,哪幾位是網(wǎng)絡(luò)部分,哪幾位是主機(jī)部分呢?這就需要根據(jù)網(wǎng)絡(luò)規(guī)模和實(shí)際需求來劃分了。
IP 地址的分類
IP 在被設(shè)計(jì)時(shí),將 IP 地址分成五個(gè)等級(Class A、B、C、D、E)。一般常用的是 A、B、C 這三種等級的 IP 地址,分別適用在大、中、小型網(wǎng)絡(luò)。在申請 IP 地址時(shí),會(huì)由負(fù)責(zé)管理 IP 地址的機(jī)構(gòu),依照申請者所需要的網(wǎng)絡(luò)規(guī)模,賦予不同等級的 IP 地址。
A、B、C 類的網(wǎng)絡(luò)部分和主機(jī)部分的長短各不相同,網(wǎng)絡(luò)地址越短,對應(yīng)的可分配的主機(jī)地址就會(huì)越多。
在 A、B、C 類地址中,有一部分被用做了私有地址。私有地址又稱為私網(wǎng)地址或假地址,是指不在互聯(lián)網(wǎng)上使用的,僅在企業(yè)或組織內(nèi)部局域網(wǎng)上使用的 IP 地址。與之對應(yīng)的,可以在互聯(lián)網(wǎng)上使用的 IP 地址稱為公網(wǎng)地址或真地址。私有地址的存在讓局域網(wǎng)中的主機(jī)不需要全部分配互聯(lián)網(wǎng)的可用地址,從而節(jié)約有限的 IP 地址資源。
IP 地址的未來
我們前面提到 IPv4 一共擁有 2^32-1 個(gè)地址。這個(gè)數(shù)量乍一眼看上去是很多的,但是考慮到現(xiàn)在每一個(gè)手機(jī),每一臺電腦,甚至每一個(gè)冰箱都會(huì)接入網(wǎng)絡(luò),都需要一個(gè) IP 地址,那這個(gè)數(shù)量一下子就不夠用了。
2011 年 2 月 3 日,全球 IP 地址分配機(jī)構(gòu) IANA(Internet Assigned Numbers Authority)就宣布其地址池中的 IPv4 地址分配完畢了。2011 年 4 月 15 日,亞太互聯(lián)網(wǎng)絡(luò)信息中心(APNIC)在 2012 年 9 月 14 日為歐洲網(wǎng)絡(luò)信息中心(RIPE NCC)分配了最后一個(gè) IPv4 區(qū)塊,在 2014 年 6 月 10 日為拉丁美洲和加勒比海(LACNIC)分配了最后一個(gè) IPv4 區(qū)塊。2015 年 9 月 24 日為北美分配 IPv4 區(qū)塊,2019 年 11 月 26 日,歐洲 RIPE NCC 終于耗盡了存儲。
沒有了 IP 地址新的設(shè)備就無法接入互聯(lián)網(wǎng),為了解決這個(gè)問題我們開始擁抱 IPv6。IPv6 的地址數(shù)量是 IPv4 的 2 的 96 次方倍,不用再擔(dān)心地址枯竭的問題。早在 1998 年我們就開始了對 IPv6 的相關(guān)實(shí)驗(yàn)研究,但有一個(gè)很嚴(yán)肅的問題擺在我們眼前。那就是 IPv6 和 IPv4 之間的互通需要專門的技術(shù)和設(shè)備。為了解決這個(gè)問題,加快推進(jìn)部署和應(yīng)用 IPv6。工信部指導(dǎo)基礎(chǔ)電信企業(yè)完成了骨干網(wǎng)絡(luò)、LTE 網(wǎng)絡(luò)、城域網(wǎng)絡(luò) IPv6 升級改造,實(shí)現(xiàn)了全國 14 個(gè)骨干網(wǎng)直聯(lián)點(diǎn) IPv6 互聯(lián)互通。
數(shù)據(jù)顯示,截至 2021 年 12 月,我國 IPv6 活躍用戶數(shù)已達(dá) 6.08 億,約占中國網(wǎng)民的 60.11%。從流量來看,城域網(wǎng) IPv6 總流量突破 44.77 Tbps,占全網(wǎng)總流量的 9.38%,LTE 核心網(wǎng) IPv6 總流量超過 24.43 Tbps,占全網(wǎng)總流量的 35.15%。