邊緣交換機(jī)和OpenFlow內(nèi)部交換機(jī)分別連接SDN控制器。OpenFlow邊緣交換機(jī)S (η)和S (k)等連接IP網(wǎng)絡(luò)的BGP邊緣路由器。SDN控制器(控制器A)與IP網(wǎng)絡(luò)的BGP邊緣路由器交換路由信息,且SDN控制器工作為SDN網(wǎng)絡(luò)的網(wǎng)關(guān),通過ARP代理和MAC地址重寫實現(xiàn)SDN網(wǎng)絡(luò)與IP網(wǎng)絡(luò)的報文互傳,從而使得共存在同一 AS域內(nèi)的SDN網(wǎng)絡(luò)與傳統(tǒng)IP網(wǎng)絡(luò)進(jìn)行通信。
[0046]在圖1中,SDN網(wǎng)絡(luò)內(nèi)的主機(jī)通過控制器A的ARP代理學(xué)習(xí)到ARP表,設(shè)置默認(rèn)網(wǎng)關(guān)為控制器A。SDN網(wǎng)絡(luò)中主機(jī)發(fā)送出去的數(shù)據(jù)包目的MAC地址改寫為路由器B的MAC地址,并經(jīng)路由器B轉(zhuǎn)發(fā)到IP網(wǎng)絡(luò)中。來自SDN網(wǎng)絡(luò)外部的數(shù)據(jù)包經(jīng)過OpenFlow邊緣交換機(jī)的MAC地址重寫操作,將目的MAC地址改寫為SDN網(wǎng)絡(luò)中主機(jī)的MAC地址,發(fā)送給SDN網(wǎng)絡(luò)中的目的主機(jī)。
[0047]需要說明的是,為了實現(xiàn)在SDN網(wǎng)絡(luò)和傳統(tǒng)IP網(wǎng)絡(luò)互聯(lián)的過程中實現(xiàn)負(fù)載均衡以及故障規(guī)避,本實施例中在SDN網(wǎng)絡(luò)和傳統(tǒng)IP網(wǎng)絡(luò)之間提供多條互聯(lián)通信的路徑。
[0048]具體來說,SDN控制器模擬成網(wǎng)關(guān),其設(shè)置至少一個網(wǎng)口,與BGP邊緣路由器的至少一個接口——對應(yīng)地連接,使得SDN控制器與BGP邊緣路由器建立至少一條BGP會話連接,用于交換路由信息。SDN控制器根據(jù)至少一個網(wǎng)口配置的MAC地址和IP地址,對進(jìn)入和流出AS域的數(shù)據(jù)流進(jìn)行路由調(diào)度。
[0049]此處SDN控制器模擬設(shè)置的網(wǎng)口可以為實體的物理網(wǎng)口,也可為虛擬網(wǎng)口。在下面的示例中,以控制器A設(shè)置有兩個虛擬網(wǎng)口進(jìn)行說明。
[0050]在圖3所示的示例中,控制器A設(shè)置兩個虛擬網(wǎng)口,分別為PSl (IP 1.0.0.K MAC00-00-00-00-00-01)和 PS2 (IP 1.0.0.2、MAC 00-00-00-00-00-02)。也就是說,控制器 A在AS域內(nèi)工作為兩個網(wǎng)關(guān),IP地址和MAC地址分別設(shè)定為上述的數(shù)值。
[0051]路由器B 設(shè)置兩個接口 PB1(IP 2.0.0.K MAC 00-00-00-00-02-01)和 PB2 (IP
2.0.0.2、MAC 00-00-00-00-02-02),分別通過邊緣交換機(jī)S (η)與控制器A建立兩條eBGP連接⑴和⑵。
[0052]此外,路由器C 設(shè)置一個接口 PCI (IP2.0.0.3、MAC 00-00-00-00-02-03)??刂破鰽的虛擬網(wǎng)口 PS2還通過邊緣交換機(jī)S (k)與接口 PB2建立eBGP連接(3),以及與接口 PCl建立eBGP連接(4)。
[0053]對于⑴至⑷eBGP連接,需要在交換機(jī)S (η)和S (k)上預(yù)先下發(fā)相應(yīng)的流表,使得eBGP會話的數(shù)據(jù)包可以根據(jù)IP地址在路由器B、路由器C和控制器A之間轉(zhuǎn)發(fā)。
[0054]以下結(jié)合圖2對SDN網(wǎng)絡(luò)和IP網(wǎng)絡(luò)互聯(lián)通信的方法進(jìn)行說明。
[0055]在圖2中,首先使SDN網(wǎng)絡(luò)的OpenFlow邊緣交換機(jī)連接IP網(wǎng)絡(luò)的BGP邊緣路由器,SDN控制器與IP網(wǎng)絡(luò)的BGP邊緣路由器交換路由信息(步驟S210)。然后,SDN控制器工作為SDN網(wǎng)絡(luò)的網(wǎng)關(guān),通過ARP代理和MAC地址重寫實現(xiàn)SDN網(wǎng)絡(luò)與IP網(wǎng)絡(luò)的報文互傳(步驟 S220) ο
[0056]具體來說,在步驟S210中包括三個子步驟。首先,使SDN網(wǎng)絡(luò)的OpenFlow邊緣交換機(jī)連接IP網(wǎng)絡(luò)的BGP邊緣路由器(子步驟S211),即將SDN網(wǎng)絡(luò)加入到傳統(tǒng)IP網(wǎng)絡(luò)中。
[0057]隨后,SDN控制器通過OpenFlow邊緣交換機(jī)與IP網(wǎng)絡(luò)的BGP邊緣路由器建立BGP會話連接(子步驟S212)。例如,在圖3中,SDN控制器A模擬eBGP路由器,通過連接(I)至⑷分別向eBGP路由器B和路由器C發(fā)送OPEN消息,建立BGP會話連接。
[0058]接下來,SDN控制器模擬eBGP路由器向BGP邊緣路由器發(fā)送SDN網(wǎng)絡(luò)的路由信息,并從BGP邊緣路由器獲得IP網(wǎng)絡(luò)的路由信息(子步驟S213)。例如,在圖3中,SDN控制器A通過BGP路由器B的更新(update)消息,獲得路由器B的路由與網(wǎng)絡(luò)可達(dá)性信息。SDN控制器A計算生成路由表,并向路由器B發(fā)送SDN網(wǎng)絡(luò)的路由信息。
[0059]在步驟S220中包括ARP表學(xué)習(xí)步驟和MAC地址重寫步驟。
[0060]首先,在ARP表學(xué)習(xí)步驟中,所述SDN控制器通過ARP學(xué)習(xí)模塊向IP網(wǎng)絡(luò)發(fā)送ARP報文,學(xué)習(xí)到由IP網(wǎng)絡(luò)中主機(jī)和BGP路由器的IP地址和MAC地址組成的ARP表(子步驟S221),SDN網(wǎng)絡(luò)內(nèi)各主機(jī)通過SDN控制器的ARP代理模塊學(xué)習(xí)到ARP表。
[0061 ] 然后,在MAC地址重寫步驟中,對由IP網(wǎng)絡(luò)發(fā)送至SDN網(wǎng)絡(luò)的數(shù)據(jù)包進(jìn)行目的MAC地址改寫。由于在上述子步驟S213中SDN控制器A已向BGP路由器B發(fā)送路由,使得SDN控制器A的IP地址成為傳統(tǒng)IP網(wǎng)絡(luò)中主機(jī)在三層的下一跳。對于BGP邊緣路由器向SDN網(wǎng)絡(luò)內(nèi)目標(biāo)主機(jī)發(fā)送的數(shù)據(jù)包,BGP邊緣路由器將數(shù)據(jù)包的目的MAC地址修改為SDN控制器的至少一個虛擬網(wǎng)口的MAC地址(子步驟S222) ;SDN控制器根據(jù)自身虛擬網(wǎng)口的MAC地址將數(shù)據(jù)包調(diào)度到轉(zhuǎn)發(fā)路徑(子步驟S223),進(jìn)而使得數(shù)據(jù)包通過轉(zhuǎn)發(fā)路徑到達(dá)目標(biāo)主機(jī)(子步驟S224)。其中,在各條轉(zhuǎn)發(fā)路徑上,SDN控制器向OpenFlow邊緣交換機(jī)或者OpenFlow內(nèi)部交換機(jī)下發(fā)流表,使得OpenFlow邊緣交換機(jī)或者OpenFlow內(nèi)部交換機(jī)將SDN控制器的至少一個虛擬網(wǎng)口的MAC地址改寫為目標(biāo)主機(jī)的MAC地址。
[0062]以下結(jié)合圖3對子步驟S222至S224進(jìn)行詳細(xì)說明。以從因特網(wǎng)到AS域中主機(jī)T的數(shù)據(jù)流為例。數(shù)據(jù)流的目的IP地址是主機(jī)T的IP地址。需要說明的是,本實施例中對數(shù)據(jù)包的目的MAC地址進(jìn)行改寫,因此,數(shù)據(jù)包的目的MAC地址是局部的,在轉(zhuǎn)發(fā)路徑中會根據(jù)路徑進(jìn)行修改,而目的IP地址是不變的,即主機(jī)T的IP地址。
[0063]在圖3中,AS域中的主機(jī)T的默認(rèn)網(wǎng)關(guān)設(shè)置為虛擬網(wǎng)口 PS1,主機(jī)M的默認(rèn)網(wǎng)關(guān)設(shè)置為虛擬網(wǎng)口 PS2。在子步驟S213中,路由器B的接口 PBl從控制器A學(xué)習(xí)到路由,發(fā)現(xiàn)從虛擬網(wǎng)口 PSl和PS2均可到達(dá)主機(jī)T。則路由器B將一部分?jǐn)?shù)據(jù)包的目的MAC設(shè)置為虛擬網(wǎng)口 PSl的MAC地址,而另一部分?jǐn)?shù)據(jù)包的目的MAC設(shè)置為虛擬網(wǎng)口 PS2的MAC地址,數(shù)據(jù)流的目的IP地址仍然是主機(jī)T的IP地址。
[0064]SDN控制器向OpenFlow邊緣交換機(jī)或者OpenFlow內(nèi)部交換機(jī)下發(fā)流表,將數(shù)據(jù)流(目的MAC:PS1的MAC,目的IP:主機(jī)T的IP)調(diào)度到路徑I,也就是“路由器B的PB1-S(n)-S2-Sl-主機(jī)T”;而將數(shù)據(jù)流(目的MAC:PS2的MAC,目的IP:主機(jī)T的IP)調(diào)度到路徑II,也就是“路由器B的PBl-S (n) -S3-S1-主機(jī)Τ”,從而達(dá)到負(fù)載均衡的效果。
[0065]其中,SDN控制器向OpenFlow邊緣交換機(jī)或者OpenFlow內(nèi)部交換機(jī)下發(fā)的流表有兩個作用:1)邊緣和內(nèi)部的OpenFlow交換機(jī)可以根據(jù)數(shù)據(jù)包目的IP地址或者M(jìn)AC地址(或者同時根據(jù)目的IP地址和MAC地址)進(jìn)行轉(zhuǎn)發(fā),到達(dá)主機(jī)T的直連OpenFlow交換機(jī);
2)在主機(jī)T的直連OpenFlow交換機(jī)上使用控制器A下發(fā)的流表將來自BGP邊緣路由器的該數(shù)據(jù)包的目的MAC地址改寫為主機(jī)T的MAC地址。
[0066]需要說明的是,OpenFlow邊緣交換機(jī)或者OpenFlow內(nèi)部交換機(jī)均可完成MAC地址改寫操作,只要SDN控制器的管控域內(nèi)的路由能保證改寫后的數(shù)據(jù)包正確轉(zhuǎn)發(fā)到最終目的主機(jī)即可。
[0067]另外,如果路徑I中發(fā)生鏈路故障,例如S(η)和S2之間的鏈路中斷,路由器B能夠?qū)W習(xí)到鏈路故障,將從因特網(wǎng)到AS域中主機(jī)T的數(shù)據(jù)流的目的MAC均修改為PS2的MAC,從而把數(shù)據(jù)流都迀移到路徑II中。
[0068]再次回到圖2,在MAC地址重寫步驟中,還對于由SDN網(wǎng)絡(luò)發(fā)送至IP網(wǎng)絡(luò)的數(shù)據(jù)包進(jìn)行目的MAC地址改寫。設(shè)置SDN管理域主機(jī)的默認(rèn)網(wǎng)關(guān)為SDN控制器A的至少一個虛擬網(wǎng)口(子步驟S225)。SDN管理域主機(jī)發(fā)送數(shù)據(jù)包。SDN控制器A判斷數(shù)據(jù)包的目的IP地址是否在SDN控制域內(nèi)(子步驟S226),若是,則由OpenFlow內(nèi)部交換機(jī)將數(shù)據(jù)包轉(zhuǎn)發(fā)至目標(biāo)主機(jī)(子步驟S224)。若否,SDN控制器根據(jù)數(shù)據(jù)包的目的IP地址和/或源IP地址將數(shù)據(jù)包調(diào)度到轉(zhuǎn)發(fā)路徑(子步驟S227),使得數(shù)據(jù)包通過轉(zhuǎn)發(fā)路徑到達(dá)BGP邊緣路由器的接口,進(jìn)而轉(zhuǎn)發(fā)至目標(biāo)主機(jī)(子步驟S224)。在各條轉(zhuǎn)發(fā)路徑上,SDN控制器向SDN網(wǎng)絡(luò)中的OpenFlow邊緣交換機(jī)或者OpenFlow內(nèi)部交換機(jī)下發(fā)流表,使得OpenFlow邊緣交換機(jī)或者OpenFlow內(nèi)部交換機(jī)將數(shù)據(jù)包的目的MAC地址改寫為BGP邊緣路由器接口的MAC地址。
[0069]其中,在子步驟S226中,如果數(shù)據(jù)包的目的IP地址是SDN管理域內(nèi)的其他主機(jī)H(圖中未示出),則通過SDN控制器的ARP代理,可以獲得該目的主機(jī)的MAC地址,在主機(jī)T發(fā)出的數(shù)據(jù)包中,MAC地址設(shè)置為主機(jī)H的MAC地址;如果數(shù)據(jù)包的目的IP地址是SDN管理域外的地址,則主機(jī)T