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