初識IPv6(二)

 2  IPv6 ICMPv6

 

在研究IPv6部之前我比一下IPv4

 

// IPv4 header in iphdr.h

ntypedef struct ip_hdr

n{

n    unsigned char ip_verlen;        // 4-bit IPv4 version

n                                     // 4-bit header length (in 32-bit words)

n    unsigned char ip_tos;           // IP type of service

n    unsigned short ip_totallength;   // Total length

n    unsigned short ip_id;            // Unique identifier

n    unsigned short ip_offset;        // Fragment offset field

n    unsigned char ip_ttl;           // Time to live

n    unsigned char ip_protocol;      // Protocol(TCP,UDP etc)

n    unsigned short ip_checksum;      // IP checksum

n    unsigned int   ip_srcaddr;       // Source address

n    unsigned int   ip_destaddr;      // Source address

n} IPV4_HDR, *PIPV4_HDR, FAR * LPIPV4_HDR;

n// IPv4 option header

ntypedef struct ipv4_option_hdr

n{

n    unsigned char   opt_code;           // option type

n    unsigned char   opt_len;            // length of the option header

n    unsigned char   opt_ptr;            // offset into options

n    unsigned long   opt_addr[9];        // list of IPv4 addresses

n} IPV4_OPTION_HDR, *PIPV4_OPTION_HDR, FAR *LPIPV4_OPTION_HDR;

 

 

版本4記錄了數據報對應協議版本號。當前的IP協議有兩個版本:IPV4 IPV6

nIHL4。代表部的總長度,以32一個位。

n務類8。使主機可以告子網它想要什麼的服。如下所示,服務類型域又分5個部分。字段是的;三個志位分代表延、吞吐量、可靠性。

n總長16位。指部和數據的總長。最大度是65535個字

n標識16位。通它使目的主機判斷新來的分段屬於哪個分,所有屬於同一分的分段包含同標識值

nDF:代表不要分段。它命令路由器不要將數據分段,因目的端不能重分段。

nMF:代表一步的分段,用它來志是否所有的分都已到達。除了最後一個分段的所有分段都置了一位。

n分段偏移13位。明分段在當前數據的什麼位置。

n生命期8位。用來限制分生命週期的數器。它在每個點中都減,而且當在一個路由器中排隊時可以倍數減。

n協議8位。明將分組發那個傳輸進程,如TCPUDP等。

n16位。用來校驗頭部。

n源地址 32位。IP數據的源主機IP地址。

n目的地址32位。IP數據的目的主機的IP地址。

n選項:是變長的。每個可選項用一個字節標明內容。有些可選項還跟有一字的可選項長度字段,其後是一個或多個數據字在已定了安全性、格的源路由選擇、鬆的源路由選擇記錄路由和時間標記五個可選項。但不是所有的路由器都支持全部5個可選項

n

安全性選項說明瞭信息的安全程度。

 

                                ipv4 

 

  再看下IPv6

 

n// IPv6 protocol header

ntypedef struct ipv6_hdr

n{

n    unsigned long   ipv6_vertcflow;        // 4-bit IPv6 version

n                                           // 8-bit traffic class

n                                           // 20-bit flow label

n    unsigned short ipv6_payloadlen;       // payload length

n    unsigned char   ipv6_nexthdr;          // next header protocol value

n    unsigned char   ipv6_hoplimit;         // TTL

n    struct in6_addr ipv6_srcaddr;          // Source address

n    struct in6_addr ipv6_destaddr;         // Destination address

n} IPV6_HDR, *PIPV6_HDR, FAR * LPIPV6_HDR;

n// IPv6 fragment header

ntypedef struct ipv6_fragment_hdr

n{

n    unsigned char   ipv6_frag_nexthdr;

n    unsigned char   ipv6_frag_reserved;

n    unsigned short ipv6_frag_offset;

n    unsigned long   ipv6_frag_id;

n} IPV6_FRAGMENT_HDR, *PIPV6_FRAGMENT_HDR, FAR * LPIPV6_FRAGMENT_HDR;

 

                           IPv6

 

 

比之下我們發現儘管字段中有一些與I P v 6頭類似,但其中真正完全保持不的只有第一個字段,即版本字段,因在同一條路上傳輸時,必I P v 4I P v 6的兼容性。下一個字段,即包頭長度,I P v 6無關,因I P v 6是固定度,I P v 4中需要個字段是因它的

可能在2 04 0節間變化。服務類型字段與I P v 6的流類別字段相似,但TOS的位置比字段要靠後一些,而且在具體實現中也沒有廣泛用。下一個字段是數據報長度,後來展成了I P v 6中的度。I P v 6度中包含了,而I P v 4數據報長度字段中指明包含

在內的整個數據度。這樣一來,在I P v 4中,路由器可以通將數據報長度減去包頭長度來算包的度,而在I P v 6須這算。

 

後面的三個字段是數據I D、分段志和分段偏移,它都用於I P v 4數據的分段。 由於I P v 6中由源點取代中路由器來行分段,些字段在I P v 6得不重要,並被I P v 6從包中去掉了。

而生存期字段,正如上面所述,成了跳極限字段。生存期字段最初表示的是一個包穿越I n t e r n e t以秒爲單位的存在時間的上限。如果生存期值變爲0包將被棄。其原因是包可能會存在於循路由中,如果沒有方法它消失,它可能會一直(或者直到網潰爲)。在最初的範中要求路由器根據轉發包的時間與收到包的時間的差(以秒爲單) 來減小生存期的。在實際情況中,大部分路由器都設計爲每次對該值1,而不是算路由器上真正的時間

協議字段,如前所述,指出在I P v 4包中封裝的高層協議類型。各協議對應的數在最新版本的R F C (在是RFC 1700)中可以到。個字段後來展成I P v 6中的下一個字段,其中定了下一個是一個字段是另一協議頭

由於如T C PU D P等高層協議的校和, I P v 4驗顯得有些多餘,因此個字段在I P v 6中已消失。於那些真的需要內容行身份驗證用, I P v 6中提供了身份驗證頭

I P v 6中仍然保留了3 2位的I P v 4源地址和目的地址,但將它們擴

1 2 8位。而I P選項字段經徹底消失,取而代之的是I P v 6

 

標籤flow label

I P v 4通常被描述協議。就像任何一個包交 I P v 4設計爲讓每個包找到自己的路徑以到達其目的地。每個包都分別處理,而果是兩個從相同數據源往相同目的地的包可以採用完全不同的路由來穿越整個網這對於適事件來是個好法,因事件意味着任何一條路由都可能在任何時間故障,但只要兩主機存在某些路由可以行數據的交互。

但是,種方法的效率可能不太高,尤其是當包並不是孤立的,且實際上是兩個通信系統間業務流的一部分一步考一個包流從一臺主機往另一主機在它所經過的路徑上將生的事情:每個中路由器每個包的理將致在路上微地增加延似文件傳輸端仿真之的大部分傳統I n t e r n e t用,延只會來一點不方便而已,

於一些提供互操作的音視頻應用而言,即使只是增加一點點延也會著降低服務質量。

每個I P v 4包均來的另一個問題在於以把特定的業務流指定到低代價的路上。例如,件的傳輸優不高,並且不是實時應用,但I P v 4管理卻沒有簡單法來標識這些包,把它們傳輸低開I n t e r n e t路,並爲實時應用保留高開路。

I P v 6中定的流的概念將有助於解決問題I P v 6字段中的流標籤個包作一系列源地址和目的地址相同的包流的一部分。同一個流中的所有包具有相同的流標籤

 

I P v 4選項問題在於改I P的大小,因此更像一個特例,即需要特理。路由器必須優化其性能,意味着將最普遍的包行最佳性能的化。使得I P v 4選項一個路由器把包含該選項的包置一,等到有時間候再理。I P v 6實現可以消或至少大量減少選項帶來的性能的衝。通選項I P中搬到荷中,路由器可以像轉發選項包一轉發包含選項的包。除了定必

每個轉發路由器理的逐跳選項之外, I P v 6包中的選項對於中路由器而言是不可的。

可用的選項

除了減少I P v 6轉發時選項的影響外, I P v 6範使得於新的展和選項的定義變得更加簡單。在需要的候可能會定其他的選項展。本節僅列出已定展,而選項的使用不介

 

IPv6 瞭如下選項擴展:

逐跳選項頭:須緊隨在I P v 6之後。它包含包所路徑上的每個點都必

檢查選項數據。由於它需要每個中路由器理,逐跳選項只有在絕對必要的

候纔會出。到目前止,已了兩個選項:巨型選項和路由器提示選項

選項指明包的度超I P v 61 6度字段。只要包的荷超65 535

(其中包括逐跳選項頭),就必包含該選項。如果點不能轉發該包,回送 一個I C M P v 6錯報文。路由器提示選項用來通知路由器, I P v 6數據中的信息希望能得到中路由器的看和理,即使個包是發給其他某個點的(例如,包含帶寬預協議信息的控制數據)

 

:指明包在到達目的地途中將經過哪些點。它包含包沿途經過的各點的地址列表。I P v 6的最初目的地址是路由的一系列地址中的第一個地址,而不是包的最目的地址。此地址對應點接收到包之後,I P v 6頭進理,並把包送到列表中的第二個地址。如此繼續,直到包到達其最目的地。

 

分段:包含一個分段偏移、一個更多段志和一個標識符字段。用於源對長度超出源端和目的端路徑M T U的包行分段。

 

目的地選項頭:代替了I P v 4選項字段。目前,唯一定的目的地選項是在需要選項填充6 4位的整數倍。此可以用來攜由目的地檢查的信息。

 

身份驗證頭( A H ):提供了一種機制,I P v 6荷的某些部分行加密的校和的算。

 

封裝安全性( E S P ):是最後一個,不行加密。它指明剩餘的荷已加密,並得授的目的點提供足的解密信息。

 

下面我們對比一下ICMPv4ICMPv6:文件中的描述如下

 

 

n// ICMPv4 header in iphdr.h

ntypedef struct icmp_hdr

n{

n    unsigned char   icmp_type;

n    unsigned char   icmp_code;

n    unsigned short icmp_checksum;

n    unsigned short icmp_id;

n    unsigned short icmp_sequence;

n} ICMP_HDR, *PICMP_HDR, FAR *LPICMP_HDR;

 

 

n// ICMPv6 header

ntypedef struct icmpv6_hdr {

n    unsigned char   icmp6_type;

n    unsigned char   icmp6_code;

n    unsigned short icmp6_checksum;

n} ICMPV6_HDR;

n// ICMPv6 echo request body

ntypedef struct icmpv6_echo_request

n{

n    unsigned short icmp6_echo_id;

n    unsigned short icmp6_echo_sequence;

n} ICMPV6_ECHO_REQUEST;

 

可以看出ICMPv6並沒有ICMPv4的定義進行更改,只是將idsequence獨立出來作另一個構,當ICMP需要求回送信息將被填充

 

n

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章