《深入解析IPv6(第3版)》——第10章 IPv6路由选择10.1 IPv6中的路由选择
本節(jié)書摘來自異步社區(qū)《深入解析IPv6(第3版)》一書中的第10章,第10.1節(jié),作者: 【美】Joseph Davies 更多章節(jié)內容可以訪問云棲社區(qū)“異步社區(qū)”公眾號查看。
第10章 IPv6路由選擇
在完成本章的學習之后,讀者應該能夠完成以下任務:
- 描述IPv6路由表的內容;
- 解釋端到端的IPv6數據包的傳輸過程;
- 理解IPv6網絡中使用的動態(tài)路由選擇和路由協議;
- 描述Windows中IPv6支持的路由選擇協議。
10.1 IPv6中的路由選擇
與IPv4類似,典型的IPv6節(jié)點也會使用本地IPv6路由表來判斷如何轉發(fā)數據包。在初始化時,IPv6會自動創(chuàng)建默認路由表條目,它會根據靜態(tài)配置,或者基于接收到的包含鏈路上前綴及路由的“路由器通告”消息,或者使用IPv6動態(tài)主機配置協議(DHCPv6)來添加條目。
運行Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista系統的IPv6協議的所有節(jié)點都有一個路由表。路由表中存儲了有關IPv6地址前綴和如何到達它們(直接或者間接)的信息。在檢查IPv6路由表之前,IPv6會在目的緩存中查找與正在轉發(fā)的IPv6數據包中目的地址相匹配的條目。如果目的緩存中沒有對應目的地址的條目,IPv6就會使用路由表來判斷如下信息。
下一跳地址:對于直接傳送(即目的地址在本地鏈路上的情形),下一跳地址就是數據包IPv6頭部中的目的地址。對于間接傳送(即目的地址不在本地鏈路上的情形),下一跳地址通常是鄰居路由器的鏈路本地地址。
用于轉發(fā)的接口(下一跳接口):下一跳接口標識了用于向目的(直接傳送)或鄰居路由器(間接傳送)轉發(fā)數據包的物理或邏輯接口。
在IPv6確定了下一跳地址和接口之后,就會在目的緩存中添加一個條目。如果路由表的內容沒有改變,IPv6就會對去往該目的地址的后續(xù)數據包使用目的緩存中的條目進行轉發(fā),而不再查看路由表。
10.1.1 IPv6路由表條目類型
IPv6路由表條目通常會存儲如下類型的路由。
直連子網或網絡路由:直連子網或地址前綴的路由。子網路由的前綴長度是64位。網絡路由對一些單播地址空間進行了匯總,其前綴長度小于64位。
遠程子網或網絡路由:非直連子網或地址前綴,但可以通過鄰居路由器到達的路由。遠程子網路由的前綴長度是64位。遠程網絡對一些IPv6地址空間進行了匯總,其前綴長度小于64位。例如遠程網絡路由fd9c:31f1:2a59::/48,這是聚集了某個機構站點內所有地址空間的唯一本地地址前綴的路由。
主機路由:到達特定IPv6地址的路由。主機路由允許針對每個具體的IPv6地址進行路由轉發(fā)。對于主機路由,地址前綴是一個128位前綴長度的特定IPv6地址。
默認路由:該路由是對所有IPv6流量的匯總,當無法找到更精確的主機、子網或網絡路由時,就會使用這個默認路由。默認路由地址前綴是::/0。
10.1.2 路由判斷過程
為了判斷使用路由表中的哪個條目來執(zhí)行轉發(fā),IPv6路由器會執(zhí)行如下過程。
1.對于路由表中的每個條目,將路由地址前綴中的位與目的地址中同樣的位作比較,需要比較的位的個數已在路由的前綴長度指定。按照路由前綴長度指定的位數,如果地址前綴的所有位都與目的IPv6地址的所有位匹配,則該路由與目的相匹配。
2.編譯匹配路由的列表,選擇可用而且有前綴長度最長的路由,即與目的地址匹配了最多位數的路由。這個最長匹配路由就是到達目的的最確切路由。如果存在多個最長匹配路由(例如,到達同一個遠程網絡前綴的多個路由),則選擇度量(metric)最小的路由。如果存在多個最長匹配和度量值最小的可用路由,IPv6則可以選擇使用其中任意一個條目。RFC 4191描述了在多個匹配路由并且最小度量相同時,IPv6如何進行選擇。
注釋
這個過程與IPv4路由器用來判斷最近匹配路由是同樣的過程。
對任意給定目的地址,這個過程會按下述次序尋找匹配的路由。
1.匹配目的地址的主機路由(所有128位都匹配)。
2.匹配目的地址的子網路由(前64位匹配)。
3.擁有與目的地址最長匹配的前綴的網絡路由(前n位匹配,n小于64)。
4.默認路由(地址前綴::/0)。
路由判斷過程會在路由表中選擇一條路由。選中的路由會產生一個下一跳地址和接口。如果路由判斷過程無法在某個路由器上找到路由,IPv6就會向發(fā)送方主機發(fā)送一條ICMPv6目的不可達-無到達目的的消息,并丟棄該數據包。相反,如果發(fā)送方主機的路由判斷過程沒有找到路由,則IPv6就會聲明出現了一個錯誤。
10.1.3 強主機行為和弱主機行為
在弱主機模式下,IPv6主機可以在沒有分配要發(fā)送的數據包的源IPv6地址的接口上發(fā)送數據包。這就是弱主機發(fā)送行為。IPv6主機也可以在沒有分配要接收的數據包的目的IP地址的接口上接收包。這就是弱主機接收行為。
在強主機模式下,發(fā)送和接收行為是不一樣的。在強主機發(fā)送中,只有當一個接口上分配了要發(fā)送的數據包的源IPv6地址,主機才能在該接口上發(fā)送數據包。在強主機接收中,只有當一個接口上分配了要接收的數據包的目的IP地址,主機才能在該接口上接收數據包。
對于準備發(fā)送的包,IPv6會首先檢查其是否已指定源地址。如果沒有,IPv6則會在路由表中對目的地址進行非約束查找。在非約束查找中,路由表中的所有路由都會被考慮在內。接下來,IPv6會根據為該目的地址選中的路由來確定下一跳接口(用于把包放到鏈路層的接口)和下一跳地址。然后,根據下一跳接口,IPv6會視需要使用(RFC 3484定義的)地址選擇過程來判斷最佳的源地址。此時,IPv6就具備了發(fā)送數據包所需要的一切:源和目的地址、下一跳接口以及下一跳地址。
如果指定了源地址,則也就知道了源接口。源接口分配到了源地址。然后,IPv6會判斷該源接口上是否啟用了強主機發(fā)送。如果禁用了強主機發(fā)送,那么IPv6就會在路由表中對數據包的目的地址進行非約束查找。然后,IPv6會根據目的的最佳匹配路由判斷出下一跳接口和下一跳地址。這樣,IPv6就有了源和目的地址、下一跳接口以及下一跳地址。注意,當源接口上禁用了強主機發(fā)送行為時,下一跳接口可能和源接口不同。
如果源接口上啟用了強主機發(fā)送,IPv6就會在路由表中對數據包的目的地址進行約束查找。在約束查找中,IPv6只會考慮那些擁有源接口的下一跳接口的路由。接下來,IPv6會根據為目的選中的路由判斷出下一跳地址。這樣,IPv6就有了源和目的地址、下一跳接口和下一跳地址。注意,當源接口上啟用了強主機發(fā)送行為時,下一跳接口總是和源接口一樣。若源地址已指定,則約束查找會選擇一個和目的最匹配的、在路由表的眾多路由器中有較高度量的路由。
運行Windows Server 2012、Windows Server 2008 R2、Windows Server 2008、Windows 8、Windows 7和Windows Vista的計算機默認為發(fā)送IPv6包支持強主機模式。可以使用下述命令為發(fā)送IPv6包啟用弱主機模式:netsh interface ipv6 set interface Interface NameOrIndex weakhostsend=enabled。對于運行Windows Server 2012或Windows 8的主機,也可以在Windows PowerShell命令行中使用命令Set-NetIPInterface -InterfaceAlias Name -Address Family IPv6 -WeakHostSend來啟用弱主機模式。
10.1.4 Windows Server 2008和Windows Vista的IPv6路由表示例
可使用下列命令,來查看運行Window系統的計算機的IPv6路由表:
- Get-NetRoute(Windows Server 2012或Windows 8);
- netsh interface ipv6 show route(命令提示符);
- route print(命令提示符)。
- Get-NetRoute命令
下面是在一臺運行Windows Server 2012的計算機上使用命令the Get-NetRoute –AddressFamily__IPv6 之后的顯示示例:
ifIndex RouteMetric DestinationPrefix NextHop Store ------- ----------- ----------------- ------- ----- 12 256 ff00::/8 :: Active 1 256 ff00::/8 :: Active 12 256 fe80::c51d:624b:b276:6a03/128 :: Active 12 256 fe80::/64 :: Active 12 256 2001:db8::1:82e:9636:809e:2472/128 :: Active 12 256 2001:db8::/64 :: Active 1 256 ::1/128 :: Active在路由表中通過路由條目判斷下一跳地址時,會執(zhí)行以下行為。
如果路由表條目的下一跳字段為::,那么目的就是一臺鄰居設備,因而下一跳地址就會被設置為IPv6數據包的目的地址。
如果下一跳字段是一個地址(一臺鄰居路由器的地址),那么目的設備就在遠端,下一跳地址就會被設置為下一跳字段中的那個地址。
無論是哪種情形,下一跳接口都是路由InterfaceAlias(接口別名)或InterfaceIndex(接口索引)字段的接口。
netsh interface ipv6 show route命令
下面是在一臺運行Windows 7的計算機上使用命令netsh interface ipv6 show route之后的顯示示例。該主機所在的子網有一臺默認路由器,正在通告前綴2001:db8:21d0:3f48::/64和fd5e:2aa9: b3e:3f48::/64。
Publish Type Met Prefix Idx Gateway/Interface Name ------- -------- --- ------------------------ --- ------------------------ No Manual 256 ::/0 8 fe80::69ee:7d26:3:fbec No Manual 256 ::1/128 1 Loopback Pseudo-Interface 1 No Manual 8 2001:db8:21d0:3f48::/64 8 Local Area Connection No Manual 256 2001:db8:21d0:3f48:1b9:88d1:cf98:fcaf/128 8 Local Area Connection No Manual 256 2001:db8:21d0:3f48:b500:734b:fe5b:3945/128 8 Local Area Connection No Manual 8 fd5e:2aa9:b3e:3f48::/64 8 Local Area Connection No Manual 256 fd5e:2aa9:b3e:3f48:1b9:88d1:cf98:fcaf/128 8 Local Area Connection No Manual 256 fd5e:2aa9:b3e:3f48:b500:734b:fe5b:3945/128 8 Local Area Connection No Manual 256 fe80::/64 10 Teredo Tunneling Pseudo-Interface No Manual 256 fe80::/64 8 Local Area Connection No Manual 256 fe80::100:7f:fffe/128 10 Teredo Tunneling Pseudo-Interface No Manual 256 fe80::5efe:10.0.0.2/128 11 isatap.example.com No Manual 256 fe80::b500:734b:fe5b:3945/128 8 Local Area Connection No Manual 256 ff00::/8 1 Loopback Pseudo-Interface 1 No Manual 256 ff00::/8 10 Teredo Tunneling Pseudo-Interface No Manual 256 ff00::/8 8 Local Area Connectionnetsh interface ipv6 show route命令顯示的IPv6路由表包含以下內容。
Publish(發(fā)布):該路由是否已發(fā)布(在路由通告消息中通告)。
Type(類型):路由的來源。
Met(度量):路由的優(yōu)先級。最低度量的路由最優(yōu)。這是用于在相同前綴的多個路由中進行選擇的度量。
Prefix(前綴):路由的地址前綴。 - Idx(索引):路由中的接口索引,表示與地址前綴相匹配的數據包通過該接口可達。管理員可以使用命令netsh interface ipv6 show來查看接口索引。
Gateway/Interface Name(網關/接口名稱):下一跳IPv6地址(遠程路由)或Idx列表示的接口所對應的接口名稱(直連路由)。
表10-1羅列出了上述示例所顯示的路由,以及對每個路由的描述。
在路由表中判斷從某路由出發(fā)的下一跳地址時,會發(fā)生下述情形。
如果路由表條目的網關/接口名稱列中有接口名稱,那么目的就是一臺鄰居設備,因而下一跳地址就會被設置為IPv6數據包的目的地址。
如果路由表條目的網關/接口名稱列中有接口地址(鄰居路由器的地址),那么目的設備就在遠端,下一跳地址就會設置為網關/接口名稱列中的那個地址。
無論是哪種情形,下一跳接口都是路由Idx列的接口。
例如,當此IPv6主機發(fā)送一個數據包到2001:db8:21d0:3f48:2aa:ff:fe90:4d3c,最長匹配路由是直連子網路由2001:db8:21d0:3f48::/64。因此下一跳地址就會被設置為目的地址2001:db8:21d0: 3f48:dd48:ab34:d07c:3914(目的),下一跳接口是對應接口索引8(名為Local Area Connection[本地區(qū)域連接]以太網網絡適配器)的接口。當IPv6主機向地址2001:db8:21d0:a957: 2aa:ff:fe03:21a6發(fā)送流量時,最長匹配路由是默認路由(::/0)。下一跳地址設置為路由器地址fe80::69ee: 7d26:3:fbec,下一跳接口是對應接口索引8(本地區(qū)域連接)的接口。
route print命令
下面是在同一臺運行Windows 7的主機(已刪除IPv4的那部分路由表)上輸入route print命令所顯示的內容。
C:\Windows\system32>route print =========================================================================== Interface List 8 ...00 12 3f 17 e0 cf ...... Broadcom NetXtreme 57xx Gigabit Controller 1 ........................... Software Loopback Interface 1 11 ...00 00 00 00 00 00 00 e0 isatap.{17940FE6-D6C7-4AF3-8B79-8BC68D192EB4} 10 ...02 00 54 55 4e 01 ...... Teredo Tunneling Pseudo-Interface ===========================================================================Table =========================================================================== Active Routes: If Metric Network Destination Gateway 8 286 ::/0 fe80::69ee:7d26:3:fbec 1 306 ::1/128 On-link 8 38 2001:db8:21d0:3f48::/64 On-link 8 286 2001:db8:21d0:3f48:1b9:88d1:cf98:fcaf/128 On-link 8 286 2001:db8:21d0:3f48:b500:734b:fe5b:3945/128 On-link 8 38 fd5e:2aa9:b3e:3f48::/64 On-link 8 286 fd5e:2aa9:b3e:3f48:1b9:88d1:cf98:fcaf/128 On-link 8 286 fd5e:2aa9:b3e:3f48:b500:734b:fe5b:3945/128 On-link 8 286 fe80::/64 On-link 11 296 fe80::5efe:10.0.0.2/128 On-link 8 286 fe80::b500:734b:fe5b:3945/128 On-link 1 306 ff00::/8 On-link 8 286 ff00::/8 On-link =========================================================================== Persistent Routes: Nonerouet print命令顯示的IPv6路由表包含以下內容。
If:路由的接口索引:命令route print顯示的Interface List(接口列表)部分中會列出接口索引。
Metric(度量):路由的優(yōu)先級。最低度量的路由最優(yōu)。這是用于在相同前綴的多個路由中進行選擇的度量。
Network Destination(網絡目的):路由的地址前綴。
Gateway(網關):下一跳IPv6地址(遠程路由)或表示目的在鏈路上(直連路由)。
表10-2羅列出了上述示例所顯示的路由,以及對每個路由的描述。
https://yqfile.alicdn.com/f85555562846ee2f007f9452902b37478f24eca3.png" >
總結
以上是生活随笔為你收集整理的《深入解析IPv6(第3版)》——第10章 IPv6路由选择10.1 IPv6中的路由选择的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机毕业设计选题火锅店预约平台系统
- 下一篇: 动态路由协议 RIP