WHY
前幾天哥們?cè)诳碫xLAN,看到L3 VNI感覺(jué)很疑惑,就問(wèn):為什么需要L3 VNI?
這個(gè)問(wèn)題在我17年學(xué)習(xí)VxLAN時(shí)也同樣疑惑了很久,對(duì)著CiscoLive上的文檔看了半天沒(méi)看明白,同時(shí)當(dāng)時(shí)沒(méi)看明白的還有對(duì)稱、非對(duì)稱IRB(Integrated Routing and Bridge)。
正好前段時(shí)間搭建cloudcampus環(huán)境,園區(qū)網(wǎng)部分用到的就是VxLAN,在環(huán)境搭建中又重新研究了一遍VxLAN,發(fā)現(xiàn)回到二三層轉(zhuǎn)發(fā)的本質(zhì)看VxLAN的轉(zhuǎn)發(fā),當(dāng)時(shí)困惑的問(wèn)題就很清晰了。
(題外話:H記的方向是數(shù)據(jù)中心交換機(jī)支持VxLAN,但是園區(qū)網(wǎng)主推的解決方案中沒(méi)有涉及到VxLAN,但是很多其他廠家的智慧園區(qū)網(wǎng)解決方案中都上了VxLAN,為了對(duì)標(biāo)解決方案,只能在園區(qū)網(wǎng)交換機(jī)上新開(kāi)發(fā)了VxLAN功能。H記園區(qū)網(wǎng)交換機(jī)、數(shù)據(jù)中心交換機(jī)特性差距還是很大,不同的研發(fā)團(tuán)隊(duì),想想也是蠻有趣,不過(guò)還是要感謝這個(gè)“強(qiáng)行的”上的特性,不然我也沒(méi)機(jī)會(huì)實(shí)際環(huán)境中搞一搞VxLAN)。
傳統(tǒng)VLAN三層轉(zhuǎn)發(fā)
VxLAN我們叫做MAC in UDP,本質(zhì)還是基于MAC的轉(zhuǎn)發(fā),只是轉(zhuǎn)發(fā)的接口從交換機(jī)的物理接口變成了VxLAN Tunnel的接口,所以如果只是二層轉(zhuǎn)發(fā)的VxLAN從轉(zhuǎn)發(fā)平面原理上來(lái)看,和傳統(tǒng)二層交換機(jī)轉(zhuǎn)發(fā)沒(méi)多大區(qū)別(VxLAN二層轉(zhuǎn)發(fā)也不涉及到L3 VNI)。
區(qū)別就在于三層轉(zhuǎn)發(fā)時(shí),VxLAN多了一個(gè)分布式網(wǎng)關(guān),這和傳統(tǒng)的交換機(jī)VLANIF(SVI)接口三層轉(zhuǎn)發(fā)就存在一些區(qū)別了,不過(guò)本質(zhì)還是有很多相同點(diǎn),所以先回顧下交換機(jī)使用VLANIF(SVI)接口的細(xì)節(jié)。

以上面最簡(jiǎn)單的topo為例:
host1、host2分別連接在交換機(jī)的VLAN 10、VLAN 20接口上,交換機(jī)創(chuàng)建VLANIF10 20接口作為VLAN 10、VLAN 20的網(wǎng)關(guān)(這里假設(shè)VLANIF的MAC都為MAC2,實(shí)際中有些廠家交換機(jī)VLANIF接口MAC地址并不一致,比如C記就有一段bridge MAC的概念,每個(gè)VLANIF接口的MAC地址都不一致)。
這里ARP學(xué)習(xí)過(guò)程就不展開(kāi),直接講轉(zhuǎn)發(fā)過(guò)程,Host 1與Host 2如何進(jìn)行三層通信。
1.Host1想要給Host2發(fā)送報(bào)文,通過(guò)對(duì)比目的IP與自身的接口掩碼,發(fā)現(xiàn)并非與自己同網(wǎng)段的IP地址,需要進(jìn)行三層轉(zhuǎn)發(fā)。根據(jù)本地的路由表查找路由,對(duì)于windows主機(jī)配置網(wǎng)關(guān)其實(shí)就是生成一條默認(rèn)路由,下一跳地址就是網(wǎng)關(guān)。此時(shí)主機(jī)查找路由表匹配中默認(rèn)路由,將報(bào)文交給網(wǎng)關(guān)。此時(shí)報(bào)文源MAC:MAC1,目的MAC:MAC2。
2. 交換機(jī)收到報(bào)文之后,目的MAC為本地VLANIF的MAC地址,二層轉(zhuǎn)發(fā)模塊交給三層轉(zhuǎn)發(fā)模塊處理,VLANIF 20解析查看目的IP地址為10.1.2.1,非本接口IP地址,查找IP路由表,此時(shí)將會(huì)匹配到由VLANIF 20生成的直連路由,交給VLANIF 20處理。
3. VLANIF 20此時(shí)將會(huì)查找ARP表項(xiàng),找到10.1.2.1的MAC地址,生成數(shù)據(jù)幀:源MAC為自身接口MAC地址(MAC2,雖然看起來(lái)沒(méi)變化,但是如果是路由器三層接口轉(zhuǎn)發(fā)或者C記的SVI接口MAC地址不一樣,此時(shí)就可以看到三層轉(zhuǎn)發(fā)的源MAC地址變化了),目的MAC:MAC3。生成的二層數(shù)據(jù)幀交給二層轉(zhuǎn)發(fā)模塊處理,二層模塊根據(jù)MAC地址表,從對(duì)應(yīng)接口轉(zhuǎn)發(fā)出去,到此數(shù)據(jù)包才到達(dá)了Host2。

以上過(guò)程的重點(diǎn)內(nèi)容:
1.? VLANIF 10三層查找路由表,交由VLANIF 20
2. VLANIF 20查找ARP之后二層查找MAC地址表
3. 源目MAC的替換
下面的VxLAN轉(zhuǎn)發(fā)過(guò)程這些內(nèi)容非常類似。
VxLAN三層轉(zhuǎn)發(fā)
在上面的過(guò)程中跨網(wǎng)段轉(zhuǎn)發(fā)是在交換機(jī)內(nèi)部的VLANIF中執(zhí)行三層轉(zhuǎn)發(fā)的,對(duì)比來(lái)看下VxLAN的三層轉(zhuǎn)發(fā),很多場(chǎng)景下VxLAN的VNI就是由VLAN? Tag映射而來(lái),把VxLAN的三層轉(zhuǎn)發(fā)對(duì)比看做VLAN之間的三層轉(zhuǎn)發(fā),此時(shí)去看VxLAN集中式網(wǎng)關(guān)是不是覺(jué)得很類似,只是VLAN ID變成了VNI,VLANIF變成了VBDIF。

上面的topo中Host1、Host2分別屬于VLAN 10、VLAN 20,在進(jìn)入VxLAN中時(shí)被映射到VNI 100、200,網(wǎng)關(guān)分別為VBDIF 10、VBDIF 20。
上面的topo為例VxLAN網(wǎng)絡(luò)中Host 1訪問(wèn)Host 2的跨三層轉(zhuǎn)發(fā):
1.Host1訪問(wèn)Host2的報(bào)文發(fā)送到網(wǎng)關(guān)(源MAC:MAC1,目的MAC:MAC2),報(bào)文經(jīng)由非VxLAN交換機(jī)到達(dá)VTEP2,查找MAC地址表,加上VxLAN頭部封裝通過(guò)VxLAN Tunnel發(fā)送給VTEP1。
2. VTEP1收到之后查看外層目的MAC、目的IP,去除外層封裝將內(nèi)層報(bào)文本地解析交給VxLAN模塊處理,內(nèi)部報(bào)文目的MAC為MAC2,也就是VBDIF接口MAC,查看內(nèi)層目的IP,非本接口IP,此時(shí)需要查找VxLAN三層轉(zhuǎn)發(fā)表項(xiàng),發(fā)現(xiàn)需要交由VBDIF20處理。VBDIF20收到之后查找ARP表項(xiàng),生成二層數(shù)據(jù)幀,此時(shí)源MAC:MAC3,目的MAC:MAC4。查找二層轉(zhuǎn)發(fā)表項(xiàng),發(fā)現(xiàn)需要通過(guò)VxLAN Tunnel交由VTEP3,加上VxLAN頭部發(fā)送給VTEP3。
3.VTEP3去除外部封裝之后,查看目的MAC,交由下層非VxLAN交換機(jī)轉(zhuǎn)發(fā),經(jīng)由下游交換機(jī)最終轉(zhuǎn)發(fā)到Host2。

還是看轉(zhuǎn)發(fā)過(guò)程中重點(diǎn)內(nèi)容:
1.VBDIF 10三層轉(zhuǎn)發(fā)查找路由表把處理過(guò)程交給了VBDIF 20
2.VBDIF 20查找ARP之后查找二層表項(xiàng),發(fā)現(xiàn)出接口為VxLAN Tunnel,交給VTEP 3,此時(shí)為二層轉(zhuǎn)發(fā)
3. VTEP 3將報(bào)文從VxLAN域內(nèi)轉(zhuǎn)到了非VxLAN域。
分布式網(wǎng)關(guān)三層轉(zhuǎn)發(fā)
只是看集中式網(wǎng)關(guān),VxLAN的三層轉(zhuǎn)發(fā)和VLAN間三層轉(zhuǎn)發(fā)很類似,但是如果是分布式網(wǎng)關(guān)呢?

以上面的拓?fù)錇槔琕TEP1 VTEP2都是分布式網(wǎng)關(guān),都存在VBDIF10、VBDIF 20。
那問(wèn)題就來(lái)了:
Host1訪問(wèn)Host2時(shí)VBDIF10三層轉(zhuǎn)發(fā)查找路由表,把報(bào)文交給VBDIF20,由哪臺(tái)設(shè)備上的VBDIF 20執(zhí)行二層轉(zhuǎn)發(fā)查找Host2的MAC呢?
試想一下可能的方式:
1. VTEP1上,VBDIF 10三層轉(zhuǎn)發(fā)交給VBDIF 20,VBDIF 20查找ARP、二層查找MAC表項(xiàng),之后發(fā)送給VTEP2,此時(shí)已經(jīng)屬于二層轉(zhuǎn)發(fā)過(guò)程,VTEP 2收到之后執(zhí)行二層轉(zhuǎn)發(fā)。
也就是說(shuō)VTEP1上發(fā)送給VTEP2的內(nèi)層報(bào)文目的MAC已經(jīng)替換為Host2的MAC地址:MAC4,并且此時(shí)VNI已經(jīng)為Host 2所屬VNI。

2. VTEP2上,VTEP1上的VBDIF 10三層轉(zhuǎn)發(fā)通過(guò)VxLAN Tunnel把報(bào)文交給VTEP2的VBDIF 20,VTEP2上VBDIF 20執(zhí)行二層轉(zhuǎn)發(fā)過(guò)程。
也就說(shuō)VTEP1上發(fā)送給VTEP2的內(nèi)層報(bào)文目的MAC不是Host2的MAC地址,而是VBDIF20的MAC地址:MAC3(三層轉(zhuǎn)發(fā)匹配主機(jī)路由時(shí)為什么內(nèi)層目的MAC是MAC3大家自己感興趣可以深入研究)。 此時(shí)的VNI其實(shí)就是L3 VNI,作用可以自行先想下。

再深入想一下,方式1和方式2 中VTEP 1的處理有什么區(qū)別:
1. VTEP 1上的VBDIF 20執(zhí)行二層查找、轉(zhuǎn)發(fā),那就意味著:
????a) VTEP 1上需要?jiǎng)?chuàng)建整網(wǎng)所有VNI的分布式網(wǎng)關(guān):即便VTEP 1下面并沒(méi)有VNI 200那也得創(chuàng)建VBDIF 20。
????b)VTEP1擁有VNI 200所屬?gòu)V播域的ARP表項(xiàng),這樣才能知道二層轉(zhuǎn)發(fā)時(shí)扔給哪個(gè)VTEP。
2. VTEP 2上不執(zhí)行VBDIF 20執(zhí)行二層查找、轉(zhuǎn)發(fā):
????a)VTEP1不需要?jiǎng)?chuàng)建整網(wǎng)所有VNI的分布式網(wǎng)關(guān),它不需要其他的VBDIF用于執(zhí)行二層轉(zhuǎn)發(fā)。
????b)VTEP 1上擁有Host2的路由表項(xiàng)就可以,VTEP1知道扔給VTEP 2就可以,二層查找交由VTEP 2上的VBDIF 20執(zhí)行。
對(duì)稱IRB和非對(duì)稱IRB
實(shí)際上第一種方式就是非對(duì)稱IRB,第二種方式就是對(duì)稱IRB。
仔細(xì)想一下第2種方式時(shí)Host 1和Host 2相互訪問(wèn)時(shí)VTEP1 VTEP2之間傳輸?shù)膬?nèi)層報(bào)文的源目MAC是不是互反的(VBDIF 10、VBDIF 20的MAC)。
第1種方式Host 1訪問(wèn)Host 2時(shí)源MAC為MAC3(VBDIF 20),目的MAC為MAC4(Host2)。而Host 2訪問(wèn)Host 1時(shí)源MAC為MAC 2(VBDIF 10),目的MAC為MAC1(Host)。來(lái)回報(bào)文源目MAC并不對(duì)稱,所以稱為非對(duì)稱式(未標(biāo)注VNI)。

第2種方式Host 1、Host 2之間互訪來(lái)回內(nèi)層報(bào)文源目MAC都是VBDIF 10、VBDIF 20,所以被稱為對(duì)稱式IRB(未標(biāo)注VNI)。

回歸正題- L3 VNI
為什么需要L3 VNI?
非對(duì)稱IRB轉(zhuǎn)發(fā)時(shí)從VTEP到另外一個(gè)VTEP此時(shí)已經(jīng)為二層轉(zhuǎn)發(fā),VxLAN頭部中的VNI已經(jīng)為目的主機(jī)所屬VNI(上面的圖并沒(méi)有標(biāo)出)。
對(duì)稱式IRB轉(zhuǎn)發(fā)這個(gè)VNI應(yīng)該是什么?目的主機(jī)所屬的VNI嗎?
那就是非對(duì)稱IRB了。
那應(yīng)該是什么?
標(biāo)記交給哪個(gè)VBDIF處理的VNI。
對(duì)稱式IRB轉(zhuǎn)發(fā)時(shí)VTEP對(duì)于接收到的報(bào)文需要判斷內(nèi)層報(bào)文應(yīng)該交給哪個(gè)VBDIF去處理,這個(gè)判斷依據(jù)就是L3 VNI,間接關(guān)聯(lián)在VBDIF下的VNI。
ipvpn-instance vpn1
?ipv4-family
?route-distinguisher 2:100
? vpn-target 1:100export-extcommunity evpn
? vpn-target 1:100import-extcommunity evpn
?vxlan vni 100???? //三層VNI
interface Vbdif10
?mac-address0000-5e00-0101
?ip binding vpn-instance vpn1
?arp collect hostenable
?arpdistribute-gateway enable
?ip address192.168.10.1 255.255.255.0
總結(jié)
實(shí)際中L3 VNI的作用并不只是上面說(shuō)的那么簡(jiǎn)單:判斷交給VBDIF處理。
和傳統(tǒng)的ip vpn-instance一樣,在控制平面BGP?EVPN中,還可以控制路由的學(xué)習(xí)。
同時(shí)很多細(xì)節(jié)也沒(méi)有展開(kāi),如對(duì)稱IRB轉(zhuǎn)發(fā)時(shí),從VTEP 1到VTEP 2匹配中主機(jī)路由,內(nèi)層報(bào)文目的MAC是MAC3,為什么是MAC3?這個(gè)MAC3實(shí)際上是BGP EVPN通過(guò)Type2 IRB類型路由傳遞主機(jī)路由時(shí)攜帶的MAC地址,同時(shí)L3 VNI也是通過(guò)該方式攜帶,這里只是為了從轉(zhuǎn)發(fā)的角度結(jié)合傳統(tǒng)的VLAN之間三層轉(zhuǎn)發(fā),方便大家理解。
最后,二、三層轉(zhuǎn)發(fā)基礎(chǔ)很重要(任何基礎(chǔ)都挺重要),扎實(shí)的基礎(chǔ)、研究過(guò)MPLS L3 VPN、L2 VPN再看VxLAN,相似的地方真多,理解起來(lái)真簡(jiǎn)單,interesting!