IPv4
1.什么是IPv4
IPv4是英文Internet Protocol version 4的縮寫,中文名為互聯(lián)網(wǎng)協(xié)議版本4。IPv4是互聯(lián)網(wǎng)協(xié)議開發(fā)過程中的第四個修訂版本(網(wǎng)際網(wǎng)協(xié)四版),也是此協(xié)議第一個被廣泛部署的版本。
IPv4是一種無連接的協(xié)議,操作在使用分組交換的鏈路層(如以太網(wǎng))上。此協(xié)議會盡最大努力交付分組,意即它不保證任何分組均能送達(dá)目的地,也不保證所有分組均按照正確的順序無重復(fù)地到達(dá)。這些方面是由上層的傳輸協(xié)議(如傳輸控制協(xié)議)處理的。
IPv4與IPv6均是標(biāo)準(zhǔn)化互聯(lián)網(wǎng)絡(luò)的核心部分。IPv4依然是使用最廣泛的互聯(lián)網(wǎng)協(xié)議版本,直到2011年,IPv6仍處在部署的初期。
IPv4在IETF于1981年9月發(fā)布的RFC 791中被描述,此RFC替換了于1980年1月發(fā)布的RFC 760。
2.IPv4協(xié)議結(jié)構(gòu)
Version - 4位字段,指出當(dāng)前使用的 IP 版本。
IP Header Length (IHL) ─ 指數(shù)據(jù)報協(xié)議頭長度,具有32位字長。指向數(shù)據(jù)起點。正確協(xié)議頭最小值為5。
Type-of-Service ─ 指出上層協(xié)議對處理當(dāng)前數(shù)據(jù)報所期望的服務(wù)質(zhì)量,并對數(shù)據(jù)報按照重要性級別進(jìn)行分配。這些8位字段用于分配優(yōu)先級、延遲、吞吐量以及可靠性。(即TOS)
Total Length ─ 指定整個 IP 數(shù)據(jù)包的字節(jié)長度,包括數(shù)據(jù)和協(xié)議頭。其最大值為65,535字節(jié)。典型的主機(jī)可以接收576字節(jié)的數(shù)據(jù)報。
Identification ─ 包含一個整數(shù),用于識別當(dāng)前數(shù)據(jù)報。該字段由發(fā)送端分配幫助接收端集中數(shù)據(jù)報分片。
Flags ─ 由3位字段構(gòu)成,其中低兩位(最不重要)控制分片。中間位(DF)指出數(shù)據(jù)包是否可進(jìn)行分片。低位(MF)指出在一系列分片數(shù)據(jù)包中數(shù)據(jù)包是否是最后的分片。第三位即最高位不使用。
Fragment Offset ─ 13位字段,指出與源數(shù)據(jù)報的起始端相關(guān)的分片數(shù)據(jù)位置,支持目標(biāo)IP適當(dāng)重建源數(shù)據(jù)報。
Time-to-Live ─ 是一種計數(shù)器,在丟棄數(shù)據(jù)報的每個點值依次減1直至減少為0。這樣確保數(shù)據(jù)包無止境的環(huán)路過程(即TTL)。
Protocol ─ 指出在 IP 處理過程完成之后,有哪種上層協(xié)議接收導(dǎo)入數(shù)據(jù)包。
Header Checksum ─ 幫助確保 IP 協(xié)議頭的完整性。由于某些協(xié)議頭字段的改變,如生存期(Time to Live),這就需要對每個點重新計算和檢驗。Internet 協(xié)議頭需要進(jìn)行處理。
Source Address ─ 源主機(jī)IP地址。
Destination Address ─ 目標(biāo)主機(jī)IP地址。
Options ─ 允許 IP 支持各種選項,如安全性。
Data ─ 包括上層信息。
3.IPv4地址
IPv4使用32位(4字節(jié))地址,因此地址空間中只有4,294,967,296(232)個地址。不過,一些地址是為特殊用途所保留的,如專用網(wǎng)絡(luò)(約18百萬個地址)和多播地址(約270百萬個地址),這減少了可在互聯(lián)網(wǎng)上路由的地址數(shù)量。隨著地址不斷被分配給最終用戶,IPv4地址枯竭問題也在隨之產(chǎn)生。基于分類網(wǎng)絡(luò)、無類別域間路由和網(wǎng)絡(luò)地址轉(zhuǎn)換的地址結(jié)構(gòu)重構(gòu)顯著地減少了地址枯竭的速度。但在2011年2月3日,在最后5個地址塊被分配給5個區(qū)域互聯(lián)網(wǎng)注冊管理機(jī)構(gòu)之后,IANA的主要地址池空了。
這些限制刺激了仍在開發(fā)早期的IPv6的部署,這也是唯一的長期解決方案。
1.地址格式
IPv4地址可被寫作任何表示一個32位整數(shù)值的形式,但為了方便人類,它通常被寫作點分十進(jìn)制的形式,即四個字節(jié)被分開用十進(jìn)制寫出,中間用點分隔。
下表展示了幾種不同的格式:
格式 | 值 | 從點分十進(jìn)制轉(zhuǎn)換 |
點分十進(jìn)制 | 192.0.2.235 | 不適用 |
點分十六進(jìn)制 | 0xC0.0x00.0x02.0xEB | 每個字節(jié)被單獨轉(zhuǎn)換為十六進(jìn)制 |
點分八進(jìn)制 | 0300.0000.0002.0353 | 每個字節(jié)被單獨轉(zhuǎn)換為八進(jìn)制 |
十六進(jìn)制 | 0xC00002EB | 將點分十六進(jìn)制連在一起 |
十進(jìn)制 | 3221226219 | 用十進(jìn)制寫出的32位整數(shù) |
八進(jìn)制 | 030000001353 | 用八進(jìn)制寫出的32位整數(shù) |
此外,在點分格式中,每個字節(jié)都可用任意的進(jìn)制表達(dá)。如,192.0x00.0002.235是一種合法(但很不常用)的表示。
2.分配
最初,一個IP地址被分成兩部分:網(wǎng)絡(luò)識別碼在地址的高位字節(jié)中,主機(jī)識別碼在剩下的部分中。這使得創(chuàng)建最多256個網(wǎng)絡(luò)成為可能,但很快人們發(fā)現(xiàn)這樣是不夠的。
為了克服這個限制,在隨后出現(xiàn)的分類網(wǎng)絡(luò)中,地址的高位字節(jié)被重定義為網(wǎng)絡(luò)的類(Class)。這個系統(tǒng)定義了五個類別:A、B、C、D和E。A、B和C類有不同的網(wǎng)絡(luò)類別長度,剩余的部分被用來識別網(wǎng)絡(luò)內(nèi)的主機(jī),這就意味著每個網(wǎng)絡(luò)類別有著不同的給主機(jī)編址的能力。D類被用于多播地址,E類被留作將來使用。
在1993年左右,無類別域間路由(CIDR)正式地取代了分類網(wǎng)絡(luò),后者也因此被稱為“有類別”的。
CIDR被設(shè)計為可以重新劃分地址空間,因此小的或大的地址塊均可以分配給用戶。CIDR創(chuàng)建的分層架構(gòu)由互聯(lián)網(wǎng)號碼分配局(IANA)和區(qū)域互聯(lián)網(wǎng)注冊管理機(jī)構(gòu)(RIR)進(jìn)行管理,每個RIR均維護(hù)著一個公共的WHOIS數(shù)據(jù)庫,以此提供IP地址分配的詳情。
3.特殊用途的地址
保留的地址塊:
CIDR地址塊 | 描述 | 參考資料 |
0.0.0.0/8 | 本網(wǎng)絡(luò)(僅作為源地址時合法) | RFC 5735 |
10.0.0.0/8 | 專用網(wǎng)絡(luò) | RFC 1918 |
127.0.0.0/8 | 環(huán)回 | RFC 5735 |
169.254.0.0/16 | 鏈路本地 | RFC 3927 |
172.16.0.0/12 | 專用網(wǎng)絡(luò) | RFC 1918 |
192.0.0.0/24 | 保留(IANA) | RFC 5735 |
192.0.2.0/24 | TEST-NET-1,文檔和示例 | RFC 5735 |
192.88.99.0/24 | 6to4中繼 | RFC 3068 |
192.168.0.0/16 | 專用網(wǎng)絡(luò) | RFC 1918 |
198.18.0.0/15 | 網(wǎng)絡(luò)基準(zhǔn)測試 | RFC 2544 |
198.51.100.0/24 | TEST-NET-2,文檔和示例 | RFC 5737 |
203.0.113.0/24 | TEST-NET-3,文檔和示例 | RFC 5737 |
224.0.0.0/4 | 多播(之前的D類網(wǎng)絡(luò)) | RFC 3171 |
240.0.0.0/4 | 保留(之前的E類網(wǎng)絡(luò)) | RFC 1700 |
255.255.255.255 | 廣播 | RFC 919 |
4.專用網(wǎng)絡(luò)
在IPv4所允許的大約四十億地址中,三個地址塊被保留作專用網(wǎng)絡(luò)。這些地址塊在專用網(wǎng)絡(luò)之外不可路由,專用網(wǎng)絡(luò)之內(nèi)的主機(jī)也不能直接與公共網(wǎng)絡(luò)通信。但通過網(wǎng)絡(luò)地址轉(zhuǎn)換,他們即能做到后者。
下表展示了三個被保留作專用網(wǎng)絡(luò)的地址塊(RFC 1918):
名字 | 地址范圍 | 地址數(shù)量 | 有類別的描述 | 最大的CIDR地址塊 |
24位塊 | 10.0.0.0–10.255.255.255 | 16,777,216 | 一個A類 | 10.0.0.0/8 |
20位塊 | 172.16.0.0–172.31.255.255 | 1,048,576 | 連續(xù)的16個B類 | 172.16.0.0/12 |
16位塊 | 192.168.0.0–192.168.255.255 | 65,536 | 連續(xù)的256個C類 | 192.168.0.0/16 |
5.虛擬專用網(wǎng)絡(luò)
以專用網(wǎng)絡(luò)地址作目的地址的報文會被所有公共路由器忽略,因此在兩個專用網(wǎng)絡(luò)之間直接通信(如兩個分支辦公室間)是不可能的。這需要使用IP隧道或虛擬專用網(wǎng)絡(luò)(VPN)。
VPN在公共網(wǎng)絡(luò)上創(chuàng)建連接兩個專用網(wǎng)絡(luò)的隧道。在這種功能中,隧道一端的主機(jī)將報文封裝在一個公共網(wǎng)路上可以接受的協(xié)議層中,然后這些報文就可以被送達(dá)隧道的另一端,在那里,附加的協(xié)議層被去掉,報文也被送達(dá)其原定的目的地。
此外,封裝過的報文也可能被加密以保證其在公共網(wǎng)絡(luò)上傳輸時的安全性。
6.鏈路本地地址
RFC 5735中將地址塊169.254.0.0/16保留為特殊用于鏈路本地地址,這些地址僅在鏈路上有效(如一段本地網(wǎng)絡(luò)或一個端到端連接)。這些地址與專用網(wǎng)絡(luò)地址一樣不可路由,也不可作為公共網(wǎng)絡(luò)上報文的源或目的地址。鏈路本地地址主要被用于地址自動配置:當(dāng)主機(jī)不能從DHCP服務(wù)器處獲得IP地址時,它會用這種方法生成一個。
當(dāng)這個地址塊最初被保留時,地址自動配置尚沒有一個標(biāo)準(zhǔn)。為了填補(bǔ)這個空白,微軟創(chuàng)建了一種叫自動專用IP尋址(APIPA)的實現(xiàn)。因微軟的市場影響力,APIPA已經(jīng)被部署到了幾百萬機(jī)器上,也因此成為了事實上的工業(yè)標(biāo)準(zhǔn)。許多年后,IETF為此定義了一份正式的標(biāo)準(zhǔn):RFC 3927,命名為“IPv4鏈路本地地址的動態(tài)配置”。
7.環(huán)回地址(Loopback Address)
地址塊127.0.0.0/8被保留作環(huán)回通信用。此范圍中的地址絕不應(yīng)出現(xiàn)在主機(jī)之外,發(fā)送至此地址的報文被作為同一虛擬網(wǎng)絡(luò)設(shè)備上的入站報文(環(huán)回),主要用于檢查TCP/IP協(xié)議棧是否正確運行和本機(jī)對本機(jī)的鏈接。
8.以0或255結(jié)尾的地址
一個常見的誤解是以0或255結(jié)尾的地址永遠(yuǎn)不能分配給主機(jī):這僅在子網(wǎng)掩碼至少24位長度時(舊的C類地址,或CIDR中的/24到/32)才成立。
在有類別的編址中,只有三種可能的子網(wǎng)掩碼:A類:255.0.0.0,B類:255.255.0.0,C類:255.255.255.0。如,在子網(wǎng)192.168.5.0/255.255.255.0(即192.168.5.0/24)中,網(wǎng)絡(luò)識別碼192.168.5.0用來表示整個子網(wǎng),所以它不能用來標(biāo)識子網(wǎng)上的某個特定主機(jī)。
廣播地址允許數(shù)據(jù)包發(fā)往子網(wǎng)上的所有設(shè)備。一般情況下,廣播地址是借由子網(wǎng)掩碼的比特補(bǔ)數(shù)并和網(wǎng)絡(luò)識別碼運行 OR 的比特運算就能獲得,這也就是說,廣播地址是子網(wǎng)中的最后一個地址。在上述例子中,廣播地址是192.168.5.255,所以為了避免歧義,這個地址也不能被分配給主機(jī)。在A、B和C類網(wǎng)絡(luò)中,廣播地址總是以255結(jié)尾。
但是,這并不意味著每個以255結(jié)尾的地址都不能用做主機(jī)地址。比如,在B類子網(wǎng)192.168.0.0/255.255.0.0(即192.168.0.0/16)中,廣播地址是192.168.255.255。在這種情況下,盡管可能帶來誤解,但192.168.1.255、192.168.2.255等地址可以被分配給主機(jī)。同理,192.168.0.0作為網(wǎng)絡(luò)識別碼不能被分配,但192.168.1.0、192.168.2.0等都是可以的。
隨著CIDR的到來,廣播地址不一定總是以255結(jié)尾。比如,子網(wǎng)203.0.113.16/28的廣播地址是203.0.113.31。
一般情況下,子網(wǎng)的第一個和最后一個地址分別被作為網(wǎng)絡(luò)識別碼和廣播地址,任何其它地址都可以被分配給其上的主機(jī)。
9.地址解析
互聯(lián)網(wǎng)上的主機(jī)通常被其名字(如zh.wikipedia.org、www.berkeley.edu等)而不是IP地址識別,但I(xiàn)P報文的路由是由IP地址而不是這些名字決定的。這就需要將名字翻譯(解析)成地址。
域名系統(tǒng)(DNS)提供了這樣一個將名字轉(zhuǎn)換為地址和將地址轉(zhuǎn)換為名字的系統(tǒng)。與CIDR相像,DNS也有一個層級的結(jié)構(gòu),使不同的名字空間可被再委托給其它DNS服務(wù)器。
域名系統(tǒng)經(jīng)常被描述為電話系統(tǒng)中的黃頁:在那里人們可以把名字和電話號碼對應(yīng)起來。
4.IPv4地址空間枯竭
從20世紀(jì)80年代起,一個很明顯的問題是IPv4地址在以比設(shè)計時的預(yù)計更快的速度耗盡。這是創(chuàng)建分類網(wǎng)絡(luò)、無類型域間路由,和最終決定重新設(shè)計基于更長地址的互聯(lián)網(wǎng)協(xié)議(IPv6)的誘因。
一些市場力量也加快了IPv4地址的耗盡,如:
互聯(lián)網(wǎng)用戶的急速增長;
總是開著的設(shè)備:ADSL調(diào)制解調(diào)器、纜線調(diào)制解調(diào)器等;
移動設(shè)備:筆記本電腦、PDA、移動電話等。
隨著互聯(lián)網(wǎng)的增長,各種各樣的技術(shù)隨之產(chǎn)生以應(yīng)對IPv4地址的耗盡,如:
網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT);
專用網(wǎng)絡(luò)的使用;
動態(tài)主機(jī)設(shè)置協(xié)議(DHCP);
基于名字的虛擬主機(jī);
區(qū)域互聯(lián)網(wǎng)注冊管理機(jī)構(gòu)對地址分配的控制;
對互聯(lián)網(wǎng)初期分配的大地址塊的回收。
隨著IANA把最后5個地址塊分配給5個RIR,其主地址池在2011年2月3日耗盡。許多地址分配和消耗的模型都預(yù)測第一個耗盡地址的RIR會在2011年的下半年出現(xiàn)。
廣泛被接受且已被標(biāo)準(zhǔn)化的解決方案是遷移至IPv6。IPv6的地址長度從IPv4的32位增長到了128位,以此提供了更好的路由聚合,也為最終用戶分配最小為264個主機(jī)地址的地址塊成為可能。遷移過程正在進(jìn)行,但其完成仍需要相當(dāng)?shù)臅r間。