IPv6的一個重要特點是可以進行鏈路復用,然而這種性質(zhì)可能會引起數(shù)據(jù)轉(zhuǎn)發(fā)的些許問題。本文旨在介紹IPv6鏈路復用的相關(guān)情況。
本文主要介紹了復用鏈路IPv6下的源目地址選擇,有基礎(chǔ)者可直接閱讀第2章節(jié)。(當然這種情況主要指的是上層協(xié)議未明確指定源目的情況下。)
如有疑問,歡迎留言指導。
第2章節(jié)基本描述了IPv6地址選擇的規(guī)則,可直接閱讀相關(guān)內(nèi)容。
IPv6地址選擇的相關(guān)內(nèi)容,可參考2012年發(fā)布的RFC6724。
關(guān)于IPv6/ICMPv6基礎(chǔ)協(xié)議(ND,SLAAC,DAD,NUD)的介紹,可參考博客IPv6/ICMPv6-原理介紹+報文分析+配置示例。
目錄
1.IPv6基礎(chǔ)內(nèi)容
1.1.IPv6簡介/分類
IPv6:
@新一代的IP用于替代IPv4的下一代IP協(xié)議
@核心解決IPv4地址不足的問題
IPv6地址:
IPv6地址共128bits,使用冒號分隔的16進制表達。128=16*8
@通用格式為X:X:X:X:X:X:X:X。X=16進制。
舉例當X=2031時,
2031=0010 0000 0011 0001。
@壓縮格式。
當X組中高位出現(xiàn)0時可進行省略,當每個X=0時,可進行”: :“縮寫。但是”: :“縮寫只可縮寫一次。
舉例,3001::1=3001:0000:0000:0000:0000:0000:0000:0001
其他還有內(nèi)嵌IPv4的IPv6地址格式,暫不做介紹。
IPv6分類
IPv6的地址總共可分為3類:單播地址、組播地址、任播地址。//相關(guān)內(nèi)容可參考2006年發(fā)布的RFC4291
單播地址:
全球單播地址= =2000::/3,占據(jù)IPv6的1/8。
2000::至3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
唯一本地單播地址= =fc00::/7,占據(jù)IPv6的1/2^7。類似IPv4的私網(wǎng)地址,但是可全球唯一。站點本地地址。
FC00::至FDFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
鏈路本地地址= =fe80::/10,占據(jù)IPv6的1/2^10。
FE80::至FEBF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
內(nèi)嵌IPv4地址= =0000::/8,可用于協(xié)議報文的源地址。
::至00FF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
未指定地址= =::/128,可用于協(xié)議報文的源地址。
內(nèi)部環(huán)回地址= =::1/128。類似IPv4的127.0.0.1/32,操作系統(tǒng)的內(nèi)部通信地址。
組播地址:
指定組播地址= =ff00::/8,占據(jù)IPv6的1/2^8。
FF00::至FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
請求節(jié)點組播地址= =FF02:1:FF00.0000/104。主要用于ICMPv6地址使用。FF02:0:0:0:0:1:FF00:0至FF02:0:0:0:0:1:FFFF:FFFF
在具體的組播地址上Flag:4bits,目前只有0000和0001兩種取值。0000表示為IANA分配的永久組播地址,0001為臨時組播地址。
Scope:4bits,組播數(shù)據(jù)流在網(wǎng)絡(luò)中發(fā)送的范圍。
可參考2014年發(fā)布的RFC7346
1標識接口范圍(不可傳出,設(shè)備內(nèi)部通信),
2標識鏈路本地也即僅在二層鏈路,
3標識區(qū)域本地范圍,
4標識管理本地范圍,
5標識站點本地范圍,
8標識組織本地范圍,
E標識全局范圍等
Group ID:32bits,同IPv4組播地址。建議使用最后32bits。
常見的組播地址:
@Node-Local=
FF01::1為所有節(jié)點組播;
FF01::2為所有路由器組播
@Link-Local=
FF02::1為所有節(jié)點組播
FF02::2為所有路由器組播
FF02::5為OSPFv3路由器組播
FF02::6為OSPFv3路由器DR組播
FF02::9為RIP路由器DR組播
FF02::13為PIM路由器DR組播
任播地址:使用較少
任播地址與單播地址使用相同的地址空間;配置時須明確表明是任播地址以此區(qū)別單播和任播。用于距離用戶最近的地址傳輸:例如在ospf不同區(qū)域存在相同的任意播地址,通過cost優(yōu)選可以讓用戶優(yōu)選距離最近的節(jié)點。
IPv6組播MAC映射:
將組播IP的后32bits,疊加至33:33后形成48bits的mac地址。
1.2.地址狀態(tài)
2006年發(fā)布的RFC4291允許將多個單播地址分配給接口,并且2006年發(fā)布的RFC4429和2007年發(fā)布的RFC4862對IPv6的地址狀態(tài)進行了定義
Tentative Address:分配給接口之前,正在驗證鏈接上唯一性的地址。此時不講該地址視為分配給接口,并丟棄發(fā)往該地址的數(shù)據(jù)包。但接收與ND的DAD相關(guān)數(shù)據(jù)包。
Preferred address:分配給接口使用的地址,并完全不受限制。Preferred_LifeTime時間內(nèi)的地址,可被RA報文刷新。
Optimistic address:分配給接口使用的地址,但在鏈路上驗證其唯一性時受到限制。可用但未進行完全的DAD檢測。
Deprecated address:分配給接口地址,但不鼓勵也不禁止使用。該地址不得創(chuàng)建新的交流關(guān)系,只能被動接收連接和保持原有連接。
Valid_LifeTime減去Preferred_LifeTime時間的地址獲得該狀態(tài)(RA的Prefix Option中攜帶)。
這個時間可用于地址前綴切換。超過Valid_LifeTime無法則啟用該地址,也即invalid address。
//Optimistic address是一種特殊地址,RFC4429新引入。不能攜帶Soure Option的RS,發(fā)送NS源地址必須為未指定地址且NA回應(yīng)必須將O-bit不置位避免影響Neighbor Cache,Optimistic address為源發(fā)送的NA也必須將O-bit不置位,不能進行地址解析但可以將數(shù)據(jù)轉(zhuǎn)發(fā)給鏈路的默認路由器。
valid address:一個preferred或者deprecated address。
interface identifier:鏈路(至少)唯一的接口的鏈路相關(guān)標識符。用于和前綴一起完成地址自動生成。interface identifier介紹可參考RFC4291-IPv6 Addressing Architecture。如果這樣產(chǎn)生的地址也無法保證唯一,有可能導致無法實現(xiàn)SLAAC。
考慮到IPv6地址的各種狀態(tài),多歸下的地址使用,源地址為未指定地址/組播地址,節(jié)點運行了IPv4/IPv6雙棧,等場景,此時在啟動通信時通常會面臨多個可能的源地址和目標地址。
通常情況下應(yīng)用程序使用諸如getaddrinfo()[RFC3493]之類的API,這些API向應(yīng)用程序返回地址列表。然后,應(yīng)用程序使用connect()或sendto()將目標地址傳遞給網(wǎng)絡(luò)棧。之后以列表中的第一個可用地址進行網(wǎng)絡(luò)通信。
1.3.IPv6報文格式/配置
關(guān)于最新的IPv6報文格式相關(guān)內(nèi)容,可參考2017年發(fā)布的RFC8200。
鏈路層:
Ethernet Type=0x86dd
其他的Ethernet Type舉例:
802.1q Ethernet Type=0x8100;
IPv4 Ethernet Type=0x0800;
ARP Ethernet Type=0x0806;
MPLS Ethernet Type=0x8847; 等
IPv6報文格式:Version:4bits,IPv6固定為6。IPv4則固定為4。
Traffic class:8bits,QOS分類。功能類似于IPv4的DSCP。
Flow Label:20bits,流標簽。通??捎糜趨^(qū)分是否是同一個流。例如TCP/UDP通過5元組確定流,而IPv6可根據(jù)該信息判斷是否是同一個流。
Payload length:16bits,有效載荷的長度,單位byte字節(jié)。除去IPv6基本報文的長度,也即載荷長+IPv6擴展報文長。
Next header:8bits,下一報頭。攜帶的上層報頭的信息類型,也即擴展IPv6頭部的類型或者上層協(xié)議的類型。
Hop limit:8bits,條數(shù)限制。與IPv4的TTL功能相似。
Source Address:128bits,報文的源地址。
Destination Address:128bits,報文的目的地址。
Extension Headers:IPv6的擴展頭部,長度不定。IPv6使用擴展頭部來擴展其他功能,擴展性好。另一個好處是只攜帶所使用的功能,減小IPv6報文的長。
IPv6的配置:
IPv6的一個特性是鏈路復用,也即一條鏈路上支持多個IPv6前綴。
1@手工配置:
2@EUI-64分配:
將MAC地址的第7bit置1(也有其他方案,指定第7bit進行反轉(zhuǎn)),并將接口48bits的MAC地址從中間插入固定長度16bit的FFFE,共64bits。將該bits轉(zhuǎn)成IPv6的格式,填充到所分配的前綴上。
對于前綴小于64,在前綴與后64bit間補0;大于64,則將沖突eui-64部分刪除。
1@在單播MAC地址中,第1個Byte的第7bit是U/L(Universal/Local,也稱為G/L,其中G表示Global)位,用于表示MAC地址的唯一性。如果U/L=0,則該MAC地址是全局管理地址,是由擁有OUI的廠商所分配的MAC地址;如果U/L=1,則是本地管理地址,是網(wǎng)絡(luò)管理員基于業(yè)務(wù)目的自定義的MAC地址。
2@在單播MAC地址中,第1個Byte的第8bit決定單播和多播。
3@而在在EUI-64接口ID中,第7bit(也即IPv6地址后8個字節(jié)的第一個字節(jié))的含義與MAC地址正好相反,0表示本地管理,1表示全球管理,所以使用EUIl-64格式的接口ID,U/L位為1,則地址是全球唯一的,如果為0,則為本地唯一。這就是為什么要反轉(zhuǎn)該位。
3@IPv6 unnumbered:
一個接口如果沒有IP地址就無法生成路由也就無法產(chǎn)生IP報文轉(zhuǎn)發(fā)報文。IPv6 unnumbered 就是路由器一個接口上沒有配置地址,但借用其他其他接口的地址進行報文的路由轉(zhuǎn)發(fā)。
以太口不能配置成無編號(unnumbered)接口。
串口中(同步口)中,使用也受限制。比如當封裝成 幀中繼的時候,只有點對點
的子接口才允許配置成unnumbered。另外X.25封裝也是不允許的。
自動換行
Cisco 2500系列配置示例://關(guān)于本場景下的路由傳遞和出接口問題不做詳細延申。
4@SLAAC:
利用Stateless Address Autoconfiguration協(xié)議進行IPv6地址的動態(tài)配置。
第6章節(jié)進行相關(guān)介紹。
5@DHCPv6:
利用DHCPv6協(xié)議進行IPv6地址的動態(tài)配置
關(guān)于IPv6及其基本協(xié)議的介紹可參考IPv6/ICMPv6-原理介紹+報文分析+配置示例
自動換行
點擊此處回到目錄
2.IPv6
2.1.算法環(huán)境
策略表-Policy Table:
策略表是一張最長前綴匹配的查找表,與路由表非常類似。在給定地址/前綴下,可得到2個值:優(yōu)先級和標簽。
優(yōu)先級值Priority(A):用于對目標地址進行排序。如果優(yōu)先級(A)>優(yōu)先級(B),我們認為地址A的優(yōu)先級高于地址B,這意味著我們的算法更傾向于將目標地址A排序在目標地址B之前。
標簽值label(A):允許選擇與目標地址前綴一起使用的特定源地址前綴的策略。如果標簽(S)=標簽(D),則算法優(yōu)選使用源地址S和目的地址D。
A表示地址,S表示源,D表示目的。windown/Linux主機上的策略表:
地址特性-Address Properties-Scope(A)
在第1章節(jié)中,我們介紹了IPv6的地址分類和IPv6地址狀態(tài),如果考慮到節(jié)點使用IPv4/6雙棧的情況下源目的的選擇將更為復雜。因此有必要對不同的情況進行區(qū)分。
組播地址作用域:
單播站點本地(unicast site-local) = 組播站點本地(multicast site-local),
組播站點本地(multicast site-local) < 組播組織本地(multicast organization-local),
組播組織本地(multicast organization-local) < 全球單播(unicast global),
全球單播(unicast global) = 全球組播(multicast global)。
IPv4/IPv4映射地址范圍:目的地地址選擇算法同時對IPv6和IPv4地址進行操作。為此,必須為IPv4映射IPv6地址。
169.254.0.0/16具有l(wèi)ink-local鏈路本地作用域。
127.0.0.0/8具有l(wèi)ink-local鏈路本地范圍。
其他IPv4地址(包括IPv4私網(wǎng)地址[RFC1918]和共享地址空間地址[RFC6598])被分配了全局范圍。
169.254.0.0/16為DHCP地址自動分配[RFC3927]。
127.0.0.0/8為IPv4環(huán)回地址[RFC4007]第4節(jié)。
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16為IPv4私網(wǎng)地址.
100.64.0.0/10為共享地址空間地址只由服務(wù)提供商使用,專用于NAT。
且IPv4地址必須被視為具有IPv6的preferred狀態(tài)。
嵌入IPv4的IPv6地址范圍:
嵌入IPv4的IPv6地址通常用于IPv4網(wǎng)絡(luò)和IPv6網(wǎng)絡(luò)的兼容,這些地址具有全局范圍。并且被視為具有IPv6的preferred狀態(tài)。
IPv6環(huán)回地址和其他格式地址:
Loopback地址和NSAP地址具有全局范圍,并且被視為具有IPv6的preferred狀態(tài)。
關(guān)于移動IPv6地址的范圍介紹可查看相關(guān)資料。
2.2.源地址選擇算法
首先需要介紹候選源地址集:
候選集合是可以用作給定目標地址的潛在源地址的所有地址的集合;源地址選擇算法將從該集合中選擇一個地址。通常是一個單播地址集。并且有如下要求:
1@:配置于Loopback環(huán)回接口的全球地址必須滿足環(huán)回口的相應(yīng)要求
2@:在某些情況下,目標地址可以用區(qū)域索引或其他信息約束候選集。
3@:對于目的地址為組播和鏈路本地地址的,候選源地址集必須僅包括與出接口屬于同一鏈路的接口地址。
4@:對于目的地址為站點本地單播地址,候選源地址集必須僅包括與出接口屬于同一站點的接口的地址。
5@:在任何情況下,組播地址和未指定的地址都不能包含在候選集中。
6@:純IPv6節(jié)點僅支持Stateless IP/ICMP Translation (SIIT)情況下,對于目的地址為IPv4轉(zhuǎn)化地址(IPv4-converted address),候選源地址集必須僅包括IPv4翻譯地址(IPv4-translatable address)。
7@:如果應(yīng)用程序或上層指定的源地址不在目標的候選集中,則網(wǎng)絡(luò)層必須將其視為錯誤。如果應(yīng)用程序或上層指定了目標候選集中的源地址,則網(wǎng)絡(luò)層必須選擇該地址。如果應(yīng)用程序或上層未指定源地址,則網(wǎng)絡(luò)層使用源地址選擇算法。
源地址選擇算法用于為指定目的地址選擇一個出向的單一源地址。并且該算法只涉及目的地址為IPv6地址的情況下。
這里的單一源地址指的是按算法規(guī)則對候選源地址集進行“排序”。完成后,選擇候選源地址集第一個作為源地址。
源地址選擇算法依據(jù)一下8條規(guī)則先后比較優(yōu)勝者:
S表示源地址、D表示目的地址,SA表示源地址A,SB表示源地址B,Scope(S)表示S的作用范圍,Label(S)表示S在2.1章介紹策略表中的標簽。地址作用范圍可參考2.1章節(jié)地址特性介紹。
1@:如果S=D,選擇該源地址S。
2@:在Scope(SA) < Scope(SB)前提下,如果Scope(SA) < Scope(D)則優(yōu)選SB。否則優(yōu)選SA。
3@:避免deprecated addresses,優(yōu)選preferred addresses。
4@:優(yōu)選home addresses。
如果SA是home address和care-of address而SB為普通地址,優(yōu)選SA;
如果SA是home address而SB是care-of address,優(yōu)選SA。
home address 和care-of address為移動IPv6所定義的相關(guān)內(nèi)容,感興趣者可查閱相關(guān)資料。
5@:優(yōu)選出接口。
如果SA是發(fā)送到D的接口/下一跳,而SB被分配給不同的接口,則優(yōu)先選擇SA。
6@:優(yōu)選匹配的Label(SA)
如果Label(SA) = Label(D)而Label(SB) <> Label(D),則優(yōu)先選擇SA。
該Label()位于先前介紹的策略表中,而且通常是可人為編輯的。
7@:優(yōu)選臨時地址temporary addresses
如果SA是一個臨時地址temporary addresses而SB是一個公共地址,則優(yōu)先選擇SA。
需要重點強調(diào)的是,如上文所描述應(yīng)用程序可依自己偏好進行地址選擇。源地址選擇算法只是提供了一種地址選擇的方式。因此必須提供一種機制,允許應(yīng)用程序顛倒此處介紹的第7條。例如,通過適當?shù)腁PI擴展。
temporary addresses:由于IPv6地址足夠為所有設(shè)備分配全球唯一的單播地址,并同時由于SLAAC的自動地址分配等協(xié)議的存在使得使用者的IP/MAC很容易泄露。為此操作系統(tǒng)可以選用多個臨時ip,每個ip有固定的生命周期。相關(guān)介紹可參考2021年發(fā)布的RFC8981及博客linux ipv6臨時地址等內(nèi)容。
8@:進行最長前綴匹配。如果實現(xiàn)具有在源地址中選擇的其他方式,則規(guī)則8可以被替代。例如,有鏈路檢測的其他應(yīng)用程序。
自動換行
2.3.目的地址選擇算法
目的地地址選擇算法獲取目的地地址列表,并對地址進行排序以生成新列表。 該算法對IPv6和IPv4地址進行排序。并有如下10條規(guī)則:
1@:避免不可用的目的地。
2@:優(yōu)選匹配的范圍。
Scope(DA) = Scope(Source(DA))并且Scope(DB) <> Scope(Source(DB)),此時優(yōu)選DA
3@:避免deprecated addresses。
4@:優(yōu)選home addresses。
如果Source(DA)是home address和care-of address而Source(DB)為普通地址,優(yōu)選DA;
如果Source(DA)是home address而Source(DB)是care-of address,優(yōu)選DA。
5@:優(yōu)選匹配的Label(SA)。
如果Label(Source(DA)) = Label(DA)而Label(Source(DB)) <> Label(DB),則優(yōu)先選擇DA。
6@:優(yōu)選高優(yōu)先級DA。
如果Precedence(DA) > Precedence(DB),則優(yōu)先選擇DA。
7@:優(yōu)選本地傳輸。
如果DB需要進行封裝傳輸機制而DA無需,則優(yōu)先選擇DA。
8@:優(yōu)選更小范圍。
如果Scope(DA) < Scope(DB),則優(yōu)先選擇DA。
注意與第2條規(guī)則的區(qū)分,一個是DA報文源地址的范圍,一個是DA范圍。
9@:進行最長前綴匹配。
10@:保持順序不變。
如果在原始列表排序中DA由于DB,則優(yōu)先選擇DA。
同樣的,如果實現(xiàn)具有其他目的地地址排序方式,則規(guī)則9和10可能被取代。
點擊此處回到目錄文章來源地址http://www.zghlxwxcb.cn/news/detail-645133.html
2.4.地址選擇舉例
默認源地址選擇:源地址選擇規(guī)則與默認策略表一起產(chǎn)生以下行為
目的地址 | 候選源地址 | 默認選擇結(jié)果 | 選擇原因 |
---|---|---|---|
2001:db8:1::1 | 2001:db8:3::1 fe80::1 |
2001:db8:3::1 | scope |
ff05::1 | 2001:db8:3::1 fe80::1 |
2001:db8:3::1 | scope |
2001:db8:1::1 | 2001:db8:3::1(deprecated) 2001:db8:2::1 |
2001:db8:1::1 | 相同地址 |
fe80::1 | fe80::2(deprecated) 2001:db8:1::1 |
fe80::2 | scope |
2001:db8:1::1 | 2001:db8:1::2 2001:db8:3::2 |
2001:db8:1::2 | 最長前綴匹配 |
2001:db8:1::1 | 2001:db8:1::2(care-of address) 2001:db8:3::2(home address) |
2001:db8:3::2 | home address |
2002:c633:6401::1 | 2002:3:1::13eb:22e8(temporary) 2001:db8:1::2 |
2002:3:1::13eb:22e8 | label |
2001:db8:1::1 | 2002:3:1::13eb:22e8(temporary) 2001:db8:1::2(public) |
2002:3:1::13eb:22e8 | temporary address |
自動換行
默認目的地址選擇:目標地址選擇規(guī)則與默認策略表和源地址選擇規(guī)則一起產(chǎn)生以下行為文章來源:http://www.zghlxwxcb.cn/news/detail-645133.html
候選源地址 | 目的地址列表 | 默認選擇結(jié)果 | 選擇原因 |
---|---|---|---|
2001:db8:1::2 fe80::1 169.254.13.78 |
2001:db8:1::1 198.51.100.121 |
2001:db8:1::1 with 2001:db8:1::1 | 第2條scope |
198.51.100.121 with 169.254.13.78 | |||
fe80::1 198.51.100.117 |
2001:db8:1::1 198.51.100.121 |
2001:db8:1::1 with fe80::1 | 第2條scope |
198.51.100.121 with 198.51.100.117 | |||
2001:db8:1::2 fe80::1 10.1.2.4 |
2001:db8:1::1 10.1.2.3 |
2001:db8:1::1 with 2001:db8:1::2 | 高優(yōu)先級 |
10.1.2.4 with 10.1.2.3 | |||
2001:db8:1::2 fe80::1 |
2001:db8:1::1 fe80::2 |
2001:db8:1::1 with 2001:db8:1::2 | scope |
fe80::2 with fe80::1 | |||
2001:db8:1::2(care-of address) 2001:db8:3::2(home address) fe80::1(care-of address) |
2001:db8:1::1 fe80::2 |
2001:db8:1::1 with 2001:db8:3::1 | home address |
fe80::2 with fe80::1 | |||
2001:db8:1::2 fe80::1(deprecated) |
2001:db8:1::1 fe80::2 |
2001:db8:1::1 with 2001:db8:1::2 | deprecated |
fe80::2 with fe80::1 | |||
2001:db8:1::2 fe80::1 2001:db8:3f44::2 |
2001:db8:1::1 2001:db8:3ffe::1 |
2001:db8:1::1 with 2001:db8:1::2 | 最長前綴 |
2001:db8:3ffe::1 with 2001:db8:3f44::2 | |||
2002:c633:6401::2 fe80::1 |
2002:c633:6401::1 2001:db8:1::1 |
2002:c633:6401::1 with 2002:c633:6401::2 | label |
2001:db8:1::1 with 2002:c633:6401::2 | |||
2002:c633:6401::2 fe80::1 2001:db8:1::2 |
2002:c633:6401::1 2001:db8:1::1 |
2001:db8:1::1 with 2001:db8:1::2 | 高優(yōu)先級 |
2002:c633:6401::1 with 2002:c633:6401::2 |
更新
點擊此處回到目錄
到了這里,關(guān)于IPv6鏈路復用/地址選擇/IPv6路由+RFC6724的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!