1. 程式人生 > >IPv6 相關技術調研

IPv6 相關技術調研

最近,需要對系統進行 IPv6 化的改造,於是,我就假模假樣的做起了調研。

IPv6 的表示方法

IPv6 地址為 128 位長,但通常寫作 8 組,每組為四個十六進位制數的形式。例如:

2001:0db8:85a3:08d3:1319:8a2e:0370:7344

如果四個數字都是零,可以被省略。例如:

2001:0db8:85a3:0000:1319:8a2e:0370:7344

等價於

2001:0db8:85a3::1319:8a2e:0370:7344

在某些情況下,一個 IPv6 地址中問可能包含很長的一段 0,可以把連續的一段 0 壓縮為 ::

但為保證地址解析的唯一性,地址中 ::

只能出現一次,例如:

FF01:0:0:0:0:0:0:1101 → FF01::1101
0:0:0:0:0:0:0:1 → ::1
0:0:0:0:0:0:0:0 → ::

綜上:

2001:0DB8:0000:0000:0000:0000:1428:57ab
2001:0DB8:0000:0000:0000::1428:57ab
2001:0DB8:0:0:0:0:1428:57ab
2001:0DB8:0::0:1428:57ab
2001:0DB8::1428:57ab

都使合法的地址,並且他們是等價的。

不合法的:2001::25de::cade,零壓縮出現了兩次。

同時前導的零可以省略,因此:

2001:0DB8:02de::0e13 等價於 2001:DB8:2de::e13

IPv6 和 IPv4

由於 IPv4 到 IPv6 之間有一個漫長的過渡過程,因此,需要將 IPv6 相容 IPv4 或者 IPv6 對映為 IPv4。

相容 IPv4 的地址(IPv4-compatible address)

在相容情況下:如果 IPv4 表示為 X.X.X.X,那麼對應的 IPv6 即為 ::X.X.X.X高位補零,同時進行零壓縮);

這裡的 X.X.X.X 是 IPv4 公共地址的十進位制點號表示法,用於 IPv6/IPv4 節點們(同時支援)在使用僅支援 IPv4 的網路上用 IPv6 的協議進行通訊

但是事實證明這種技術不是個好主意,RFC4291中廢棄了對這類地址的使用,大家知道有這麼一回事就可以了。

IPv4 對映地址(IPv4-mapped address)

形如 ::FFFF:X.X.X.X

(33-128 位為 ::FFFF),這裡的 X.X.X.X 是 IPv4 公共地址的十進位制點號表示法,,用於 IPv6 地址表示 IPv4 地址。

主要用於某些場景下 IPv6 節點與 IPv4 節點通訊,Linux 核心對這類地址很好地支援。

如何 ping 一個 IPv6 的地址?

在 Linux 發行版中,使用 ping6 命令 ping IPv6 主機或者地址。

在瀏覽器中使用 IPv6 的地址訪問 web 資源,IPv6 的地址必須要使用中括號 [] 包起來。

fe80::6e92:bfff:fe04:663c

IPv6 的過渡技術

IPv4 升級到 IPv6 肯定不會是一蹴而就的,是需要經歷一個十分漫長的過渡階段,要數十年的時間都不為過。現階段,就出現了 IPv4 慢慢過渡到 IPv6 的技術。過渡技術要解決最重要的問題就是,如何利用現在大規模的 IPv4 網路進行 IPv6 的通訊。

要解決上面的問題,這裡主要介紹 3 種過渡技術:

1、雙棧技術
2、隧道技術
3、轉換技術(有一些文獻叫做翻譯技術)

本章節會對以上的過渡技術,選取幾個典型的、我們未來最有機會接觸到的具體的過渡技術結合實驗觀察過渡技術的具體實現和資料包的表現形式。

雙棧技術

通訊節點同時支援 IPv4 和 IPv6。

例如在同一個交換機下面有 2 個 Linux 的節點,2 個節點都是 IPv4/IPv6 雙棧,節點間原來使用 IPv4 上的 UDP 協議通訊傳輸,現在需要升級為 IPv6 上的 UDP 傳輸。

由於 2 個節點都支援 IPv6,那隻要修改應用程式為 IPv6 的 socket 通訊基本達到目的了。

上面的例子在區域網通訊的改造是很容易的。但在廣域網,問題就變得十分複雜了。

因為主要問題是在廣域網上的 2 個節點間往往經過多個路由器,按照雙棧技術的部署要求,之間的所有節點都要支援 IPv4/IPv6 雙棧,並且連線雙棧網路的介面必須同時配置 IPv4 公網 地址和 IPv6 地址,才能正常工作,這裡就無法解決I Pv4 公網地址匱乏的問題。

雙協議棧典型應用場景

雙協議棧典型應用場景

如圖所示,主機向 DNS 伺服器傳送 DNS 請求報文,請求域名 www.example.com 對應的 IP 地址。DNS 伺服器將回復該域名對應的 IP 地址。

該 IP 地址可能是 10.1.1.1 或 3ffe:yyyy::1。

主機系統傳送 A 類查詢,則向 DNS 伺服器請求對應的 IPv4 地址;系統傳送 AAAA 查詢,則向 DNS 伺服器請求對應的 IPv6 地址。

圖中 Router 支援雙協議棧功能。如果主機訪問 IPv4 地址為 10.1.1.1 的網路伺服器,則可以通過 Router 的 IPv4 協議棧訪問目標節點。如果主機訪問 IPv6 地址為 3ffe:yyyy::1 的網路伺服器,則可以通過 Router 的IPv6協議棧訪問目標節點。

因此,雙棧技術一般不會直接部署到網路中,而是配合其他過渡技術一起使用,例如在隧道技術中,在隧道的邊界路由器就是雙棧的,其他參與通訊的節點不要求是雙棧的。

隧道技術

當前的網路仍然是 IPv4 為主,因此儘可能地充分利用 IPv4 網路進行 IPv6 通訊是十分好的手段之一。隧道技術就是這樣子的一種過渡技術。

隧道將 IPv6 的資料報文封裝在 IPv4 的報文頭部後面(IPv6 的資料報文是 IPv4 的載荷部分),IPv6 通訊節點之間傳輸的 IPv6 資料包就可以穿越 IPv4 網路進行傳輸。

隧道技術的一個很重要的優點是透明性,通過隧道進行通訊的兩個 IPv6 節點(或者節點上的應用程式)幾乎感覺不到隧道的存在。

IPv6典型的隧道

根據隧道的出口入口的構成,隧道可以分為路由器-路由器,主機-路由器隧道、路由器-主機、主機-主機隧道等型別。

上圖是一種典型的隧道技術:路由器-路由器隧道,兩個 IPv6 網路中的主機通過隧道方式穿越了 IPv4 進行通訊。

其中 C 節點和 D 節點被稱為邊界路由器,邊界路由器必須要支援 IPv4-IPv6 雙棧。當 IPv6 網路 1 的主機 A 將 IPv6 資料包發給邊界路由器 C,C 對 IPv6 資料包進行 IPv4 封裝,然後在 IPv4 網路上進行傳輸,傳送到邊界路由器 D,D 收到 IPv4 的資料包後剝掉 IPv4 的包頭,還原 IPv6 的資料包,傳送到 IPv6 網路 2 的主機 B。

轉換技術

有一些文獻叫做:翻譯技術。

隧道技術是比較好地解決了在很長期一段時間內還是 IPv4 網路是主流的情況下 IPv6 節點(或者雙棧節點)間的通訊問題。但是由於 IPv4 到 IPv6 的過渡是十分漫長的,因此也需要解決 IPv6 節點與 IPv4 節點通訊的問題。協議轉換技術可以用來解決這個問題。

協議轉換技術根據協議在網路中位置的不同,分為網路層協議轉換、傳輸層協議轉換和應用層協議轉換等。

協議轉換技術的核心思路就是在 IPv4 和 IPv6 通訊節點之間部署中間層,將 IPv4 和 IPv6 相互對映轉換

我們非常熟悉的 NAT 也是一種典型的協議轉換技術,是將私網 IPv4 地址對映轉換為公網 IPv4 地址,這種轉換技術又稱為 NAT44。

參考:


公眾號提供CSDN資源免費下載服務!

你的關注是對我最大的鼓勵!

最近蒐集到傳智播客 2018 最新 Python 和 Java 教程!關注本公眾號,後臺回覆「2018」即可獲取下載地址