2-ipv6基礎(chǔ)知識之-數(shù)據(jù)包

1. IPv4 報文格式


IPv4 包頭由固定20字節(jié)的包頭與可變長的選項組成:

image.png

1.1 版本(Version)

版本(Version)域, 長度4比特。標識目前采用的IP協(xié)議的版本號。一般的值為0100(IPv4),0110(IPv6)

1.2 IP包頭長度(Header Length)

IHL用4位來表示。

由于頭部的長度是不固定的,所以頭部的IHL域指明了該頭部有多長(以32位字的長度為單位)。

IHL的最小長度為5,這個時候表明沒有可選項(Option),此4位域的最大值也就是15,也就是說頭部的最大長度為15*(32/8) = 60字節(jié),因此可選項(Option) = 60 - 20 = 40字節(jié),可選項的內(nèi)容最大為40字節(jié)。對于某些選項,比如記錄一個分組沿途路徑的選項,40字節(jié)往往太小了,這就使得這樣的選項其實沒有什么用處。

1.3 服務(wù)類型(Type of Service)

服務(wù)類型(Type of Service)域, 長度8比特。

8位按位被如下定義 PPP DTRC0

PPP:定義包的優(yōu)先級,取值越大數(shù)據(jù)越重要

  • 000 普通 (Routine)
  • 001 優(yōu)先的 (Priority)
  • 010 立即的發(fā)送 (Immediate)
  • 011 閃電式的 (Flash)
  • 100 比閃電還閃電式的 (Flash Override)
  • 101 CRI/TIC/ECP(找不到這個詞的翻譯)
  • 110 網(wǎng)間控制 (Internetwork Control)
  • 111 網(wǎng)絡(luò)控制 (Network Control)

DTRCO

  • D 時延: 0:普通 1:延遲盡量小
  • T 吞吐量: 0:普通 1:流量盡量大
  • R 可靠性: 0:普通 1:可靠性盡量大
  • M 傳輸成本: 0:普通 1:成本盡量小
  • 0 最后一位被保留,恒定為0

1.4 總長度(Total Length)

總長度(Total Length)域, 以字節(jié)為單位計算的IP包的長度 (包括頭部和數(shù)據(jù)),所以IP包最大長度65535字節(jié)。

1.5 標識(Identification)

標識(Identification)域, 該字段和Flags和Fragment Offest字段聯(lián)合使用,對較大的上層數(shù)據(jù)包進行分段(fragment)操作。路由器將一個包拆分后,所有拆分開的小包被標記相同的值,以便目的端設(shè)備能夠區(qū)分哪個包屬于被拆分開的包的一部分。是讓目標主機確定一個新到來的分段是屬于哪一個數(shù)據(jù)報的。同一個數(shù)據(jù)報的的所有分段都有相同的Identification值。

接下來是未使用的位。然后是兩個1位域。

DF代表不分段(Don't Fragment),這是針對路由器的一個命令,它讓路由器不要分割該數(shù)據(jù)報,因為目標主機可能無法將分片重新組合回原來的數(shù)據(jù)報。例如,當一臺計算機啟動的時候,它的ROM可能向網(wǎng)絡(luò)請求一個包含內(nèi)存映像的一個數(shù)據(jù)報。在數(shù)據(jù)報中標記了DF位之后,它就知道該數(shù)據(jù)將作為一個整體到達接收方,不過這意味著該數(shù)據(jù)報必須避開最優(yōu)路徑的小分組網(wǎng)絡(luò),而不得不走次優(yōu)的的路徑。所有的機器都要求能接受576字節(jié)或者更少的分段(4.5k)。

MF代表更多的分段(More Fragment)。除了最后一個分段以外,其它所有的分段都必須設(shè)置這一位,它的用途是,接收方可以知道什么時候一個數(shù)據(jù)報的所有分段已經(jīng)到達了。

1.6 分段偏移(Fragment Offset)

分段偏移(Fragment Offset)(13位域)域指明了該分段在當前數(shù)據(jù)報中的什么位置上。除了一個數(shù)據(jù)報的最后一個分段以外,其他所有的分段必須是8字節(jié)的倍數(shù),這里的8字節(jié)是基本的分段單位(64bit大小)。由于該域有13位,所以每個數(shù)據(jù)報最多可以有2^13 = 8192個分段,因此,最大的數(shù)據(jù)報長度為8192*8 = 65536字節(jié),比Taotal length域還要大1.

1.7 生命期TTL(Time to live)

TTL(Time to live)域(8位域), 當IP包經(jīng)過每一個沿途的路由器的時候,每個沿途的路由器會將IP包的TTL值減少1。如果TTL減少為0,則該IP包會被丟棄。這個字段可以防止由于路由環(huán)路而導致IP包在網(wǎng)絡(luò)中不停被轉(zhuǎn)發(fā)。

1.8 協(xié)議(Protocol)

當網(wǎng)絡(luò)層組裝完成一個完整的數(shù)據(jù)報之后,它需要知道該如何對它進行處理。協(xié)議(Protocol)域指明了該將它交給哪一個傳輸進程。TCP是一種可能,UDP或者其他協(xié)議也是一種可能。協(xié)議的編號是整合Internet全球統(tǒng)一的。

1.9 頭部校驗和(Header checksum)

頭部校驗和(Header checksum)域只校驗頭部。這樣的校驗和對于檢測“因路由器中的壞內(nèi)存而產(chǎn)生的錯誤”非常有用。因為每個路由器要改變TTL的值,所以路由器會為每個通過的數(shù)據(jù)包重新計算這個值。其算法是這樣的:當數(shù)據(jù)到達時,所有的16位(半字)累加起來,然后再取結(jié)果的補碼。該算法的意圖是,當數(shù)據(jù)到達之后,Header checksum的計算結(jié)果應(yīng)該為0.該算法比常規(guī)算法更加穩(wěn)定。請注意,在每一跳上,Header checksum域必須重新計算,因為至少有一個域總是要改變的(即Time to live),但是通過一些技巧可以加速計算。

1.10 源地址(Source address)和目標地址(Destination address)

都用32為表示。要注意除非使用NAT,否則整個傳輸?shù)倪^程中,這兩個地址不會改變

1.11 選項(Option)

選項(Option)域的設(shè)計意圖是:主要用于測試; 允許后續(xù)版本的協(xié)議包含一些原來的設(shè)計中沒有出現(xiàn)的信息;允許實驗人員試驗新的想法;避免為那些不常使用的信息分配頭部域。選項是變長的,每一個選項的第一個字節(jié)是一個標識碼,它標明了該選項。有的選項后面跟著1個字節(jié)的選項長度域,然后是一個或多個數(shù)據(jù)字節(jié)。Options域被補齊到4字節(jié)的倍數(shù)。

2.IPv6


IPv6 數(shù)據(jù)報包括一個主首部和0 或多個擴展首部。IPv6 包頭結(jié)構(gòu)如下圖所示。

image.png

IPv6包頭長度固定為40字節(jié),去掉了IPv4中一切可選項,只包括8個必要的字段,因此盡管IPv6地址長度為IPv4的四倍,IPv6包頭長度僅為IPv4包頭長度的兩倍。

2.1 Version(版本號)

4位,IP協(xié)議版本號,值 = 6。

2.2 Traffice Class(通信級別/類別)

8位,指示IPv6數(shù)據(jù)流通信類別或優(yōu)先級。功能類似于IPv4的服務(wù)類型(TOS/QOS)字段。 (通往目標節(jié)點的過程中,這個字段的值可能會被修改)

2.3 Flow Label(流標記)

20位,IPv6新增字段,標記需要IPv6路由器特殊處理的數(shù)據(jù)流,這個字段是為了給實時數(shù)據(jù)報交付和QoS提供更多的支持。該字段用于某些對連接的服務(wù)質(zhì)量有特殊要求的通信,諸如音頻或視頻等實時數(shù)據(jù)傳輸。在IPv6中,同一信源和信宿之間可以有多種不同的數(shù)據(jù)流,彼此之間以非“0”流標記區(qū)分。如果不要求路由器做特殊處理,則該字段值置為“0”。 flow label最初是28bit,逐漸修改至rfc2460的20bit。flow label通過偽隨機算法生成,介于1至fffff之間。如果一組數(shù)據(jù)流具有相同的源地址、目的地址、hop-by-hop和routing,那么這組數(shù)據(jù)流可能共享flow label。由此可見,IPv6結(jié)點可以僅通過flow label,不檢查其它屬性值,即可知道如何處理和轉(zhuǎn)發(fā)這組數(shù)據(jù)流。

2.4 Payload Length(負載長度)

16位負載長度。負載長度包括擴展頭和上層PDU,16位最多可表示65535字節(jié)負載長度。超過這一字節(jié)數(shù)的負載,該字段值置為“0”,使用擴展頭逐個跳段(Hop-by-Hop)選項中的巨量負載(Jumbo Payload)選項。 總而言之,該字段的值=報文總長度-40

2.5 Next Header(下一包頭)

8位,指明識別緊跟在IPv6頭后的包頭類型,如擴展頭(有的話)或某個傳輸層協(xié)議頭(諸如TCP,UDP或者ICMPv6)。

由下圖可以看出,因為可以有多個擴展頭,一個擴展頭中還有Next Header字段,用于指明下一個擴展頭或者傳輸層的類型。(擴展可以有多個,但是上層數(shù)據(jù)只能有一個)
常見的Next Header值:


image.png

2.6 Hop Limit(跳段數(shù)限制)

8位,類似于IPv4的TTL(生命期)字段。與IPv4用時間來限定包的生命期不同,IPv6用包在路由器之間的轉(zhuǎn)發(fā)次數(shù)來限定包的生命期。包每經(jīng)過一次轉(zhuǎn)發(fā),該字段減1,減到0時就把這個包丟棄。
S

2.7 ource Address(源地址)

128位(16字節(jié)),發(fā)送方主機地址。

2.8 Destination Address(目的地址)

128位,在大多數(shù)情況下,目的地址即信宿地址。但如果存在路由擴展頭的話,目的地址可能是發(fā)送方路由表中下一個路由器接口。

3.IPv4和IPv6對比圖


image.png
IPv4頭部字段 IPv6頭部字段
版本 相同字段,但是版本號不同
Inter頭部長度 已從IPv6中刪除。IPv6不包括頭部長度字段,因為IPv6頭部總是40字節(jié)的固定長度。每個擴展頭部或者是固定長度或者標識了自己的長度
服務(wù)類型 有IPv6的流量類別字段取代
總長度 由IPv6的負載長度字段取代,這個字段僅標識有效負載的長度
標識符&標簽&分片偏移 已從IPv6中刪除,分片信息并不包括在IPv6頭部中,而是包括在分片擴展頭部中
生存時間 由IPv6的跳數(shù)限制字段取代
協(xié)議 由IPv6的下一個頭部字段取代
頭部校驗和 已從IPv6中刪除,鏈路層的校驗和會對整個IPv6數(shù)據(jù)包執(zhí)行比特位層面的錯誤校驗
源地址 保留,但IPv6地址長度為128位
目的地址 保留,但IPv6地址長度為128位
選項 已從IPv6中刪除,IPv6擴展頭部取代了IPv4中的可選項
  • IPV6簡化了報文頭部格式,字段只有8個,加快報文轉(zhuǎn)發(fā),提高了吞吐量
  • 靈活的IP報文頭部格式。使用一系列固定格式的擴展頭部取代了IPV4中可變長度的選項字段。
  • IPV6中選項部分的出現(xiàn)方式也有所變化,使路由器可以簡單路過選項而不做任何處理,加快了報文處理速度;
  • IPv6的地址是IPv4地址的四倍,但是IPv6的頭部卻只有最小IPv4頭部長度的兩倍。

參考文檔《深入解析IPv6》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容