天天看點

iOS 網絡相關面試題(IPv6、從IPv4到IPv6的遷移)

由于新的子網和IP結點以驚人的增長率連到網際網路上,并被配置設定唯一的IP位址,32比特的IPv4位址空間即将用盡,為了解決這一問題,IPv6也應運而生。而事實上在20多年前,網際網路工程任務組就開始緻力于開發一種替代IPv4的協定,即IPv6

一、IPv6資料報格式

1、IPv6資料報格式

image

  • 版本(4比特)

    該字段用于辨別IP版本号,IPv6将該字段值設為6。而如果将該字段設為4并不能建立一個合法的IPv4資料報

  • 流量類型(8比特)

    類似于IPv4資料報中的服務類型(TOS)

  • 流标簽(20比特)

    流标簽字段是IPv6資料報中新增的一個字段,用來辨別一條資料報的流類型,以便在網絡層區分不同的封包。

  • 有效載荷長度(16比特)

IPv6資料報中在40定長位元組資料報首部後的位元組數量,即除了IPv6的資料報首部以外的其他部分的總長度

  • 下一個首部(8比特)

    當IPv6沒有擴充報頭時,該字段的作用和IPv4的協定字段一樣。當含有擴充報頭時,該字段的值即為第一個擴充報頭的類型

  • 跳限制(8比特)

    與IPv4封包中的TTL字段類似,轉發資料報的每台路由器将對該字段的内容減1.如果跳限制計數到達0,則該資料報将被丢棄

  • 源位址和目的位址(各128比特)

    記錄源IP位址,目的IP位址

  • 資料

可以看出,在IPv4資料報中出現的幾個字段在IPv6資料報中已不複存在:

  • 分片/重新組裝

    IPv6不允許在中間路由器上進行分片和重新組裝。這種操作隻能在源與目的地上執行。如果路由器收到的IPv6資料報因太大不能轉發對外連結路上的話,路由器會丢掉該資料報,并回一個“分組太大”的ICMP差錯封包

  • 首部檢驗和

    因為運輸層和資料鍊路層協定執行了檢驗操作,該項功能在網絡層就沒有必要了,進而更快速處理IP分組

  • 選項

    選項字段不再是标準IP首部的一部分了。但并沒有消失,而是可能出現在IPv6首部中由“下一個首部”指出的位置上。即就像TCP或UDP協定首部能夠是IP分組中的“下一個首部”,選項字段也能是“下一個首部”

IPv6相對IPv4最重要的變化如下:

  • 擴大的位址容量

    IPv6将IP位址長度由32比特增加到128比特,這使得理論可存在的IP位址增加到2[圖檔上傳失敗...(image-a67865-1565268140183)]

    個,約

    340萬億億億億

    個,這是一個非常大的數字,確定全世界再也不會用盡IP位址,甚至可以為地球上每一粒沙子都配置設定一個唯一的IP位址

    除了單點傳播和多點傳播位址外,IPv6沒有廣播這一說法,而是引入了一種稱為任播位址的新型位址,這種位址可以使資料報傳遞給一組主機中的任意一個

  • 簡化高效的40位元組首部

    除去共32位元組的源位址和目标位址外,首部其餘字段隻占了8位元組

  • 流标簽與優先級

    給屬于特殊流的分組打上标簽,這些特殊流是發送方要求進行特殊處理的流,如一種非預設服務品質或需要實時服務的流

2、IPv6書寫和表達方式

表述和書寫時,把長度為128比特的IPv6位址分成8個16位的二進制段、每一個16位的二進制段用4位的16進制數表示,段間用“:”(冒号)隔開(其書寫方法和IPv4的十進制數加“.”不同)。

例如:

1000:0000:0000:0000:000A:000B:000C:000D

就是每一個16位的二進制數的段用4位16進制數的段來表示、段間用“:”(冒号)隔開的一個IPv6位址;其中:各個4位16進制數的段中的高位0允許省略;是以,上面的IPv6位址也可以縮寫成:

1000:0:0:0:A:B:C:D

為了更進一步簡化,IPv6的位址規範中還規定,可以在一個IPv6位址中最多使用一次雙冒号

(::)

來取代IPv6位址中緊密相連的多個全0的16進制數的段(因為如果允許在一個IPv6位址中使用一次以上的雙冒号時将無法判斷IPv6位址的長度,是以IPv6的位址規範中才規定:在一個IPv6位址中最多隻能使用一次雙冒号),這樣上面的IPv6位址還可以縮寫成:

1000::A:B:C:D

雙冒号使用的地點可以在IPv6位址的前面、後面或者是中間;例如:對于

1000:0:0:0:A:B:0:0

這樣的一個IPv6位址,可以寫成

1000::A:B:0:0

,也可以寫成

1000:0:0:0:A:B::

;但是不能寫成

1000::A:B::

帶有端口号的IPV6位址字元串形式,位址部分應當用“[]”括起來,在後面跟着‘:’帶上端口号,如 

[A01F::0]:8000

二、從IPv4到IPv6的遷移

基于IPv4的公共網際網路如何遷移到IPv6呢?這是個非常現實的問題

雖然IPv6使能系統可做成向後相容,即能接收、發送和路由IPv4資料報,但已部署的IPv4使能系統卻不能處理IPv6資料報

1、雙協定棧

引入IPv6使能結點的最直接方式是雙棧方法,即使用該方法的

IPv6結點

還有完整的IPv4實作,即IPv6/IPv4結點,具有接收和發送IPv4和IPv6兩種資料報的能力。

當與

IPv4結點

互操作時,

IPv6/IPv4結點

可使用IPv4資料報;當與

IPv6結點

互操作時,

IPv6/IPv4結點

又可使用IPv6資料報。

IPv6/IPv4結點

必須有IPv6與IPv4兩種位址。此外,它們還必須能确定另一個結點是否是IPv6使能的或僅IPv4使能的。

可以使用DNS來解決,若要解析的結點名字是IPv6使能的,則DNS會傳回一個IPv6位址,否則傳回一個IPv4位址。如果發出DNS請求的結點是僅IPv4使能的,則隻傳回一個IPv4位址。

兩個IPv6使能的結點不應互相發送IPv4資料報,而如果發送方或接收方任意一個僅為IPv4使能的,則必須使用IPv4資料報。

這樣就會有下面這種情況:

如圖,假如結點A、B、E、F都是IPv6使能的結點,而結點C和D是僅IPv4使能的結點,那麼當按

A->B->C->D->E->F

順序發送資料報時,AB之間會發IPv6資料報,BC會發IPV4資料報, 由于IPv6資料報特定的字段在IPv4資料報中無對應的部分,這些字段将會丢失。是以,即使E和F之間能發IPv6資料報,從D到達E的IPv4資料報并未含有從A發出的初始IPv6資料報中的所有字段。

2、隧道

建隧道是另一種雙棧方法,該方法能解決上述問題。

假定兩個IPv6結點要使用IPv6資料報進行互動,但是它們是經由中間IPv4路由器互聯的。将兩台IPv6路由器中間的IPv4路由器的集合成為一個隧道,如

B->C->D->E

如圖,借助于隧道,在隧道發送端的

IPv6結點

可将整個IPv6資料報放到一個IPv4資料報的資料字段中。于是,該IPv4資料報的位址設為指向隧道接收端的

IPv6結點

,再發送給隧道中的第一個結點。而隧道中的IPv4路由器在它們之間為該資料報提供路由,就像對待其他IPv4資料報一樣,完全不知道該資料報自身就含有一個完整的IPv6資料報。而隧道接收端的

IPv6結點

最終收到該IPv4資料報,并确定該IPv4資料報中含有一個IPv6資料報,于是提取出該IPv6資料報,然後再為該IPv6資料報提供路由

3、NAT-PT

除了雙棧和隧道方案外,還有一種NAT-PT(Network Address Translator - Protocol Translator)附帶協定轉換器的網絡位址轉換器方案

IPv4 IPv6共存技術-----NAT-PT

可以參考下這篇文章

IPv6 測試可在這測試是否支援IPv6