轉(zhuǎn)載請注明以下內(nèi)容:
來源:公眾號【網(wǎng)絡(luò)技術(shù)干貨圈】
作者:圈圈
ID:wljsghq
IPV6基礎(chǔ)之鄰居發(fā)現(xiàn)
寫這篇文章的啟發(fā)是在群里,看到一個小兄弟說有嘗做一道IPV6的基礎(chǔ)題,看到該消息想著自己也沒啥事,就做一下,弄個飯錢也還行,然后就開始了。
拓?fù)鋱D為題目的拓?fù)?/p>
拓?fù)鋱D以上圖為例子:
接下來就分析一下ipv6報文是怎么進(jìn)行通信的
在IPV4中,當(dāng)主機需要和目標(biāo)主機通信時,必須先通過ARP協(xié)議獲得目的主機的鏈路層地址。在IPV6中,同樣需要從IP地址解析到鏈路層地址的功能。鄰居發(fā)現(xiàn)協(xié)議實現(xiàn)了這個功能。
ARP報文是直接封裝在以太網(wǎng)報文中,以太網(wǎng)協(xié)議類型為0x0806,普遍觀點認(rèn)為ARP定位為2.5層的協(xié)議。ND本身基于ICMPV6實現(xiàn),以太網(wǎng)協(xié)議類型為0x86DD,即IPV6報文,IPV6下一個報頭字段值為58,表示ICMPV6報文,由于ND協(xié)議使用的所有報文均封裝在ICMPV6報文中,一般來說,ND被看作第3層的協(xié)議。在第三層完成地址解析,主要帶來以下幾個好處:
(1)地址解析在三層完成,不同的二層介質(zhì)可以采用相同的地址解析協(xié)議。
(2)可以使用三層的安全機制避免地址解析攻擊
(3)使用組播方式發(fā)送請求報文,減少了二層網(wǎng)絡(luò)的性能壓力。
通過一個圖展示請求跟通告的流程
IPV6鄰居請求
以上圖為例,當(dāng)PC2訪問PC1時,在PC1接口上抓包,看到的鄰居發(fā)現(xiàn)報文是什么樣的?
鄰居請求
IPv6節(jié)點通過鄰居請求NS(Neighbor Solicitation)消息可以得到鄰居的鏈路層地址,檢查鄰居是否可達(dá),也可以進(jìn)行重復(fù)地址檢測。
type值位135為NS報文
請求的目標(biāo)的IP地址
請求目標(biāo)IP地址是什么東西?
從上圖來來講,就是我路由器要去訪問PC1,那么我知道PC1的的IP地址,但是我不知道他的MAC地址,我要去根據(jù)IP地址找到他的MAC地址。
在報文中,這個請求的目標(biāo)IP地址是放在Target Address字段里面的,它必須不是多播地址。
ICMPV6 Option字段
Source link-layer address源鏈路層地址:發(fā)送者的鏈路層地址,如果知道。如果Source Address是未指定地址,必須不包括在內(nèi)。否則,有地址的鏈路層上應(yīng)當(dāng)包括源鏈路層地址。
被請求組播地址的組成
首先我們看到報文,從三層開始分析
發(fā)起這個報文的源地址是一個鏈路本地地址,而這個地址剛好是R路由器和PC1所連接的接口地址,這說明了在路由器上不存在著PC1的MAC地址,無法進(jìn)行普通報文的二層封裝,需要獲取到MAC地址以此來封裝目的MAC。
然后我們看三層報文中的目的地址是一個不認(rèn)識的地址,那么這個地址是從什么地方而來的呢?這又是干什么的?
在圖中我們把這個地址標(biāo)注為被請求節(jié)點組播地址,那么這個被請求節(jié)點組播地址是用來干什么的?
我們現(xiàn)在就對這個被請求節(jié)點組播地址來分析一下看它的地址,把這個地址分為三部分來看
ff02:ff3a:a9d1
首先ff02::1是一個組播地址,簡單理解組播地址就是同一個組的地址都能接受到該報文。
然后在看ff02:ff
先看前面這104位地址,這104位地址的組成是在組播地址后面加了兩個ff,這就是在RFC中規(guī)定的被請求節(jié)點組播地址的前綴
然后我們看后面24位地址
3a:a9d1這串?dāng)?shù)字在上面的圖中看著是不是有點眼熟呢?
觀察一下,請求的單播地址,也就是PC1的地址最后面的24位數(shù)字不就是3a:a9d1,這樣一看,原來他們之間還是有關(guān)聯(lián)的
在R路由器發(fā)起這個報文的時候,目的地址其實就是PC1。
被請求節(jié)點組播MAC的組成
以太網(wǎng)傳輸IP單播報文的時候,鏈路層封裝的目的MAC地址使用的是接收者的MAC地址。但是在傳輸組播數(shù)據(jù)時,其目的地不再是一個具體的接收者,而是一個成員不確定的組,因此在數(shù)據(jù)鏈路層使用的是組播MAC地址。在802.3標(biāo)準(zhǔn)中,MAC地址的高字節(jié)最低bit位是組播地址標(biāo)識位,該bit為1,表示該地址為組播MAC地址。廣播MAC地址可以看作是組播的特殊形式:0xFFFF-FFFF-FFFF。
IANA規(guī)定,IPv6組播MAC地址的高16位為0x3333,低32位為IPv6組播地址的低32位。
安裝IANA規(guī)定我們來解析一下這個被請求節(jié)點組播MAC是否符合規(guī)定
我們就先看高16位
33:33 符合IANA規(guī)定的高16位對吧
我們在看后面的32位
IPV6組播地址:ff02:ff3a:a9d1
組播MAC地址低位32位:ffa9:d1
完成符合IANA規(guī)定的組播MAC
IPV6鄰居通告
鄰居通告
ICMPv6鄰居通告NA(Neighbor Advertisement)消息是IPv6節(jié)點對ICMPv6鄰居請求NS(Neighbor Solicitation)消息的響應(yīng),同時IPv6節(jié)點在鏈路層變化時也可以主動發(fā)送NA消息。
對于請求的通告
從圖中我們看Target Address字段,他是自身的IPV6地址,這是在給路由器回復(fù)確認(rèn),你請求的地址給你回復(fù)了。
對于請求的通告,是在NS消息(該消息催促這個通告)中的Target Address字段。對于非請求通告,是其鏈路層地址已經(jīng)改變的地址。Target Address必須不是多播地址。
ICMPV6 Options字段
Target link-layer address: 目標(biāo)的鏈路層地址,即,通告發(fā)送者。當(dāng)響應(yīng)多播請求時,在有地址的鏈路層上必須包括此選項。當(dāng)響應(yīng)單播Neighbor Solicitation時應(yīng)當(dāng)包括此選項,響應(yīng)自身的MAC地址給路由器。
IPV6鄰居表
在IPV4中我們可以通過ARP表項查看IP地址對應(yīng)的MAC地址和接口,那么在IPV6中我們是不是也有類似ARP表項的一種表呢?
沒錯,在IPV6中我們可以通過鄰居表查看到對應(yīng)的信息
通過以下命令可以查看鄰居表
displayipv6neighbors #查看鄰居表以及鄰居表回顯信息displayipv6neighbors ----------------------------------------------------------------------------- IPv6Address:20014005211FE3A:A9D1 Link-layer:5489-9821-4f6dState:REACH Interface:GE0/0/0Age:0 VLAN:-CEVLAN:- VPNname:IsRouter:FALSE SecureFLAG:UN-SECURE IPv6Address:20014005:9 Link-layer:5489-9807-7f7cState:REACH Interface:GE0/0/1Age:0 VLAN:-CEVLAN:- VPNname:IsRouter:FALSE SecureFLAG:UN-SECURE IPv6Address:20014005:10 Link-layer:5489-985b-37dbState:REACH Interface:GE0/0/1Age:0 VLAN:-CEVLAN:- VPNname:IsRouter:FALSE SecureFLAG:UN-SECURE ----------------------------------------------------------------------------- Total:3Dynamic:3Static:0
回顯字段解釋
項目 | 描述 |
---|---|
IPv6 Address | 鄰居的IPv6地址。 |
Link-layer | 鄰居的鏈路層地址(鄰居的MAC地址)。 |
State | 鄰居項的狀態(tài),有以下5種狀態(tài): INCMP:鄰居不可達(dá)。正在進(jìn)行地址解析,鄰居的鏈路層地址未探測到,如果解析成功,則進(jìn)入REACH狀態(tài)。 REACH:鄰居可達(dá)。表示在規(guī)定時間(鄰居可達(dá)時間,缺省情況下是30秒)內(nèi)鄰居可達(dá)。如果超過規(guī)定時間,該表項沒有被使用,則表項進(jìn)入STALE狀態(tài)。 STALE:鄰居是否可達(dá)未知。表明該表項在規(guī)定時間(鄰居可達(dá)時間,缺省情況下是30秒)內(nèi)沒有被使用。此時除非有發(fā)送到鄰居的報文,否則不對鄰居是否可達(dá)進(jìn)行探測。 DELAY:鄰居是否可達(dá)未知。已向鄰居發(fā)送報文,如果在指定時間內(nèi)沒有收到響應(yīng),則進(jìn)入PROBE狀態(tài)。 PROBE:鄰居是否可達(dá)未知。已向鄰居發(fā)送鄰居請求報文,探測鄰居是否可達(dá)。在規(guī)定時間內(nèi)收到回復(fù),則進(jìn)入REACH狀態(tài);沒有收到回復(fù),則進(jìn)入INCMP狀態(tài)。 |
Interface | 鄰居項所屬的接口名稱。 |
Age | 鄰居項的建立時間,分為靜態(tài)和動態(tài)兩種情況: 靜態(tài)項顯示“–”。 動態(tài)項顯示上次可達(dá)以來經(jīng)過的時間(單位是分鐘),如果始終不可達(dá)則顯示“#”(只適用于動態(tài)項)。 |
VLAN | 鄰居所屬的VLAN編號。 |
VPN name | 鄰居所屬的VPN實例名稱。 |
CEVLAN | 內(nèi)層VLAN編號。 |
Is Router | 鄰居發(fā)送的NA報文中是否攜帶R標(biāo)記: 當(dāng)NA報文中攜帶R標(biāo)記時,則顯示“TRUE”。此時鄰居是路由設(shè)備。 當(dāng)NA報文中沒有攜帶R標(biāo)記時,則顯示“FALSE”。此時鄰居可能是PC或者是發(fā)送的NA報文中沒有攜帶R標(biāo)記的路由設(shè)備。 |
Secure FLAG | 該鄰居表項是否安全,分為安全和非安全兩種情況: 如果是靜態(tài)鄰居表項或鄰居使能了鄰居安全功能則顯示“SECURE”。 如果鄰居沒有使能安全功能,并且是動態(tài)鄰居表項則顯示“UN-SECURE”。 |
Total | 所有的鄰居表項數(shù)目。 |
Dynamic | 動態(tài)鄰居表項數(shù)目。 |
Static | 靜態(tài)鄰居表項數(shù)目。 |
-
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5460瀏覽量
172722 -
通信
+關(guān)注
關(guān)注
18文章
6070瀏覽量
136423 -
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7599瀏覽量
89243 -
IPv6
+關(guān)注
關(guān)注
6文章
690瀏覽量
59551
原文標(biāo)題:【路由交換】IPV6基礎(chǔ)之鄰居發(fā)現(xiàn)
文章出處:【微信號:網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號:網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論