本章介紹了由一組控制程序?qū)崿F(xiàn)的葉脊交換結(jié)構(gòu)。我們使用運(yùn)行在ONOS上的SD-Fabric作為示例實(shí)現(xiàn),在之前章節(jié)中我們已經(jīng)介紹過(guò)了SD-Fabric的很多方面,所以在進(jìn)入細(xì)節(jié)之前先總結(jié)一下這些內(nèi)容。
- SD-Fabric支持葉脊拓?fù)洌@種拓?fù)渫ǔS糜谶B接數(shù)據(jù)中心中的多個(gè)服務(wù)器機(jī)架(參見(jiàn)圖10),但也支持多站點(diǎn)部署(參見(jiàn)圖17)。SD-Fabric基于裸金屬交換機(jī),并配備前幾章介紹的軟件來(lái)構(gòu)建網(wǎng)絡(luò),可以混合使用固定功能流水線和可編程流水線,但在一般在生產(chǎn)中使用前者。
- SD-Fabric支持大部分L2/L3特性,所有這些特性都作為SDN控制程序重新實(shí)現(xiàn)(除了用于中繼DHCP請(qǐng)求的DHCP服務(wù)器和用于與外部對(duì)等實(shí)體交換BGP路由的Quagga BGP服務(wù)器)。SD-Fabric實(shí)現(xiàn)每個(gè)服務(wù)器機(jī)架內(nèi)部的L2連接,以及機(jī)架之間的L3連接。
- SD-Fabric支持接入/邊緣網(wǎng)絡(luò)技術(shù),如PON(見(jiàn)圖13)和RAN(見(jiàn)圖17),包括支持(a)路由IP流量到/從連接到這些接入網(wǎng)絡(luò)的設(shè)備,以及(b)將接入網(wǎng)功能卸載到交換機(jī)上。
本章不會(huì)對(duì)所有這些特性進(jìn)行全面介紹,重點(diǎn)關(guān)注的是數(shù)據(jù)中心架構(gòu)用例,這足以說(shuō)明使用SDN原則構(gòu)建生產(chǎn)級(jí)網(wǎng)絡(luò)的方法。關(guān)于SD-Fabric設(shè)計(jì)決策的更多信息,請(qǐng)?jiān)L問(wèn)SD-Fabric網(wǎng)站。
7.1 特性集
SDN提供了定制網(wǎng)絡(luò)的機(jī)會(huì),但出于實(shí)用原因,采用SDN的第一個(gè)要求是重新實(shí)現(xiàn)現(xiàn)有功能,并以復(fù)制(或改進(jìn))傳統(tǒng)解決方案的彈性和可伸縮性的方式來(lái)實(shí)現(xiàn)。SD-Fabric滿足了這一要求,我們?cè)谶@里總結(jié)一下。
首先,關(guān)于L2連接,SD-Fabric支持VLAN,包括基于VLAN id轉(zhuǎn)發(fā)流量的原生支持,以及基于外部/內(nèi)部VLAN id對(duì)的Q-in-Q支持。對(duì)Q-in-Q的支持與訪問(wèn)網(wǎng)絡(luò)特別相關(guān),其中使用雙標(biāo)記來(lái)隔離屬于不同服務(wù)類別的流量。此外,SD-Fabric支持跨L3網(wǎng)絡(luò)的L2隧道(包括單標(biāo)簽和雙標(biāo)簽)。
其次,關(guān)于L3連接,SD-Fabric支持單播和組播地址的IPv4和IPv6路由。對(duì)于后者,SD-Fabric實(shí)現(xiàn)了集中式組播樹構(gòu)造(與運(yùn)行像PIM這樣的協(xié)議相反),包含了對(duì)希望加入/離開組播組的終端主機(jī)的IGMP支持。SD-Fabric還支持ARP(用于IPv4地址轉(zhuǎn)換)和NDP(用于IPv6鄰居發(fā)現(xiàn)),同時(shí)支持DHCPv4和DHCPv6。
然后,SD-Fabric在面對(duì)鏈路或交換機(jī)故障時(shí)提供高可用性。它通過(guò)組合眾所周知的技術(shù)來(lái)實(shí)現(xiàn)這一點(diǎn): dual-homing、鏈路綁定和ECMP鏈路組。如圖39所示,SD-Fabric集群中的每臺(tái)服務(wù)器都連接到一對(duì)ToR(或葉子)交換機(jī)上,運(yùn)行在每個(gè)計(jì)算服務(wù)器上的操作系統(tǒng)實(shí)現(xiàn)active-active鏈路綁定。然后,每個(gè)葉交換機(jī)由一對(duì)連接到兩個(gè)或更多脊交換機(jī)的鏈接連接起來(lái),ECMP組定義了將每個(gè)或每組葉交換機(jī)連接到給定脊交換機(jī)的鏈接對(duì)或者鏈接組。集群作為一個(gè)整體有多個(gè)到外部路由的連接,如圖中的葉交換機(jī)3和4所示。圖39中沒(méi)有顯示的事實(shí)是,SD-Fabric運(yùn)行在ONOS之上,ONOS本身是為了可用性而構(gòu)建的。在如下所示的配置中,ONOS(以及SD-Fabric控制應(yīng)用程序)在3到5個(gè)服務(wù)器上都有副本。
圖39. 通過(guò)dual-homing、鏈路綁定和ECMP組的組合實(shí)現(xiàn)高可用性。
鏈路聚合和ECMP的用處很明顯,可以增強(qiáng)包轉(zhuǎn)發(fā)機(jī)制,在一組(如一對(duì))鏈路(出口端口)之間實(shí)現(xiàn)負(fù)載均衡,而不只有一個(gè)"最佳"出口鏈路(出口端口)。這既提高了帶寬,又在發(fā)生單個(gè)鏈路故障時(shí)可以自動(dòng)恢復(fù)。另一種情況是交換機(jī)轉(zhuǎn)發(fā)流水線支持端口組,因此一旦建立了等價(jià)鏈接,就可以一直為數(shù)據(jù)平面服務(wù)。
明確的說(shuō),ECMP是SD-Fabric在網(wǎng)絡(luò)中的所有交換機(jī)上統(tǒng)一應(yīng)用的一種轉(zhuǎn)發(fā)策略。SD-Fabric控制程序感知拓?fù)洌⑾鄳?yīng)的將端口組推送到每個(gè)網(wǎng)絡(luò)交換機(jī)上,然后交換機(jī)將這些端口組應(yīng)用到其轉(zhuǎn)發(fā)流水線中,流水線通過(guò)端口組轉(zhuǎn)發(fā)數(shù)據(jù)包,不需要控制平面的額外參與。
最后,在可擴(kuò)展性方面,SD-Fabric擁有支持多達(dá)120k路由和250k流表的能力。該配置包括兩個(gè)脊交換機(jī)和八個(gè)葉交換機(jī),后者意味著支持多達(dá)四個(gè)機(jī)架的服務(wù)器。與可用性一樣,SD-Fabric的可擴(kuò)展性直接得益于ONOS的擴(kuò)展能力。
7.2 段路由(Segment Routing)
上一節(jié)重點(diǎn)介紹了SD-Fabric的功能,本節(jié)主要討論如何才能做到這一點(diǎn)。SD-Fabric的核心策略基于 段路由(Segment Routing, SR) 。"segment routing"一詞來(lái)源于這樣一種想法: 任意一對(duì)主機(jī)之間的端到端路徑可以由一組段序列構(gòu)建,即使用標(biāo)簽交換沿著一段端到端路徑遍歷一組段序列。Segment routing是一種通用源路由方法,可以通過(guò)多種方式實(shí)現(xiàn)。對(duì)于SD-Fabric,segment routing利用了MPLS(Multi-Protocol Label Switching) 轉(zhuǎn)發(fā)平面,細(xì)節(jié)可以參考網(wǎng)絡(luò)信息。
當(dāng)應(yīng)用于葉棘網(wǎng)絡(luò)時(shí),總是涉及兩個(gè)部分: 從葉到棘和從棘到葉。SD-Fabric為交換機(jī)編寫程序,以匹配有標(biāo)簽或無(wú)標(biāo)簽數(shù)據(jù)包,并根據(jù)需要插入或彈出MPLS標(biāo)簽。圖40說(shuō)明了SR如何在SD-Fabric中工作,通過(guò)簡(jiǎn)單的配置在一對(duì)主機(jī)(10.0.1.1和10.0.2.1)之間轉(zhuǎn)發(fā)流量。本例中,與Leaf 1相連的服務(wù)器在10.0.1/24子網(wǎng)中,與Leaf 2相連的服務(wù)器在10.0.2/24子網(wǎng)中,每個(gè)交換機(jī)都分配了一個(gè)MPLS id: 101、103、102和104。
圖40. 用于在一對(duì)主機(jī)之間轉(zhuǎn)發(fā)流量的Segment Routing示例。
當(dāng)主機(jī)1發(fā)送目的地址為10.0.2.1的數(shù)據(jù)包時(shí),默認(rèn)情況下被轉(zhuǎn)發(fā)到服務(wù)器的ToR/葉交換機(jī)。Leaf 1匹配目的IP地址,了解到這個(gè)包需要穿過(guò)網(wǎng)絡(luò)并在Leaf 2出現(xiàn)以到達(dá)子網(wǎng)10.0.2/24,因此將MPLS標(biāo)簽102壓到包上。因?yàn)橛辛薊CMP, Leaf 1可以將產(chǎn)生的數(shù)據(jù)包轉(zhuǎn)發(fā)到任意一個(gè)脊交換機(jī),此時(shí)交換機(jī)匹配MPLS標(biāo)簽102,彈出標(biāo)簽頭,并將其轉(zhuǎn)發(fā)到Leaf 2。最后,Leaf 2匹配目的IP地址并將數(shù)據(jù)包轉(zhuǎn)發(fā)給主機(jī)2。
從該示例中可以了解到,SR是高度格式化的。對(duì)于給定的葉脊交換機(jī)組合,SD-Fabric首先分配所有標(biāo)識(shí)符,每個(gè)機(jī)架配置為共享一個(gè)IP前綴并在同一個(gè)VLAN上。SD-Fabric預(yù)計(jì)算可能的路徑,并在底層交換機(jī)中配置相應(yīng)的match/action規(guī)則。ECMP負(fù)責(zé)處理多路徑負(fù)載均衡的復(fù)雜性,它同樣不感知任何端到端路徑。從實(shí)現(xiàn)角度來(lái)看,實(shí)現(xiàn)SR的SD-Fabric控制程序?qū)⑦@些match/action規(guī)則傳給ONOS, ONOS反過(guò)來(lái)將它們配置在底層交換機(jī)上。SD-Fabric還維護(hù)自己的Atomix map,以管理連接葉脊交換機(jī)的ECMP組。
7.3 路由和多播(Routes and Multicast)
除了在葉交換機(jī)之間建立數(shù)據(jù)路徑的Segment Routing之外,SD-Fabric還利用了第6章介紹的Route和Mcast服務(wù),它們決定每個(gè)IP前綴都有哪些葉脊交換機(jī)為其服務(wù),以及在哪里能找到連接到每個(gè)多播組的所有主機(jī)。
SD-Fabric不通過(guò)類似OSPF或者PIM這樣的分布式協(xié)議來(lái)學(xué)習(xí)路由以及構(gòu)建組播樹。相反,它根據(jù)全局信息計(jì)算出正確答案,然后將映射推送到Route和Mcast服務(wù)。因?yàn)镾D-Fabric強(qiáng)加了簡(jiǎn)化約束,即每個(gè)機(jī)架恰好對(duì)應(yīng)一個(gè)IP子網(wǎng),因此這么做很簡(jiǎn)單。
為了更具體討論問(wèn)題,考慮到在第6章中描述的所有ONOS服務(wù)都可以通過(guò)RESTful API調(diào)用,或者通過(guò)封裝了REST的GET
、POST
和DELETE
調(diào)用的CLI調(diào)用。下面通過(guò)CLI來(lái)舉例說(shuō)明(因?yàn)楦菀桌斫?,可以通過(guò)查詢Route Service了解現(xiàn)有路由,如下所示:
onos > routes
B: Best route, R: Resolved route
Table: ipv4
B R Network Next Hop Source (Node)
0.0.0.0/0 172.16.0.1 FPM (127.0.0.1)
> * 1.1.0.0/18 10.0.1.20 STATIC
> * 10.0.99.0/24 10.0.1.1 FPM (127.0.0.1)
* 10.0.99.0/24 10.0.6.1 FPM (127.0.0.1)
Total: 2
Table: ipv6
B R Network Next Hop Source (Node)
> * 2000::7700/120 fe80::288:ff:fe00:1 FPM (127.0.0.1)
> * 2000::8800/120 fe80::288:ff:fe00:2 FPM (127.0.0.1)
> * 2000::9900/120 fe80::288:ff:fe00:1 FPM (127.0.0.1)
* 2000::9900/120 fe80::288:ff:fe00:2 FPM (127.0.0.1)
Total: 3
可以給Route Service添加一個(gè)類似的靜態(tài)路由:
onos > route-add < prefix > < nexthop >
onos > route-add 1.1.0.0/18 10.0.1.20
onos > route-add 2020::101/120 2000::1
需要注意一點(diǎn),路由有兩種可能的源,一種是STATIC
,意味著SD-Fabric在插入路由時(shí)完全知道它分配給集群中每個(gè)機(jī)架的前綴。(運(yùn)維人員也可以使用CLI添加STATIC
路由,但這只是一個(gè)例外,而不是規(guī)則。)
第二種源是FPM
。FPM(轉(zhuǎn)發(fā)平面管理器, Forwarding Plane Manager)是另一個(gè)ONOS服務(wù),屬于SD-Fabric服務(wù)套件之一。它負(fù)責(zé)從外部源學(xué)習(xí)路由,輸入給被配置為BGP鄰區(qū)的本地Quagga進(jìn)程。每當(dāng)FPM學(xué)習(xí)到外部路由,就會(huì)向Route Service添加相應(yīng)的基于前綴的下一跳映射,表明通過(guò)連接網(wǎng)絡(luò)和上游的葉交換機(jī)(例如圖39中的交換機(jī)3和4),目的地前綴是可達(dá)的。
多播的情況與此類似,使用同樣的ONOS CLI可以創(chuàng)建新的多播路由并添加聚合器。例如:
onos > mcast-host-join -sAddr *
-gAddr 224.0.0.1
-srcs 00:AA:00:00:00:01/None
-srcs 00:AA:00:00:00:05/None
-sinks 00:AA:00:00:00:03/None
-sinks 00:CC:00:00:00:01/None
該示例指定ASM (Any-Source Multicast) (sAddr *
)、組播組地址(gAddr
)、組源地址(srcs
)和組聚合地址(sinks
)。聚合地址可以通過(guò)如下指令移除:
onos > mcast-sink-delete -sAddr *
-gAddr 224.0.0.1
-h 00:AA:00:00:00:03/None
這里同樣沒(méi)有運(yùn)行PIM,但是SD-Fabric為網(wǎng)絡(luò)運(yùn)維人員提供了編程接口,通過(guò)一系列這樣的調(diào)用來(lái)定義多播樹。例如,當(dāng)SD-Fabric作為向訂戶發(fā)送IPTV的接入網(wǎng)絡(luò)的一部分運(yùn)行時(shí),一種選擇是讓運(yùn)營(yíng)商機(jī)頂盒發(fā)出類似上面所示的調(diào)用(當(dāng)然,使用RESTful API而不是CLI)。另一種選擇是讓機(jī)頂盒發(fā)送IGMP消息,SD-Fabric通過(guò)Packet Service(類似于攔截ARP和DHCP報(bào)文的Host Service)攔截IGMP消息。因此,當(dāng)你下一次使用電視遙控器轉(zhuǎn)換頻道時(shí),可能就在本書介紹的SDN軟件棧上觸發(fā)了過(guò)程調(diào)用!
7.4 定制轉(zhuǎn)發(fā)(Customized Forwarding)
SD-Fabric是SDN的典型用例,它是一組運(yùn)行在網(wǎng)絡(luò)操作系統(tǒng)(Network OS)上控制程序,這些控制程序又運(yùn)行在一組可編程交換機(jī)上,這些交換機(jī)以葉脊拓?fù)涞募軜?gòu)連接,每個(gè)交換機(jī)運(yùn)行本地交換機(jī)操作系統(tǒng)。通過(guò)這種方式,SD-Fabric位于自下而上的SDN軟件棧的頂點(diǎn)。
但如果我們從一開始就知道支持SD-Fabric特性集的葉脊網(wǎng)絡(luò)正是我們想要的,那么可能會(huì)回到較低的層級(jí),并以此為目的進(jìn)行調(diào)整。隨著時(shí)間的推移,這就是SD-Fabric所發(fā)生的情況,產(chǎn)生了一個(gè)名為fabric.p4
的P4程序?qū)崿F(xiàn)了定制轉(zhuǎn)發(fā)平面。我們通過(guò)對(duì)fabric.p4
的概要總結(jié)來(lái)結(jié)束本章,重點(diǎn)介紹其設(shè)計(jì)如何與軟件棧的其他部分相結(jié)合。
在此之前,必須認(rèn)識(shí)到,一開始就清楚知道想從網(wǎng)絡(luò)中獲得什么是非常高的標(biāo)準(zhǔn)。網(wǎng)絡(luò)的發(fā)展基于使用和運(yùn)維的經(jīng)驗(yàn),沒(méi)人從一開始就知道如何編寫fabric.p4
,但在整個(gè)軟件棧的其他層實(shí)現(xiàn)了一系列迭代之后(包括引入Tofino作為可編程轉(zhuǎn)發(fā)流水線),fabric.p4
出現(xiàn)了。 關(guān)鍵點(diǎn)是,可編程平臺(tái)使我們能夠不斷、快速的實(shí)現(xiàn)網(wǎng)絡(luò)的演進(jìn) 。
換句話說(shuō),我們?cè)诘?章中提到的forard.p4
是"按照我們想要的方式定制轉(zhuǎn)發(fā)平面"的典型例子,但該章剩余部分都在討論無(wú)需重新實(shí)現(xiàn)特定網(wǎng)絡(luò)的功能使forward.p4
成為可能的所有機(jī)制。簡(jiǎn)言之,fabric.p4
是forward.p4
的一個(gè)具體例子,不過(guò)我們現(xiàn)在只介紹了它與控制平面的關(guān)系。
關(guān)于fabric.p4
有三件事情值得注意。首先,雖然它基于Broadcom OF-DPA流水線,但是松耦合的。這很有意義,因?yàn)镾D-Fabric最初是在一組基于Tomahawk的交換機(jī)上實(shí)現(xiàn)的。fabric.p4
流水線比OF-DPA更簡(jiǎn)單,消除了SD-Fabric不需要的表,從而使得fabric.p4
更容易控制。
其次,fabric.p4
被設(shè)計(jì)來(lái)模擬ONOS的FlowObjective API,從而簡(jiǎn)化了將FlowObjective映射到P4Runtime的過(guò)程。圖41顯示了fabric.p4
的入口流水線,雖然沒(méi)有顯示出口流水線,但在一般情況下,只是對(duì)頭字段的簡(jiǎn)單重寫。
圖41. 由fabric.p4支持的邏輯流水線,用于對(duì)FlowObjective API的Filtering, Forwarding和Next階段的并行處理。
最后,fabric.p4
被設(shè)計(jì)為可配置的,從而可以有選擇的包含額外的功能。在編寫基于ASIC的轉(zhuǎn)發(fā)流水線進(jìn)行優(yōu)化的代碼時(shí),這并不容易,而且在實(shí)踐中會(huì)大量使用預(yù)處理?xiàng)l件(例如,#ifdefs
)。下面顯示的代碼片段是fabric.p4
的入口函數(shù)的主要控制塊。第9章將在較高層次上更深入討論下面這些可選擴(kuò)展:
- UPF(用戶平面功能, User Plane Function): 增強(qiáng)IP功能,支持4G/5G移動(dòng)網(wǎng)絡(luò)。
- BNG(寬帶網(wǎng)絡(luò)網(wǎng)關(guān), Broadband Network Gateway): 增強(qiáng)IP功能,支持光纖到家。
- INT(帶內(nèi)網(wǎng)絡(luò)遙測(cè), Inband Network Telemetry): 增加度量收集和遙測(cè)輸出指令。
apply {
#ifdef UPF
upf_normalizer.apply(hdr.gtpu.isValid(), hdr.gtpu_ipv4,
hdr.gtpu_udp, hdr.ipv4, hdr.udp, hdr.inner_ipv4,
hdr.inner_udp);
#endif // UPF
// Filtering Objective
pkt_io_ingress.apply(hdr, fabric_metadata, standard_metadata);
filtering.apply(hdr, fabric_metadata, standard_metadata);
#ifdef UPF
upf_ingress.apply(hdr.gtpu_ipv4, hdr.gtpu_udp, hdr.gtpu,
hdr.ipv4, hdr.udp, fabric_metadata, standard_metadata);
#endif // UPF
// Forwarding Objective
if (fabric_metadata.skip_forwarding == _FALSE) {
forwarding.apply(hdr, fabric_metadata, standard_metadata);
}
acl.apply(hdr, fabric_metadata, standard_metadata);
// Next Objective
if (fabric_metadata.skip_next == _FALSE) {
next.apply(hdr, fabric_metadata, standard_metadata);
#if defined INT
process_set_source_sink.apply(hdr, fabric_metadata,
standard_metadata);
#endif // INT
}
#ifdef BNG
bng_ingress.apply(hdr, fabric_metadata, standard_metadata);
#endif // BNG
}
例如,upf.p4
(未顯示)實(shí)現(xiàn)了UPF擴(kuò)展的轉(zhuǎn)發(fā)平面,支持包括3GPP蜂窩網(wǎng)絡(luò)標(biāo)準(zhǔn)要求的GTP隧道封裝/解封裝,將SD-Fabric網(wǎng)絡(luò)連接到無(wú)線接入網(wǎng)絡(luò)基站。同樣,bng.p4
(未顯示)實(shí)現(xiàn)PPPoE終端,一些無(wú)源光網(wǎng)絡(luò)部署通過(guò)它將SD-Fabric網(wǎng)絡(luò)連接到家庭路由器。最后,這段沒(méi)什么實(shí)際意義的代碼片段介紹了fabric.p4
核心功能的基本結(jié)構(gòu)。首先應(yīng)用 filtering對(duì)象 (filtering.apply
),然后應(yīng)用 forwarding對(duì)象 (forwarding.apply
和acl.apply
),最后應(yīng)用 next對(duì)象 (next.apply
)。
除了選擇包含哪些擴(kuò)展之外,預(yù)處理器還定義了幾個(gè)常量,包括每個(gè)邏輯表的大小。顯然,這種實(shí)現(xiàn)是構(gòu)建可配置轉(zhuǎn)發(fā)流水線的底層方法。設(shè)計(jì)更高級(jí)的語(yǔ)言結(jié)構(gòu),包括在運(yùn)行時(shí)向流水線動(dòng)態(tài)添加功能的能力,還是一個(gè)未完成的研究課題。
審核編輯:郭婷
-
服務(wù)器
+關(guān)注
關(guān)注
13文章
9768瀏覽量
87745 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7135瀏覽量
125410 -
sdn
+關(guān)注
關(guān)注
3文章
256瀏覽量
45593
發(fā)布評(píng)論請(qǐng)先 登錄
如何利用SDN擴(kuò)展虛擬網(wǎng)絡(luò)
關(guān)于SDN的未來(lái),Linux基金會(huì)專訪阿里云網(wǎng)絡(luò)大神
數(shù)據(jù)中心網(wǎng)絡(luò)SDN技術(shù)全解析
SDN網(wǎng)絡(luò)詳解

10個(gè)關(guān)于SDN軟件定義網(wǎng)絡(luò)的問(wèn)答
SDN網(wǎng)絡(luò)構(gòu)架及發(fā)展歷史

軟件定義網(wǎng)絡(luò)(SDN)

怎樣通俗易懂地解釋貝葉斯網(wǎng)絡(luò)和它的應(yīng)用?

虛擬SDN網(wǎng)絡(luò)映射算法

基于貝葉斯網(wǎng)絡(luò)和數(shù)據(jù)挖掘的航班延誤預(yù)測(cè)方法

SDN網(wǎng)絡(luò)到ADN網(wǎng)絡(luò)該如何演進(jìn)
網(wǎng)絡(luò)之變:SDN主角演繹

評(píng)論