1、IPv6基礎
IPv4與IPv6的對比:
問題 | IPv4的缺陷 | IPv6的優勢 |
地址空間 | IPv4地址采用32比特標識,能提供的地址數量是43億,分配很不均衡。針對IPv4的地址短缺問題,有幾種解決方案:無類別域間路由CIDR(Classless Inter-Domain Routing)和網絡地址轉換NAT(Network Address Translator)。 | IPv6地址采用128比特標識,理論上可以擁有(43億×43億×43億×43億)個地址。 |
報文格式 | IPv4報頭包含可選字段Options,內容涉及Security、Timestamp、Record route等,這些Options可以將IPv4報頭長度從20字節擴充到60字節。攜帶這些Options的IPv4報文對于性能是個很大的消耗 | IPv6和IPv4相比,去除了IHL、Identifier、Flag、Fragment Offset、Header Checksum、 Option、Padding域,只增加了流標簽域,更為簡化,提高了處理效率。為了更好支持各種選項處理,提出了擴展頭,新增選項時不必修改現有結構,理論上可以無限擴展,體現了優異的靈活性。 |
自動配置和重新編址 | IPv4的自動配置和重新編址機制主要依靠DHCP協議。 | IPv6協議內置支持通過地址自動配置方式使主機自動發現網絡并獲取IPv6地址,大大提高了內部網絡的可管理性。 |
路由聚合 | IPv4的分配規劃問題造成許多地址分配不連續,不能有效聚合路由。這一問題促使設備制造商不斷升級其產品,以提高路由尋址和轉發性能。 | 巨大的地址空間使得IPv6可以方便的進行層次化網絡部署。層次化的網絡結構可以方便的進行路由聚合,提高了路由轉發效率。 |
對端到端的安全的支持 | 固有的框架結構并不能支持端到端的安全。 | 網絡層支持IPSec的認證和加密,支持端到端的安全。 |
對QoS(Quality of Service)的支持 | QoS保障音視頻實時轉發。IPv4并沒有專門的手段對QoS進行支持。 | IPv6新增了流標記域,提供QoS保證。 |
對移動特性的支持 | 隨著Internet的發展,移動IPv4出現了一些問題,比如:三角路由,源地址過濾等。 | IPv6協議規定必須支持移動特性。和移動IPv4相比,移動IPv6使用鄰居發現功能可直接實現外地網絡的發現并得到轉交地址,而不必使用外地代理。同時,利用路由擴展頭和目的地址擴展頭移動節點和對等節點之間可以直接通信,解決了移動IPv4的三角路由、源地址過濾問題,移動通信處理效率更高且對應用層透明。 |
IPv6地址結構:
????????IPv6地址總長度為128比特,通常分為8組,每組為4個十六進制數的形式,每組十六進制數間用冒號分隔。
一個IPv6地址可以分為如下兩部分:
網絡前綴:n比特,相當于IPv4地址中的網絡ID
接口標識:128-n比特,相當于IPv4地址中的主機ID
對于IPv6單播地址來說,如果地址的前三bit不是000,則接口標識必須為64位;如果地址的前三位是000,則沒有此限制。
????????接口標識可通過三種方法生成:手工配置、系統通過軟件自動生成或IEEE EUI-64規范生成。其中,EUI-64規范自動生成最為常用。
FC00:0000:130F:0000:0000:09C0:876A:130B
壓縮格式:
每組中的前導“0”都可以省略,所以上述地址可寫為:FC00:0:130F:0:0:9C0:876A:130B。
地址中包含的連續兩個或多個均為0的組,可以用雙冒號“::”來代替,所以上述地址又可以進一步簡寫為:FC00:0:130F::9C0:876A:130B。
在一個IPv6地址中只能使用一次雙冒號“::”,否則當計算機將壓縮后的地址恢復成128位時,無法確定每個“::”代表0的個數。
IPv6地址分類:
????????IPv6地址分為單播地址、任播地址(Anycast Address)、組播地址三種類型。和IPv4相比,取消了廣播地址類型,以更豐富的組播地址代替,同時增加了任播地址類型。
1、單播地址:
IPv6單播地址標識了一個接口,由于每個接口屬于一個節點,因此每個節點的任何接口上的單播地址都可以標識這個節點。發往單播地址的報文,由此地址標識的接口接收。
常用的單播地址有:未指定地址、環回地址、全球單播地址、鏈路本地地址、唯一本地地址ULA(Unique Local Address)。
? ? ? ? 1、未指定地址
????????IPv6中的未指定地址即 0:0:0:0:0:0:0:0/128 或者::/128。表示某個接口或者節點還沒有IP地址,源IP地址是::的報文不會被路由設備轉發。
? ? ? ? 2、環回地址
????????IPv6中的環回地址即 0:0:0:0:0:0:0:1/128 或者::1/128。環回與IPv4中的127.0.0.1作用相同,主要用于設備給自己發送報文。該地址通常用來作為一個虛接口的地址(如Loopback接口)。
? ? ? ? 3、全球單播地址
????????全球單播地址是帶有全球單播前綴的IPv6地址,其作用類似于IPv4中的公網地址。這種類型的地址允許路由前綴的聚合,從而限制了全球路由表項的數量。
????????全球單播地址由全球路由前綴(Global routing prefix)、子網ID(Subnet ID)和接口標識(Interface ID)組成。
全球路由前綴:由提供商(Provider)指定給一個組織機構,通常全球路由前綴至少為48位。目前已經分配的全球路由前綴的前3bit均為001。
Subnet ID:子網ID。組織機構可以用子網ID來構建本地網絡(Site)。子網ID通常最多分配到第64位。子網ID和IPv4中的子網號作用相似。
Interface ID:接口標識。用來標識一個設備(Host)。
? ? ? ? 4、鏈路本地地址:
????????鏈路本地地址是IPv6中的應用范圍受限制的地址類型,只能在連接到同一本地鏈路的節點之間使用。它使用了特定的本地鏈路前綴FE80::/10(最高10位值為1111111010),同時將接口標識添加在后面作為地址的低64比特。
????????當一個節點啟動IPv6協議棧時,啟動時節點的每個接口會自動配置一個鏈路本地地址(固定前綴+接口標識)。這種機制使得兩個連接到同一鏈路的IPv6節點不需要做任何配置就可以通信。所以鏈路本地地址廣泛應用于鄰居發現,無狀態地址配置。
以鏈路本地地址為源地址或目的地址的IPv6報文不會被路由設備轉發到其他鏈路。
? ? ? ? 5、唯一本地地址:
????????唯一本地地址是另一種應用范圍受限的地址,它僅能在一個站點內使用。由于本地站點地址的廢除,唯一本地地址被用來代替本地站點地址。
????????唯一本地地址的作用類似于IPv4中的私網地址,任何沒有申請到提供商分配的全球單播地址的組織機構都可以使用唯一本地地址。固定前綴為FC00::/7。
L:L標志位;值為1代表該地址為在本地網絡范圍內使用的地址;值為0被保留,用于以后擴展。
Global ID:全球唯一前綴;通過偽隨機方式產生。
Subnet ID:子網ID;劃分子網使用。
Interface ID:接口標識。
唯一本地地址具有如下特點:
具有全球唯一的前綴(雖然隨機方式產生,但是沖突概率很低)。
可以進行網絡之間的私有連接,而不必擔心地址沖突等問題。
具有知名前綴(FC00::/7),方便邊緣設備進行路由過濾。
如果出現路由泄漏,該地址不會和其他地址沖突,不會造成Internet路由沖突。
應用中,上層應用程序將這些地址看作全球單播地址對待。
獨立于互聯網服務提供商ISP(Internet Service Provider)。
2、組播地址:
????????IPv6的組播與IPv4相同,用來標識一組接口,一般這些接口屬于不同的節點。一個節點可能屬于0到多個組播組。發往組播地址的報文被組播地址標識的所有接口接收。例如組播地址FF02::1表示鏈路本地范圍的所有節點,組播地址FF02::2表示鏈路本地范圍的所有路由器。
????????組播地址由前綴,標志(Flag)字段、范圍(Scope)字段以及組播組ID(Global ID)4個部分組成
被請求節點組播地址:
????????當一個節點具有了單播或任播地址,就會對應生成一個被請求節點組播地址,并且加入這個組播組。一個單播地址或任播地址對應一個被請求節點組播地址。主要用于鄰居發現機制和地址重復檢測功能。
????????IPv6中沒有廣播地址,也不使用ARP。但是仍然需要從IP地址解析到MAC地址的功能。在IPv6中,這個功能通過鄰居請求NS(Neighbor Solicitation)報文完成。當一個節點需要解析某個IPv6地址對應的MAC地址時,會發送NS報文,該報文的目的IP就是需要解析的IPv6地址對應的被請求節點組播地址;只有具有該組播地址的節點會檢查處理。
????????被請求節點組播地址由前綴FF02::1:FF00:0/104和單播地址的最后24位組成。
3、任播地址:
????????任播地址標識一組網絡接口(通常屬于不同的節點)。目標地址是任播地址的數據包將發送給其中路由意義上最近的一個網絡接口。
????????任播地址設計用來在給多個主機或者節點提供相同服務時提供冗余功能和負載分擔功能。目前,任播地址的使用通過共享單播地址方式來完成。將一個單播地址分配給多個節點或者主機,這樣在網絡中如果存在多條該地址路由,當發送者發送以任播地址為目的IP的數據報文時,發送者無法控制哪臺設備能夠收到,這取決于整個網絡中路由協議計算的結果。這種方式可以適用于一些無狀態的應用,例如DNS等。
????????IPv6中沒有為任播規定單獨的地址空間,任播地址和單播地址使用相同的地址空間。目前IPv6中任播主要應用于移動IPv6。
IPv6任播地址僅可以被分配給路由設備,不能應用于主機,不能作為源地址。
IPv6報文格式:
IPv6報文由IPv6基本報頭、IPv6擴展報頭以及上層協議數據單元三部分組成。
上層協議數據單元一般由上層協議報頭和有效載荷構成,有效載荷可以是ICMPv6報文、TCP報文或UDP報文。
Version:版本號,長度為4bit。對于IPv6,該值為6。
Traffic Class:流類別,長度為8bit。等同于IPv4中的TOS字段,表示IPv6數據報的類或優先級,主要應用于QoS。
Flow Label:流標簽,長度為20bit。IPv6中的新增字段,用于區分實時流量,不同的流標簽+源地址可以唯一確定一條數據流,中間網絡設備可以根據這些信息更加高效率的區分數據流。
Payload Length:有效載荷長度,長度為16bit。有效載荷是指緊跟IPv6報頭的數據報的其它部分(即擴展報頭和上層協議數據單元)。該字段只能表示最大長度為65535字節的有效載荷。如果有效載荷的長度超過這個值,該字段會置0,而有效載荷的長度用逐跳選項擴展報頭中的超大有效載荷選項來表示。
Next Header:下一個報頭,長度為8bit。該字段定義緊跟在IPv6報頭后面的第一個擴展報頭(如果存在)的類型,或者上層協議數據單元中的協議類型。
Hop Limit:跳數限制,長度為8bit。該字段類似于IPv4中的Time to Live字段,它定義了IP數據報所能經過的最大跳數。每經過一個設備,該數值減去1,當該字段的值為0時,數據報將被丟棄。
Source Address:源地址,長度為128bit。表示發送方的地址。
Destination Address:目的地址,長度為128bit。表示接收方的地址。
ICMPv6:
ICMPv6(Internet Control Message Protocol for the IPv6)是IPv6的基礎協議之一。
????????在IPv4中,Internet控制報文協議ICMP(Internet Control Message Protocol)向源節點報告關于向目的地傳輸IP數據包過程中的錯誤和信息。它為診斷、信息和管理目的定義了一些消息,如:目的不可達、數據包超長、超時、回應請求和回應應答等。在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,還是其它一些功能的基礎,如鄰接點發現、無狀態地址配置(包括重復地址檢測)、PMTU發現等。
????????ICMPv6的協議類型號(即IPv6報文中的Next Header字段的值)為58。
Type:表明消息的類型,0至127表示差錯報文類型,128至255表示消息報文類型。
Code:表示此消息類型細分的類型。
Checksum:表示ICMPv6報文的校驗和。
Path MTU:
????????在IPv4中,報文如果過大,必須要分片進行發送,所以在每個節點發送報文之前,設備都會根據發送接口的最大傳輸單元MTU(Maximum Transmission Unit)來對報文進行分片。但是在IPv6中,為了減少中間轉發設備的處理壓力,中間轉發設備不對IPv6報文進行分片,報文的分片將在源節點進行。當中間轉發設備的接口收到一個報文后,如果發現報文長度比轉發接口的MTU值大,則會將其丟棄;同時將轉發接口的MTU值通過ICMPv6報文的“Packet Too Big”消息發給源端主機,源端主機以該值重新發送IPv6報文,這樣帶來了額外流量開銷。PMTU發現協議可以動態發現整條傳輸路徑上各鏈路的MTU值,減少由于重傳帶來的額外流量開銷。
????????PMTU協議是通過ICMPv6的Packet Too Big報文來完成的。首先源節點假設PMTU就是其出接口的MTU,發出一個試探性的報文,當轉發路徑上存在一個小于當前假設的PMTU時,轉發設備就會向源節點發送Packet Too Big報文,并且攜帶自己的MTU值,此后源節點將PMTU的假設值更改為新收到的MTU值繼續發送報文。如此反復,直到報文到達目的地之后,源節點就能知道到達目的地的PMTU了。
????????由于IPv6要求鏈路層所支持的最小MTU為1280,所以PMTU的值必須大于1280。
2、ipv6過渡技術
雙棧技術
節點同時支持IPv4和IPv6協議棧。
IPv6 over IPv4隧道
過渡初期使用
通過隧道技術,使IPv6報文在IPv4網絡中傳輸。
手動隧道包括IPv6 over IPv4手動隧道和IPv6 over IPv4 GRE隧道。
自動隧道包括IPv4兼容IPv6自動隧道、6to4隧道和ISATAP隧道
IPv4 over IPv6隧道
過渡后期使用
通過隧道技術,使IPv4報文在IPv6網絡中傳輸
雙棧協議
????????雙棧協議指網絡中的節點同時支持IPv4和IPv6協議棧,源節點根據目的節點的不同選用不同的協議棧,而網絡設備根據報文的協議類型選擇不同的協議棧進行處理和轉發。雙棧可以在一個單一的設備上實現,也可以是一個雙棧骨干網。對于雙棧骨干網,其中的所有設備必須同時支持IPv4/IPv6協議棧,連接雙棧網絡的接口必須同時配置IPv4地址和IPv6地址。
單協議棧和雙協議棧結構示例如下:
雙協議棧具有以下特點:
多種鏈路協議支持雙協議棧
圖中的鏈路層是以太網,在以太網幀上,如果協議ID的值為0x0800,IPv4報文,如果為0x86DD,IPv6報文。
多種應用支持雙協議棧
多種應用(如DNS/FTP/Telnet等)支持雙協議棧。上層應用(如DNS)可以選用TCP或UDP作為傳輸層的協議,但優先選擇IPv6協議棧,而不是IPv4協議棧作為網絡層協議。
3、ipv6鄰居發現協議
????????鄰居發現協議NDP(Neighbor Discovery Protocol)是IPv6協議體系中一個重要的基礎協議。鄰居發現協議替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器發現(Router Discovery),它定義了使用ICMPv6報文實現地址解析,跟蹤鄰居狀態,重復地址檢測,路由器發現以及重定向等功能。
????????CDP(Cisco discovery protocol)思科發現協議
????????LLDP(link layer discovery protocol)
????????CEF(Cisco express forward)思科快速轉發
4、組播偵聽者發現協議MLD
????????組播偵聽者發現協議MLD(Multicast Listener Discovery)是負責IPv6組播成員管理的協議,用來在IPv6成員主機和與其直接相鄰的組播路由器之間建立和維護組播組成員關系。MLD通過在成員主機和組播路由器之間交互MLD報文實現組成員管理功能,MLD報文封裝在IPv6報文中。
目的:
????????出現于IPv4時代的組播技術,有效解決了單點發送、多點接收的問題,實現了網絡中點到多點的高效數據傳送,能夠大量節約網絡帶寬、降低網絡負載。在IPv6網絡中,組播技術的應用得到了進一步的豐富和加強。MLD可以理解為IGMP的IPv6版本,兩者的協議行為完全相同,區別僅僅在于報文格式。