|
IPV4報文頭格式及各字段功能
- 各字段功能
- 版本號(Version):長度4比特。標識目前采用的IP協議的版本號。一般的值為0100(IPv4),0110(IPv6)
- IP包頭長度(HeaderLength):長度4比特。這個字段的作用是為了描述IP包頭的長度,因為在IP包頭中有變長的可選部分。該部分占4個bit位,單位為32bit(4個字節),即本區域值=IP頭部長度(單位為bit)/(8*4),因此,一個IP包頭的長度最長為“1111”,即15*4=60個字節。IP包頭最小長度為20字節。
- 服務類型(Typeof Service):長度8比特。8位 按位被如下定義 PPP DTRC0
- PPP:定義包的優先級,取值越大數據越重要
- 000 普通(Routine)
- 001 優先的(Priority)
- 010 立即的發送(Immediate)
- 011 閃電式的(Flash)
- 100 比閃電還閃電式的 (FlashOverride)
- 101CRI/TIC/ECP(找不到這個詞的翻譯)
- 110 網間控制 (InternetworkControl)
- 111 網絡控制 (NetworkControl)
- DTRCO
- D時延: 0:普通 1:延遲盡量小
- T吞吐量: 0:普通 1:流量盡量大
- R可靠性: 0:普通 1:可靠性盡量大
- M傳輸成本: 0:普通 1:成本盡量小
- 0最后一位被保留,恒定為0
- IP包總長(TotalLength):長度16比特。 以字節為單位計算的IP包的長度(包括頭部和數據),所以IP包最大長度65535字節。
- 標識符(Identifier):長度16比特。該字段和Flags和FragmentOffest字段聯合使用,對較大的上層數據包進行分段(fragment)操作。路由器將一個包拆分后,所有拆分開的小包被標記相同的值,以便目的端設備能夠區分哪個包屬于被拆分開的包的一部分。
- 標記(Flags):長度3比特。該字段第一位不使用。第二位是DF(Don'tFragment)位,DF位設為1時表明路由器不能對該上層數據包分段。如果一個上層數據包無法在不分段的情況下進行轉發,則路由器會丟棄該上層數據包并返回一個錯誤信息。第三位是MF(MoreFragments)位,當路由器對一個上層數據包分段,則路由器會在除了最后一個分段的IP包的包頭中將MF位設為1。
- 片偏移(FragmentOffset):長度13比特。表示該IP包在該組分片包中位置,接收端靠此來組裝還原IP包。
- 生存時間(TTL):長度8比特。當IP包進行傳送時,先會對該字段賦予某個特定的值。當IP包經過每一個沿途的路由器的時候,每個沿途的路由器會將IP包的TTL值減少1。如果TTL減少為0,則該IP包會被丟棄。這個字段可以防止由于路由環路而導致IP包在網絡中不停被轉發。
- 協議(Protocol):長度8比特。標識了上層所使用的協議。以下是比較常用的協議號:1ICMP;2IGMP;6TCP;17UDP;88IGRP;89OSPF
- 頭部校驗(HeaderChecksum):長度16位。用來做IP頭部的正確性檢測,但不包含數據部分。因為每個路由器要改變TTL的值,所以路由器會為每個通過的數據包重新計算這個值。
- 起源和目標地址(Sourceand DestinationAddresses):這兩個地段都是32比特。標識了這個IP包的起源和目標地址。要注意除非使用NAT,否則整個傳輸的過程中,這兩個地址不會改變。
- 可選項(Options):這是一個可變長的字段。該字段屬于可選項,主要用于測試,由起源設備根據需要改寫。可選項目包含以下內容:
- 松散源路由(Loosesourcerouting):給出一連串路由器接口的IP地址。IP包必須沿著這些IP地址傳送,但是允許在相繼的兩個IP地址之間跳過多個路由器。
- 嚴格源路由(Strictsourcerouting):給出一連串路由器接口的IP地址。IP包必須沿著這些IP地址傳送,如果下一跳不在IP地址表中則表示發生錯誤。
- 路由記錄(Recordroute):當IP包離開每個路由器的時候記錄路由器的出站接口的IP地址。
- 時間戳(Timestamps):當IP包離開每個路由器的時候記錄時間。
- 填充(Padding):因為IP包頭長度(HeaderLength)部分的單位為32bit,所以IP包頭的長度必須為32bit的整數倍。因此,在可選項后面,IP協議會填充若干個0,以達到32bit的整數倍。
- 圖示
- 各字段功能
- Version:4比特,值為6表示IPv6報文
- TrafficClass:8比特,類似于IPv4中的TOS域
- FlowLabel:20比特。IPv6中新增。流標簽可用來標記特定流的報文,以便在網絡層區分不同的報文。轉發路徑上的路由器可以根據流標簽來區分流并進行處理。由于流標簽在IPv6報文頭中攜帶,轉發路由器可以不必根據報文內容來識別不同的流,目的節點也同樣可以根據流標簽識別流,同時由于流標簽在報文頭中,因此使用IPSec后仍然可以根據流標簽進行QoS處理。
- PayloadLength:16比特。以字節為單位的IPv6載荷長度,也就是IPv6報文基本頭以后部分的長度(包括所有擴展頭部分)。
- NextHeader:8比特。用來標識當前頭(基本頭或擴展頭)后下一個頭的類型。此域內定義的類型與IPv4中的協議域值相同。Pv6定義的擴展頭由基本頭或擴展頭中的擴展頭域鏈接成一條鏈。這一機制下處理擴展頭更高效,轉發路由器只處理必須處理的選項頭,提高了轉發效率。
- HopLimit:8比特。和IPv4中的TTL字段類似。每個轉發此報文的節點把此域減1,如果此域值減到0則丟棄。
- SourceAddress:128比特。報文的源地址。
- DestinationAddress:128比特。報文的目的地址
- IPv6報文擴展頭格式
- IPv6選項字段是通過形成鏈式結構的擴展頭支持的。IPv6基本頭后面可以有0到多個擴展頭。
- IPv6擴展頭排列順序如下:
- 逐跳選項頭,值為0(在IPv6基本頭中定義)。此選項頭被轉發路徑所有節點處理。目前在路由告警(RSVP和MLDv1)與Jumbo幀處理中使用了逐跳選項頭。路由告警需要通知到轉發路徑中所有節點,需要使用逐跳選項頭。Jumbo幀是長度超過65535的報文,傳輸這種報文需要轉發路徑中所有節點都能正常處理,因此也需要使用逐跳選項頭功能。
- 目的選項頭,值為60。只可能出現在兩個位置:路由頭前,這時此選項頭被目的節點和路由頭中指定的節點處理;上層頭前(任何ESP選項后),此時只能被目的節點處理。MobileIPv6中使用了目的選項頭。MobileIPv6中新增加一種類型的目的選項頭(家鄉地址選項)。家鄉地址選項由目的選項頭攜帶,用于移動節點離開家鄉后通知接收節點此移動節點對應的家鄉地址。接收節點收到帶有家鄉地址選項的報文后,會把家鄉地址選項中源地址(移動節點的家鄉地址)和報文中源地址(移動節點的轉交地址)交換,這樣上層協議始終認為是在和移動節點的家鄉地址在通信,實現了移動漫游功能。
- 路由頭,值為43。用于源路由選項和Mobile IPv6。
- 分片頭,值為44。此選項頭在源節點發送的報文超過PathMTU(源和目的之間傳輸路徑的MTU)時對報文分片時使用。
- 驗證頭(AH頭),值為51。用于IPSec,提供報文驗證、完整性檢查。定義和IPv4中相同。
- 封裝安全載荷頭(ESP頭),值為50。用于IPSec,提供報文驗證、完整性檢查和加密。定義和IPv4中相同。
- 上層頭,上層協議頭,如TCP/UDP/ICMP等,目的選項頭最多出現兩次(一次在路由頭前,一次在上層協議頭前),其它選項頭最多出現一次。但IPv6節點必須能夠處理選項頭(逐跳選項頭除外,它固定只能進隨基本頭之后)的任意出現位置和任意出現次數,以保證互通性。
- IPV6與IPV4比較
- 區別
- IPV4中的headerlength(4),Identifier(16),Flags(3),Framentedoffset(13),Options(Length variable,used fortest),Padding這些項都沒有了,因為IPV6的報文頭長度是固定的,只保留了最重要的功能,而對于一些非關鍵性的功能,IPV6放在了擴展報頭中去實現
- 整體來講:IPV6的整體設計回歸簡潔,設計更加透明
|
|