2016-4-18 ICMPv6協議[RFC2463]--報文詳解

Technorati 標籤: IPv6,ICMPv6,CCIE,路由,ICMP差錯網絡

概要ide

--ICMPv6 (Internet Control Message protocol for the IPv6)是IPv6的基礎協議之一.定義在RFC2463中.工具

--用於傳遞報文轉發中產生的信息或者錯誤.spa

--ICMPv6定義的報文被普遍的應用在其餘協議中.包括:NDP(neighbor discovery protocol, PathMTU路徑發現機制,MLD協議[替代IPv4中組播的IGMP協議]等等)debug

ICMPv6包頭是屬於上層協議的報頭.他必定會處於全部的擴展報頭後面.code

在指明ICMPv6的報頭的時候,基本包頭或者是擴展報頭中的"Next header=58"[Next-header=0x3a],這樣IPv6的基本包頭或者擴展報頭才能和ICMPv6報頭進行關聯.orm

clip_p_w_picpath002

下面的報文,就是一個ICMPv6的報文.blog

這裏面,有一個IPv6的基本包頭,在Next-header裏面指定的是0x3a.指定的就是ICMPv6的協議報頭.接口

附件是相關的抓包.ip

clip_p_w_picpath004

ICMPv6type類:

clip_p_w_picpath006

1, 錯誤類消息(error message),也稱爲差錯報文,最高bit0,也就是ICMPv6 type=[0-127].

clip_p_w_picpath008

NOTES:若是是錯誤消息的話,那麼ICMPv6報頭中的type會是在0-127之間.

差錯報文:

---1,差錯報文(RFC2463)

~~~~目的不可達Destination unreachable (type=1)

Code=0: 沒有達到目標的路由

若是在網絡中,R1--R2--R3.

R1 ping "R5"的環回口,保證這個"R5"在全部網絡中都沒有路由存在.

那麼R1會把ICMP送向R2這個默認網關,可是R2會給R1迴應一個差錯報文,code=0.標示沒有達到目標的路由.

R1--R2--R3

在R1上面ping 2055::1,這個環回口沒有任何路由有這個路由.

 clip_p_w_picpath010

經過抓包來看,R1 ping 2055:1,把ICMPv6報文甩給R2的e0/0 input,結果由於R2收到了之後沒有路由信息,就直接R2給R1迴應ICMPv6的差錯報文.Type=1, code=0,沒有路由.

clip_p_w_picpath012

Code=1: 與目標的通訊被管理策略禁止

這種狀況,通常是在中途鏈路作了ACL等策略禁止ICMP報文通行.

下面就是一個作了ACL的策略ping包的抓包.

R1---[e0/0]R2---R3

在R2上面的e0/0的input方向應用了一個ACL.禁止R1發送的全部ICMP報文.

下面紅色框中就是R2迴應R1的一個ICMP差錯報文,code=1.與目標的通訊被管理策略禁止.  
clip_p_w_picpath014

●Code=2: 未指定

Code=3: 地址不可達

這裏先仍是要說一下,地址不可達,和code=0,路由不可達..有什麼區別.code=3,是說我有Destination的路由,可是地址通不了.Code=0是說徹底沒有路由.

模擬過程:這裏是說,R1--R2---2023::x/64---R3

這裏R2和R3相互鏈接的接口地址分別是:2023::2/64和2023::3/64

可是,在R1上面去ping 2023::10/64這個徹底不存在的地址.數據從R1甩到R2之後,R2有路由,可是這個"2023::10/64"是徹底不可達的.

模擬拓撲圖爲:R1---2012::x/64---R2(2023::2/64)-----(2023::3/64)R3

在R1上面ping 2023::10這個不存在的地址.

在R1上面debug的信息以下:

*Apr 18 16:31:24.045: ICMPv6: Sent echo request, Src=2012::1, Dst=2023::10.

*Apr 18 16:31:27.265: ICMPv6: Received Unreachable code 3, Src=2012::2, Dst=2012::1

PS.R2在返回ICMP報文code=3的時候,會有必定的時延,由於R2收到報文之後,由於有路由,因此R2還要花時間進行地址查找,發送NS出去,等待NA回來.若是NA連續不會超時,這個時候R2纔會反饋ICMPv6的差錯報文.

clip_p_w_picpath016

Code=4: 端口不可達

關於這點,用traceroute 工具便可.

R1---R2---R3

登錄到R1上面traceroute R3的環回口.這個時候會相應端口不可達.

R1: traceroute 2033::1

這個時候在R1上面收到ICMP差錯報文,code=4的報文.

*Apr 18 17:32:23.110: ICMPv6: Received Time Exceeded, Src=2012::2, Dst=2012::1

*Apr 18 17:32:23.116: ICMPv6: Received Time Exceeded, Src=2012::2, Dst=2012::1

*Apr 18 17:32:23.121: ICMPv6: Received Time Exceeded, Src=2012::2, Dst=2012::1

*Apr 18 17:32:23.127: ICMPv6: Received Unreachable code 4, Src=2023::3, Dst=2012::1

*Apr 18 17:32:23.132: ICMPv6: Received Unreachable code 4, Src=2023::3, Dst=2012::1

*Apr 18 17:32:23.137: ICMPv6: Received Unreachable code 4, Src=2023::3, Dst=2012::1

clip_p_w_picpath018

~~~~數據包超長Packet Too Big (Type=2)

●Code=0

~~~~超時Time Exceeded (Type=3)

●Code=0: 在傳輸中超越了跳數限制(hot-limit超時,IPv4的TTL超時)

●Code=1: 分片重組時超時

~~~~參數問題Parameter Problem (Type=4)

●Code=0: 遇到錯誤的報頭字段

●Code=1: 遇到沒法識別的Next-header

●Code=2: 遇到沒法識別的IPv6選項




---2,信息類消息(information message),也稱爲信息報文,最高bit1,也就是ICMPv6 Type=[128-255].

NOTES:若是是信息類的消息,那麼type的值會在128-255之間.

信息類報文(RFC2463),咱們用得最多的就是type=128 Echo request和129, echo reply.

~~~~回送請求報文(Echo Request)

●Type=128, Code=0.

 clip_p_w_picpath020

~~~~回送應答報文(Echo Reply)

●Type=129, Code=0.

clip_p_w_picpath022

附件有我作實驗的相關ICMP6的抓包,有須要的朋友能夠下載對比進行梳理概念.

相關文章
相關標籤/搜索