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
下面的報文,就是一個ICMPv6的報文.blog
這裏面,有一個IPv6的基本包頭,在Next-header裏面指定的是0x3a.指定的就是ICMPv6的協議報頭.接口
附件是相關的抓包.ip
ICMPv6的type類:
1, 錯誤類消息(error message),也稱爲差錯報文,最高bit爲0,也就是ICMPv6 type=[0-127].
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,這個環回口沒有任何路由有這個路由.
經過抓包來看,R1 ping 2055:1,把ICMPv6報文甩給R2的e0/0 input,結果由於R2收到了之後沒有路由信息,就直接R2給R1迴應ICMPv6的差錯報文.Type=1, code=0,沒有路由.
●Code=1: 與目標的通訊被管理策略禁止
這種狀況,通常是在中途鏈路作了ACL等策略禁止ICMP報文通行.
下面就是一個作了ACL的策略ping包的抓包.
R1---[e0/0]R2---R3
在R2上面的e0/0的input方向應用了一個ACL.禁止R1發送的全部ICMP報文.
下面紅色框中就是R2迴應R1的一個ICMP差錯報文,code=1.與目標的通訊被管理策略禁止.
●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的差錯報文.
●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
~~~~數據包超長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),也稱爲信息報文,最高bit爲1,也就是ICMPv6 Type=[128-255].
NOTES:若是是信息類的消息,那麼type的值會在128-255之間.
信息類報文(RFC2463),咱們用得最多的就是type=128 Echo request和129, echo reply.
~~~~回送請求報文(Echo Request)
●Type=128, Code=0.
~~~~回送應答報文(Echo Reply)
●Type=129, Code=0.
附件有我作實驗的相關ICMP6的抓包,有須要的朋友能夠下載對比進行梳理概念.