46 張圖徹底搞懂 IP 基礎知識!

寫在前面

這是 1969 年 10 月 29 日的互聯網。這一天的 22 點 30 分,在加州大學洛杉磯分校(UCLA)的計算機實驗室,Leonard Kleinrock(倫納德 · 克萊因洛克)教授發送了人類第一封互聯網消息,跨越了數千公里,到達了西北部的斯坦福大學研究院(SRI)。

1969 年的互聯網

這條消息的內容是 “LO”,含義是 “登錄”,是用來遠程登錄 SRI 計算機的命令。第一次發送時 SRI 的計算機崩潰了,導致發送失敗,修復後第二次才成功登錄 SRI 的遠程計算機。至此,人類的互聯網開始成型。

時間到了 1978 年,爲了支持實時傳輸,人們發明了 TCP/IP 協議。TCP 和 IP 協議的發明,被認爲是全球互聯網誕生的標誌。

時間撥回到今天,當我們回顧互聯網爲何能發展如此飛速時,通信協議起到了至關重要的作用。下圖是在谷歌搜索 who invented IP(誰發明了 IP)時,彈出的第一個結果。

IP 以及 IP 協議,是今天互聯網的通信基礎。對它的瞭解非常重要,這篇文章裏,我會通過四十餘張原理圖,跟大家詳細闡述 IP 與 IP 協議相關知識。

IP 協議的位置

IP 協議位於 OSI 七層協議的網絡層上,與 IP 協議配套的還有 ARP、ICMP、IGMP。

ARP:地址解析協議,用於將 IP 地址轉爲機器 MAC 地址

ICMP:網際控制報文協議

IGMP:網際組管理協議

以前還有一個 RARP(逆地址解析協議),用來與 ARP 配套使用,但現在已經被廢棄了。

其中,ICMP 和 IGMP 需要用到 IP,而 IP 需要用到 ARP。

全球 IP 地址資源如何分配?

目前的互聯網,分配 IP 地址有個專門機構叫 ICANN(Intercet Corporation For Assigned Names and Numbers,互聯網名字和數字分配機構)。

在此之前,IP 地址是由互聯網號碼分配局(英語:Internet Assigned Numbers Authority,簡稱:IANA)以及其他 5 個區域互聯網註冊管理機構(英語:Regional Internet Registry,簡稱:RIR)分配的。

RIR 的作用是管理世界上某特定地區的 Internet 資源( IP 地址和用於 BGP 路由中的自治系統號),根據地理位置劃分爲 5 個。

IANA 的作用是將 Internet 資源委託給 RIR,相當於世界管理員

其中,IPv4 地址被 IANA 以地址塊爲單位分給 RIR,每個地址塊大約爲 1680 萬個地址,但自 2011 年 以來在 IANA 級別已用盡。在非洲,RIR 中只有 1 個 RIR 仍然可以給當地分配(沒想到,互聯網也有區域性的歧視)。

由於 IANA 和美國政府關聯較大,後來的 ICANN 取代了 IANA 的工作。不過,ICANN 仍要遵循美國法律。

IP 地址組成

IP 地址爲 32 位的二進制數,由網絡號和主機號組合而成。

其中,一個網絡號在整個互聯網範圍內必須是唯一的,一個主機號在它前面的網絡號所指定的網絡範圍內必須是唯一的。因此,一個 IP 地址在整個互聯網範圍內是唯一的

IP 地址分爲網絡號和主機號有兩個好處:

1)IP 地址管理機構(ICANN)在分配 IP 地址時只分配網絡號,主機號由得到該網絡號的單位自行分配,這樣方便了對 IP 地址的管理;

2)路由器僅根據目的主機所連接的網絡號來轉發分組(而不考慮主機號),這樣可以使路由表中的項目數大幅度減少,從而減小路由表的佔用空間和查詢路由表的時間。

實際上,作爲邏輯地址,IP 地址是標誌一臺主機(包括路由器)和一條鏈路的接口,當主機沒有聯網時,不一定有 IP 地址。因此,當一臺主機同時連接到兩個網絡時,該主機就必須同時具備兩個響應的 IP 地址,其網絡號必須是不同的。這種主機成爲多歸屬主機,比如路由器。

路由器的每個接口都對應一個網絡,也對應一個 IP 地址。

這裏有個特殊場景,便是兩個路由器之間只有連線而無主機。過去會爲這條線路專門分配一個 IP 地址,爲了節省 IP 地址資源,現在經常採用一種不分配 IP 地址的方式,這類網絡稱爲無名網絡

注意,這裏的 IP 地址指 IPv4,即第一代 IP 地址,目前仍舊使用廣泛。

由於 IPv4 地址在 2011 年已被耗盡,目新的機器都只能用 IPv6 地址,目前互聯網上 IPv4 和 IPv6 是共存的。

IPv4 地址表示與分類

由於 IPv4 地址有 32 位,就像這樣下面的 A 類地址:

10000000 00001011 00000100 00011110

實在反人類,因此,爲了方便表示,經常會將其轉爲點分十進制格式。即每 8 位二進制轉爲十進制後,在後面加一個點,組成人類友好的格式。

根據用途不同,IPv4 地址分爲五類:A 類、B 類、C 類、D 類、E 類

可以看到,A 類地址的地址空間有 231 地址,佔整個 IP 地址空間的二分之一;

B 類地址的地址空間有 230 地址,佔整個 IP 地址空間的四分之一;

C 類地址的地址空間有 229 地址,佔整個 IP 地址空間的八分之一

其中,

A 類地址分配給政府機關單位;

B 類地址分配給中等規模的企業;

C 類地址分配給任何需要的人。

之所以這樣劃分,是因爲不同組織的網絡大小不同。政府機關的網絡少,每個網絡的主機卻很多,因此不需要太多的網絡號,在申請 IP 時就分配了 A 類 IP。

由此,某個單位申請 IP 地址時,實際上只申請網絡號。其中具體的各臺主機號則由該單位自行分配,這樣方便了對 IP 地址的管理。而我們個人計算機的 IP 地址就是由運營商申請到一批 IP 地址後,再分給到具體個人的。

特殊 IPv4 地址

實際使用 IP 地址過程中,有部分 IP 地址有特殊含義,可見下表。其中,定向廣播地址和直接廣播地址的區別是:

定向廣播只在本網絡進行廣播,各路由器均不轉發;

直接廣播是對指定網絡號中的所有主機進行廣播。

IP 地址的編址方式有哪些?

上面說到的 IP 地址分類實際是 IP 地址編碼的一種方式。歷史上,IP 地址的編址方式經歷了三個階段:

1)分類的 IP 地址:這是最基本的編址方法,在 1981 年通過了相應的標準協議;

2)子網劃分:這是對最基本的編址方法的改進,1985 年通過了它的標準 RFC 950;

3)無類別域間路由(CIDR):這是比較新的無分類編址方式,1993 年提出後很快就得到了推廣應用。最新的 IPv6 沿用了 CIDR,本質上也是通過增加子網數量實現更多的編址。

下面主要介紹第二種方式:子網劃分,它是 CIDR 的基礎,而 CIDR 將在下一節談到。

最初的 CIDR——子網劃分

第一階段的分類 IP 地址格式爲 {網絡號,主機號},子網劃分的 IP 地址格式變爲 {網絡號,子網號,主機號}

當沒有劃分子網時,IP 地址是兩級結構,劃分子網後 IP 地址變成了三級結構。劃分子網只是把 IP 地址的主機號這部分進行再劃分,而不改變 IP 地址原來的網絡號。

以下圖的張家村第一代爲例,網絡和路由器只能識別到網絡號和主機號,一個網絡內的所有主機網絡號都相同,主機平等。但凡網絡 144.14.0.0 上的路由器 R1 在收到外來的數據報後,再根據數據報的目的 IP 地址把它轉發到相應的主機。

下面是張家村的第二代,網絡和路由器不僅可以識別網絡號和主機號,還能識別子網號。但凡網絡 144.14.0.0 上的路由器 R1 在收到外來的數據報後,再根據數據報的目的 IP 地址把它轉發到相應的子網。

對於張家村第二代,我們直到路由器 R1 會將抵達的數據報發往對應的子網,那麼路由器是怎麼知道的呢?答案是路由表中的子網掩碼

子網掩碼是一串 1 和一串 0 的組合,長度等於 IP 地址長度。對於兩級 IP 地址,子網掩碼由 16 位 1 和 16 位 0 組成;對於三級 IP 地址,子網掩碼由 24 位 1 和 8 位 0 組成。如下圖所示。

那路由器如何利用子網掩碼查找子網的呢?

路由器的路由表結構如下圖綠表,其中,前兩個字段 "目的網絡地址" 和 "下一跳地址" 用於路由器之間的分組轉發,而 "子網掩碼" 用於最後一個路由器轉發到目的主機時,計算目的網絡子網的作用。

當一個目的地址爲 144.14.3.1 的 IP 數據報抵達目的主機所屬網絡的路由器 R1 時,路由器找到路由表中對應記錄後,將 IP 地址與子網掩碼做與 (AND) 操作,可以得到目的主機所在的子網地址。知道了主機所在目的網絡,又知道了其所在的子網,路由器 R1 自然能將抵達的數據報發往對應的子網 2,即圖中的張良家。

當一個目的地址爲 144.14.5.1 的 IP 數據報抵達目的主機所屬網絡的路由器 R1 時,路由器找到路由表中對應記錄後,將 IP 地址與子網掩碼做與 (AND) 操作,可以得到目的主機所在的子網地址。知道了主機所在目的網絡,又知道了其所在的子網,路由器 R1 自然能將抵達的數據報發往對應的子網 3,即圖中的張飛家。

當在路由表中有不止一個匹配結果時,會從匹配結果中選擇具有最長網絡前綴的路由。另外,當一個網絡不劃分子網的時候,路由表中將採用默認的子網掩碼。將該默認子網掩碼與 IP 地址相與,也能得到對應的目的網絡地址。

下面的理解可能跟一些書和博客上的說法不同,但原理本質上是一樣的,只是角度不同。有些書上會分路由器從網絡外看和從網絡內看。

注意!默認子網掩碼可以和子網掩碼共存,二者的定位不相同。默認子網掩碼用於確定目的網絡地址,而子網掩碼用於確定目的網絡內的子網地址。

**默認子網掩碼能夠決定分組是直接交付還是間接交付。其中,間接交付發生在分組傳輸過程中,直接交付發生在最後一個網絡。**原理如下:

1)每當分組抵達路由器,路由器首先將默認子網掩碼與分組內目的 IP 地址做 "與" 操作,如果結果等於路由器所在的目的網絡地址,那麼將直接交付,否則將分組轉給其它路由器;

2)確定了直接交付,接着考慮目的網絡地址劃分子網的可能。因此將路由表中的子網掩碼與 IP 地址做 "與" 操作,結果即爲子網地址,分組直接交付給目的網絡地址的子網。當然了,如果沒有劃分子網,那運算結果也是目的網絡地址,同樣是直接交付。

3)如果是間接交付,路由器將默認子網掩碼與 IP 相與後,結果(比如 144.0.0.0)可能包含了其它多個路由器的目的網絡地址(比如 144.1.0.0,144.2.0.0)。這時候也應該用子網掩碼與 IP 相與,再將新的結果與其它路由器的目的網絡地址比較。

子網掩碼非常重要,路由器在和相鄰路由器交換路由信息時,必須把自己所在網絡的子網掩碼告訴相鄰路由器。劃分子網有利於緩解 IP 資源分配不當,增加了靈活性;但從另外一個角度看,它卻減少了能夠連接在網絡上的主機數。

IPv4 如何緩解地址耗盡?

IPv4 是 32 位二進制,因此僅能提供 42.9 億個 IP 位置,而 2018 年,全球上網人數已達 40.21 億,加上各類設備都要用到 IP,IPv4 早已枯竭。

而 IPv6 的推廣較爲緩慢,爲了臨時緩解 IPv4 地址緊張的問題,採用了兩種目前廣泛使用的措施:網絡地址轉換(NAT)無分類域間地址(CIDR)

網絡地址轉換(NAT)

NAT 的典型應用就是家用局域網和公司內網,比如 192.xxx.xxx.xxx 就是典型的內網地址,在訪問外網時需要經過路由器進行 IP 地址轉換。它的原理是將一整塊內網通過一個公 IP 連接互聯網,通常是經過路由器轉換,因此不需要爲每個內網主機申請一個 IPv4 地址。

NAT 主要分爲 **基本網絡地址轉換(Basic NAT)**和 網絡地址端口轉換(NAPT)。後者應用較爲廣泛,詳細的分類參見下圖。

Basic NAT 要求每一個當前連接都要對應一個公網 IP 地址,一對一的通信。但它不允許端口映射,因此無法做到多臺主機共享一個公網 IP 地址,因此基本不用。

NAPT 允許地址映射和端口映射,因此允許多個主機共享一個公網 IP 地址。

當內網 IP 節點發起對外請求時,其內網 IP 地址會被重寫爲路由器的對外 IP,比如下面的 10.11.12.1,併發給公網 IP 節點;

當外網 IP 節點返回請求時,經過路由器時,會根據先前的連接記錄,定向轉發給內網主機。因此,路由器要維護一個帶有 IP 和端口的映射表。

網絡地址轉換(NAT)有幾種穿透策略?

NAT 穿透即允許哪些 IP 進入內網。穿透策略分爲穿透方式穿透協議

穿透策略:應用層網關、探針技術、中間件技術、中繼代理技術、特定協議穿透。

穿透協議:RTMFP、STUN/TURN、ICE。

NAT 可以用於緩解 IPv4 地址不足的窘境,在目前的 IPv4 網絡中有廣泛應用。但是 IPv6 的地址空間非常充足,因此 IPv6 的網絡不需要 NAT。

無分類域間地址(CIDR)

CIDR 是一個用於 IP 地址分配的有效方法,適用於 IPv4 和 IPv6。技術實現上,CIDR 是基於**可變長子網掩碼(VLSM)**來進行任意長度的前綴分配的,它的應用主要爲大型企業網絡。

**CIDR 的格式是在 IP 地址後加一個斜槓和表示前綴位數的數字。如 1.1.1.1/5 表示 IP 地址的前 5 位是網絡號。**與子網掩碼類似,不過它的掩碼是可變長度的。

子網掩碼的概念

子網掩碼一共有 32 位,被分爲連續的兩部分,高位部分的每一位都被設爲二進制的 1,表示 IP 地址的網絡部分,其餘部分的每一位均被設爲二進制的 0。

CIDR 對 IP 地址的分配過程如下:

互聯網地址指派機構(IANA)向區域互聯網註冊管理機構(RIRs)分配數量多、前綴短的 CIDR 地址塊,這些 RIR 各自負責管理一個單一區域(比如歐洲或者北美),然後它們把這些地址塊分成小一些的地址塊再分配給公衆。這個細分的操作可能會由不同層次的團體多次進行。大型網絡供應商(ISP)一般會從 RIR 申請 CIDR 地址塊,然後再向根據它們客戶的網絡大小而分配更小的地址塊。

如下圖所示,208.130.29.33 是一個網站:www.freesoft.org 的 IPv4 地址,這個 IP 的分配遵循了 CIDR 的分配流暢。

可以看出,CIDR 分配 IP 的方式是通過改變子網掩碼的長度,從而改變網絡號和主機號的位數,進而達到分配不同子網和主機的目的。它跟之前 IPv4 分爲五類的方式不同,後者非常粗糙,目前大多采用 CIDR 的方式分配 IP。

總結:NAT 和 CIDR 這兩種方式都是治標不治本的方法, IPv4 位數太少導致的地址資源缺乏依舊沒有解決。從 1990 年開始,人們開始着手規劃新一代 IP 地址。

MAC 地址(硬件地址)

下圖是某路由器標籤上的 MAC 地址,圖源自維基百科。

MAC 地址又稱爲硬件地址,MAC 地址用於在網絡中唯一標示一個網卡。因此一臺主機是可以有多個 MAC 地址的,比如有多個網卡。

MAC 地址一共 48 位(即 6 個字節),以十六進制表示。第 1 位爲廣播地址 (0)/ 羣播地址 (1),第 2 位爲廣域地址 (0)/ 區域地址 (1)。前 3~24 位由 IEEE 決定如何分配給每一家制造商,且不重複,後 24 位由實際生產該網絡設備的廠商自行指定且不重複。

MAC 地址也有特殊地址,比如 ff:ff:ff:ff:ff:ff 作爲廣播地址,01:xx:xx:xx:xx:xx 是多播地址,01:00:5e:xx:xx:xx 是 IPv4 多播地址。

在實際使用中,MAC 地址的位置處於數據鏈路層,在 MAC 幀的頭部會存在 MAC 源地址和目的地址,這對主機間的路由非常重要。數據鏈路幀(MAC 幀)格式如下,MAC 地址就放在 MAC 幀的頭部。

IP 地址和 MAC 地址的關係

IP 地址是看不見摸不着的,位於網絡的 "雲" 中,是一種邏輯概念。

要想理解這種抽象概念,最熟悉的例子莫過於我們在操作電腦的時候,鼠標點一點畫面就會變化,而其中的底層實現對我們用戶來說是完全不感知的,這種抽象就非常有用。

路由器等網絡連接設備的每個接口都有不同的 IP 和 MAC 地址,比如下圖中的 "土" 字形。

IP 數據報傳輸過程有幾個關於地址的誤區,需要澄清下:

1)IP 數據報的源地址和目的地址在傳播過程中是不變的,而 MAC 幀頭部的源 MAC 地址和目的 MAC 地址則是變化的;

2)IP 數據報中的源地址作用不大,路由器是根據目的地址做路由轉發的;

3)IP 數據報傳輸過程中,從底層 MAC 幀到上層 IP 數據報會 “脫衣服”(剝離 MAC 頭部和尾部),而從上到下則是在 “穿衣服”。

既然在底層鏈路上是使用硬件地址尋找目的主機的,那爲什麼還要有抽象的 IP 地址呢?如果沒有 IP 地址,也就不需要下面的 ARP,網絡通信 "似乎" 更簡單了。

其實,由於全世界存在各種各樣的網絡,它們可能使用不同的硬件地址,這些異構網絡之間的通信就得解決複雜的硬件地址轉換工作。而這些工作都是由主機自行完成的,要知道,MAC 幀到達每個節點的 MAC 地址都會變化,因此硬件地址的轉換工作可能會非常麻煩。

而使用抽象的 IP 地址,互聯網上的主機便只需要擁有一個唯一的 IP 地址,主機與主機是平等的,就像在一個大網絡中一樣,它們之間通信的地址也會變得簡單。具體的 IP 到 MAC 地址的轉換在通信中對上層是不感知的,使得上層應用能更專注於通信內容本身,而非地址的轉換。

ARP(地址解析協議)

ARP 協議看起來很像一個函數,輸入爲 IP 地址,輸出爲硬件地址。

**ARP 的原理在於維護一張 IP 地址到硬件地址的映射表,而且這張表還得動態更新。**而這張表就放在每臺主機的 ARP 高速緩存中。

IPv4 數據報格式

上面講了 IP 數據報會攜帶地址和數據等信息,用於在網絡中傳輸數據,那麼對它的格式就有必要仔細瞭解。其中有個字段很有意思:生存時間。它給出了 IP 數據報在互聯網中所能經過的最大路由器數,可防止 IP 數據報在互聯網中無限制地兜圈子。

聊完了 IP 數據報的格式,就到了它如何傳輸的問題了。這一過程由網絡層和數據鏈路層共同負責,下面會深入淺出的介紹。

IP 層轉發數據報的過程

IP 數據報的分組轉發特別像我們平時的問路!假設你人在國際大都市,剛下機場,想去大學城中著名的國際語言大學,但是手機沒電了,用不了地圖,只能問路人們。每到一個街頭,你都得找一個路人問接下來怎麼走,這裏的 "你" 就是 IP 數據報,路人就是一個個的路由器

國際大都市自然有各個國家的人,你遇到的第一位是英國女郎,她先用肢體語言向你比劃方向,然後在紙上用英語寫下這句話:“往前直走一百米往右轉,你將會看到一家超市”,你跟着她的指示到達超市門口後;

遇到第二位路人,是位日本高中生,她先用肢體語言向你比劃方向,然後在紙上用日語寫下這句話:“往前直走三百米,向左轉,你將會看到一家日料店”;

到了日料店,遇到了第三位路人,是位法國模特,她先用肢體語言向你比劃方向,然後在紙上用法語寫下這句話:“往前走五百米,遇到紅綠燈後往右轉,繼續走五百米,你將會看到一家 LV 專櫃店”;

到了 LV 線下店,遇到了第四位路人,是位阿拉伯婦女,她先用肢體語言向你比劃方向,然後在紙上用阿拉伯語寫下這句話:“往前走七百米,然後左轉,遇到一個岔路口再往右轉,你將看到一家希爾頓酒店”;

到了希爾頓酒店,遇到了最後一位路人,是位中國小姐姐,她說已經到國際語言大學不遠了,於是邊比劃邊帶你走到國際語言大學的門口。

於是在國際友人的幫助下,你成功到達了國際語言大學。在這個例子中,國際友人用肢體比劃的下一個地點就是 IP 地址(抽象),而寫在紙上的地址就是 MAC 地址(硬件地址)。可以看出,互不相通的 MAC 地址非常難以交流,得通過翻譯軟件纔行;而跟語言無關的 IP 地址,可以通過肢體語言比劃比劃,交流起來會更方便。

問路的例子中,我們可以發現,互聯網中的分組轉發,強調的是 IP 數據報從一個路由器轉發到下一個路由器。因此,我們並不關心某個網絡的具體拓撲,也不關心網絡內的任何主機。

我們前面講到,在 IP 數據報傳輸過程中,源 IP 地址和目的 IP 地址是不變的,而且 IP 數據報的首部也沒有下一跳路由器的 IP 地址,那待轉發的數據報是如何知道下一跳路由器的呢?答案是目的網絡地址

知識儲備:

爲了減小路由表所佔用的空間,同時爲了減小搜索路由表所用的時間,路由表的格式採用:(目的網絡地址,下一跳 IP 地址)。而目的網絡地址是唯一不變的,可以從目的 IP 地址中全網唯一的網絡號看出來!

當路由器收到一個待轉發的數據報時,在從路由表中查出下一跳路由器的 IP 地址後,不是將下一跳地址填入 IP 數據報(也沒有這個字段),而是將其下沉到數據鏈路層的網絡接口軟件,後者通過 ARP 協議將下一跳 IP 地址轉爲下一跳 MAC 地址,並將此目的 MAC 地址塞進 MAC 幀的首部。然後根據這個硬件地址找到下一跳路由器,完成 IP 數據報的分組轉發。

上面問路的例子中,每個路由器的路由表如下。值得注意的是最後一個路由器的路由表,不是(目的網絡地址,下一跳 IP 地址),而是(目的網絡地址,直接交付)。因爲最後一個路由器並不需要轉發給其它路由器,只需要將 IP 數據報直接交付給目的網絡的目的主機即可,就像中國小姐姐(最後一個路由器)會直接帶你(IP 數據報)到國際語言大學的門口(目的主機)一樣。

在實際使用中,直接交付會被記作 0.0.0.0,即**(目的網絡地址,0.0.0.0)**。

因此,在 IP 數據報分組轉發的過程中,查找路由表、使用 ARP 得到 MAC 地址、將 MAC 地址寫入 MAC 幀的首部這三個操作會重複執行,直至分組轉發到目的主機。對應的路由算法也早被計算機科學家寫出來了。

這裏有兩個容易誤解的問題:

1)在從路由表查出下一跳路由器 IP 地址後,不寫入 IP 數據報的原因是:**爲了保持目的網絡地址的不變。**因此每到一個路由器,都能根據不變的目的網絡地址,找到下一跳的 IP 地址。

2)而在路由表中不採用下一跳 MAC 地址的原因是:使用了抽象的 IP 地址,屏蔽了底層網絡的複雜性,便於分析和研究問題,在分組轉發上也會更簡單。

IPv6 組成與表示

早在 1990 年,人們就意識到 IPv4 資源將在不久的將來耗盡,ITEF 也開始着手規劃 IPv6,且於 1998 年開始推廣。但由於早期的路由器、防火牆、企業的企業資源計劃系統等相關應用程序都依賴於 IPv4,因此目前仍以雙架構並存居多。

IPv6 與 IPv4 的最大區別是採用了 128 位的地址,從而擁有比 IPv4 大得多的編碼地址空間,這個天文數字在可預期的未來是不會用盡的。

由於地址空間實在太大,IPv6 也不再依賴 網絡地址轉換(NAT),也沒有分類 IP 的說法,但仍舊保留了目前流行的 CIDR(無類別域間路由)。

在表現形式上,IPv6 地址由兩個邏輯部分組成:一個 64 位的網絡號和一個 64 位的主機號。主機號通常由物理地址(MAC 地址)自動生成,稱爲 EUI-64

爲了方便表示 128 位的 IPv6,通常將其每 16 位拆分爲一組,並以十六進制表示。即冒號十六進制計法

上圖是一個 IPv6 地址的轉換圖,值得注意的是,IPv6 允許用雙冒號:: 表示一組 0 或多組連續的 0,但只能出現一次。因此 fe80:0000:0000:0000:74f9:1af5:79ca:ea98 可以表示爲 fe80::74f9:1af5:79ca:ea98。

後面的 %14 稱爲區域 ID,用於標識節點連接到哪個區域。

IPv6 地址分爲幾種?

IPv6 地址可分爲三種:單播地址任播地址多播地址。每種地址都有對應的格式。

單播地址:單播地址表示特定的某個目標地址,從而在來源和目的地間直接進行通信,屬於一對一通信。單播地址包括可聚類的全球單播地址鏈路本地地址等。其中,鏈路本地地址的 IPv6 格式爲:fe80:: 主機號 / 10。

任播地址:任播會有一組接收節點的地址列表,但指定爲任播的數據包,只會發送給距離最近或發送成本最低(根據路由表來判斷)的其中一個接收地址。

當該接收地址收到數據包並進行迴應,且加入後續的傳輸。該接收列表的其他節點,會知道某個節點地址已經迴應了,它們就不再加入後續的傳輸作業。

多播地址:多播就是羣發,其 IPv6 地址的前綴是 ff00。請求端在數據包中指定一個多播目標地址列表,通過路由器發給每個節點地址。

注意多播和廣播的差別:多播是發給目標地址列表的所有節點,而廣播是發給所有的節點。

IPv6 數據包

我們知道,IPv4 的數據單元被稱爲數據報,而 IPv6 的數據單元被稱爲分組,不過它們之間經常可以混用。IP 數據報在整個 OSI 分層結構中的位置如下圖所示,可以看出不同層次的消息間關係。

IPv6 數據報由兩大部分組成:基本首部 + 有效載荷。有效載荷又分爲擴展首部 + 數據部分。可以看出基本結構和 IPv4 差別不大。

IPv4 和 IPv6 地址分配的區別?

IPv4 和 IPv6 的地址分配稍有不同,IPv4 可以通過靜態分配動態分配方式獲取 IP 地址;而 IPv6 主要通過**無狀態地址自動配置(SLAAC)**獲取 IP 地址。

IPv4

IPv4 的靜態分配時通過主機硬件 / 軟件的配置永久分配給主機的;動態分配是通過網絡使用 **DHCP(動態主機配置協議)**分配的,在現代的臺式計算機操作系統中,默認情況下會啓用動態 IP 地址分配。

對於動態分配的方式,**計算機在連接網絡之前是沒有 IP 地址的,只有接通網絡的那一瞬間,IP 地址纔會被分配給當前節點主機。**比如我本地斷開網絡連接後,用 ipconfig 顯示都是斷開連接。

DHCP 分配的地址是有租期的,如果主機在到期前未能續訂租約,當前的 IP 地址將被分配給其它主機。某些 DHCP 實現會在主機每次加入網絡時根據其 MAC 地址嘗試將相同的 IP 地址重新分配給該主機。網絡管理員可以通過基於 MAC 地址分配特定的 IP 地址來配置 DHCP。

IPv6

IPv6 的主機連接到 IPv6 網絡上時,可以使用鄰居發現協議對自身自動配置。這個過程稱爲 無狀態地址自動配置(SLAAC)

在不適合使用 SLAAC 的場景下,網絡可以使用有狀態配置(DHCPv6),或者使用靜態方法手動配置

IPv4 到 IPv6 的過渡方案有哪些?

要知道 IPv4 網絡的規模相當大,不可能一夜之間將互聯網的地址全部更改爲 IPv6,只能通過一種逐步演進的方式。同時,新安裝的 IPv6 網絡必須能夠向前兼容,能夠識別和轉發 IPv4 數據報。目前廣泛使用的兩種過渡方案爲:雙協議棧、隧道技術

雙協議棧

雙協議棧的原理是,某些主機(包括路由器)同時具備 IPv4 和 IPv6 地址,在與 IPv6 目的主機通信時採用 IPv6 地址,而在與 IPv4 目的地址通信時則採用 IPv4 地址。這裏有個問題,雙協議棧的主機如何知道目的主機採用哪一種地址?答案是域名系統 DNS。當 DNS 給雙協議棧源主機的返回爲 IPv6 地址時,雙協議棧源主機就使用 IPv6 地址,反之亦然。

在 IPv4 和 IPv6 的轉換中,會存在 IPv6 部分首部無法丟失的問題,並且不可避免。

如下圖所示,路由器 B 不能向 C 轉發 IPv6 數據報,因爲 C 採用的是 IPv4 協議。因此,路由器 B 會將 IPv6 數據報首部地址轉爲 IPv4 首部地址後,發送給 C。

同理,當 IPv4 數據報途徑 D 到達 E 時,路由器 E 通過域名系統查到下一個節點採用 IPv6 協議,不能將 IPv4 數據報發送它。因此 E 將 IPv6 數據報首部地址轉爲 IPv4 地址後發送給 IPv6 主機 F。在 IPv6->IPv4->IPv6 的過程中,數據報的首部有部分字段會缺失,這是雙協議棧的缺點之一。

隧道技術

隧道技術的原理比較形象,它是在 IPv6 數據報進入 IPv4 網絡前,將 IPv6 數據報包裝爲 IPv4 數據報。這樣,IPv6 數據報就成爲 IPv4 數據報的數據部分了。

這種裹挾了 IPv6 數據報的 IPv4 數據報(很繞口)在 IPv4 網絡中暢通無阻。直到離開 IPv4 網絡後,再將 IPv4 數據報的外衣剝離,露出內部的 IPv6 數據報。下面是隧道技術的原理圖,其中的 “隧道” 箭頭就很明顯。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ezQd4aGkGffrBKM2OqEs5g