?IPv6簡介
IPv6(Internet Protocol Version 6)是網(wǎng)絡(luò)層協(xié)議的第二代標(biāo)準(zhǔn)協(xié)議,也被稱為IPng(IP Next Generation)。它是Internet工程任務(wù)組IETF(Internet Engineering Task Force)設(shè)計的一套規(guī)范,是IPv4(Internet Protocol Version 4)的升級版本。
目的:
IPv4協(xié)議是目前廣泛部署的因特網(wǎng)協(xié)議。在因特網(wǎng)發(fā)展初期,IPv4以其協(xié)議簡單、易于實現(xiàn)、互操作性好的優(yōu)勢而得到快速發(fā)展。但隨著因特網(wǎng)的迅猛發(fā)展,IPv4設(shè)計的不足也日益明顯,IPv6的出現(xiàn),解決了IPv4的一些弊端。相比IPv4,IPv6具有如下優(yōu)勢:
IPv4與IPv6的對比表:
IPv6地址
IPv6地址的表示方法:
IPv6地址總長度為128比特,通常分為8組,每組為4個十六進(jìn)制數(shù)的形式,每組十六進(jìn)制數(shù)間用冒號分隔。例如:FC00:0000:130F:0000:0000:09C0:876A:130B,這是IPv6地址的首選格式。
為了書寫方便,IPv6還提供了壓縮格式,以上述IPv6地址為例,具體壓縮規(guī)則為:
每組中的前導(dǎo)“0”都可以省略,所以上述地址可寫為:FC00:0:130F:0:0:9C0:876A:130B。
地址中包含的連續(xù)兩個或多個均為0的組,可以用雙冒號“::”來代替,所以上述地址又可以進(jìn)一步簡寫為:FC00:0:130F::9C0:876A:130B。
需要注意的是,在一個IPv6地址中只能使用一次雙冒號“::”,否則當(dāng)計算機(jī)將壓縮后的地址恢復(fù)成128位時,無法確定每個“::”代表0的個數(shù)。
IPv6地址的結(jié)構(gòu):
一個IPv6地址可以分為如下兩部分:
網(wǎng)絡(luò)前綴:n比特,相當(dāng)于IPv4地址中的網(wǎng)絡(luò)ID
接口標(biāo)識:128-n比特,相當(dāng)于IPv4地址中的主機(jī)ID
對于IPv6單播地址來說,如果地址的前三bit不是000,則接口標(biāo)識必須為64位;如果地址的前三位是000,則沒有此限制。
接口標(biāo)識可通過三種方法生成:手工配置、系統(tǒng)通過軟件自動生成或IEEE EUI-64規(guī)范生成。其中,EUI-64規(guī)范自動生成最為常用。
IEEE EUI-64規(guī)范是將接口的MAC地址轉(zhuǎn)換為IPv6接口標(biāo)識的過程。如下圖所示,MAC地址的前24位(用c表示的部分)為公司標(biāo)識,后24位(用m表示的部分)為擴(kuò)展標(biāo)識符。從高位數(shù),第7位是0表示了MAC地址本地唯一。轉(zhuǎn)換的第一步將FFFE插入MAC地址的公司標(biāo)識和擴(kuò)展標(biāo)識符之間,第二步將從高位數(shù),第7位的0改為1表示此接口標(biāo)識全球唯一。
圖:EUI-64規(guī)范示意圖
例如:MAC地址:000E-0C82-C4D4;轉(zhuǎn)換后020E:0CFF:FE82:C4D4。
這種由MAC地址產(chǎn)生IPv6地址接口標(biāo)識的方法可以減少配置的工作量,尤其是當(dāng)采用無狀態(tài)地址自動配置時,只需要獲取一個IPv6前綴就可以與接口標(biāo)識形成IPv6地址。但是使用這種方式最大的缺點是任何人都可以通過二層MAC地址推算出三層IPv6地址。
IPv6的地址分類:
IPv4地址分為單播地址、組播地址和廣播地址。IPv6中去掉了廣播地址,增加了任播地址,也就是說,IPv6地址被分為單播地址、組播地址和任播地址。
單播地址用于標(biāo)識一個接口,發(fā)往該目的地址的報文會被送到被標(biāo)識的接口。
組播地址用于標(biāo)識多個接口,發(fā)往該目的地址的報文會被送到被標(biāo)識的所有接口。
任播地址用于標(biāo)識多個接口,發(fā)往該目的地址的報文會被送到被標(biāo)識的所有接口中最近的一個接口上。這里關(guān)于最近的理解,可以理解為從下標(biāo)數(shù)起,最小的那個。任播地址與單播地址使用同一個地址空間,也就是說,由路由器決定該數(shù)據(jù)包是做任播轉(zhuǎn)發(fā)還是單播轉(zhuǎn)發(fā)。
單播地址可分為下面幾類:
1. 未指定地址:::/128,即地址全為0。
2. 環(huán)回地址 :::1/128,相當(dāng)與IPv4中的127.0.0.1。
3. 全球單播地址,類似于IPv4中的公網(wǎng)地址。
4. 內(nèi)嵌IPv4地址的IPv6地址 如 :::ffff:192.168.10.1。當(dāng)需要將IPv4單播地址與IPv6全球單播地址建立聯(lián)系的時候一般使用這種地址,分為兩種。一種是IPv4兼容IPv6地址,另一種是IPv4映射IPv6地址。
IPv4兼容IPv6地址構(gòu)成形式是96位0加上32位IPv4地址,如 ::192.168.1.1,這種地址最初用于IPv4和IPv6之間的過渡計劃,但現(xiàn)在已經(jīng)不再需要。
IPv4映射IPv6地址構(gòu)成形式是80位0加上16位1,再加上IPv4地址,如::ffff:192.168.1.1。
5. 本地鏈路地址,前綴固定fe80::/64,如 fe80::e0:f726:4e68。凡是源地址或目的地址包含由本地鏈路地址的報文,路由器不應(yīng)當(dāng)轉(zhuǎn)發(fā)它。這樣的報文只能在LAN中互通。
6. 本地站點地址,前綴fec0::/10,緊接著54位子網(wǎng)ID,作用相當(dāng)于IPv4中的私網(wǎng)地址,如fec0::e0:f726:4e68。只能在本站內(nèi)使用,不能在公網(wǎng)上使用。
圖:組播地址
最重要的字段要屬于最后的組ID(Group-ID)字段了。該字段長度為112位,用以標(biāo)識組播組,我們知道112位最多可以生成2112個組ID。目前,RFC2373并沒有將所有的112位都定義成組標(biāo)識,而是建議僅使用該112位的最低32位組ID,將剩余的80位都置0。
任播地址:
這是IPv6特有的地址類型,它用來標(biāo)識一組網(wǎng)絡(luò)接口(通常屬于不同的節(jié)點)。目標(biāo)地址是任播地址的數(shù)據(jù)包將發(fā)送給其中路由意義上最近的一個網(wǎng)絡(luò)接口。適合于“One-to-One-of-Many”(一對組中的一個)的通訊場合。接收方只需要是一組接口中的一個即可,如移動用戶上網(wǎng)就需要因地理位置的不同,而接入離用戶最近的一個接收站,這樣才可以使移動用戶在地理位置上不受太多的限制。
任播地址從單播地址空間中進(jìn)行分配,使用單播地址的任何格式。因而,從語法上,任播地址與單播地址沒有區(qū)別。被分配具有任播地址的節(jié)點必須得到明確的配置,從而知道它是一個任播地址。目前,任播地址僅被用做目標(biāo)地址,且僅分配給路由器
IPv6報文格式
IPv6報文由IPv6基本報頭、IPv6擴(kuò)展報頭以及上層協(xié)議數(shù)據(jù)單元三部分組成。
上層協(xié)議數(shù)據(jù)單元一般由上層協(xié)議報頭和它的有效載荷構(gòu)成,有效載荷可以是一個ICMPv6報文、一個TCP報文或一個UDP報文。
圖:IPv6基本報文頭部格式
IPv6報頭格式中主要字段解釋如下:
Version:版本號,長度為4bit。對于IPv6,該值為6。
Traffic Class:流類別,長度為8bit。等同于IPv4中的TOS字段,表示IPv6數(shù)據(jù)報的類或優(yōu)先級,主要應(yīng)用于QoS。
Flow Label:流標(biāo)簽,長度為20bit。IPv6中的新增字段,用于區(qū)分實時流量,不同的流標(biāo)簽+源地址可以唯一確定一條數(shù)據(jù)流,中間網(wǎng)絡(luò)設(shè)備可以根據(jù)這些信息更加高效率的區(qū)分?jǐn)?shù)據(jù)流。
Payload Length:有效載荷長度,長度為16bit。有效載荷是指緊跟IPv6報頭的數(shù)據(jù)報的其它部分(即擴(kuò)展報頭和上層協(xié)議數(shù)據(jù)單元)。該字段只能表示最大長度為65535字節(jié)的有效載荷。如果有效載荷的長度超過這個值,該字段會置0,而有效載荷的長度用逐跳選項擴(kuò)展報頭中的超大有效載荷選項來表示。
Next Header:下一個報頭,長度為8bit。該字段定義緊跟在IPv6報頭后面的第一個擴(kuò)展報頭(如果存在)的類型,或者上層協(xié)議數(shù)據(jù)單元中的協(xié)議類型。
Hop Limit:跳數(shù)限制,長度為8bit。該字段類似于IPv4中的Time to Live字段,它定義了IP數(shù)據(jù)報所能經(jīng)過的最大跳數(shù)。每經(jīng)過一個設(shè)備,該數(shù)值減去1,當(dāng)該字段的值為0時,數(shù)據(jù)報將被丟棄。
Source Address:源地址,長度為128bit。表示發(fā)送方的地址。
Destination Address:目的地址,長度為128bit。表示接收方的地址。
IPv6和IPv4相比,去除了IHL、identifiers、Flags、Fragment Offset、Header Checksum、 Options、Paddiing域,只增了流標(biāo)簽域,因此IPv6報文頭的處理較IPv4大大簡化,提高了處理效率。另外,IPv6為了更好支持各種選項處理,提出了擴(kuò)展頭的概念,新增選項時不必修改現(xiàn)有結(jié)構(gòu)就能做到,理論上可以無限擴(kuò)展,體現(xiàn)了優(yōu)異的靈活性。下面為讀者介紹IPv6擴(kuò)展報頭的一些信息。
IPv6報文抓包示例:
圖:IPv6報文抓包示例
IPv6擴(kuò)展頭部:
在IPv4中,IPv4報頭包含可選字段Options,內(nèi)容涉及security、Timestamp、Record route等,這些Options可以將IPv4報頭長度從20字節(jié)擴(kuò)充到60字節(jié)。在轉(zhuǎn)發(fā)過程中,處理攜帶這些Options的IPv4報文會占用設(shè)備很大的資源,因此實際中也很少使用。
IPv6將這些Options從IPv6基本報頭中剝離,放到了擴(kuò)展報頭中,擴(kuò)展報頭被置于IPv6報頭和上層協(xié)議數(shù)據(jù)單元之間。一個IPv6報文可以包含0個、1個或多個擴(kuò)展報頭,僅當(dāng)需要設(shè)備或目的節(jié)點做某些特殊處理時,才由發(fā)送方添加一個或多個擴(kuò)展頭。與IPv4不同,IPv6擴(kuò)展頭長度任意,不受40字節(jié)限制,這樣便于日后擴(kuò)充新增選項,這一特征加上選項的處理方式使得IPv6選項能得以真正的利用。但是為了提高處理選項頭和傳輸層協(xié)議的性能,擴(kuò)展報頭總是8字節(jié)長度的整數(shù)倍。
當(dāng)使用多個擴(kuò)展報頭時,前面報頭的Next Header字段指明下一個擴(kuò)展報頭的類型,這樣就形成了鏈狀的報頭列表。如下圖所示,IPv6基本報頭中的Next Header字段指明了第一個擴(kuò)展報頭的類型,而第一個擴(kuò)展報頭中的Next Header字段指明了下一個擴(kuò)展報頭的類型(如果不存在,則指明上層協(xié)議的類型)。
圖:IPv6擴(kuò)展報頭格式
IPv6擴(kuò)展報頭中主要字段解釋如下:
Next Header:下一個報頭,長度為8bit。與基本報頭的Next Header的作用相同。指明下一個擴(kuò)展報頭(如果存在)或上層協(xié)議的類型。
Extension Header Len:報頭擴(kuò)展長度,長度為8bit。表示擴(kuò)展報頭的長度(不包含Next Header字段)。
Extension Head Data:擴(kuò)展報頭數(shù)據(jù),長度可變。擴(kuò)展報頭的內(nèi)容,為一系列選項字段和填充字段的組合。
目前,RFC 2460中定義了6個IPv6擴(kuò)展頭:逐跳選項報頭、目的選項報頭、路由報頭、分段報頭、認(rèn)證報頭、封裝安全凈載報頭.
1.逐跳選項報頭:
(代表該報頭的Next Header字段值=0)
該選項主要用于為在傳送路徑上的每跳轉(zhuǎn)發(fā)指定發(fā)送參數(shù),傳送路徑上的每臺中間節(jié)點都要讀取并處理該字段。逐跳選項報頭目前的主要應(yīng)用有以下三種:
a>用于巨型載荷(載荷長度超過65535字節(jié))。
b>用于設(shè)備提示,使設(shè)備檢查該選項的信息,而不是簡單的轉(zhuǎn)發(fā)出去。
c>用于資源預(yù)留(RSVP)。
2.目的選項報頭:
(代表該報頭的Next Header字段值=60)
目的選項報頭攜帶了一些只有目的節(jié)點才會處理的信息。目前,目的選項報文頭主要應(yīng)用于移動IPv6。
3.路由報頭:
(代表該報頭的Next Header字段值=43)
路由報頭和IPv4的Loose Source and Record Route選項類似,該報頭能夠被IPv6源節(jié)點用來強(qiáng)制數(shù)據(jù)包經(jīng)過特定的設(shè)備。
4.分段報頭:
(代表該報頭的Next Header字段值=44)
同IPv4一樣,IPv6報文發(fā)送也受到MTU的限制。當(dāng)報文長度超過MTU時就需要將報文分段發(fā)送,而在IPv6中,分段發(fā)送使用的是分段報頭。
5.認(rèn)證報頭:
(代表該報頭的Next Header字段值=51)
該報頭由IPsec使用,提供認(rèn)證、數(shù)據(jù)完整性以及重放保護(hù)。它還對IPv6基本報頭中的一些字段進(jìn)行保護(hù)。
6.封裝安全凈載報頭:
(代表該報頭的Next Header字段值=50)
該報頭由IPsec使用,提供認(rèn)證、數(shù)據(jù)完整性以及重放保護(hù)和IPv6數(shù)據(jù)報的保密,類似于認(rèn)證報頭。
IPv6擴(kuò)展報頭規(guī)約:
當(dāng)超過一種擴(kuò)展報頭被用在同一個分組里時,報頭必須按照下列順序出現(xiàn):
IPv6基本報頭
逐跳選項擴(kuò)展報頭
目的選項擴(kuò)展報頭
路由擴(kuò)展報頭
分段擴(kuò)展報頭
認(rèn)證擴(kuò)展報頭
封裝安全有效載荷擴(kuò)展報頭
目的選項擴(kuò)展報頭
上層協(xié)議數(shù)據(jù)報文
路由設(shè)備轉(zhuǎn)發(fā)時根據(jù)基本報頭中Next Header值來決定是否要處理擴(kuò)展頭,并不是所有的擴(kuò)展報頭都需要被轉(zhuǎn)發(fā)路由設(shè)備查看和處理的。
除了目的選項擴(kuò)展報頭可能出現(xiàn)一次或兩次(一次在路由擴(kuò)展報頭之前,另一次在上層協(xié)議數(shù)據(jù)報文之前),其余擴(kuò)展報頭只能出現(xiàn)一次。
ICMPv6
ICMPv6(Internet Control Message Protocol for the IPv6)是IPv6的基礎(chǔ)協(xié)議之一。
在IPv4中,Internet控制報文協(xié)議ICMP(Internet Control Message Protocol)向源節(jié)點報告關(guān)于向目的地傳輸IP數(shù)據(jù)包過程中的錯誤和信息。它為診斷、信息和管理目的定義了一些消息,如:目的不可達(dá)、數(shù)據(jù)包超長、超時、回應(yīng)請求和回應(yīng)應(yīng)答等。在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,還是其它一些功能的基礎(chǔ),如鄰接點發(fā)現(xiàn)、無狀態(tài)地址配置(包括重復(fù)地址檢測)、PMTU發(fā)現(xiàn)等。
ICMPv6的協(xié)議類型號(即IPv6報文中的Next Header字段的值)為58。ICMPv6的報文格式下圖所示:
圖:ICMPv6報文格式
報文中字段解釋如下:
Type:表明消息的類型,0至127表示差錯報文類型,128至255表示消息報文類型。
Code:表示此消息類型細(xì)分的類型。
Checksum:表示ICMPv6報文的校驗和。
ICMPv6報文抓包示例:
圖:ICMPv6報文抓包示例
ICMPv6錯誤報文的分類:
ICMPv6錯誤報文用于報告在轉(zhuǎn)發(fā)IPv6數(shù)據(jù)包過程中出現(xiàn)的錯誤。ICMPv6錯誤報文可以分為以下4種:
*目的不可達(dá)錯誤報文
在IPv6節(jié)點轉(zhuǎn)發(fā)IPv6報文過程中,當(dāng)設(shè)備發(fā)現(xiàn)目的地址不可達(dá)時,就會向發(fā)送報文的源節(jié)點發(fā)送ICMPv6目的不可達(dá)錯誤報文,同時報文中會攜帶引起該錯誤報文的具體原因。
目的不可達(dá)錯誤報文的Type字段值為1。根據(jù)錯誤具體原因又可以細(xì)分為:
Code=0:沒有到達(dá)目標(biāo)設(shè)備的路由。
Code=1:與目標(biāo)設(shè)備的通信被管理策略禁止。
Code=2:未指定。
Code=3:目的IP地址不可達(dá)。
*數(shù)據(jù)包過大錯誤報文
在IPv6節(jié)點轉(zhuǎn)發(fā)IPv6報文過程中,發(fā)現(xiàn)報文超過出接口的鏈路MTU時,則向發(fā)送報文的源節(jié)點發(fā)送ICMPv6數(shù)據(jù)包過大錯誤報文,其中攜帶出接口的鏈路MTU值。數(shù)據(jù)包過大錯誤報文是Path MTU發(fā)現(xiàn)機(jī)制的基礎(chǔ)。
數(shù)據(jù)包過大錯誤報文的Type字段值為2,Code字段值為0。
*時間超時錯誤報文
在IPv6報文收發(fā)過程中,當(dāng)設(shè)備收到Hop Limit字段值等于0的數(shù)據(jù)包,或者當(dāng)設(shè)備將Hop Limit字段值減為0時,會向發(fā)送報文的源節(jié)點發(fā)送ICMPv6超時錯誤報文。對于分段重組報文的操作,如果超過定時時間,也會產(chǎn)生一個ICMPv6超時報文。
時間超時錯誤報文的Type字段值為3,根據(jù)錯誤具體原因又可以細(xì)分為:
Code=0:在傳輸中超越了跳數(shù)限制。
Code=1:分片重組超時。
*參數(shù)錯誤報文
當(dāng)目的節(jié)點收到一個IPv6報文時,會對報文進(jìn)行有效性檢查,如果發(fā)現(xiàn)問題會向報文的源節(jié)點回應(yīng)一個ICMPv6參數(shù)錯誤差錯報文。
參數(shù)錯誤報文的Type字段值為4,根據(jù)錯誤具體原因又可以細(xì)分為:
Code=0:IPv6基本頭或擴(kuò)展頭的某個字段有錯誤。
Code=1:IPv6基本頭或擴(kuò)展頭的NextHeader值不可識別。
Code=2:擴(kuò)展頭中出現(xiàn)未知的選項。
ICMPv6信息報文的分類
回送請求報文:回送請求報文用于發(fā)送到目標(biāo)節(jié)點,以使目標(biāo)節(jié)點立即發(fā)回一個回送應(yīng)答報文。回送請求報文的Type字段值為128,Code字段的值為0。
回送應(yīng)答報文:當(dāng)收到一個回送請求報文時,ICMPv6會用回送應(yīng)答報文響應(yīng)?;厮蛻?yīng)答報文的Type字段的值為129,Code字段的值為0。
其他報文:
鄰居發(fā)現(xiàn)ND:
Type=133 路由器請求 RS(Router Solicitation)
Type=134 路由器公告 RA(Router Advertisement)
Type=135 鄰居請求 NS(Neighbor Solicitation)
Type=136 鄰居通告 NA(Neighbor Advertisement)
Type=137 重定向(Redirect)
多播偵聽發(fā)現(xiàn)協(xié)議MLD:
Type=130 多播聽眾查詢
Type-131 多播聽眾報告
Type=132 多播聽眾退出
————————————————
轉(zhuǎn)自:CSDN博主