基于ONOS的SDN-IP架構概述篇
SDN-IP是ONOS上的一個應用程序,允許軟件定義網(wǎng)絡使用標準的邊界網(wǎng)關協(xié)議(BGP)連接到外部網(wǎng)絡。從BGP角度看,SDN網(wǎng)絡表現(xiàn)為單一的自治系統(tǒng)(AS),其行為與任何傳統(tǒng)的AS一樣?;贏S的SDN-IP應用提供BGP和ONOS之間的集成整合機制,在協(xié)議層SDN-IP的行為作為一個有規(guī)則的BGP發(fā)言人。從ONOS的角度來看,它只是使用其服務,在SDN數(shù)據(jù)平面安裝和更新相應的轉發(fā)狀態(tài)的應用程序。
1 架構目標
1.1 SDN-IP設計目標
(1)兼容性Compatibility:SDN-IP可以與已經(jīng)使用BGP的網(wǎng)絡集成,外部、內部、或兩者之間都可以,兼容性很好。
(2)操作靈活性Operational flexibility:SDN-IP可以在一個或多個ONOS實例中運行。SDN-IP也可以在多種BGP的部署方案中使用,體現(xiàn)出很強的靈活性。
(3)高可用性High availability(HA):SDN-IP應用程序本身提供HA服務。只要有其中一個SDN-IP應用實例在運行,SDN-IP服務就會保持無縫連接。此外,SDN-IP利用提供ONOS的HA機制在數(shù)據(jù)平面中維持一致的轉發(fā)狀態(tài)。
(4)可擴展性Scalability:可以通過正在運行的基于BGP網(wǎng)絡和多個ONOS集群的SDN-IP控制大型的軟件定義網(wǎng)絡。
(5)協(xié)議兼容性和供應商的獨立性Protocol compatibility and vendor independence:SDN-IP依賴于標準的BGP協(xié)議交換網(wǎng)絡信息,并且不需要任何專有或特定于供應商的擴展。
1.2 架構概述
SDN-IP架構如圖所示:

2 連通性
2.1 SDN-IP應用intents
下面是兩種類型的SDN-IP使用應用intents的簡要說明
(1)單點對單點的intents
在外部路由器和SDN BGP Speakers之間建立BGP對等會話使用單向intents。每個intents在SDN網(wǎng)絡中連接兩個連接點。每個連接點包含以下信息:SDN交換機的DPID、交換機Port和連接的BGP Speaker路由器的MAC地址。
(2)多點對單點的intents
多點對單點的intents用于與外部網(wǎng)絡的主機連接在一起的單向intents。每個intent與每個IP前綴(目的IP)相關聯(lián),并連接SDN網(wǎng)絡的入口連接點與單一的出口連接點,指向下一跳路由器的目的IP。在SDN網(wǎng)絡的邊緣入口,一個IP包匹配目的IP地址。選擇******的轉發(fā)項匹配轉發(fā)數(shù)據(jù)包到相應的出口連接點。此外,該數(shù)據(jù)包被轉發(fā)之前,應用“改變目的MAC地址”,使得包含出口IP路由器的數(shù)據(jù)包轉發(fā)到目的MAC地址。
2.2 SDN數(shù)據(jù)平面連通
在SDN-IP網(wǎng)絡的數(shù)據(jù)平面主要用于以下情況:
(1)進行內部BGP Speaker和外部BGP路由器(配置eBGP peerings)之間的BGP流量控制。
(2)橫穿SDN-IP網(wǎng)絡的外部IP網(wǎng)絡之間數(shù)據(jù)流量傳輸。
eBGP 控制流量與每個eBGP 對等的操作有關。這種流量在eBGP 對等操作配置的基礎上是點對點的、雙向的,且終點是相對靜態(tài)設定的。當一個數(shù)據(jù)平面失敗,可能會導致終點之間的路徑改變。這種故障可被自動檢測且相關的intents會被ONOS重新設置路由。目前,具體的連接點與每個BGP Speaker相關,且外部BGP路由器需要在SDN-IP配置文件中手動配置,但是將來這種需求會被淘汰。
傳輸數(shù)據(jù)流量的路徑是通過由外部BGPpeers發(fā)布的BGP路由定義。類似于常規(guī)的BGP部署,這些路由是相對動態(tài)的,且它們的數(shù)量非常大。如果BGP peer通告特定IP前綴的路由,并且被選為路由***的下一跳地址,SDN-IP將負責建立相應的數(shù)據(jù)路徑。所有的流量決定進剩余外部IP網(wǎng)絡的IP前綴被轉發(fā)向最匹配的外部下一跳BGP路由器上。ONOS應用intents的情況下,通過創(chuàng)建一個多點對單點應用intents實現(xiàn)IP前綴:出口路由器(即***的下一跳路由器)是(出口)單點intent,其余外部BGP路由器是(入口)多點的intents。

SDN-IP應用負責生成多點對單點的應用intents請求和用于更新BGP路由動態(tài)響應的intents。ONOS本身負責匯編這些請求、在交換機數(shù)據(jù)平面安裝相應的轉發(fā)流和以防SDN網(wǎng)絡發(fā)生故障重新設置路由的intents。
2.3 SDN控制平面連通
在SDN網(wǎng)絡和SDN-IP應用程序實例中BGP Speaker通信使用iBGP。對等會話在控制平面中創(chuàng)建,因此,每一個BGP Speaker連接到它。
在任何的BGP部署中 BGP Speaker和SDN-IP應用實例是互連的:一個完整的iBGP網(wǎng)狀、路由反射等。唯一的區(qū)別是,在SDN-IP實例它們之間不需要iBGP peerings,他們只需要與BGP Speaker互連即可。
SDN-IP實現(xiàn)了IBGP協(xié)議的子集:只接收處理來自BGP Speaker的BGP路由信息,但從來不發(fā)起或重新發(fā)送BGP路由。一旦SDN-IP接收來自外部路由器(經(jīng)由BGP Speaker接收)的通知,它將路由信息變換成intents請求給ONOS。ONOS本身將其轉換交換機中的OpenFlow流表項。

BGP Speaker使用iBGP傳輸路由信息給SDN-IP應用實例,當在常規(guī)的BGP部署中,通過全網(wǎng)或者使用路由相應服務器實現(xiàn)互連通是非常重要的。因此,我們可以使用BGP本身所提供的故障失效性。SDN-IP應用程序實例之間是不需要iBGP peering的:peering是在BGP Speaker和SDN-IP應用程序實例之間的。
2.4 高可用性支持
SDN-IP提供使用熱備份模式支持高可用性。SDN-IP應用程序可以加載在多個ONOS實例。所有的SDN-IP應用監(jiān)聽路由更新BGP的到達信息,但只有一個SDN-IP實例被指定為主實例負責推送intents到ONOS。如果主實例失敗,剩余實例中的一個將成為新的主實例繼續(xù)推送intents到ONOS。
SDN-IP使用ONOS領導選舉服務來選擇主SDN-IP實例。我們必須確保在任何時間只有一個實例推送intents,防止錯誤的intents被推送到ONOS。當每個SDN-IP實例啟動時,它參與領導選舉試圖成為主實例。選舉確保在任一時間只有一個實例可以是主實例。當主實例發(fā)生故障,選舉機制檢測到故障,并允許另一個實例接管負責成為主實例。新的主實例首先進行intents同步保證intents更新之前學習的BGP路由。一旦同步完成,主實例正常工作,為響應BGP更新繼續(xù)安裝和刪除intents。
盡管SDN-IP應用程序支持HA(高可用性),該系統(tǒng)仍然容易受到組件故障,除非內部BGP Speaker和BGP peer會話之間有冗余。每個SDN-IP實例能夠接收來自BGP Speaker的BGP更新,確保多個內部BGP Speaker部署在SDN網(wǎng)絡中。
3 限制
在SDN-IP應用程序的當前實施中具有以下限制:
(1)詳細配置信息只能在SDN-IP啟動之前配置。啟動后用戶不能改變配置,例如,當SDN-IP運行時,用戶不能添加其他外部BGP peer。
(2)只有傳輸IP流量被支持。也就是說,SDN-IP網(wǎng)絡里來自主機的或者決策于主機的IP流量不支持。作為應急措施,用戶可以手動創(chuàng)建專門的intents允許內部主機與外部網(wǎng)絡的通信未來這應該是SDN-IP自動完成的。
(3)SDN-IP應用默認監(jiān)聽BGP連接的是非標準端口2000,這不是用于BGP連接的正常標準端口179。但是這個端口號是可配置的,它可以配置為179 ,但必須以root身份運行綁定到一個受保護的端口。以root身份運行ONOS目前還不支持。
(4) ONOS實例之間SDN-IP不會進行負載均衡。所有的工作是由一個單一的主實例進行。如果一個實例失敗,可以切換到備份的情況下運行。
(5)在SDN-IP應用端沒有明確的IBGP會話配置。默認情況下,SDN-IP應用將接受所有BGP 開放消息,并會自動配置來使用原始BGP Speaker的AS號。
(6)如果所有的SDN-IP應用程序實例被卸載,相關的應用程序intents不會自動從ONOS中刪除。
(7)如果下一跳的MAC地址發(fā)生變化,不會更新intents而使流量將停止流動。
(8)目前只支持IPv4。
(9)外部BGP路由器和內部BGP Speaker間的peer會話必須使用TCP端口179進行對等連接。只有TCP連接到端口179才被允許進出SDN網(wǎng)絡的對等IP地址。
(10) 由于intents框架的局限性,在1.0.0版本系統(tǒng)可以處理約15000路由。