IPv6報文格式
IPv6報文由IPv6基本報頭、IPv6擴展報頭以及上層協議數據單元三部分組成。
上層協議數據單元一般由上層協議報頭和它的有效載荷構成,有效載荷可以是一個ICMPv6報文、一個TCP報文或一個UDP報文。
IPv6基本報頭
-
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。表示接收方的地址。
IPv6擴展報頭
在IPv4中,IPv4報頭包含可選字段Options,內容涉及security、Timestamp、Record route等,這些Options可以將IPv4報頭長度從20字節擴充到60字節。在轉發過程中,處理攜帶這些Options的IPv4報文會占用設備很大的資源,因此實際中也很少使用。
IPv6將這些Options從IPv6基本報頭中剝離,放到了擴展報頭中,擴展報頭被置於IPv6報頭和上層協議數據單元之間。一個IPv6報文可以包含0個、1個或多個擴展報頭,僅當需要設備或目的節點做某些特殊處理時,才由發送方添加一個或多個擴展頭。與IPv4不同,IPv6擴展頭長度任意,不受40字節限制,這樣便於日后擴充新增選項,這一特征加上選項的處理方式使得IPv6選項能得以真正的利用。但是為了提高處理選項頭和傳輸層協議的性能,擴展報頭總是8字節長度的整數倍。
當使用多個擴展報頭時,前面報頭的Next Header字段指明下一個擴展報頭的類型,這樣就形成了鏈狀的報頭列表。如圖6-8所示,IPv6基本報頭中的Next Header字段指明了第一個擴展報頭的類型,而第一個擴展報頭中的Next Header字段指明了下一個擴展報頭的類型(如果不存在,則指明上層協議的類型)。擴展報頭格式如圖6-8所示:
- Next Header:下一個報頭,長度為8bit。與基本報頭的Next Header的作用相同。指明下一個擴展報頭(如果存在)或上層協議的類型。
- Extension Header Len:報頭擴展長度,長度為8bit。表示擴展報頭的長度(不包含Next Header字段)。
- Extension Head Data:擴展報頭數據,長度可變。擴展報頭的內容,為一系列選項字段和填充字段的組合。
目前,RFC 2460中定義了6個IPv6擴展頭:逐跳選項報頭、目的選項報頭、路由報頭、分段報頭、認證報頭、封裝安全凈載報頭。見下表
報頭類型 | 對應的Next Header字段值 | 描述 |
逐跳選項報頭 | 0 | 該選項主要用於為在傳送路徑上的每跳轉發指定發送參數,傳送路徑上的每台中間節點都要讀取並處理該字段。逐跳選項報頭目前的主要應用有以下三種:
|
目的選項報頭 | 60 | 目的選項報頭攜帶了一些只有目的節點才會處理的信息。目前,目的選項報文頭主要應用於移動IPv6。 |
路由報頭 | 43 | 路由報頭和IPv4的Loose Source and Record Route選項類似,該報頭能夠被IPv6源節點用來強制數據包經過特定的設備。 |
分段報頭 | 44 | 同IPv4一樣,IPv6報文發送也受到MTU的限制。當報文長度超過MTU時就需要將報文分段發送,而在IPv6中,分段發送使用的是分段報頭。 |
認證報頭 | 51 | 該報頭由IPsec使用,提供認證、數據完整性以及重放保護。它還對IPv6基本報頭中的一些字段進行保護。 |
封裝安全凈載報頭 | 50 | 該報頭由IPsec使用,提供認證、數據完整性以及重放保護和IPv6數據報的保密,類似於認證報頭。 |
當超過一種擴展報頭被用在同一個分組里時,報頭必須按照下列順序出現:
-
IPv6基本報頭
-
逐跳選項擴展報頭
-
目的選項擴展報頭
-
路由擴展報頭
-
分段擴展報頭
-
認證擴展報頭
-
封裝安全有效載荷擴展報頭
-
目的選項擴展報頭
-
上層協議數據報文
路由設備轉發時根據基本報頭中Next Header值來決定是否要處理擴展頭,並不是所有的擴展報頭都需要被轉發路由設備查看和處理的。
除了目的選項擴展報頭可能出現一次或兩次(一次在路由擴展報頭之前,另一次在上層協議數據報文之前),其余擴展報頭只能出現一次。