網絡協議補完計劃--IPv6

目錄

  • 前言
  • IPV6概述
  • IPV4的不足和缺點
    • IP地址空間危機
    • IP地址性能問題
    • IP安全性問題
    • 配置問題
    • NAT技術存在侷限
  • IPV6對IPV4的改進
    • 擴展地址
    • 取消了廣播地址
    • 簡化的包頭
    • 多擴展和選項支持的改進
    • 流標記
    • 身份驗證和保密
  • IPv6數據包結構
    • 分片
    • 擴展頭
  • IPv6的尋址
  • IPv6的安全性

前言

主要參照清華大學出版社-羅軍周主編的《TCP/IP協議及網絡編程技術》的結構進行學習。
本篇主要參考第十五章:《IPV6》


IPV6概述

儘管IPV4非常成功與強壯、但在互聯網飛速發展的當下已經顯露出很多不足。
IPV6應運而生:更多的地址、更安全的傳輸。


IPV4的不足和缺點

1.地址空間的侷限性
IP地址空間的危機由來已久、是升級的主要動力。
2. 性能
儘管IPV4表現不錯。但一些70年代的設計還能夠及進一步改進。
3.安全性
安全性一直以來都被網絡層之上的層負責、但IPV6已經可以發揮作用。
4.配置
IPV4的配置一直比較複雜。

  • IP地址空間危機

IPV4地址共有32位、總計40多億個。
但導致IP地址耗盡的主要原因不在於IP地址的長度、而在於IP地址的結構、也就是分爲網路號和主機號(一個C類地址有256個地址、但可能只連了幾臺主機)。
但如果不使用這種結構、雖然可以使地址的利用率更加高效、但也將導致很多網絡功能不可行(比如根據網絡號進行路由)。
儘管人們採用了子網掩碼和無域間路由等技術減少了地址的消耗、但並沒有從根本上解決問題。

還有一個原因是由於TCP/IP協議誕生之初、通訊協議百家爭鳴。沒有人會想到如今使用IP地址的人有如此之多。
在起初的IP分配上、也出現了很大程度的浪費、很多A類地址被分配給了一些機構和公司
17.0.0.0/8:蘋果
18.0.0.0/8:MIT
19.0.0.0/8:福特汽車

而一個A類地址、就可以佔有一千六百多萬個實體IP。
反觀很多國家、全國都沒有一個完整的A類地址段。
我國的也一樣、雖然有A類地址但是隻是一整段中的一小部分。
教育網也僅僅擁有一些B類地址而已。

具體可以參閱《到底誰霸佔了A類的IP地址》

————————

  • IP地址性能問題

IPV4已經可以異種網絡間進行數據的可靠、高效和健壯的傳輸提供最佳的機制。
而在當下、IPV6主要考慮最大傳輸單元最大包長IP頭部設計校驗和的使用IP選項的應用等改進。

————————

  • IP安全性問題

當初IPV4的側重點是科研機構、安全性並不是一個主要的課題。
而現在、網絡安全越來越被人們所重視。

————————

  • 配置問題

IP協議早起、絕大部分使用IP協議接入internet的計算機都是大型計算機、他們與internet的鏈接基本是靜態的。而且使用計算機的人員都是專業研究院、現在看來接入程序則要複雜很多。
即使使用DHCP來動態配置、但主機仍然依賴與到網絡的單點連接。

————————

  • NAT技術存在侷限

這個我感覺是最重要的問題、因爲NAT在很大程度上堪稱神技了、畢竟讓IPV4的地址多活了十幾年。

雖然NAT技術可以很大程度上的緩解IP地址匱乏的問題、但終究存在缺陷。
比如無法由外部進行訪問(雖然可以通過靜態彌補但很複雜)、端口號搶佔(被NAT的多個服務器需要使用公網80端口)。

所以總是有人需要使用實體的公網IP、雖然慢但總會耗盡。

更多可以查閱《知乎》《NAT無法取代遷移到IPv6的必要性》


IPV6對IPV4的改進

  • 擴展地址

IPv6的地址結構中除了把32位地址空間擴展到128位、一共將會有2^128≈340萬億個地址、有人很形象的舉例說可以把地球上的每粒沙子都分配一個IP地址(不過25年過去了、地球上的沙子也沒有來申請IP地址)。

  • 取消了廣播地址

以任意點播地址代替。但IPv4中用於指定一個網絡接口的單播地址和用於指定一個或多個主機的多播地址基本不變。

  • 簡化的包頭

IPv4則包含12個字段、長度在無選項時爲20字節、最高可達60個字節。

  1. IPv6包含8個字段。
  2. 使用固定格式的包頭減少了需要檢查和處理的字段數量、提高了路由效率。
  3. 包頭長度統一、不需要包頭長度這個字段
  4. 去掉了校驗和、將其交由上層協議負責。
  • 多擴展和選項支持的改進

IPv4的擴展放在包頭尾部。
IPv6則將選項放在單獨的擴展頭中、只有在有必要時纔會檢查和處理。

  • 流標記

IPv4中對所有的IP數據包都同等對待。
IPv6中加入了流標記的概念。流指從特定源地址特地目的地址的包序列、源點希望中間的路由器對這些包進行特殊處理。

  • 身份驗證和保密

最初的IP協議是沒有任何的安全措施的。IP數據報含有諸如源地址,目的地址,版本,長度,生存週期,承載協議,承載數據等字段。雖然其擁有“首部校驗和”這樣的字段來提供極其簡易的完整性功能,但無力抗拒對數據的意外或者故意修改,也無法阻止信息的泄露等問題。

IPv6使用兩種安全性擴展:

  1. IP身份驗證頭(AH)
    (1). 數據完整性驗證,通過使用Hash函數(如MD5)產生的驗證碼來實現;
    (2). 數據完整性時加入一個共享的會話密鑰來實現;
    (3). 防重放攻擊,在AH報頭中加入序列號可以防止重放攻擊。
  2. 數據加密(ESP)

發送方計算數據包摘要並將其放入AH頭中、接收方對數據包摘要進行重新計算並與AH對比。

ESP則可以對某些數據進行加密。
也可以加密整個數據包後以隧道方式傳輸。
隧道傳輸意味着在對整個IP數據包進行加密後、並由一個安全網關系統將其封裝在另一個數據包中向另一個安全網關進行傳輸,這樣加密的IP包中所有數據都被隱藏起來。


IPv6數據包結構

先貼一個IPv4的數據包做對比

然後是IPv6的

  1. 版本
    4位。IPv6填6。主要爲了與IPv4兼容。

  2. 通信量等級
    8位。表示數據包所屬類別、路由器會根據不同的類別給予不同的服務。允許源路由器以及中間路由器在包上加上標記。
    一般可以根據鏈路的開銷、帶寬、延遲等進行特殊處理。

  3. 流標記
    20位。用於標識屬於同一業務流的數據包。
    IPv4中數據包的傳輸默認是根據兩個IP地址進行尋路、有可能前後兩個包的傳輸路徑會不同、原因則是每次都會進行重新尋路。
    IPv6中同一個流標記的數據包只要第一個進行尋路、後面的數據包就可以跟隨其進行傳輸。

  4. 有效負荷長度
    16位。包頭+數據區+擴展頭。

  5. 下一報頭
    8位。類似IPv4的協議字段、可以用來指明上層協議。
    也可以指明該IPv6數據包是否有擴展頭的存在。

  6. 跳限制
    8位。類似IPv4中的TTL字段。但並不代表時間含義、對數據包超時的判斷交由上層協議完成。

  7. 源地址
    128位

  8. 目的地址
    128位

  • 分片

IPv4中採用的是逐跳分片的方式、當物理鏈路的MTU過小是纔會分片、最後在目的地址重組。過程中存在着一些問題:

  1. 丟失一個分片就需要整包重傳。
  2. 在傳輸過程中的分片越來越多。
  3. 對數據包的分片消耗了沿途以及目的路由器的時間。
  4. 沿途處理IP數據包的標識、分片偏移等信息都會代理額外的開銷。

IPv6的分片只能由源節點和目的節點進行

  1. 路徑MTU發現
    源路由器可以向目的路由器發送一個數據包來報告該路由器上鍊路的MTU值。如果包到達了一個必須對其分片的鏈路、則通過CIMP協議回送。這種過程可以重複、知道確定路徑的最小MTU爲止。
  2. 要求所有支持IP的鏈路必須能夠處理一些合理的最小長度數據包。
    如果一個鏈路最小的MTU爲20、那麼所有節點都必須準備生產可觀數量的分片包。

通過將最小MTU設置爲允許包長的最小值、可以消滅分片。

  • 擴展頭

  1. 逐跳選項頭
    此擴展頭必須緊隨在IPv6頭之後。
    包含路徑上每個節點必須檢查的數據、由每個轉發路由器進行檢查。
  2. 路由頭
    指明中途需要經過哪些節點。
  3. 分段頭
    一個分段的偏移值、一個“更多段”標誌和一個標識符字段。
  4. 目的地選項頭
    代替IPv4選項字段、需要爲64位的整數倍
  5. 身份驗證(AH)頭
    對IPV6頭、擴展頭和數據的某些部分進行加密的校驗和的計算。
  6. 封裝安全性數據(ESP)頭
    本身不加密、指明剩餘的數據已經加密。併爲已獲得授權的目的節點提供解密信息。

IPv6的尋址

  • 基本表示

將128位二進制地址表示成8段、每段4位16進制整數(IPv4爲3位8禁止整數)。
例如1080:0000:0000:0000:0008:0800:200C:417A、不過也可以簡化成1080:0:0:0:8:800:200C:417A
在混合使用的情況下、可以用最低的32位表示IPv4地址:
0:0:0:0:0:0:192.168.1.1、當然也同樣可以寫作::192.168.1.1

關於子網掩碼:1080:0000:0000:0000:0008:0800:200C:417A/60則表示網絡號爲前60位。

  • 地址類型

  1. 單播地址(Unicast)用於單個接口的標識符,發送到此地址的數據包被傳遞給標識的接口。通過高序位八位字節的值來將單播地址與多路廣播地址區分開來,多路廣播地址的高序列八位字節具有十六進制值 FF,此八位字節的任何其他值都標識單播地址。

  2. 任播地址(Anycast)也叫泛播地址,一組接口的標識符(通常屬於不同的節點),發送到此地址的數據包被傳遞給該地址標識的所有接口(根據路由走最近的路線)、並由裏源主機最近的一個負責響應。任播地址類型代替 IPv4廣播地址

泛播地址被分配在正常的IPv6單播地址空間以外。因爲泛播地址在形式上與單播地址無法區分開,一個泛播地址的每個成員,必須顯式地加以配置,以便識別泛播地址。

  1. 組播地址(Multicast)
    IPv6中的組播在功能上與IPv4中的組播類似,表現爲一組接口對看到的流量都很感興趣。

IPv6多播地址有 1111 1111 的格式前綴。IPv6 地址很容易區分爲多播地址,因爲它總是以 FF 開始。多播地址不能被用作源地址。
具體可以參考《IPv6多播地址基礎知識》

  • 一些常見的IPv6地址或者前綴

:/128 即0:0:0:0:0:0:0:0,只能作爲尚未獲得正式地址的主機的源地址,不能作爲目的地址,不能分配給真實的網絡接口

::1/128 即0:0:0:0:0:0:0:1,迴環地址,相當於ipv4中的localhost(127.0.0.1),ping locahost可得到此地址
2001::/16 全球可聚合地址,由 IANA 按地域和ISP進行分配,是最常用的IPv6地址
2002::/16 6 to 4 地址,用於6to4自動構造隧道技術的地址
3ffe::/16 早期開始的IPv6 6bone試驗網地址
注:上面三類屬於單播地址,都是目前互聯網上廣泛應用的IPv6地址
fe80::/10 本地鏈路地址,用於單一鏈路,適用於自動配置、鄰機發現等,路由器不轉發

ff00::/8 組播地址
::A.B.C.D 其中<A.B.C.D>代表ipv4地址,兼容IPv4的IPv6地址。自動將IPv6包以隧道方式在IPv4網絡中傳送的IPv4/IPv6節點將使用這些地址
::FFFF:A.B.C.D 其中<A.B.C.D>代表ipv4地址,例如 ::ffff:202.120.2.30 ,是IPv4映射過來的IPv6地址,它是在不支持IPv6的網上用於表示IPv4節點


IPv6的安全性

  • 總體來說有三個目標

  1. 身份驗證
    能夠可靠的確定收到的數據與發送的數據一致、並且確保發送該數據的實體與其所宣稱的身份一致。
  2. 完整性
    數據不被修改
  3. 機密性
    保證數據只能被預期的接受者讀取

IPv6的AH以及ESP頭部都有助於實現上述目標

  • AH爲源節點提供了在包上進行數字簽名的機制。
    AH之後的數據包都是文本格式、可能被攻擊者截取。但是在目的節點接收之後、可以使用AH包含的數據來進行身份驗證

  • ESP爲數據內容進行加密
    ESP之後所有的數據都進行了加密、ESP頭爲接收者提供了足夠的數據以對包的其餘部分進行解密。


參考資料

《到底誰霸佔了A類的IP地址》
《知乎》
《NAT無法取代遷移到IPv6的必要性》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章