ICMPv6基本知識(shí)梳理
簡(jiǎn)介
ICMPv6全稱互聯(lián)網(wǎng)控制信息協(xié)議版本六。為了與IPv6配套使用而開(kāi)發(fā)的互聯(lián)網(wǎng)控制信息協(xié)議。與IPv4一樣,IPv6也需要使用ICMP,舊版本的ICMP不能滿足IPv6全部要求,因此開(kāi)發(fā)了新版本的ICMP,稱為ICMPv6。
基本功能
1、通告網(wǎng)絡(luò)錯(cuò)誤
比如,某臺(tái)主機(jī)或整個(gè)網(wǎng)絡(luò)由于某些故障不可達(dá)。如果有指向某個(gè)端口號(hào)的TCP或UDP包沒(méi)有指明接受端,這將由ICMP報(bào)告。
2、通告網(wǎng)絡(luò)擁塞
當(dāng)路由器緩存太多包,由于傳輸速度無(wú)法達(dá)到它們的接收速度,將會(huì)生成“ ICMP 源結(jié)束”信息。對(duì)于發(fā)送者,這些信息將會(huì)導(dǎo)致傳輸速度降低。當(dāng)然,更多的 ICMP 源結(jié)束信息的生成也將引起更多的網(wǎng)絡(luò)擁塞,所以使用起來(lái)較為保守。
3、協(xié)助解決故障
ICMP支持Echo功能,即在兩個(gè)主機(jī)間一個(gè)往返路徑上發(fā)送一個(gè)包。Ping是一種基于這種特性的通用網(wǎng)絡(luò)管理工具,它將傳輸一系列的包,測(cè)量平均往返次數(shù)并計(jì)算丟失百分比。
4、通告超時(shí)
如果一個(gè)IP包的TTL降低到零,路由器就會(huì)丟棄此包,這時(shí)會(huì)生成一個(gè) ICMP 包通告這一事實(shí)。TraceRoute是一個(gè)工具,它通過(guò)發(fā)送小TTL值的包及監(jiān)視ICMP超時(shí)通告可以顯示網(wǎng)絡(luò)路由。
RFC4443
本文件描述了一組在ICMPv6(Internet Control Message Protocol)中使用的控制消息格式ICMPv6 是互聯(lián)網(wǎng)控制消息協(xié)議(Internet Control Message Protocol)的 IPv6 版本。

報(bào)文格式
通用格式
IPv6 首部和零個(gè)或多個(gè) IPv6 擴(kuò)展首部位于每個(gè) ICMPv6 消息之前。ICMP6 首部由其值為58 的Next Header 值標(biāo)識(shí),Next Header 位于緊靠 ICMPv6 首部的前一個(gè)首部中。(這與用于標(biāo)識(shí)ICMPv4 的值不同)

請(qǐng)求報(bào)文

回應(yīng)報(bào)文

報(bào)文TYPE

IPv4不含多播和鄰居發(fā)現(xiàn)
因?yàn)镮Pv6的擴(kuò)展頭長(zhǎng)度任意,不像IPv4有40字節(jié)的限制,所以需要PTB錯(cuò)文報(bào)文進(jìn)行限制
組播偵聽(tīng)發(fā)現(xiàn)協(xié)議MLD
????組播偵聽(tīng)發(fā)現(xiàn)協(xié)議MLD用于IPv6組播中的組成員管理,其基本原理和功能與IGMP相似。MLD的目的是使能每個(gè)IPv6路由器發(fā)現(xiàn)在其直連網(wǎng)絡(luò)上的組播偵聽(tīng)者(即希望接收組播數(shù)據(jù)的節(jié)點(diǎn))的存在,并且能明確發(fā)現(xiàn)這些鄰居節(jié)點(diǎn)所感興趣的組播地址。然后提供這些消息給路由器所使用的組播路由協(xié)議,以確保組播數(shù)據(jù)轉(zhuǎn)發(fā)至存在接收者的所有鏈接,IGMP是專門服務(wù)區(qū)IPV4的,并不支持拓展,所以開(kāi)發(fā)出來(lái)了一個(gè)新的組播協(xié)議MLD專門服務(wù)于IPV6
????組播協(xié)議是運(yùn)行于組播模型中最后一跳路由器和接收者之間的,用于建立和維護(hù)組播組成員之間的關(guān)系
????如果路由器有不止一個(gè)接口在同一網(wǎng)絡(luò)上,它只需要在其中一個(gè)接口上運(yùn)行此協(xié)議。另一方面,對(duì)偵聽(tīng)者來(lái)說(shuō),則必須在所有接口運(yùn)行此協(xié)議以便上層協(xié)議從接口接收所需要的組播數(shù)據(jù)
Tips:
MLD使用ICMP來(lái)攜帶消息所有的MLD報(bào)文被限制在本地鏈路上,跳數(shù)為1
MLD用于IPv6路由器在其直連網(wǎng)段上發(fā)現(xiàn)組播偵聽(tīng)者
路由器通過(guò)MLD協(xié)議,可以了解到在自己的直連網(wǎng)段上是否有組播組的偵聽(tīng)者,并在數(shù)據(jù)庫(kù)里做相應(yīng)記錄。同時(shí),路由器還維護(hù)與這些組播地址相聯(lián)系的定時(shí)器信息
配置MLD的路由器使用IPv6單播鏈路本地地址作為源地址發(fā)送MLD報(bào)文
鄰居發(fā)現(xiàn)協(xié)議
鄰居發(fā)現(xiàn)協(xié)議是IPv6的一個(gè)關(guān)鍵協(xié)議,它組合了IPv4中的ARP、ICMP路由器發(fā)現(xiàn)和ICMP重定向等協(xié)議,并對(duì)它們作了改進(jìn)。作為IPv6的基礎(chǔ)性協(xié)議,NDP還提供了前綴發(fā)現(xiàn)、鄰居不可達(dá)檢測(cè)、重復(fù)地址監(jiān)測(cè)、地址自動(dòng)配置等功能。鄰居發(fā)現(xiàn)協(xié)議主要包括兩種格式的ICMP6報(bào)文:鄰居請(qǐng)求NS(NeighborSolicitation)和鄰居宣告NA(NeighborAdvertisement)。
當(dāng)局域網(wǎng)中的兩臺(tái)主機(jī)A與B之問(wèn)通信前,A必須首先獲取B的MAC地址,主要步驟如下:
A以廣播的方式向FE02::1發(fā)送一個(gè)ICMPv6NS消息,詢問(wèn)B的MAC地址。局域網(wǎng)中每個(gè)節(jié)點(diǎn)都能接收到該Ns請(qǐng)求,當(dāng)一個(gè)節(jié)點(diǎn)接收到該Ns請(qǐng)求后,將目標(biāo)MAC地址與自身MAC地址進(jìn)行比較,如果不一致,則不應(yīng)答;反之,如果所請(qǐng)求的MAC地址與自身MAC地址相等,則回應(yīng)一個(gè)鄰居宣告消息NA,表明自己就是所要請(qǐng)求的節(jié)點(diǎn)。本例中,在正常情況下,只有B回應(yīng)NS請(qǐng)求,應(yīng)答包中包含B的MAC地址。
首部檢驗(yàn)和

Icmp中,首部檢驗(yàn)和僅僅包含icmp頭部
在icmpv6中,首部檢驗(yàn)和的計(jì)算方式與icmp大有不同。首部檢驗(yàn)和除了包括icmp頭部還有:
Pseudo-header(偽頭部)包含源ip,目標(biāo)ip,有效載荷長(zhǎng)度,next header(被假定為58)
ICMPv6需要額外保證源、目標(biāo)ip、有效載荷的長(zhǎng)度是為了安全需要,因?yàn)閕pv6為了處理ip分組更快而不進(jìn)行首部檢查和。ipv4中首部檢查和由路由器完成,耗時(shí)。舍去首部檢查和,在數(shù)據(jù)鏈路層和傳輸層協(xié)議中執(zhí)行檢驗(yàn)操作能進(jìn)一步提高速率和可靠性。
傳送規(guī)則
