在RFC2463中定義Internet Control Message Protocol Version 6(ICMPv6協(xié)議),ICMP是在TCP/IP網(wǎng)絡(luò)中傳遞網(wǎng)絡(luò)控制信息的主要手段,同時,ICMP還提供了差錯報告的功能。在IPv6中,ICMPv6實現(xiàn)IPv4中ICMP、ARP、RARP和IGMP的功能;

1. ICMPv6報文的基本格式
graph LR
類型/1字節(jié)-->代碼/1字節(jié)
代碼/1字節(jié)-->校驗和/2字節(jié)
校驗和/2字節(jié)-->ICMP報文體/可變長
- 類型:標(biāo)識ICMPv6報文類型,它的值根據(jù)報文的內(nèi)容來確定。
- 代碼:用于確定ICMPv6進(jìn)一步的信息,對同一類型的報文進(jìn)行了更詳細(xì)的分類。
- 校驗和:用于檢測ICMPv6的報文是否正確傳送。
- 報文體:用于返回出錯的參數(shù)和記錄出錯報文的片段,幫助源結(jié)點判斷錯誤的原因?;蚴瞧渌鼌?shù)。

ICMPv6報文類型

2 差錯報文
2.1 目地不可達(dá)報文(type=1)
| 代碼字段值 | 對應(yīng)的原因 |
|---|---|
| 0 | 沒有到達(dá)目的結(jié)點的路由,路由器無法轉(zhuǎn)發(fā) |
| 1 | 路由器或防火墻的管理策略上禁止與某個目的結(jié)點通信 |
| 3 | 因鏈路或無法解析到目的結(jié)點鏈路層地址,導(dǎo)致目的地址不可到達(dá) |
| 4 | IPv6分組己經(jīng)傳送到目的IP結(jié)點,但是不能遞交給目的TCP或UDP端口的端口不可到達(dá) |
2.2 分組太長(type=2)
當(dāng)路由器轉(zhuǎn)發(fā)一個分組時,發(fā)現(xiàn)分組的長度大于準(zhǔn)備轉(zhuǎn)發(fā)該分組的出口鏈路MTU ,那么路由器只能丟器該分組,并且向發(fā)送該分組的源結(jié)點發(fā)送"包過大報文”,報告出現(xiàn)差錯。代碼值為0 。
應(yīng)用:Path MTU Discovery
2.3 超時報文(type=3)
當(dāng)路由器接收到一個分組時發(fā)現(xiàn)分組的跳數(shù)限制字段值為0或1 ,路由器將丟棄該分組,并且向發(fā)送該分組的源結(jié)點發(fā)送"超時報文",報告出錯。
| 代碼字段值 | 對應(yīng)的原因 |
|---|---|
| 0 | 表示傳送過程中超過了跳數(shù)的限制值; |
| 1 | 表示分段重組超時. |
2.4 參數(shù)問題報文(type=4)
當(dāng)路由器或主機接收到一個分組的基本報頭或擴展報頭出現(xiàn)錯誤,而不能繼續(xù)處理時,路由器將丟棄該分組,并且發(fā)送"參數(shù)問題報文” ,報告出錯。
| 代碼字段值 | 對應(yīng)的原因 |
|---|---|
| 0 | 表示報頭字段錯誤 |
| 1 | 表示無法識別"下一個報頭” |
| 2 | 表示無法識別IPv6選項 |
2.5 PMTU發(fā)現(xiàn)功能
Path MTU Discovery是利用ICMPv6分組太長差錯報文,重復(fù)的檢測源到達(dá)目的節(jié)點的指定路徑上所有鏈路的最小鏈路MTU值。

3. 消息報文
3.1 回送請求報文
類型字段值為128 ,表示該ICMPv6信息報文中的回送請求報文。代碼字段在發(fā)送端置為0校驗和字段在計算之前被置0.標(biāo)識字段與序列號字段用于在回送請求報文與回送應(yīng)答報文之間建立對應(yīng)關(guān)系。數(shù)據(jù)字段是診斷的內(nèi)容,為8b的整數(shù)倍。
3.2 回送應(yīng)答報文
當(dāng)結(jié)點收到一個回送請求報文時,回送請求報文會發(fā)送一個回送應(yīng)答報文。結(jié)構(gòu)與回送請求報文相同。類型字段值為129.
常見應(yīng)用:
1、Ping是測試目的主機是否能夠到達(dá)的一種通用的方法。如下圖:

2、tracert是IP 網(wǎng)絡(luò)中重要的診斷工具之一,它可以給出到達(dá)目的地址的路徑。其工作原理如下圖:

4. ICMPv4與ICMPv6消息對應(yīng)表
| ICMPv4消息 | ICMPv6的對應(yīng)消息 |
|---|---|
| 目的不可達(dá)-網(wǎng)絡(luò)不可達(dá)(類型3,代碼0) | 目的不可達(dá)-沒有目的地址的路由(類似1,代碼0) |
| 目的不可達(dá)-主機不可達(dá)(類型3,代碼1) | 目的不可達(dá)-地址不可達(dá)(類型1,代碼3) |
| 目的不可達(dá)-協(xié)議不可達(dá)(類型3,代碼2) | 參數(shù)問題-無法識別下一個頭部的類型(類型4,代碼1) |
| 目的不可達(dá)-端口不可達(dá)(類型3,代碼3) | 目的不可達(dá)-端口不可達(dá)(類型1,代碼4) |
| 目的不可達(dá)-需要分片并將DF置位(類型3,代碼4) | 數(shù)據(jù)包過大(類型2,代碼0) |
| 目的不可達(dá)-與目標(biāo)主機的通訊被管理策略禁止(類型3,代碼10) | 目的不可達(dá)-與目標(biāo)的通信被管理策略禁止(類型1,代碼1) |
| 源站抑制(類型4,代碼0) | IPv6中不發(fā)這個消息 |
| 重定向(類型5,代碼0) | 鄰居節(jié)點發(fā)現(xiàn)重定向消息(類型137,代碼0) |
| 超時-傳輸中的TTL超時(類型11,代碼1) | 超時-超過傳輸中的跳數(shù)限制(類型3,代碼0) |
| 超時-分片重組超時(類型11,代碼1) | 超時-分片重組超時(類型3,代碼1) |
| 參數(shù)問題(類型12,代碼0) | 參數(shù)問題(類型4,代碼0或代碼2) |