欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

受管理網(wǎng)關(guān)的路由通告的制作方法

文檔序號:11892496閱讀:283來源:國知局
受管理網(wǎng)關(guān)的路由通告的制作方法與工藝

在諸如互聯(lián)網(wǎng)的物理L3網(wǎng)絡(luò)中,路由器利用包括邊界網(wǎng)關(guān)協(xié)議(BGP)的各種路由協(xié)議交換路由和可達性信息。BGP的主要功能是允許兩個路由器交換通告可用路由或不再可用路由的信息。即,第一路由器可以使用這個協(xié)議來通知第二路由器,去往給定IP地址或IP前綴的分組可以被發(fā)送到第一路由器。第二路由器然后可以使用這個信息來計算路由。

在一些受管理的虛擬化網(wǎng)絡(luò)內(nèi),路由由網(wǎng)絡(luò)控制器計算并且向下推送到在受管理網(wǎng)絡(luò)內(nèi)處理路由的轉(zhuǎn)發(fā)元件。由于控制器指示這些轉(zhuǎn)發(fā)元件將如何路由分組,因此沒有必要在轉(zhuǎn)發(fā)元件之間交換路由信息。但是,這些受管理的虛擬化網(wǎng)絡(luò)可以通過外部網(wǎng)絡(luò)發(fā)送和接收流量。當(dāng)前,這需要管理員手動向外部網(wǎng)絡(luò)中的路由器提供路由。



技術(shù)實現(xiàn)要素:

一些實施例提供了網(wǎng)絡(luò)控制系統(tǒng),其使得在由該網(wǎng)絡(luò)控制系統(tǒng)管理的網(wǎng)絡(luò)中操作的邏輯網(wǎng)絡(luò)能夠與受管理網(wǎng)絡(luò)外部的物理路由器對等并且向其通告路由信息。在一些實施例中,邏輯網(wǎng)絡(luò)包括至少部分地在受管理網(wǎng)關(guān)中實現(xiàn)的邏輯路由器,并且這些網(wǎng)關(guān)使用路由協(xié)議(例如,邊界網(wǎng)關(guān)協(xié)議)與外部物理路由器對等。當(dāng)多個受管理網(wǎng)關(guān)實現(xiàn)邏輯路由器(或邏輯路由器的至少與外部網(wǎng)絡(luò)接口的部分)時,在一些實施例中,這些多個網(wǎng)關(guān)可以單獨地將相同路由通告給外部路由器,由此允許外部路由器跨多個網(wǎng)關(guān)分發(fā)去往通告的目的地的流量。

在一些實施例中,邏輯路由器連接虛擬機邏輯上附連到其的一組邏輯交換機。每個邏輯交換機表示特定的一組IP地址(即,子網(wǎng)),并且在受管理網(wǎng)絡(luò)中跨虛擬機物理上連接到其(例如,通過虛擬接口)的一組受管理轉(zhuǎn)發(fā)元件實現(xiàn)。在一些實施例中,邏輯路由器也由連接到虛擬機的受管理轉(zhuǎn)發(fā)元件以分布式方式實現(xiàn)。但是,當(dāng)邏輯路由器也經(jīng)由一個或多個端口連接到外部網(wǎng)絡(luò)時,到外部網(wǎng)絡(luò)的這些連接通過使用一個或多個網(wǎng)關(guān)來實現(xiàn)。在一些實施例中,網(wǎng)關(guān)既負責(zé)從受管理網(wǎng)絡(luò)向外部未受管理物理網(wǎng)絡(luò)發(fā)送數(shù)據(jù)流量又負責(zé)處理從外部網(wǎng)絡(luò)發(fā)送到受管理網(wǎng)絡(luò)中的流量。

在一些實施例中,用戶(例如,管理員)配置邏輯網(wǎng)絡(luò),包括具有連接到外部網(wǎng)絡(luò)的一個或多個端口的邏輯路由器,用于在受管理網(wǎng)絡(luò)內(nèi)實現(xiàn)。此外,用戶可以經(jīng)由這些端口指定邏輯路由器應(yīng)該與外部網(wǎng)絡(luò)中的物理路由器對等,以便交換路由信息。在接收到邏輯網(wǎng)絡(luò)配置時,負責(zé)管理邏輯路由器的網(wǎng)絡(luò)控制器(或控制器集群)選擇一組網(wǎng)關(guān),用于實現(xiàn)到外部網(wǎng)絡(luò)的連接。在一些實施例中,當(dāng)邏輯路由器的這些端口已被指定用于與外部路由器對等時,網(wǎng)絡(luò)控制器將每個這種端口分配給不同的網(wǎng)關(guān)。在一些實施例中,這些網(wǎng)關(guān)在網(wǎng)絡(luò)中跨網(wǎng)關(guān)的集群散布,使得每個端口被實現(xiàn)在不同的故障域中。

選定的網(wǎng)關(guān)利用諸如邊界網(wǎng)關(guān)協(xié)議(BGP)的路由協(xié)議與外部路由器對等。在一些實施例中,控制器基于邏輯網(wǎng)絡(luò)配置生成路由協(xié)議數(shù)據(jù)。對于面向外部網(wǎng)絡(luò)的邏輯路由器的每個端口,控制器識別(i)實現(xiàn)該端口的網(wǎng)關(guān)將與其對等的這組外部路由器(即,該網(wǎng)關(guān)的鄰居),以及(ii)實現(xiàn)該端口的網(wǎng)關(guān)將通告的這組路由。這些路由可以簡單地是表示連接到邏輯路由器的邏輯交換機的IP前綴,或者可以附加地包括由用戶輸入的或由實現(xiàn)邏輯路由器的進程動態(tài)生成的其它路由。在一些實施例中,邏輯路由器的不同端口可以將其路由通告給不同的外部網(wǎng)絡(luò)路由器。一旦網(wǎng)絡(luò)控制器生成該數(shù)據(jù),連同用于網(wǎng)關(guān)中邏輯路由器實現(xiàn)的路由表數(shù)據(jù),網(wǎng)絡(luò)控制器就將數(shù)據(jù)分發(fā)到網(wǎng)關(guān)(例如,通過網(wǎng)絡(luò)控制器的層次結(jié)構(gòu))。

在一些實施例中,其上實現(xiàn)邏輯路由器的網(wǎng)關(guān)是分組為集群的主機機器,其被分配用于托管邏輯路由器和用于邏輯網(wǎng)絡(luò)的其它服務(wù)。這些網(wǎng)關(guān)機器還包括受管理轉(zhuǎn)發(fā)元件,其用作發(fā)送到VM駐留在其上的受管理轉(zhuǎn)發(fā)元件和從這些受管理轉(zhuǎn)發(fā)元件發(fā)送的分組的隧道端點。一些實施例在諸如命名空間的具有存儲路由表能力的虛擬化容器內(nèi)實現(xiàn)邏輯路由器。此外,一些實施例操作路由協(xié)議應(yīng)用或命名空間中的守護進程(daemon)(例如,BGP守護進程)。在一些情況下,網(wǎng)關(guān)主機機器可以具有操作不同邏輯路由器的若干個命名空間,其中的一些或全部包括用于與外部路由器對等的路由協(xié)議應(yīng)用。

一個或多個守護進程可以在命名空間之外的網(wǎng)關(guān)主機機器上操作(例如,在網(wǎng)關(guān)的虛擬化軟件中),以便接收定義路由表和用于特定命名空間的路由協(xié)議配置兩者的數(shù)據(jù)元組。這一個或多個守護進程操作來實例化命名空間、向命名空間指配路由表、以及在命名空間中啟動路由協(xié)議應(yīng)用。此外,在一些實施例中,(一個或多個)守護進程生成用于路由協(xié)議應(yīng)用的配置文件,并且存儲配置文件(例如,在主機機器的文件系統(tǒng)中)以供被路由協(xié)議應(yīng)用訪問。

一旦安裝其配置文件,路由協(xié)議應(yīng)用就開始與外部路由器通信。在一些實施例中,應(yīng)用以與標(biāo)準(zhǔn)物理路由器將根據(jù)其與其鄰居交換信息的方式相同的方式行動。例如,一些實施例的BGP守護進程打開與在其配置中識別為鄰居的每個路由器的BGP會話、發(fā)送如由BGP指定的保持活動(keep-alive)消息、以及經(jīng)由BGP分組將其路由通告給識別的鄰居。在一些實施例中,BGP守護進程還接收由其鄰居發(fā)送的BGP分組,并且使用這些分組來識別路由。一些實施例的BGP守護進程或者在其本地路由表中(即,在相同的命名空間內(nèi))安裝路由,或者將路由向上推送到網(wǎng)絡(luò)控制器使得網(wǎng)絡(luò)控制器可以為實現(xiàn)邏輯路由器的網(wǎng)關(guān)路由表計算新的路由表,或者其組合。但是,在其它實施例中,路由的通告只在一個方向上工作,其中BGP守護進程將路由發(fā)送出到其鄰居,但不安裝從那些鄰居接收到的路由。即,BGP守護進程既不將接收到的路由向上推送到網(wǎng)絡(luò)控制器,也不在本地網(wǎng)關(guān)的路由表中安裝路由。

在一些情況下,實現(xiàn)同一邏輯路由器的多個網(wǎng)關(guān)(例如,實現(xiàn)不同端口)可以將(例如,到達特定邏輯交換機上的VM,或者到達由那些VM共享的公共IP的)相同路由通告給同一外部路由器。在這種情況下,外部路由器將把這些多個網(wǎng)關(guān)視為用于發(fā)送到通告地址的分組的相同成本(equal-cost)的下一跳。因此,在一些實施例中,外部路由器跨通告路由的各種網(wǎng)關(guān)散布發(fā)送到那些目的地的分組。外部路由器可以使用各種不同的相同成本的多路徑(equal-cost multi-path,ECMP)技術(shù)中的任意種來確定分組應(yīng)該被發(fā)送到哪個網(wǎng)關(guān)。

在上述實施例中,路由協(xié)議應(yīng)用內(nèi)聯(lián)(inline)駐留。即,應(yīng)用在網(wǎng)關(guān)上操作,網(wǎng)關(guān)是分組通過其被發(fā)送的位置。但是,在一些實施例中,(一個或多個)網(wǎng)絡(luò)控制器為網(wǎng)關(guān)充當(dāng)路由服務(wù)器,并且路由協(xié)議應(yīng)用駐留在控制器上。在這種情況下,路由協(xié)議配置不被控制器分發(fā)到網(wǎng)關(guān),而是用來在控制器上實例化路由協(xié)議應(yīng)用??刂破魅缓髮⒙酚尚畔⑼ǜ娼o外部路由器(并且潛在地從外部路由器接收通告的路由信息)。這種通告的信息向外部路由器通知哪些網(wǎng)關(guān)用于哪些路由。如在內(nèi)聯(lián)的情況下,外部路由器可以使用ECMP技術(shù)來在若干個網(wǎng)關(guān)之間分發(fā)發(fā)送到邏輯網(wǎng)絡(luò)的分組。

前面的發(fā)明內(nèi)容旨在用作對本發(fā)明的一些實施例的簡要介紹。它并不意味著是本文檔中所公開的所有發(fā)明性主題的介紹或概述。以下的具體實施方式和具體實施方式所參考的附圖將進一步描述在發(fā)明內(nèi)容以及其它實施例中所描述的實施例。因此,為了理解本文檔所描述的所有實施例,需要對發(fā)明內(nèi)容、具體實施方式和附圖進行全面地閱讀。此外,所要求保護的主題不受在發(fā)明內(nèi)容、具體實施方式和附圖中的說明性細節(jié)的限制,而是要由所附權(quán)利要求來限定,這是因為所要求保護的主題可以在不背離本主題的精神的情況下以其它特定的形式來體現(xiàn)。

附圖說明

本發(fā)明的新穎特征在所附權(quán)利要求中闡述。但是,出于解釋的目的,本發(fā)明的若干種實施例在以下圖中闡述。

圖1概念性地示出了包括邏輯路由器的一些實施例的邏輯網(wǎng)絡(luò)體系架構(gòu)。

圖2概念性地示出了圖1的邏輯網(wǎng)絡(luò)的物理實現(xiàn)。

圖3概念性地示出了用于指配(provision)受管理轉(zhuǎn)發(fā)元件、L3網(wǎng)關(guān)和路由協(xié)議應(yīng)用,以便實現(xiàn)邏輯網(wǎng)絡(luò)和使那些網(wǎng)絡(luò)的邏輯路由器能夠與外部路由器對等的一些實施例的網(wǎng)絡(luò)控制系統(tǒng)。

圖4概念性地示出了數(shù)據(jù)通過一些實施例的分層網(wǎng)絡(luò)控制系統(tǒng)的傳播。

圖5概念性地示出了用于生成和分發(fā)數(shù)據(jù),以便實現(xiàn)受管理網(wǎng)絡(luò)中的邏輯路由器與外部網(wǎng)絡(luò)之間的一組連接的一些實施例的過程。

圖6概念性地示出了網(wǎng)關(guān)主機的五個單獨的集群,以及在那些網(wǎng)關(guān)主機上實現(xiàn)的邏輯路由器端口(被稱為上行鏈路)。

圖7概念性地示出了用于網(wǎng)關(guān)主機機器的一些實施例的軟件體系架構(gòu)。

圖8概念性地示出了用于設(shè)置或修改網(wǎng)關(guān)主機機器上的L3網(wǎng)關(guān)的一些實施例的過程。

圖9概念性地示出了由一些實施例的路由協(xié)議應(yīng)用(例如,BGP守護進程)執(zhí)行,以便將路由通告給用于L3網(wǎng)關(guān)的外部路由器的一些實施例的過程。

圖10示出了邏輯網(wǎng)絡(luò)以及該邏輯網(wǎng)絡(luò)在受管理網(wǎng)絡(luò)中的物理實現(xiàn)。

圖11概念性地示出了由操作來控制受管理網(wǎng)絡(luò)的控制器集群指配圖10的網(wǎng)關(guān)主機上的三個命名空間中的BGP守護進程。

圖12概念性地示出了根據(jù)一些實施例的由命名空間中的BGP守護進程發(fā)送的BGP更新分組。

圖13和14概念性地示出了由進入到圖10的受管理網(wǎng)絡(luò)中的流量采用的路徑。

圖15示出了兩個邏輯網(wǎng)絡(luò)和那些邏輯網(wǎng)絡(luò)在受管理網(wǎng)絡(luò)中的物理實現(xiàn)。

圖16示出了由控制器集群在圖15的七個命名空間中指配BGP守護進程。

圖17概念性地示出了一旦在各個命名空間中運行的守護進程已與路由器建立鄰接關(guān)系,由圖15的各個BGP守護進程發(fā)送到外部路由器的BGP更新分組。

圖18概念性地示出了由進入到圖15的受管理網(wǎng)絡(luò)中的三個分組采用的路徑。

圖19概念性地示出了用于生成用于邏輯網(wǎng)絡(luò)的BGP配置數(shù)據(jù)并且然后由在生成該數(shù)據(jù)的控制器中的BGP服務(wù)實現(xiàn)那個配置數(shù)據(jù)的一些實施例的過程。

圖20示出了邏輯網(wǎng)絡(luò)以及那個邏輯網(wǎng)絡(luò)在其中控制器充當(dāng)路由服務(wù)器的受管理網(wǎng)絡(luò)中的物理實現(xiàn)。

圖21概念性地示出了為了使圖20的邏輯網(wǎng)絡(luò)的邏輯路由器實現(xiàn),由控制器集群發(fā)送的數(shù)據(jù)。

圖22概念性地示出了由進入圖20的受管理網(wǎng)絡(luò)的若干個分組采用的路徑。

圖23概念性地示出了充當(dāng)用于邏輯網(wǎng)絡(luò)的路由服務(wù)器的一些實施例的控制器的軟件體系架構(gòu)。

圖24概念性地示出了其中實現(xiàn)邏輯網(wǎng)絡(luò)并且其使用單獨的網(wǎng)關(guān)作為路由服務(wù)器的一些實施例的這種受管理網(wǎng)絡(luò)。

圖25概念性地示出了本發(fā)明的一些實施例利用其實現(xiàn)的電子系統(tǒng)。

具體實施方式

在本發(fā)明的以下具體實施方式中,闡述和描述了本發(fā)明的許多細節(jié)、例子和實施例。但是,對于本領(lǐng)域技術(shù)人員將清楚和顯而易見的是,本發(fā)明不限于所闡述的實施例,并且本發(fā)明在沒有所討論的一些具體細節(jié)和例子的情況下也可以被實踐。

一些實施例提供了網(wǎng)絡(luò)控制系統(tǒng),其使得在由該網(wǎng)絡(luò)控制系統(tǒng)管理的網(wǎng)絡(luò)中操作的邏輯網(wǎng)絡(luò)能夠與受管理網(wǎng)絡(luò)外部的物理路由器對等并且向其通告路由信息。在一些實施例中,邏輯網(wǎng)絡(luò)包括至少部分地在受管理網(wǎng)關(guān)中實現(xiàn)的邏輯路由器,并且這些網(wǎng)關(guān)使用路由協(xié)議(例如,邊界網(wǎng)關(guān)協(xié)議)與外部物理路由器對等。當(dāng)多個受管理網(wǎng)關(guān)實現(xiàn)邏輯路由器(或邏輯路由器的至少與外部網(wǎng)絡(luò)接口的部分)時,在一些實施例中,這些多個網(wǎng)關(guān)可以單獨地將相同路由通告給外部路由器,由此允許外部路由器跨多個網(wǎng)關(guān)分發(fā)去往被通告的目的地的流量。

圖1概念性地示出了邏輯網(wǎng)絡(luò)體系架構(gòu)100的例子。邏輯網(wǎng)絡(luò)100包括兩個邏輯交換機105和110以及邏輯路由器115。邏輯交換機105和110中的每一個連接若干個虛擬機(在這種情況下,兩個虛擬機(VM)由每個邏輯交換機連接,并且邏輯路由器115將兩個邏輯交換機(即,邏輯層2域)連接在一起)。此外,邏輯路由器經(jīng)由三個邏輯端口將邏輯網(wǎng)絡(luò)連接到外部網(wǎng)絡(luò)120。雖然在這個例子中,邏輯路由器115具有若干個連接到外部網(wǎng)絡(luò)的端口(例如,作為上行鏈路端口),但是在一些實施例中,邏輯路由器可以只具有單個連接到外部網(wǎng)絡(luò)的端口。

在一些實施例中,邏輯網(wǎng)絡(luò)是由管理員生成的網(wǎng)絡(luò)的抽象概念,并且邏輯網(wǎng)絡(luò)以虛擬化、分布式的方式在受管理的物理基礎(chǔ)設(shè)施中(例如,在多租戶數(shù)據(jù)中心中)實現(xiàn)。即,連接到邏輯交換機的虛擬機可以駐留在基礎(chǔ)設(shè)施內(nèi)的各種不同的主機機器上,并且在這些主機機器上操作的物理受管理轉(zhuǎn)發(fā)元件(例如,軟件虛擬交換機)實現(xiàn)邏輯轉(zhuǎn)發(fā)元件(邏輯交換機,邏輯路由器等)中的一些或全部。

如在這個例子中,邏輯路由器連接虛擬機邏輯上附連到其的一組邏輯交換機。每個邏輯交換機表示特定的一組IP地址(即,子網(wǎng)),并且在受管理網(wǎng)絡(luò)中跨虛擬機物理上連接到其(例如,通過虛擬接口)的一組受管理轉(zhuǎn)發(fā)元件實現(xiàn)。在一些實施例中,邏輯路由器也由連接到虛擬機的受管理轉(zhuǎn)發(fā)元件以分布式方式實現(xiàn)。但是,當(dāng)邏輯路由器也經(jīng)由一個或多個端口連接到外部網(wǎng)絡(luò)時,到外部網(wǎng)絡(luò)的這些連接通過使用一個或多個網(wǎng)關(guān)來實現(xiàn)。在一些實施例中,網(wǎng)關(guān)既負責(zé)從受管理網(wǎng)絡(luò)向外部未受管理物理網(wǎng)絡(luò)發(fā)送數(shù)據(jù)流量又負責(zé)處理從外部網(wǎng)絡(luò)發(fā)送到受管理網(wǎng)絡(luò)中的流量。

圖2概念性地示出了邏輯網(wǎng)絡(luò)100的這種物理實現(xiàn)。該圖示出了包括三個主機機器205-215和三個網(wǎng)關(guān)主機機器235-245的受管理網(wǎng)絡(luò)200。邏輯網(wǎng)絡(luò)100的VM駐留在主機205-215上,在在主機中操作的虛擬化軟件(例如,管理程序、虛擬機監(jiān)視器等)之上實現(xiàn)。連接到其它邏輯網(wǎng)絡(luò)的附加虛擬機可以駐留在這些主機以及未在該圖示出的受管理網(wǎng)絡(luò)中的附加主機中的一些或全部上。

除了虛擬機之外,主機205-215中的每一個操作受管理轉(zhuǎn)發(fā)元件(MFE)220-230。在一些實施例中,該MFE是在主機的虛擬化軟件內(nèi)操作的虛擬交換機(例如,Open vSwitch、或另一個軟件轉(zhuǎn)發(fā)元件)。在圖2所示的例子中,MFE 220-230中每一個實現(xiàn)邏輯交換機105和110兩者,以及邏輯路由器115。在一些實施例中,這使得能夠進行第一跳邏輯處理,其中對分組的邏輯處理的全部或大部分在接收該分組的第一MFE處執(zhí)行。因此,從VM 1發(fā)送到VM 4的分組將由MFE 220通過邏輯交換機105到邏輯路由器115并且然后到邏輯交換機110被處理。MFE 220將把用于分組的邏輯交換機110的邏輯出口端口識別為VM 4附連到其的端口,并且在主機210處將該出口端口映射為到MFE 230的隧道。

在一些實施例中,網(wǎng)絡(luò)控制器(或控制器集群)通過生成流條目,或MFE轉(zhuǎn)換成流條目的數(shù)據(jù)元組指配MFE 220-230。這些流條目指定匹配條件(例如,物理入口端口、邏輯入口端口、目的地MAC或IP地址、傳輸層5元組等)和在匹配條件的分組上采取的動作(例如,將分組分配到邏輯轉(zhuǎn)發(fā)元件、分配邏輯出口端口、將數(shù)據(jù)寫入寄存器、在特定的隧道中進行封裝等)。因此,為了使MFE通過邏輯網(wǎng)絡(luò)處理分組,MFE將分組匹配到第一流條目、執(zhí)行動作(例如,以修改分組或在用于分組的寄存器中存儲邏輯上下文數(shù)據(jù))、重新提交分組以便匹配另一個流條目等。

一些實施例的網(wǎng)關(guān)主機機器235-245托管邏輯網(wǎng)絡(luò)100的用于在外部網(wǎng)絡(luò)120和邏輯網(wǎng)絡(luò)100之間實現(xiàn)連接的L3網(wǎng)關(guān)250-260(具體而言,邏輯路由器115)。當(dāng)物理路由器275接收到具有對應(yīng)于邏輯網(wǎng)絡(luò)100的虛擬機中的一個的目的地地址,或由邏輯交換機上的VM共享的公共IP的分組時,物理路由器275將分組發(fā)送到網(wǎng)關(guān)主機235-245中的一個。網(wǎng)關(guān)主機235-245還包括MFE,并且在一些實施例中,這些MFE從物理路由器275接收分組并且將分組移交給在其各自主機中的L3網(wǎng)關(guān)以供處理。

在一些實施例中,用戶(例如,管理員)配置邏輯網(wǎng)絡(luò)100。在接收到具有連接到外部網(wǎng)絡(luò)的若干個邏輯路由器端口的這種配置時,

網(wǎng)絡(luò)控制器(或控制器集群)選擇該組網(wǎng)關(guān)主機機器235-245用于實現(xiàn)這一連接。具體而言,一些實施例選擇不同的網(wǎng)關(guān)主機機器用于這些邏輯路由器端口中的每一個。在一些實施例中,這些網(wǎng)關(guān)在網(wǎng)絡(luò)中跨網(wǎng)關(guān)的集群散布,使得每個端口被實現(xiàn)在不同的故障域中。網(wǎng)絡(luò)控制器為其一部分在網(wǎng)關(guān)主機機器處實現(xiàn)并且其一部分由MFE(例如,MFE 220-230和在網(wǎng)關(guān)主機機器235-245上的那些)實現(xiàn)的邏輯路由器計算路由表。

L3網(wǎng)關(guān)250-260為南北流量(即,發(fā)送到受管理網(wǎng)絡(luò)中和從受管理網(wǎng)絡(luò)中出來的流量)實現(xiàn)邏輯路由器115的路由表的部分。一些實施例只處理入口流量,其中傳出流量通過其它手段發(fā)送(例如,通過主機機器220-230中的MFE和物理路由器275或外部網(wǎng)絡(luò)120中的其它網(wǎng)絡(luò)元件之間的直接連接)。在其它實施例中,L3網(wǎng)關(guān)處理入口和出口流量兩者。

如所示出的,L3網(wǎng)關(guān)250-260每一個包括邊界網(wǎng)關(guān)協(xié)議(BGP)守護進程280-290。這些守護進程280-290與外部物理路由器275對等,并且向邏輯路由器115通告到這個路由器的路由。在一些實施例中,BGP守護進程280-290在其與其鄰居交換信息方面以與傳統(tǒng)物理路由器相同的方式操作。例如,這些BGP守護進程會打開與物理路由器275的BGP會話、發(fā)送如由該協(xié)議指定的保持活動(keep-alive)消息、以及經(jīng)由BGP分組將其路由通告給物理路由器275。在一些實施例中,BGP守護進程還接收由物理路由器275發(fā)送的BGP分組,并且使用這些分組來識別路由。一些實施例的BGP守護進程或者在其本地路由表中(即,在相同的命名空間內(nèi))安裝路由,或者將路由向上推送到網(wǎng)絡(luò)控制器使得網(wǎng)絡(luò)控制器可以為實現(xiàn)邏輯路由器的所有L3網(wǎng)關(guān)計算新的路由表,或者其組合。但是,在其它實施例中,BGP守護進程只在一個方向上有效地工作,即將路由發(fā)送出到其鄰居(以吸引入口流量),但不安裝從那些鄰居接收到的路由。也就是,BGP守護進程既不將接收到的路由向上推送到網(wǎng)絡(luò)控制器,也不在本地網(wǎng)關(guān)的路由表中安裝這些路由。

在一些實施例中,L3網(wǎng)關(guān)與(一個或多個)物理路由器的對等是用戶指定的邏輯端口的屬性。在一些實施例中,當(dāng)用戶(例如,管理員)為邏輯路由器指定與外部路由器對等時,控制器基于邏輯網(wǎng)絡(luò)配置生成路由協(xié)議數(shù)據(jù)。對于面向外部網(wǎng)絡(luò)的邏輯路由器的每個端口,控制器識別(i)實現(xiàn)該端口的網(wǎng)關(guān)將與其對等的這組外部路由器(即,該網(wǎng)關(guān)的鄰居)以及(ii)實現(xiàn)該端口的網(wǎng)關(guān)將通告的這組路由。這些路由可以簡單地是表示連接到邏輯路由器的邏輯交換機的IP前綴,或者可以附加地包括由用戶輸入的或由實現(xiàn)邏輯路由器的進程動態(tài)生成的其它路由。在一些實施例中,邏輯路由器的不同端口可以將其路由通告給不同的外部網(wǎng)絡(luò)路由器。一旦網(wǎng)絡(luò)控制器生成該數(shù)據(jù),連同用于L3網(wǎng)關(guān)的路由表數(shù)據(jù),網(wǎng)絡(luò)控制器就將數(shù)據(jù)分發(fā)到網(wǎng)關(guān)(例如,通過網(wǎng)絡(luò)控制器的層次結(jié)構(gòu))。

在一些實施例中,L3網(wǎng)關(guān)250-260是具有存儲路由表能力的虛擬化容器,諸如命名空間。此外,BGP守護進程280-290或其它路由協(xié)議應(yīng)用根據(jù)從控制器接收到的數(shù)據(jù)在這些容器內(nèi)操作。一個或多個守護進程可以在容器之外的網(wǎng)關(guān)主機機器上(例如,在網(wǎng)關(guān)的虛擬化軟件中)操作,以便從控制器接收定義路由表和用于特定命名空間的BGP配置兩者的數(shù)據(jù)元組。這一個或多個守護進程操作來實例化命名空間、向命名空間指配路由表、以及在命名空間中啟動BGP守護進程。此外,在一些實施例中,(一個或多個)守護進程生成用于BGP守護進程的配置文件,并且存儲配置文件(例如,在主機機器的文件系統(tǒng)中)以供被路由協(xié)議應(yīng)用訪問。一旦安裝其配置文件,BGP守護進程就開始與外部路由器鄰居通信。

在圖2所示的例子中,實現(xiàn)同一邏輯路由器115(例如,實現(xiàn)不同端口)的多個網(wǎng)關(guān)235-245將(例如,到達邏輯交換機105和110上的VM的)相同路由通告給同一外部路由器275。在一些實施例中,外部路由器把這些多個L3網(wǎng)關(guān)視為用于發(fā)送到被通告地址的分組的相同成本的下一跳。因此,在一些實施例中,外部路由器跨通告路由的各種網(wǎng)關(guān)散布發(fā)送到那些目的地的分組。外部路由器可以使用各種不同的相同成本的多路徑(ECMP)技術(shù)中的任意種來確定分組應(yīng)該被發(fā)送到哪個網(wǎng)關(guān)。

在上述實施例中,路由協(xié)議應(yīng)用內(nèi)聯(lián)駐留。即,應(yīng)用在網(wǎng)關(guān)上操作,網(wǎng)關(guān)是分組通過其被發(fā)送的位置。但是,在一些實施例中,(一個或多個)網(wǎng)絡(luò)控制器為網(wǎng)關(guān)充當(dāng)路由服務(wù)器,并且路由協(xié)議應(yīng)用駐留在控制器上。在這種情況下,路由協(xié)議配置不被控制器分發(fā)到網(wǎng)關(guān),而是用來在控制器上實例化路由協(xié)議應(yīng)用??刂破魅缓髮⒙酚尚畔⑼ǜ娼o外部路由器(并且潛在地從外部路由器接收被通告的路由信息)。這種被通告的信息向外部路由器通知哪些網(wǎng)關(guān)用于哪些路由。如在內(nèi)聯(lián)的情況下,外部路由器可以使用ECMP技術(shù)來在若干個網(wǎng)關(guān)之間分發(fā)發(fā)送到邏輯網(wǎng)絡(luò)的分組。

以上描述介紹了一些實施例的邏輯網(wǎng)絡(luò)對BGP的使用,但是本領(lǐng)域普通技術(shù)人員將認(rèn)識到,本發(fā)明不限于BGP,并且可以使用其它路由協(xié)議。下面描述若干個更詳細的實施例。首先,第I節(jié)描述了由網(wǎng)絡(luò)控制器指配網(wǎng)關(guān)。然后第II節(jié)描述了在一些實施例中托管L3網(wǎng)關(guān)的主機機器的體系架構(gòu)。接著,第III節(jié)描述了在網(wǎng)關(guān)上配置路由協(xié)議應(yīng)用的過程,并且第IV節(jié)描述了一些實施例的路由協(xié)議應(yīng)用的操作。然后第V節(jié)描述了在一些實施例中使用網(wǎng)絡(luò)控制器作為路由服務(wù)器。最后,第VI節(jié)描述了本發(fā)明的一些實施例利用其實現(xiàn)的電子系統(tǒng)。

I.由網(wǎng)絡(luò)控制器指配網(wǎng)關(guān)

如所提到的,在一些實施例中,網(wǎng)絡(luò)控制系統(tǒng)在用于邏輯網(wǎng)絡(luò)的一個或多個網(wǎng)關(guān)中設(shè)置和配置邏輯路由器和相關(guān)聯(lián)的路由協(xié)議應(yīng)用。除了選擇所述一個或多個網(wǎng)關(guān)主機機器用于邏輯路由器之外,網(wǎng)絡(luò)控制系統(tǒng)中的一個或多個網(wǎng)絡(luò)控制器還接收由管理員輸入的網(wǎng)絡(luò)配置并且將該信息轉(zhuǎn)換成可以被網(wǎng)關(guān)主機機器讀取的數(shù)據(jù)元組。網(wǎng)絡(luò)控制系統(tǒng)還將數(shù)據(jù)元組分發(fā)到這些主機機器。

圖3概念性地示出了用于指配受管理轉(zhuǎn)發(fā)元件、L3網(wǎng)關(guān)和路由協(xié)議應(yīng)用,以便實現(xiàn)邏輯網(wǎng)絡(luò)和使那些網(wǎng)絡(luò)的邏輯路由器能夠與外部路由器對等的一些實施例的這種網(wǎng)絡(luò)控制系統(tǒng)300。如所示出的,網(wǎng)絡(luò)控制系統(tǒng)300包括輸入變換控制器305、邏輯控制器310、物理控制器315和320、主機機器325-340、以及兩個網(wǎng)關(guān)主機機器345和350。如所示出的,主機325-340以及網(wǎng)關(guān)主機345和350包括受管理轉(zhuǎn)發(fā)元件,其可以實現(xiàn)如在以上圖中示出的邏輯轉(zhuǎn)發(fā)元件(例如,通過使用流條目)。網(wǎng)關(guān)主機345和350還每個包括L3網(wǎng)關(guān),用于處理進入受管理網(wǎng)絡(luò)和/或從受管理網(wǎng)絡(luò)外出的分組。這些L3網(wǎng)關(guān)附加地包括BGP功能(例如,以BGP守護進程的形式)。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,對于網(wǎng)絡(luò)控制系統(tǒng)300,各種控制器和主機的許多其它不同的組合是可能的。

在一些實施例中,網(wǎng)絡(luò)控制系統(tǒng)中的每個控制器是具有用作輸入變換控制器、邏輯控制器和/或物理控制器的能力的計算機(例如,具有基于x86的處理器)。可替代地,在一些實施例中,給定控制器可以只具有操作為各種類型的控制器中特定一種(例如,只作為物理控制器)的功能。此外,控制器的不同組合可以運行在同一物理機器中。例如,輸入變換控制器305和邏輯控制器310可以運行在數(shù)據(jù)中心管理應(yīng)用與其交互(或管理員直接與其交互)的同一計算設(shè)備中。

一些實施例的輸入變換控制器305包括變換從用戶接收到的網(wǎng)絡(luò)配置信息的輸入變換應(yīng)用。雖然在圖3中被示為直接從用戶接收信息,但是在一些實施例中,用戶與數(shù)據(jù)中心管理應(yīng)用交互,數(shù)據(jù)中心管理應(yīng)用又將網(wǎng)絡(luò)配置信息傳遞給輸入變換控制器。

例如,用戶可以指定諸如在圖1中示出的網(wǎng)絡(luò)拓撲結(jié)構(gòu)。對于每個邏輯交換機,用戶指定連接到邏輯交換機的機器(即,VM被分配到邏輯交換機的哪些邏輯端口)。用戶也可以指定哪些邏輯交換機附連到任何邏輯路由器、用于連接到外部網(wǎng)絡(luò)的邏輯路由器的一個或多個邏輯端口、以及這些邏輯端口是否與外部物理路由器對等。在一些實施例中,輸入變換控制器305將接收到的網(wǎng)絡(luò)拓撲結(jié)構(gòu)變換為將網(wǎng)絡(luò)拓撲結(jié)構(gòu)描述為一組數(shù)據(jù)元組的邏輯控制平面數(shù)據(jù)。例如,條目可能指出特定的MAC地址A位于特定邏輯交換機的第一邏輯端口X處、邏輯路由器Q位于特定邏輯交換機的第二邏輯端口Y處、或邏輯路由器Q的邏輯端口G是與外部網(wǎng)絡(luò)接口的上行鏈路端口。

在一些實施例中,每個邏輯網(wǎng)絡(luò)由特定的邏輯控制器(例如,邏輯控制器310)管理。一些實施例的邏輯控制器310將定義邏輯網(wǎng)絡(luò)和組成邏輯網(wǎng)絡(luò)的邏輯轉(zhuǎn)發(fā)元件(例如,邏輯路由器、邏輯交換機)的邏輯控制平面數(shù)據(jù)變換為邏輯轉(zhuǎn)發(fā)平面數(shù)據(jù),并且將邏輯轉(zhuǎn)發(fā)平面數(shù)據(jù)變換為物理控制平面數(shù)據(jù)。在一些實施例中,邏輯轉(zhuǎn)發(fā)平面數(shù)據(jù)包括在邏輯層描述的流條目。對于在邏輯端口X處的MAC地址A,邏輯轉(zhuǎn)發(fā)平面數(shù)據(jù)可能包括指定分組的目的地是否匹配MAC A的流條目,以將分組轉(zhuǎn)發(fā)到端口X。邏輯路由器Q的端口也將具有MAC地址,并且類似的流條目被創(chuàng)建,用于將具有這個MAC地址的分組轉(zhuǎn)發(fā)到邏輯交換機的端口Y。此外,一些實施例的邏輯轉(zhuǎn)發(fā)平面數(shù)據(jù)包括用于將具有未知IP地址的分組發(fā)送到例如邏輯端口G的流條目。

在一些實施例中,邏輯控制器將邏輯轉(zhuǎn)發(fā)平面數(shù)據(jù)變換為通用物理控制平面數(shù)據(jù)。通用物理控制平面數(shù)據(jù)使一些實施例的網(wǎng)絡(luò)控制系統(tǒng)即使在網(wǎng)絡(luò)包括大量受管理轉(zhuǎn)發(fā)元件(例如,數(shù)千個)來實現(xiàn)邏輯轉(zhuǎn)發(fā)元件時,和在網(wǎng)絡(luò)實現(xiàn)大量邏輯網(wǎng)絡(luò)時也能夠縮放。為了表達物理控制平面數(shù)據(jù),而無需考慮MFE中的差異和/或MFE的位置細節(jié),通用物理控制平面抽象了不同MFE的共同特點。

如上所述,一些實施例的邏輯控制器310將邏輯控制平面數(shù)據(jù)變換為邏輯轉(zhuǎn)發(fā)平面數(shù)據(jù)(例如,包括在諸如邏輯地址、邏輯入口端口等邏輯網(wǎng)絡(luò)參數(shù)上的匹配的邏輯流條目),然后將邏輯轉(zhuǎn)發(fā)平面數(shù)據(jù)變換為通用物理控制平面數(shù)據(jù)。在一些實施例中,邏輯控制器應(yīng)用棧包括用于執(zhí)行第一變換的控制應(yīng)用和用于執(zhí)行第二變換的虛擬化應(yīng)用。在一些實施例中,這兩種應(yīng)用都使用用于將第一組表映射到第二組表中的規(guī)則引擎。即,不同的數(shù)據(jù)平面被表示為表(例如,nLog表),并且控制器應(yīng)用使用表映射引擎(例如,nLog引擎)在平面之間進行變換(例如,通過在表上應(yīng)用連接操作)。在一些實施例中,輸入和輸出表存儲定義不同數(shù)據(jù)平面的數(shù)據(jù)元組的集合。

物理控制器315和320中的每一個是一個或多個受管理轉(zhuǎn)發(fā)元件的主管(例如,位于主機機器內(nèi))。在這個例子中,這兩個物理控制器中的每一個是位于VM主機機器325-340處的兩個受管理轉(zhuǎn)發(fā)元件的主管。此外,物理控制器315是兩個MFE以及用于特定邏輯網(wǎng)絡(luò)的L3網(wǎng)關(guān)駐留其上的兩個網(wǎng)關(guān)主機345和350的主管。在一些實施例中,用于邏輯路由器的所有L3網(wǎng)關(guān)由同一物理控制器管理(如同在這個圖中),但是在其它實施例中,不同的物理控制器管理用于邏輯網(wǎng)絡(luò)的不同網(wǎng)關(guān)主機。

在一些實施例中,物理控制器接收用于邏輯網(wǎng)絡(luò)的通用物理控制平面數(shù)據(jù),并且將該數(shù)據(jù)變換為用于特定MFE的定制物理控制平面數(shù)據(jù),該特定MFE由物理控制器管理并且需要用于特定邏輯網(wǎng)絡(luò)的數(shù)據(jù)。在其它實施例中,物理控制器將適當(dāng)?shù)耐ㄓ梦锢砜刂破矫鏀?shù)據(jù)傳遞給具有自己執(zhí)行這種變換的能力(例如,以在主機機器上運行的機架控制器的形式)的MFE。

通用物理控制平面到定制物理控制平面的變換涉及定制流條目中的各種數(shù)據(jù)。對于上述例子,通用物理控制平面將涉及若干個流條目(即,若干個數(shù)據(jù)元組)。第一條目指出,如果分組匹配特定的邏輯數(shù)據(jù)路徑集合(例如,基于在特定物理入口端口處接收到的分組)并且目的地地址匹配MAC A,則將分組轉(zhuǎn)發(fā)到邏輯端口X。在一些實施例,該條目在通用和定制物理控制平面中將是相同的。附加條目被生成,以將物理入口端口(例如,主機機器的虛擬接口)匹配到邏輯入口端口X(用于從具有MAC A的VM接收到的分組),以及將目的地邏輯端口X匹配到物理MFE的物理出口端口(例如,再次主機機器的虛擬接口)。但是,這些物理入口和出口端口特定于MFE在其上操作的主機機器。因此,通用物理控制平面條目包括抽象物理端口,而定制物理控制平面條目包括附連到特定MFE的實際的物理接口(其在許多情況下是虛擬接口)。

在一些實施例中,如所示出的,網(wǎng)關(guān)主機還操作受管理轉(zhuǎn)發(fā)元件(例如,利用與VM主機325相同的分組處理/虛擬交換軟件)。這些MFE還從物理控制器接收使MFE能夠?qū)崿F(xiàn)邏輯轉(zhuǎn)發(fā)元件的物理控制平面數(shù)據(jù)。此外,一些實施例通過分層網(wǎng)絡(luò)控制系統(tǒng)將路由表數(shù)據(jù)和路由協(xié)議(例如,BGP)配置信息分發(fā)到在網(wǎng)關(guān)主機中操作的L3網(wǎng)關(guān)。管理邏輯網(wǎng)絡(luò)的邏輯控制器310選擇用于邏輯路由器的這組網(wǎng)關(guān)主機(例如,利用跨一組主機散布用于各種邏輯路由器的L3網(wǎng)關(guān)的負載平衡算法),然后生成數(shù)據(jù)分配給這些主機。

邏輯控制器識別管理這些選定的網(wǎng)關(guān)主機中每一個的(一個或多個)物理控制器,并且將路由表和/或路由協(xié)議配置數(shù)據(jù)分發(fā)給識別出的物理控制器。在一些實施例中,L3網(wǎng)關(guān)配置(例如,路由表、NAT表等)和BGP配置兩者都作為一組數(shù)據(jù)元組分發(fā)。例如,一些實施例的BGP配置數(shù)據(jù)元組指定網(wǎng)關(guān)的BGP鄰居的IP地址,以及要通告給那些鄰居的一組IP地址或前綴。物理控制器然后將這些數(shù)據(jù)元組分發(fā)到網(wǎng)關(guān)主機。在一些實施例中,用于特定邏輯路由器的每個網(wǎng)關(guān)主機接收相同的路由表和BGP配置。另一方面,在一些實施例中,不同的網(wǎng)關(guān)主機可以具有到不同外部物理路由器的連接,并且因此具有不同組的BGP鄰居。如在下面詳細描述的,網(wǎng)關(guān)主機將數(shù)據(jù)元組轉(zhuǎn)換為(i)用于由在網(wǎng)關(guān)主機上作為L3網(wǎng)關(guān)操作的容器(例如,VM、命名空間)使用的路由表,和(ii)用于由在容器內(nèi)操作的BGP模塊(例如,守護進程或其它應(yīng)用)使用的BGP配置文件。

以上描述了一些實施例的分層網(wǎng)絡(luò)控制系統(tǒng),但是其它實施例的網(wǎng)絡(luò)控制系統(tǒng)只包括單個控制器(或具有一個活動控制器和一個或多個備用控制器的控制器集群)。圖4概念性地示出了數(shù)據(jù)通過一些實施例的分層網(wǎng)絡(luò)控制系統(tǒng)的傳播。該圖的左側(cè)示出了到受管理轉(zhuǎn)發(fā)元件的用以實現(xiàn)邏輯網(wǎng)絡(luò)的邏輯轉(zhuǎn)發(fā)元件(例如,邏輯交換機和邏輯路由器)的數(shù)據(jù)流,而該圖的右側(cè)示出了BGP數(shù)據(jù)向網(wǎng)關(guān)主機的傳播,以便指配在L3網(wǎng)關(guān)內(nèi)操作的BGP守護進程。

在左側(cè),輸入變換控制器305通過API接收被轉(zhuǎn)換為邏輯控制平面數(shù)據(jù)的網(wǎng)絡(luò)配置。該網(wǎng)絡(luò)配置數(shù)據(jù)包括諸如在圖1中示出的邏輯拓撲結(jié)構(gòu)。在一些實施例中,網(wǎng)絡(luò)配置指定邏輯交換機到邏輯路由器的附連,其中MAC地址被分配給每個VM和連接到邏輯交換機的每個邏輯路由器端口,以及具有相關(guān)聯(lián)的IP子網(wǎng)的每個邏輯交換機。

如所示出的,邏輯控制平面數(shù)據(jù)由邏輯控制器310(具體而言,由邏輯控制器的控制應(yīng)用)轉(zhuǎn)換為邏輯轉(zhuǎn)發(fā)平面數(shù)據(jù),并且然后(由邏輯控制器的虛擬化應(yīng)用)隨后轉(zhuǎn)換為通用物理控制平面數(shù)據(jù)。在一些實施例中,這些轉(zhuǎn)換在邏輯轉(zhuǎn)發(fā)平面處生成流條目(或定義流條目的數(shù)據(jù)元組),然后在通用物理控制平面處在邏輯數(shù)據(jù)路徑集(例如,邏輯交換機或路由器)上添加匹配。通用物理控制平面還包括附加的流條目(或數(shù)據(jù)元組),用于將一般物理入口端口(即,不特定于任何特定MFE的端口的一般抽象)映射到邏輯入口端口,以及用于將邏輯出口端口映射到一般物理外出端口。例如,對于VM駐留于其處的邏輯交換機的端口,在通用物理控制平面處的流條目將包括當(dāng)分組的目的地MAC地址與VM的MAC地址匹配時,將分組發(fā)送到VM連接到其的邏輯端口的轉(zhuǎn)發(fā)決定,以及將邏輯出口端口映射到一般物理(即,虛擬)接口的出口上下文映射條目。對于其它MFE,包括在網(wǎng)關(guān)主機處的那些,通用物理控制平面數(shù)據(jù)包括用于封裝在到VM所位于的MFE的隧道中的分組的一般隧道條目。

如所示出的,物理控制器315(分層網(wǎng)絡(luò)控制系統(tǒng)300中的若干個物理控制器之一)將通用物理控制平面數(shù)據(jù)變換為用于它在主機325、330、345和350處管理的特定MFE的定制物理控制平面數(shù)據(jù)。這種轉(zhuǎn)換涉及在通用物理控制平面數(shù)據(jù)中替換用于一般抽象的特定數(shù)據(jù)(例如,特定的物理端口或隧道封裝信息)。例如,在以上段落的例子中,端口集成條目被配置為指定VM附連到其的物理層端口(即,用于實際虛擬接口的標(biāo)識符)。類似地,用于不同MFE的隧道封裝條目將具有不同的隧道封裝信息。

雖然這個例子將物理控制器315示出為執(zhí)行通用物理控制平面到定制物理控制平面的變換,但是一些實施例利用主機機器上的機架控制器用于該任務(wù)。在這種實施例中,物理控制器不變換物理控制平面數(shù)據(jù),而只是用作分發(fā)機構(gòu),用于將該數(shù)據(jù)交付給位于網(wǎng)絡(luò)中的許多主機機器,使得邏輯控制器不必與網(wǎng)絡(luò)中的每個MFE通信。在這種情況下(未在圖中示出),通用物理控制平面到定制物理控制平面的轉(zhuǎn)換由在主機325和345處的一個模塊或元件(即,機架控制器)執(zhí)行,而在主機325和345處的MFE執(zhí)行定制物理控制平面到物理轉(zhuǎn)發(fā)平面數(shù)據(jù)的轉(zhuǎn)換。

無論物理控制平面數(shù)據(jù)的定制是由物理控制器還是由主機處的機架控制器執(zhí)行,在主機325處的MFE(由物理控制器315管理的若干個MFE之一)執(zhí)行定制物理控制平面數(shù)據(jù)到物理轉(zhuǎn)發(fā)平面數(shù)據(jù)的變換。在一些實施例中,物理轉(zhuǎn)發(fā)平面數(shù)據(jù)是存儲在MFE內(nèi)(例如,在諸如Open vSwitch的軟件虛擬交換機的用戶空間和/或內(nèi)核內(nèi))的流條目,針對其MFE實際匹配接收到的分組。此外,在兩個網(wǎng)關(guān)主機345和350處的MFE執(zhí)行這種變換,以便在(i)L3網(wǎng)關(guān),(ii)經(jīng)由隧道在受管理網(wǎng)絡(luò)內(nèi)的其它網(wǎng)絡(luò)實體(例如,VM),以及(iii)外部網(wǎng)絡(luò)之間轉(zhuǎn)發(fā)分組。

圖4的右側(cè)示出了傳播到網(wǎng)關(guān)主機(例如,主機345),以實現(xiàn)用于L3網(wǎng)關(guān)而不是用于MFE的BGP配置的數(shù)據(jù)。如所示出的,邏輯控制器310將BGP配置轉(zhuǎn)換為定義那個配置的一組數(shù)據(jù)元組。在一些實施例中,基于由用戶(例如,管理員)輸入的網(wǎng)絡(luò)配置,BGP配置由邏輯控制器或輸入變換控制器生成。當(dāng)用戶設(shè)計邏輯網(wǎng)絡(luò)時,一些實施例允許用戶為邏輯路由器指定到外部網(wǎng)絡(luò)的連接是否將使用路由協(xié)議(或具體地BGP)來與外部路由器對等。在一些實施例中,用戶通過為這些連接選擇BGP(或不同的路由協(xié)議)為其被自動激活的某種類型的端口(例如,上行鏈路端口)進行這種指定。此外,在邏輯網(wǎng)絡(luò)中的每個邏輯交換機將具有相關(guān)聯(lián)的IP子網(wǎng)(或者由用戶分配或者由邏輯控制器自動分配)。對于每個端口,或者對于作為整體的邏輯路由器,用戶可以指定將把分組發(fā)送到端口的外部物理路由器,或者邏輯控制器基于為端口選擇的網(wǎng)關(guān)生成該數(shù)據(jù)。

基于該信息(即,每個端口連接到其的這組物理路由器、VM/邏輯交換機的IP地址/子網(wǎng)),邏輯控制器310生成用于BGP配置的這組數(shù)據(jù)元組。在一些實施例中,這可以由還將邏輯控制平面數(shù)據(jù)轉(zhuǎn)換為物理控制平面數(shù)據(jù)的表映射引擎來執(zhí)行。除了BGP數(shù)據(jù)元組之外,邏輯控制器生成用于L3網(wǎng)關(guān)的邏輯路由器方面的數(shù)據(jù)元組(例如,路由表)。為了在特定的網(wǎng)關(guān)主機上定義容器,一些實施例將每個容器定義為單獨的數(shù)據(jù)元組,其指定容器的存在和在容器上運行的進程,包括BGP。在這個數(shù)據(jù)元組內(nèi),可以啟用BGP。此外,該數(shù)據(jù)元組定義各種BGP選項,諸如路由器ID、是否通告恰當(dāng)?shù)?graceful)重啟能力、以及向所有對等體通告的前綴列表(例如,以無類域間路由(CIDR)的形式)。此外,邏輯控制器創(chuàng)建用于特定L3網(wǎng)關(guān)的每個BGP鄰居(即,對等的外部路由器)的數(shù)據(jù)元組。在一些實施例中,這些鄰居數(shù)據(jù)元組指定BGP鄰居的地址、指示保持活動(keep-alive)分組之間的時間的保持活動定時器、和網(wǎng)關(guān)中的BGP應(yīng)用通過其與鄰居通信的接口、以及其它信息。

一旦邏輯控制器310識別用于邏輯路由器的網(wǎng)關(guān)主機并且創(chuàng)建數(shù)據(jù)元組,邏輯控制器然后就識別物理控制器或管理網(wǎng)關(guān)主機的控制器。如所提到的,與VM主機325-340一樣,每個網(wǎng)關(guān)主機都具有分配的主管物理控制器。在圖3的例子中,兩個網(wǎng)關(guān)主機都由物理控制器315管理,因此其它物理控制器320不接收BGP數(shù)據(jù)元組。

為了向網(wǎng)關(guān)主機提供邏輯路由器配置數(shù)據(jù),一些實施例的邏輯控制器310將數(shù)據(jù)推送到物理控制器315。在其它實施例中,物理控制器從邏輯控制器請求配置數(shù)據(jù)(例如,響應(yīng)于配置數(shù)據(jù)可用的信號)。

物理控制器315將數(shù)據(jù)傳遞到網(wǎng)關(guān)主機,包括主機345,就像它們傳遞物理控制平面數(shù)據(jù)一樣。在一些實施例中,BGP數(shù)據(jù)元組被發(fā)送到作為與MFE相關(guān)聯(lián)的軟件的部分在主機上運行的數(shù)據(jù)庫,并且被用來配置MFE的某些方面(例如,它的端口信息和其它非流條目配置數(shù)據(jù))。

在一些實施例中,網(wǎng)關(guān)主機345上的進程啟動用于L3網(wǎng)關(guān)的容器并且將存儲在數(shù)據(jù)庫中的BGP數(shù)據(jù)元組變換為用于在L3網(wǎng)關(guān)中操作的應(yīng)用的BGP配置文件。應(yīng)用可以加載配置,以便確定其操作配置。

以上描述描述了由網(wǎng)絡(luò)控制系統(tǒng)進行的網(wǎng)絡(luò)配置到物理控制器傳遞到主機(例如,經(jīng)由諸如OpenFlow的協(xié)議)的一組物理轉(zhuǎn)發(fā)平面流條目的轉(zhuǎn)換。但是,在其它實施例中,用于定義流條目的數(shù)據(jù)以其它形式被傳遞,諸如更抽象的數(shù)據(jù)元組,并且MFE或在具有MFE的主機上運行的過程將這些數(shù)據(jù)元組轉(zhuǎn)換為用于在處理數(shù)據(jù)流量中使用的流條目。

圖5概念性地示出了用于生成和分發(fā)數(shù)據(jù)以便在受管理網(wǎng)絡(luò)中的邏輯路由器和外部網(wǎng)絡(luò)之間實現(xiàn)一組連接的一些實施例的過程500。在一些實施例中,過程500由網(wǎng)絡(luò)控制器(例如,由諸如在圖3中示出的網(wǎng)絡(luò)控制器層次結(jié)構(gòu)中的邏輯控制器)在接收到包括具有已啟用的路由器對等的邏輯路由器的網(wǎng)絡(luò)配置時執(zhí)行。

如所示出的,過程500開始于(在505處)接收創(chuàng)建具有連接到外部網(wǎng)絡(luò)的一個或多個端口的邏輯路由器的指令。這些指令可以是網(wǎng)絡(luò)管理員(例如,通過經(jīng)控制器API傳遞邏輯網(wǎng)絡(luò)配置的云管理應(yīng)用)設(shè)計包括邏輯路由器的邏輯網(wǎng)絡(luò)的結(jié)果。在一些實施例中,創(chuàng)建邏輯路由器的指令具體地指示到外部網(wǎng)絡(luò)的連接應(yīng)當(dāng)利用BGP或另一協(xié)議來實現(xiàn),用于進行路由器對等和路由通告。在其它實施例中,這種能力對具有至少一個到外部網(wǎng)絡(luò)的連接的所有邏輯路由器被自動啟用。

接下來,過程(在510處)選擇用于連接到邏輯網(wǎng)絡(luò)的每個端口的網(wǎng)關(guān)主機機器。一些實施例將每個端口分配給不同的網(wǎng)關(guān)主機,而其它實施例允許多個端口(以及因此托管路由表和BGP服務(wù)的多個命名空間)在單個網(wǎng)關(guān)主機上被創(chuàng)建。在一些實施例中,網(wǎng)關(guān)主機根據(jù)集群或故障域進行布置。在一些實施例中,這些集群可以是在受管理網(wǎng)絡(luò)中物理上位于一起的主機機器的集合,并且因此更可能全部一起失敗(例如,由于架頂式交換機的頂部掉落、電源問題等)。不同實施例可以相對于集群不同地將網(wǎng)關(guān)分配給主機機器。例如,一些實施例只為特定的邏輯路由器每集群分配一個網(wǎng)關(guān),而其它實施例將用于邏輯路由器的全部網(wǎng)關(guān)分配給同一集群。還有的其它實施例可以將網(wǎng)關(guān)分配給若干個不同的集群,但是允許兩個或更多個網(wǎng)關(guān)在單個集群內(nèi)。

此外,在一些實施例中,網(wǎng)關(guān)主機機器可以基于那些網(wǎng)關(guān)主機被用于的功能被分配給不同的組。例如,在物理受管理網(wǎng)絡(luò)中,一些實施例使用第一組網(wǎng)關(guān)主機用于提供邏輯服務(wù)(例如,DHCP、元數(shù)據(jù)代理)、第二組網(wǎng)關(guān)主機用于利用BGP用于路由通告和對于其每個邏輯路由器端口被分配單個網(wǎng)關(guān)的L3網(wǎng)關(guān)、以及第三組網(wǎng)關(guān)主機用于不利用路由通告和對于其每個邏輯路由器端口被分配給多個網(wǎng)關(guān)的L3網(wǎng)關(guān)。在圖5的這種情況下,控制器從第二組中為每個邏輯路由器端口選擇網(wǎng)關(guān)主機。每個組可以跨越網(wǎng)關(guān)主機的若干個集群,從而允許過程500(在510處)從若干個集群(即,故障域)選擇第二組內(nèi)的網(wǎng)關(guān)主機機器。

一些實施例允許管理員指定控制器向其分配邏輯路由器的每個邏輯端口的集群,并且控制器處理那個集群內(nèi)實際網(wǎng)關(guān)主機的選擇。因此,管理員可以指定將兩個邏輯端口分配給第一集群中的網(wǎng)關(guān)、四個給第二集群中的網(wǎng)關(guān)、以及再多兩個給第三集群中的網(wǎng)關(guān)。然后,控制器將每個邏輯端口分配給它選定的集群中的特定網(wǎng)關(guān)主機。對于這種分配,一些實施例使用負載平衡技術(shù),諸如計算邏輯路由器或端口的屬性(例如,由控制器分配的UUID)的散列函數(shù)對集群中網(wǎng)關(guān)主機的數(shù)量取模。這有效地隨機(盡管算法本身是確定性的)將邏輯路由器端口分配給集群內(nèi)的網(wǎng)關(guān)主機,并且因此長遠地跨網(wǎng)關(guān)主機使L3網(wǎng)關(guān)負載平衡。

一些其它實施例可以使用其它技術(shù)來跨集群中的主機使L3網(wǎng)關(guān)負載平衡。例如,不是利用散列算法在集群中所有網(wǎng)關(guān)主機之間進行選擇,而是一些實施例僅僅在具有最少量的當(dāng)前在操作的邏輯路由器的那些網(wǎng)關(guān)之間進行選擇,并且用網(wǎng)關(guān)的這個較小數(shù)量對散列函數(shù)的結(jié)果取模。其它實施例分析每個網(wǎng)關(guān)上的邏輯路由器的數(shù)量和網(wǎng)關(guān)的操作負載(例如,基于經(jīng)過特定時間幀被處理的分組的數(shù)量),以便確定特定的邏輯路由器應(yīng)當(dāng)被分配給哪個網(wǎng)關(guān)主機。

圖6概念性地示出了網(wǎng)關(guān)主機的五個單獨的集群605-625,以及在那些網(wǎng)關(guān)主機上實現(xiàn)的邏輯路由器端口(被稱為上行鏈路)。具體而言,第一集群605包括四個網(wǎng)關(guān)606-609,第二集群610包括四個網(wǎng)關(guān)611-614,第三集群615包括三個網(wǎng)關(guān)616-618,第四集群620包括三個網(wǎng)關(guān)621-623,并且第五集群625包括五個網(wǎng)關(guān)626-630。這個圖僅僅示出了用于能夠托管用于使用BGP進行路由通告的端口的L3網(wǎng)關(guān)的每個集群的網(wǎng)關(guān)主機。在一些實施例中,集群(即,故障域)可以包括分配給不同功能,諸如托管邏輯服務(wù)(例如,DHCP、DHCP中繼等),的附加網(wǎng)關(guān)主機。

在這個例子中,六個不同邏輯路由器(LR1-LR6)中的每一個具有三至五個邏輯端口用于與外部網(wǎng)絡(luò)連接,這些邏輯端口貫穿這些集群不同地散布。例如,邏輯路由器LR1具有在位于四個不同集群中的主機606、611、613和627中的網(wǎng)關(guān)上實現(xiàn)的上行鏈路端口。邏輯路由器LR3具有在主機608、609、621和623中的網(wǎng)關(guān)上實現(xiàn)的上行鏈路端口,其中在兩個不同集群中的每一個當(dāng)中有兩個網(wǎng)關(guān)。邏輯路由器LR4的全部三個上行鏈路端口都在主機627、628、629上在同一集群625中的網(wǎng)關(guān)上實現(xiàn)。因此,取決于管理員決定和邏輯網(wǎng)絡(luò)的需求,用于實現(xiàn)邏輯路由器的上行鏈路端口的不同配置是可能的。

在示出的例子中沒有使用明確的負載平衡,其中網(wǎng)關(guān)利用例如管理員的明確分配或者散列函數(shù)對網(wǎng)關(guān)的數(shù)量取模而被分配給主機,因此第二集群610和第五集群625兩者都分別包括網(wǎng)關(guān)主機613和630,其中沒有實現(xiàn)網(wǎng)關(guān)(盡管這兩個集群還包括具有多個網(wǎng)關(guān)的主機)。此外,并非所有集群都具有相同數(shù)量的網(wǎng)關(guān)主機。這可能由于集群僅僅具有不同數(shù)量的物理機器,其中一些集群具有被分配給不同任務(wù)的不同數(shù)量的網(wǎng)關(guān)主機、或者其中一些集群具有由于連接或其它問題造成的主機機器離線。在一些實施例中,當(dāng)在網(wǎng)關(guān)上運行的應(yīng)用識別出網(wǎng)關(guān)主機有問題時,該應(yīng)用通知網(wǎng)絡(luò)控制器(例如,管理網(wǎng)關(guān)主機的物理控制器)該問題,使得網(wǎng)關(guān)主機可以被停止使用,直到問題得到解決。

不同的實施例不同地處理實現(xiàn)上行鏈路端口的L3網(wǎng)關(guān)的故障切換。在一些實施例中,當(dāng)具有實現(xiàn)上行鏈路端口的L3網(wǎng)關(guān)的網(wǎng)關(guān)主機出現(xiàn)故障時,網(wǎng)絡(luò)不立即在新主機上取代該L3網(wǎng)關(guān)。而是,網(wǎng)絡(luò)控制器允許傳入(并且,在一些實施例中,傳出)分組跨其網(wǎng)關(guān)仍然處于活動狀態(tài)的其它上行鏈路端口分發(fā)。另一方面,一些實施例利用用于不同網(wǎng)關(guān)主機上(例如,在與發(fā)生故障的主機相同的集群中)的上行鏈路端口的新實現(xiàn)取代該L3網(wǎng)關(guān)。

圖6和以上描述示出了利用單個網(wǎng)關(guān)主機來實現(xiàn)每個上行鏈路端口。但是,為了預(yù)防主機故障,一些實施例為連接到外部網(wǎng)絡(luò)的每個上行鏈路端口選擇活動和備用網(wǎng)關(guān)主機兩者。即,用于第一網(wǎng)關(guān)主機中的邏輯路由器端口的實現(xiàn)之一是活動的,其中MFE被指示向其發(fā)送分組,并且其BGP守護進程通告路由。在第二網(wǎng)關(guān)中,邏輯路由器端口的其它實現(xiàn)以相同的方式被配置,但是MFE不向其發(fā)送流量并且其BGP守護進程不通告路由。如果第一(活動)網(wǎng)關(guān)主機發(fā)生故障,則MFE將開始向第二(備用)主機發(fā)送流量,并且網(wǎng)絡(luò)控制器將讓第二主機知道激活其BGP守護進程。用于高可用性網(wǎng)關(guān)的故障切換在標(biāo)題為“High Availability L3Gateways for Logical Networks”并且于2014年1月28日提交的美國申請14/166,446中進一步詳細描述。美國申請14/166,446通過引用被結(jié)合于此。

返回到圖5,在為連接到外部網(wǎng)絡(luò)的每個邏輯路由器端口選擇網(wǎng)關(guān)主機之后,過程500(在515處)為通過邏輯路由器(即,托管附連到邏輯交換機的VM的機器,該邏輯交換機附連到邏輯路由器)發(fā)送分組的主機機器上的MFE生成流條目(或定義流條目的數(shù)據(jù)元組)。除其它功能外,這些流條目還既(i)實現(xiàn)分布式邏輯路由器又(ii)將由邏輯路由器轉(zhuǎn)發(fā)到連接到外部網(wǎng)絡(luò)的邏輯端口之一的分組通過隧道發(fā)送到選定的網(wǎng)關(guān)主機機器。此外,為VM主機生成的流條目還將包括許多其它條目,諸如為邏輯交換機、入口和出口ACL等實現(xiàn)邏輯轉(zhuǎn)發(fā)的那些條目。

為了在MFE中實現(xiàn)邏輯路由器,一些實施例生成邏輯轉(zhuǎn)發(fā)條目,該邏輯轉(zhuǎn)發(fā)條目基于目的地IP地址或地址前綴(以及在用于路由器自己的邏輯管道上)匹配分組,并且基于IP地址識別邏輯路由器的邏輯出口端口。為了生成這些流條目,一些實施例的網(wǎng)絡(luò)控制器首先生成用于邏輯路由器的路由表。在一些實施例中,這些路由包括用于將分組發(fā)送到連接到外部網(wǎng)絡(luò)的端口之一的缺省路由,以及用于基于與邏輯交換機相關(guān)聯(lián)的IP子網(wǎng)將分組發(fā)送到每個附連的邏輯交換機的路由。然后,路由表被嵌入到流條目數(shù)據(jù)元組中(例如,包括在邏輯路由器管道上的匹配)。此外,用于邏輯路由器的流條目對分組執(zhí)行MAC地址修改(以將源MAC地址修改為邏輯路由器的邏輯出口端口的地址,并將目的MAC地址修改為匹配目的地IP地址的地址)。這可以包括用于或者執(zhí)行ARP或者將分組發(fā)送到也在主機上操作的ARP守護進程的流條目。在分組的實際路由之外,在一些實施例中,網(wǎng)絡(luò)控制器根據(jù)為邏輯路由器定義的任何策略生成用于L3入口和出口ACL的流條目。

不同的實施例使用不同類型的流條目用于選擇分組應(yīng)當(dāng)被轉(zhuǎn)發(fā)到哪些連接到外部網(wǎng)絡(luò)的邏輯端口。一些實施例通過單個邏輯端口發(fā)送所有傳出分組,但是,當(dāng)傳出流量的量大時(例如,對于web服務(wù)器、流視頻應(yīng)用等),這個端口在其上實現(xiàn)的網(wǎng)關(guān)會變成瓶頸。其它實施例使用類似相同成本的多路徑(ECMP)的技術(shù)來選擇邏輯出口端口用于退出邏輯網(wǎng)絡(luò)的分組。例如,一些實施例的流條目將端口列為束列,并且然后提供對于給定的分組屬性集合(例如,分組屬性的散列對端口數(shù)量取模)識別向哪些端口發(fā)送分組的技術(shù)。

過程500還(在520處)為網(wǎng)關(guān)主機機器上的MFE生成流條目。除其它功能外,這些流條目還將分組轉(zhuǎn)發(fā)到在網(wǎng)關(guān)主機上實現(xiàn)邏輯路由器端口的容器(例如,命名空間)、將分組轉(zhuǎn)發(fā)到連接到外部路由器的NIC,以及將分組通過隧道轉(zhuǎn)發(fā)到在VM主機的其它MFE。例如,在一些實施例中,出站分組(即,從VM主機接收到的)由MFE發(fā)送到命名空間,用于通過L3網(wǎng)關(guān)路由表進行附加路由。在這個路由之后,命名空間將分組返回到MFE(作為新分組),其中外部路由器被識別為其目的地并且MFE將這個新分組發(fā)送到出站NIC。對于傳入分組,MFE首先將分組發(fā)送到命名空間,用于通過L3網(wǎng)關(guān)路由表進行路由,然后接收返回的分組并執(zhí)行第一跳路由,以識別邏輯路由器的邏輯出口端口(通常邏輯交換機之一附連到其的端口)、識別邏輯交換機的邏輯出口端口(通常VM附連到其的端口)、并且將分組從隧道發(fā)送出到適當(dāng)?shù)腗FE。

除了流條目(或定義流條目的數(shù)據(jù)元組)之外,該過程還(在525處)生成用于路由表的數(shù)據(jù)元組以供處理在實現(xiàn)邏輯端口的每個L3網(wǎng)關(guān)處進入(并且,在一些實施例中,外出)的分組。在一些實施例中,這些數(shù)據(jù)元組由還生成流條目的表映射引擎生成。但是,其它實施例利用單獨的路由處理器生成路由條目。如以上所指出的,大多數(shù)路由表被實現(xiàn)為發(fā)送到MFE的流條目。但是,L3網(wǎng)關(guān)的路由表處理被路由到外部網(wǎng)絡(luò)和從外部網(wǎng)絡(luò)接收到的分組。因此,路由表(以及可以由L3網(wǎng)關(guān)實現(xiàn)的IP網(wǎng)絡(luò)堆棧的附加方面,諸如NAT表)負責(zé)執(zhí)行任何必要的ARP(例如,到外部網(wǎng)絡(luò)中)、遞減分組TTL(即,作為用于分組的另一跳),以及負責(zé)傳出分組選擇該分組將被發(fā)送到其的外部路由器。

在操作515-525處生成的這些流條目和/或數(shù)據(jù)元組使得L3網(wǎng)關(guān)和MFE能夠處理數(shù)據(jù)分組的處理。此外,過程500為在每個L3網(wǎng)關(guān)處操作的路由協(xié)議應(yīng)用(例如,BGP守護進程)生成數(shù)據(jù)。因此,過程(在530處)識別連接到外部網(wǎng)絡(luò)的每個邏輯端口(即,每個L3網(wǎng)關(guān))與其對等的(一個或多個)外部網(wǎng)絡(luò)路由器的地址(和其它信息)。在一些實施例中,管理員為每個邏輯端口輸入這種數(shù)據(jù),并且處理確保外部路由器被正確地連接到網(wǎng)關(guān)主機(或者,例如,網(wǎng)關(guān)主機連接到其的架頂式交換機的頂部)。在其它實施例中,網(wǎng)絡(luò)控制器基于其存儲的網(wǎng)絡(luò)狀態(tài)信息自動確定每個網(wǎng)關(guān)主機連接到其的外部路由器的集合,并且使用這些作為L3網(wǎng)關(guān)與其對等的外部網(wǎng)絡(luò)路由器。

基于這些識別出的外部路由器,以及為邏輯網(wǎng)絡(luò)計算出的路由,該過程(在535處)生成數(shù)據(jù)元組來定義用于選定的主機機器上的L3網(wǎng)關(guān)的路由協(xié)議。如以上所指示的,為了定義在特定的網(wǎng)關(guān)主機上的L3網(wǎng)關(guān)容器,一些實施例將每個容器定義為單獨數(shù)據(jù)元組,其指定容器的存在和在容器上運行的進程,包括BGP或另一個路由協(xié)議應(yīng)用。該數(shù)據(jù)元組定義各種BGP選項,諸如路由器ID、是否通告恰當(dāng)?shù)闹貑⒛芰Γ约跋蛩袑Φ润w通告的前綴列表。在一些實施例中,IP地址和/或前綴的這個列表是基于邏輯網(wǎng)絡(luò)的用戶配置(例如,為邏輯網(wǎng)絡(luò)的邏輯交換機配置的公共IP)。此外,控制器為每個L3網(wǎng)關(guān)的每個對等體外部路由器(例如,BGP鄰居)生成數(shù)據(jù)元組。在一些實施例中,這些鄰居數(shù)據(jù)元組指定外部路由器的地址、指示保持活動分組之間的時間的保持活動定時器、和網(wǎng)關(guān)中的BGP應(yīng)用通過其與鄰居通信的接口,以及其它信息。

利用生成的數(shù)據(jù),過程500(在540處)將生成的數(shù)據(jù)元組和/或流條目分發(fā)到各種主機機器。在一些實施例中,兩種類型的數(shù)據(jù)(流條目和路由表/路由協(xié)議數(shù)據(jù)元組)經(jīng)由不同的協(xié)議被分發(fā)。一些實施例經(jīng)由諸如OpenFlow的第一協(xié)議將流條目分發(fā)到VM主機和網(wǎng)關(guān)主機二者,而經(jīng)由諸如OVSDB的第二協(xié)議將路由協(xié)議(例如,BGP)信息和路由表分發(fā)到網(wǎng)關(guān)主機。在一些實施例中使用的OVSDB協(xié)議還攜帶用于MFE的配置信息(用于VM主機和網(wǎng)關(guān)主機兩者)。

以上圖5概念性地將過程500示為由控制器執(zhí)行的單個線性流。但是,本領(lǐng)域普通技術(shù)人員將認(rèn)識到,控制器計算各個流條目和/或數(shù)據(jù)元組的次序不必按圖中示出的次序。例如,控制器可以在生成用于MFE的流條目之前生成用于網(wǎng)關(guān)主機的流條目,等等。此外,一些實施例不一直等到所有指示的數(shù)據(jù)都被計算出來才分發(fā)數(shù)據(jù),而是可能遞增地分發(fā)數(shù)據(jù)。例如,一些實施例分開分發(fā)轉(zhuǎn)發(fā)數(shù)據(jù)與路由協(xié)議數(shù)據(jù),或者一旦用于那個主機的所有數(shù)據(jù)都已經(jīng)生成就遞增地將轉(zhuǎn)發(fā)數(shù)據(jù)分發(fā)到特定主機。

II.網(wǎng)關(guān)主機體系架構(gòu)

以上部分詳細描述了由控制器進行的邏輯路由器和路由協(xié)議數(shù)據(jù)的生成以及那種數(shù)據(jù)到作為L3網(wǎng)關(guān)操作的容器(例如,命名空間)駐留在其上的網(wǎng)關(guān)主機機器的分發(fā)。在一些實施例中,網(wǎng)關(guān)主機機器包括負責(zé)基于由網(wǎng)絡(luò)控制系統(tǒng)分發(fā)的數(shù)據(jù)元組創(chuàng)建容器、在容器中建立路由表以及處理來往于命名空間的分組的各種模塊(例如,作為用戶空間守護進程或內(nèi)核模塊運行)。

圖7概念性地示出了用于網(wǎng)關(guān)主機機器700的一些實施例的軟件體系架構(gòu)。主機機器700是指定用于在命名空間中托管L3網(wǎng)關(guān)實現(xiàn)的主機,該L3網(wǎng)關(guān)實現(xiàn)可以操作路由協(xié)議應(yīng)用。如所示出的,主機700包括虛擬化軟件705以及兩個命名空間710和715。在一些實施例中,主機包括命名空間710和715作為容器在其上運行的基礎(chǔ)Linux操作系統(tǒng)。在一些實施例中,網(wǎng)關(guān)主機機器700是具有基于標(biāo)準(zhǔn)x86的處理器的計算機。

虛擬化軟件705包括轉(zhuǎn)發(fā)元件守護進程725、數(shù)據(jù)庫守護進程730、命名空間守護進程735、高可用性守護進程720和轉(zhuǎn)發(fā)元件內(nèi)核模塊740。在一些實施例中,轉(zhuǎn)發(fā)元件守護進程725、數(shù)據(jù)庫守護進程730、命名空間守護進程735和高可用性守護進程720在虛擬化軟件705的用戶空間中操作,而轉(zhuǎn)發(fā)元件內(nèi)核模塊740在虛擬化軟件705的內(nèi)核中操作。在一些實施例中,在主機上使用的轉(zhuǎn)發(fā)元件是Open vSwitch(OVS),并且,除了命名空間守護進程和高可用性守護進程,這些模塊還是OVS守護進程、OVSDB守護進程和OVS內(nèi)核模塊。在一些實施例中,命名空間守護進程735和高可用性守護進程720的功能被組合為單個用戶空間應(yīng)用。這個圖既示出了用于指配受管理轉(zhuǎn)發(fā)元件和命名空間的控制路徑連接(被示為虛線),又示出了用于發(fā)送數(shù)據(jù)分組(包括BGP分組)的數(shù)據(jù)路徑連接(被示為實線)。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,除了示出的涉及虛擬交換機和托管的命名空間的模塊之外,一些實施例的虛擬化軟件還包括用于執(zhí)行例如主機機器700的硬件資源(例如,處理器、存儲器等)的虛擬化的附加模塊。

轉(zhuǎn)發(fā)元件守護進程725在一些實施例中是與物理網(wǎng)絡(luò)控制器795通信的應(yīng)用,以便接收用于處理和轉(zhuǎn)發(fā)發(fā)送到和來自命名空間710和715的分組(例如,從外部網(wǎng)絡(luò)進入受管理網(wǎng)絡(luò)或者離開受管理網(wǎng)絡(luò)到外部網(wǎng)絡(luò)的分組)的指令。具體而言,如在上一部分中所描述的,轉(zhuǎn)發(fā)元件守護進程725從物理控制器795接收物理控制平面流條目。在一些實施例中,轉(zhuǎn)發(fā)元件守護進程通過OpenFlow協(xié)議與網(wǎng)絡(luò)控制器通信,但是其它實施例可以使用不同的通信協(xié)議用于將轉(zhuǎn)發(fā)數(shù)據(jù)傳送到主機機器。此外,在一些實施例中,轉(zhuǎn)發(fā)元件守護進程725在物理控制器795將配置信息發(fā)送到數(shù)據(jù)庫守護進程之后從數(shù)據(jù)庫守護進程730檢索配置信息。

一些實施例的轉(zhuǎn)發(fā)元件守護進程725包括流協(xié)議模塊750和流處理器755。流協(xié)議模塊750處理與網(wǎng)絡(luò)控制器795的通信,以便接收用于受管理轉(zhuǎn)發(fā)元件的物理控制平面信息(例如,流條目)。如所提到的,在一些實施例中,這種通信使用OpenFlow協(xié)議。當(dāng)流協(xié)議模塊750接收到這種物理控制平面信息時,它將接收到的信息變換成流處理器755可理解的數(shù)據(jù)(例如,可用于處理分組的物理轉(zhuǎn)發(fā)平面信息)。

在一些實施例中,流處理器755管理用于處理和轉(zhuǎn)發(fā)(即,交換、路由)分組的規(guī)則。例如,流處理器755存儲從流協(xié)議模塊750接收到的規(guī)則(例如,在諸如盤驅(qū)動器的機器可讀存儲介質(zhì)中)。在一些實施例中,這些規(guī)則被存儲為一組流表(轉(zhuǎn)發(fā)表),其中每個流表包括一組流條目。在一些實施例中,這些流條目包括匹配(即,一組分組特點)和一個或多個動作(即,對匹配這組特點的分組采取的一組動作)。在一些實施例中,流處理器725處理受管理橋760(下面描述)對其不具有匹配規(guī)則的分組。在這種情況下,流處理器755對照其存儲的規(guī)則匹配分組。當(dāng)分組匹配規(guī)則時,流處理器725將匹配的規(guī)則和分組發(fā)送到受管理橋760,讓受管理橋處理。以這種方式,當(dāng)受管理橋760隨后接收到匹配所生成規(guī)則的類似分組時,該分組將對照受管理橋中生成的確切匹配規(guī)則來匹配并且流處理器755將不必處理該分組。

在一些實施例中,數(shù)據(jù)庫守護進程730是還與物理控制器795通信以便配置受管理轉(zhuǎn)發(fā)元件(例如,轉(zhuǎn)發(fā)元件守護進程725和/或轉(zhuǎn)發(fā)元件內(nèi)核模塊740)的應(yīng)用。例如,數(shù)據(jù)庫守護進程730從物理控制器接收配置信息并且將配置信息存儲在一組數(shù)據(jù)庫表745中。這種配置信息可以包括用于創(chuàng)建到其它受管理轉(zhuǎn)發(fā)元件的隧道的隧道信息、端口信息等。在一些實施例中,數(shù)據(jù)庫守護進程730通過數(shù)據(jù)庫通信協(xié)議(例如,OVSDB)與網(wǎng)絡(luò)控制器795通信。在一些情況下,數(shù)據(jù)庫守護進程730可以從轉(zhuǎn)發(fā)元件守護進程725接收對配置信息的請求。在這些情況下,數(shù)據(jù)庫守護進程730檢索請求的配置信息(例如,從其數(shù)據(jù)庫表745集合中)并且將配置信息發(fā)送到轉(zhuǎn)發(fā)元件守護進程725。

除了轉(zhuǎn)發(fā)元件配置(隧道和端口信息等)之外,一些實施例的數(shù)據(jù)庫守護進程730還附加地接收為在命名空間710和715中操作的BGP守護進程定義配置的BGP配置信息。這種信息包括關(guān)于BGP守護進程向其對等體通告的路由的信息,以及識別那些對等體的信息。數(shù)據(jù)庫守護進程730可以連同轉(zhuǎn)發(fā)元件配置信息一起,或者在與控制器795的單獨事務(wù)中,接收這種BGP配置信息。

如所示出的,數(shù)據(jù)庫守護進程730包括配置檢索器765和一組數(shù)據(jù)庫表745(其可以存儲在,例如,主機700的硬盤驅(qū)動器、易失性存儲器或其它儲存器上)。配置檢索器765負責(zé)與物理控制器795通信。在一些實施例中,配置檢索器從控制器接收用于受管理轉(zhuǎn)發(fā)元件的配置信息。此外,在一些實施例中,配置檢索器接收用于配置命名空間710和715的數(shù)據(jù)元組,以及任何路由表、NAT表、BGP守護進程或者由命名空間提供的其它服務(wù)。在一些實施例中,配置檢索器765還將這些數(shù)據(jù)元組轉(zhuǎn)換為數(shù)據(jù)庫表記錄,以在數(shù)據(jù)庫表745中存儲。

具體而言,一些實施例的數(shù)據(jù)庫表745包括容器表,其中數(shù)據(jù)庫中的每條記錄定義主機機器上的不同命名空間(或其它容器)。因此,對于主機700,容器表將包括用于兩個命名空間710和715中每一個的行。此外,對于每個命名空間,數(shù)據(jù)庫表存儲定義路由表的信息(例如,缺省路由、為連接的邏輯交換機定義的任何附加路由,以及任何用戶定義的靜態(tài)路由)。如果路由器執(zhí)行NAT,則數(shù)據(jù)庫還存儲用于邏輯路由器的NAT規(guī)則(源NAT和/或目的地NAT)。此外,對于每個命名空間,數(shù)據(jù)庫存儲邏輯路由器端口列表,其中具有每個端口的IP地址、MAC地址、網(wǎng)絡(luò)掩碼等。

對于命名空間710和715,利用活動BGP守護進程,數(shù)據(jù)庫表記錄指示BGP被啟用。此外,在一些實施例中,這些記錄包含將L3網(wǎng)關(guān)的BGP屬性指定為對等路由器的附加列。這些屬性可以包括本地自主系統(tǒng)編號(在不同的實施例中,其將L3網(wǎng)關(guān)所屬的邏輯網(wǎng)絡(luò)或受管理網(wǎng)絡(luò)識別為一個整體)、路由器標(biāo)識符(例如,IP地址)、是否通告恰當(dāng)?shù)闹貑?用于故障切換目的–在一些實施例中,是僅實現(xiàn)端口的L3網(wǎng)關(guān)的命名空間不通告恰當(dāng)?shù)闹貑?、以及由BGP守護進程通告的一組地址/前綴。

此外,一些實施例為L3網(wǎng)關(guān)經(jīng)由BGP守護進程與其對等的每個外部物理路由器(即,每個BGP鄰居)定義數(shù)據(jù)庫表記錄(例如,在不同的數(shù)據(jù)庫表中)。在一些實施例中,這些記錄指定鄰居路由器的一些或全部IP地址、用于路由器的自主系統(tǒng)編號、保持活動定時器(即,發(fā)送到鄰居以便使BGP會話保持活動的保持活動消息之間的持續(xù)時間)、可選的用于MD5認(rèn)證的密碼、抑制(hold-down)定時器持續(xù)時間(即,在其之后如果沒有接收到保持活動消息則BGP守護進程假定鄰居已出故障的持續(xù)時間)、以及與BGP鄰居的通信通過其被發(fā)送的接口。

轉(zhuǎn)發(fā)元件內(nèi)核模塊740處理并在主機700上運行的命名空間、在主機700外部的網(wǎng)絡(luò)主機以及在受管理網(wǎng)絡(luò)中其它主機上操作的轉(zhuǎn)發(fā)元件之間轉(zhuǎn)發(fā)網(wǎng)絡(luò)數(shù)據(jù)(例如,分組)(例如,對于通過(一個或多個)NIC 770或者從命名空間710和715接收到的網(wǎng)絡(luò)數(shù)據(jù)分組)。在一些實施例中,轉(zhuǎn)發(fā)元件內(nèi)核模塊740實現(xiàn)用于一個或多個邏輯網(wǎng)絡(luò)(具體而言,命名空間710和715所屬于的邏輯網(wǎng)絡(luò))的物理控制平面的轉(zhuǎn)發(fā)表。為了便于網(wǎng)絡(luò)數(shù)據(jù)的處理,轉(zhuǎn)發(fā)元件內(nèi)核模塊740與轉(zhuǎn)發(fā)元件守護進程725通信(例如,以從流處理器755接收流條目)。

圖7示出轉(zhuǎn)發(fā)元件內(nèi)核模塊740包括受管理橋760。此外,在一些實施例中,虛擬交換機內(nèi)核模塊可以包括附加的橋,諸如物理接口(PIF)橋。一些實施例包括用于主機機器的硬件中每個NIC 770的PIF橋。在這種情況下,在一些實施例中,PIF橋位于受管理橋760和每個NIC 770之間。

一些實施例的受管理橋760在命名空間710和715與VM和向命名空間發(fā)送流量并從其接收流量的其它主機(包括外部主機)之間執(zhí)行分組的實際處理和轉(zhuǎn)發(fā)。分組,例如,通過隧道端口從在VM主機的MFE,或者經(jīng)由它們到NIC的連接從外部路由器,在受管理橋760被接收,使得經(jīng)不同隧道或外部路由器連接到達的分組在橋760的不同接口被接收。對于從其它MFE(例如,在VM主機)接收的分組,受管理橋760基于附加到分組的目的地邏輯端口(或其它信息,諸如目的地MAC或IP地址)通過其與命名空間的(一個或多個)接口將分組發(fā)送到適當(dāng)?shù)拿臻g。

對于從外部路由器接收的分組,一些實施例的受管理橋760基于例如分組的目的地MAC和/或IP地址將分組發(fā)送到適當(dāng)?shù)拿臻g。當(dāng)外部路由器將分組路由到命名空間時,路由器利用先前發(fā)現(xiàn)的ARP信息執(zhí)行MAC地址替換。在一些實施例中,外部路由器具有命名空間的MAC地址,所述MAC地址與那個命名空間背后的各種IP地址關(guān)聯(lián),并且因此使用命名空間MAC地址作為用于指向那個網(wǎng)關(guān)的分組的目的地地址。在一些實施例中,當(dāng)進入邏輯網(wǎng)絡(luò)的分組還不具有附加的邏輯上下文信息時,受管理橋使用這個信息將這些分組指向適當(dāng)?shù)拿臻g。

類似地,受管理橋從命名空間710和715接收分組并且基于分組通過其被接收的接口和分組的源和/或目的地地址處理和轉(zhuǎn)發(fā)這些分組。在一些實施例中,為了處理分組,受管理橋760存儲在流處理器755中存儲的規(guī)則(和/或從存儲在流處理器755中的規(guī)則導(dǎo)出的規(guī)則)的當(dāng)前或最近用于處理分組的子集。在這個圖中,受管理橋760包括到命名空間710和715當(dāng)中每一個的兩個接口。在一些實施例中,受管理橋包括用于邏輯路由器的每個邏輯端口的單獨接口。因此,受管理橋可以通過其一個接口將分組發(fā)送到命名空間,并且在通過命名空間路由表路由之后,受管理橋通過不同的接口接收回分組。另一方面,因為命名空間只實現(xiàn)邏輯路由器端口之一,所以一些實施例在命名空間和受管理橋之間只具有單個接口。

雖然圖7示出了一個受管理橋,但是轉(zhuǎn)發(fā)元件內(nèi)核模塊740可以包括多個受管理橋。例如,在一些實施例中,轉(zhuǎn)發(fā)元件內(nèi)核模塊740包括用于在主機機器700中實現(xiàn)的每個邏輯網(wǎng)絡(luò)或者用于駐留在主機中的每個命名空間(其常常與每個邏輯網(wǎng)絡(luò)相同)的單獨的橋。照此,在這個例子中,轉(zhuǎn)發(fā)元件內(nèi)核模塊740將包括兩個受管理橋,其具有到命名空間710的單獨的接口。

命名空間710和715當(dāng)中每一個實現(xiàn)不同的L3網(wǎng)關(guān)(即,實現(xiàn)邏輯路由器的不同端口)。在一些實施例中,特定網(wǎng)關(guān)主機機器上的所有命名空間都是同一類型(即,利用諸如BGP的路由器對等協(xié)議實現(xiàn)單個邏輯路由器端口)。另一方面,一些實施例還允許是幾個當(dāng)中的一個的命名空間為邏輯路由器等效地實現(xiàn)整個路由表或者為具有到外部網(wǎng)絡(luò)的單個邏輯端口附連的邏輯路由器充當(dāng)網(wǎng)關(guān)。此外,一些實施例還允許命名空間提供除路由之外的其它邏輯服務(wù),諸如DHCP、DHCP中繼、元數(shù)據(jù)代理,等等。

如這個圖中所指示的,在一些實施例中,為不同的邏輯網(wǎng)絡(luò)(或者,在一些情況下,為相同的邏輯網(wǎng)絡(luò)中的同一邏輯路由器或不同邏輯路由器)實現(xiàn)不同L3網(wǎng)關(guān)(例如,不同邏輯端口)的不同命名空間可以駐留在同一主機700上。在這種情況下,命名空間710和715都運行BGP守護進程和路由表。

在一些實施例中,命名空間可以提供多個服務(wù)。在這種情況下,第一命名空間710包括路由表775、BGP守護進程780和其它服務(wù)782。在命名空間710上運行的這些其它服務(wù)可能提供ARP功能、網(wǎng)絡(luò)地址變換(NAT)表,或與路由器相關(guān)聯(lián)的其它特征。第二命名空間715也包括路由表790和BGP守護進程792,連同其它服務(wù)794。一些實施例對實現(xiàn)端口并使用路由器對等協(xié)議的所有L3網(wǎng)關(guān)使用相同的服務(wù)集合,而其它實施例允許用戶配置所提供的網(wǎng)絡(luò)堆棧或其它服務(wù)。此外,對于其中多個網(wǎng)關(guān)同時對邏輯路由器處于活動狀態(tài)的實現(xiàn),一些實施例限制使用有狀態(tài)的服務(wù),諸如NAT。即,網(wǎng)絡(luò)控制系統(tǒng)防止L3網(wǎng)關(guān)利用需要各種網(wǎng)關(guān)用于邏輯路由器以共享狀態(tài)信息的那些服務(wù)。

一些實施例的命名空間守護進程735管理駐留在主機700上的命名空間710和715以及在那些命名空間中運行的服務(wù)(例如,邏輯路由器和L3網(wǎng)關(guān)服務(wù))。如所示出的,命名空間守護進程735包括數(shù)據(jù)庫監(jiān)視器785和BGP配置生成器799。此外,一些實施例包括配置生成器或用于其它服務(wù)的類似模塊(例如,NAT表生成器、路由表生成器、用于DHCP和可在命名空間中提供的其它服務(wù)的配置生成器,等等)。

數(shù)據(jù)庫監(jiān)視器785監(jiān)聽數(shù)據(jù)庫表745以獲得對影響實現(xiàn)邏輯路由器的命名空間的特定表的改變。這些改變可以包括新命名空間的建立、命名空間的去除、添加或除去BGP鄰居、修改命名空間中的BGP配置或路由表、將新的邏輯交換機附連到邏輯路由器,等等。當(dāng)數(shù)據(jù)庫監(jiān)視器785檢測到影響命名空間的改變時,它或者使命名空間守護進程在主機上創(chuàng)建用于新邏輯路由器的新命名空間、在現(xiàn)有的命名空間中實例化新過程(例如,對于新啟用的服務(wù)),或者生成/修改用于命名空間的路由表或其它配置數(shù)據(jù)。

當(dāng)數(shù)據(jù)庫監(jiān)視器785檢測到新BGP配置數(shù)據(jù)(或者是具有BGP配置的新命名空間、對現(xiàn)有BGP配置的修改、對用于特定BGP守護進程的鄰居集合的修改,等等)時,數(shù)據(jù)庫監(jiān)視器785將這個數(shù)據(jù)提供給BGP配置生成器799(或者指示BGP配置生成器799從數(shù)據(jù)庫表745中來檢索新數(shù)據(jù))。BGP配置生成器使用存儲在數(shù)據(jù)庫表745中的數(shù)據(jù)元組來以守護進程所需的格式為BGP守護進程建立配置文件。在一些實施例中,命名空間守護進程785在主機文件系統(tǒng)783中存儲所生成的配置。在一些實施例中,BGP守護進程780和792是可用于Linux或不同操作系統(tǒng)的標(biāo)準(zhǔn)應(yīng)用。

高可用性守護進程720監(jiān)視網(wǎng)關(guān)主機700和/或在主機700上運行的命名空間710和715的健康狀況。這個守護進程負責(zé)在網(wǎng)關(guān)主機700不再健康并且應(yīng)當(dāng)停止使用的時候向控制器795報告,由此允許控制器將在主機上操作的命名空間分配給新的網(wǎng)關(guān)主機、修改用于在將分組發(fā)送到網(wǎng)關(guān)主機700上實現(xiàn)的L3網(wǎng)關(guān)的VM主機處的隧道封裝的流條目。

在一些實施例中,高可用性守護進程720包括監(jiān)視器793和健康狀況修改器797。一些實施例的監(jiān)視器793監(jiān)視網(wǎng)關(guān)主機機器700的各個方面,以確定機器是否應(yīng)當(dāng)繼續(xù)使用或者停止用于托管L3網(wǎng)關(guān)(以及用于邏輯網(wǎng)絡(luò)的其它服務(wù))。監(jiān)視器793可以監(jiān)視底層硬件資源(例如,處理器、存儲器,等等),以確保這些資源運作良好,足以以必要的速度提供邏輯路由服務(wù)。此外,監(jiān)視器793確保到其它主機機器(例如,向網(wǎng)關(guān)主機發(fā)送流量的VM主機)的連接是否正常運作。一些實施例通過監(jiān)視物理NIC以及監(jiān)視是否從這些主機接收到分組來監(jiān)視連接。此外,一些實施例的監(jiān)視器793監(jiān)視在主機上操作的軟件。例如,監(jiān)視器檢查虛擬化軟件705以及命名空間710和715的其它模塊,以確保它們沒有崩潰或以其它方式發(fā)生故障。此外,在一些實施例中,高可用性守護進程720使用雙向轉(zhuǎn)發(fā)檢測(BFD)來直接監(jiān)視上游路由器(例如,在受管理網(wǎng)絡(luò)外部的路由器)。

當(dāng)監(jiān)視器793出于任何理由確定網(wǎng)關(guān)主機700應(yīng)當(dāng)停止使用時,高可用性守護進程720通知物理控制器795管理網(wǎng)關(guān)主機機器700。為了通知控制器,在一些實施例中,健康狀況修改器797利用數(shù)據(jù)庫守護進程765(例如,經(jīng)由配置檢索器765)傳播到控制器795的信息修改數(shù)據(jù)庫表745。在一些實施例中,健康狀況修改器797修改包括用于網(wǎng)關(guān)主機700的健康變量的表,以指示網(wǎng)關(guān)應(yīng)當(dāng)不活動。在一些實施例中,健康狀況修改器797修改表745中為每個命名空間創(chuàng)建的行,以指示該命名空間應(yīng)當(dāng)被視為不活動。當(dāng)單個命名空間崩潰時,健康狀況修改器797只修改用于崩潰的命名空間的數(shù)據(jù)。

在一些實施例中,配置檢索器765檢測到數(shù)據(jù)庫表745已被修改并且將更新的數(shù)據(jù)元組發(fā)送到物理控制器795。當(dāng)控制器795接收到這種指示時,控制器識別具有受影響的邏輯路由器的邏輯控制器,從而使這些控制器(i)在新的網(wǎng)關(guān)主機上分配邏輯端口用于實現(xiàn),以及(ii)為向L3網(wǎng)關(guān)發(fā)送分組的MFE主機生成新的流條目。

III.路由協(xié)議應(yīng)用的配置

如上一部分中所指出的,在一些實施例中,在網(wǎng)關(guān)主機機器上操作的應(yīng)用(例如,用戶空間守護進程)或應(yīng)用的集合負責(zé)接收L3網(wǎng)關(guān)配置并在命名空間或網(wǎng)關(guān)主機的其它容器中安裝那個配置。L3網(wǎng)關(guān)配置可以包括路由表、路由協(xié)議配置,以及其它數(shù)據(jù)。除其它功能外,應(yīng)用還從存儲在主機上的數(shù)據(jù)庫表的集合檢索信息并使用那個信息來利用其各種功能在主機上的命名空間中設(shè)置L3網(wǎng)關(guān)。在一些實施例中,這種設(shè)置包括指定用于BGP守護進程的各種BGP參數(shù)和BGP鄰居的配置文件的生成。

圖8概念性地示出了用于設(shè)置或修改網(wǎng)關(guān)主機機器上的L3網(wǎng)關(guān)的一些實施例的過程800。在一些實施例中,過程800由在網(wǎng)關(guān)主機上運行的虛擬化軟件中的用戶空間守護進程,諸如命名空間守護進程785,執(zhí)行。如所示出的,過程800開始于(在805處)接收對定義利用BGP實現(xiàn)邏輯路由器端口的L3網(wǎng)關(guān)的數(shù)據(jù)庫表的修改,以在主機機器上運行。在一些實施例中,負責(zé)在主機上創(chuàng)建L3網(wǎng)關(guān)并生成BGP配置文件的應(yīng)用監(jiān)聽由控制器數(shù)據(jù)填充的數(shù)據(jù)庫表的集合。當(dāng)新的行被添加到定義主機上命名空間的表時,或者現(xiàn)有的行被修改時,應(yīng)用檢測這種改變并檢索數(shù)據(jù)。當(dāng)改變涉及或者利用BGP守護進程創(chuàng)建命名空間或者修改用于現(xiàn)有命名空間的BGP配置時,BGP配置生成器被調(diào)用,以便創(chuàng)建或修改用于新的/受影響的BGP守護進程的配置文件。

在接收到數(shù)據(jù)庫表后,過程800(在810處)確定用于受影響的L3網(wǎng)關(guān)的容器是否已經(jīng)在主機機器上運行。即,該過程確定對數(shù)據(jù)庫表的修改是用于添加新的網(wǎng)關(guān)還是修改現(xiàn)有的網(wǎng)關(guān)。在一些實施例中,網(wǎng)關(guān)主機上的數(shù)據(jù)庫表首先接收簡單地定義新容器的數(shù)據(jù)元組,并隨后接收配置信息,在這種情況下,路由表和/或BGP配置數(shù)據(jù)將被視為對現(xiàn)有命名空間的修改。

當(dāng)容器尚未在主機機器上操作時,該過程(在815處)創(chuàng)建用于在主機機器上的新L3網(wǎng)關(guān)的容器。在一些實施例中,在網(wǎng)關(guān)主機機器的虛擬化軟件中操作的用戶空間應(yīng)用(例如,命名空間守護進程)負責(zé)創(chuàng)建和除去用于主機上的L3網(wǎng)關(guān)的容器。如所提到的,在一些實施例中,這個容器是虛擬化容器,諸如在基礎(chǔ)操作系統(tǒng)之上運行的命名空間或虛擬機。一些實施例使用Linux命名空間,因為它使用比典型虛擬機更少的運營資源,并且對于由L3網(wǎng)關(guān)執(zhí)行的操作(例如,包括路由、BGP守護進程的IP堆棧)是足夠的。在一些實施例中,每個網(wǎng)關(guān)主機機器為眾多不同邏輯網(wǎng)絡(luò)中的眾多不同邏輯路由器運行眾多(例如,幾十個)操作L3網(wǎng)關(guān)的命名空間。

接下來,過程800(在820處)根據(jù)在數(shù)據(jù)庫表中的配置確定是否尚未為受影響的L3網(wǎng)關(guān)定義路由表。例如,如果數(shù)據(jù)庫表只定義了新的L3網(wǎng)關(guān)而沒有提供關(guān)于用于該L3網(wǎng)關(guān)的命名空間的配置的任何信息,則命名空間守護進程將在主機上創(chuàng)建新的命名空間,但完全不配置該命名空間。此外,如果數(shù)據(jù)庫表只包括對命名空間的其它方面的修改,諸如BGP配置,則命名空間守護進程將不修改特定L3網(wǎng)關(guān)的路由表。但是,在一些實施例中,命名空間守護進程確保由BGP守護進程通告的任何路由都也在L3網(wǎng)關(guān)的路由表中。照此,如果新的前綴被添加到要在BGP配置中通告的前綴列表,則命名空間守護進程把這些(如果還不存在的話)添加到路由表。

但是,當(dāng)當(dāng)前安裝在容器中的路由表不匹配數(shù)據(jù)庫表中的路由表定義時(或者是因為還沒有定義路由表或者是因為路由表定義已被修改),過程(在825處)為L3網(wǎng)關(guān)生成或修改路由表,并且(在830處)在容器中安裝該路由表。在一些實施例中,這其實是一個操作,因為命名空間守護進程直接修改命名空間中的IP堆棧。在其它實施例中,命名空間守護進程生成路由表或IP堆棧,然后作為單獨的動作將其安裝在容器中。

接下來,過程800(在835處)確定BGP守護進程是否已在用于L3網(wǎng)關(guān)的容器中被起動。例如,如果容器先前未利用配置創(chuàng)建,或者如果容器剛剛在過程800期間創(chuàng)建(即,如果數(shù)據(jù)庫表利用BGP配置定義了新的容器),則守護進程將還不會在容器中被起動。另一方面,如果對數(shù)據(jù)庫表的修改僅僅是對路由表或BGP配置的更新(例如,添加用于新的邏輯交換機的路由、添加或除去BGP鄰居,等等),則BGP守護進程將已經(jīng)在用于L3網(wǎng)關(guān)的容器中操作。

當(dāng)BGP守護進程尚未被起動時,該過程(在840處)在容器中起動BGP守護進程。在一些實施例中,命名空間守護進程向?qū)崿F(xiàn)L3網(wǎng)關(guān)的命名空間發(fā)送指令,以啟動BGP守護進程。為了讓命名空間真正運行BGP守護進程的實例,在一些實施例中,該軟件已缺省地安裝在命名空間上。在其它實施例中,或者命名空間檢索守護進程(例如,從網(wǎng)關(guān)主機上的儲存裝置)或者命名空間守護進程檢索守護進程并將其安裝在命名空間上。

隨著BGP守護進程被起動,過程(在845處)確定BGP守護進程的配置是否匹配在接收到的用于L3網(wǎng)關(guān)的數(shù)據(jù)庫表中定義的配置。如果BGP守護進程(在操作840處)剛起動,則守護進程將還沒有配置,并且因此很清楚將不匹配在數(shù)據(jù)庫表中定義的配置。此外,數(shù)據(jù)庫表修改可以添加或除去路由,以通告、添加或除去BGP鄰居,或者修改用于BGP鄰居的數(shù)據(jù)。但是,如果數(shù)據(jù)庫表修改只影響路由表,則將不需要BGP配置修改。

當(dāng)操作配置不匹配由數(shù)據(jù)庫表定義的配置時,過程(在850處)從數(shù)據(jù)庫表生成配置文件并且在主機機器的文件系統(tǒng)中存儲該文件。在一些實施例中,在文件系統(tǒng)的特定目錄中,在機器上操作的每個網(wǎng)關(guān)被分配用于例如BGP配置文件的子目錄,以及用于其它數(shù)據(jù)(例如,DHCP配置文件,等等)的儲存裝置。為了生成配置文件,在一些實施例中,命名空間守護進程使用來自數(shù)據(jù)庫表記錄的數(shù)據(jù)元組并將它們變換成由BGP守護進程可讀的特定格式。例如,在一些實施例中,配置文件是文本文件。在其它實施例中,命名空間守護進程首先生成中間配置文件(例如,文本文件),然后將其轉(zhuǎn)換成BGP守護進程可讀的二進制快照,并將這兩個文件都存儲在用于命名空間中BGP守護進程實例的目錄中。在一些實施例中,配置文件定義(i)用于作為路由器的BGP守護進程的自主系統(tǒng)和標(biāo)識信息,(ii)讓BGP守護進程通告的路由的集合,和(iii)關(guān)于BGP守護進程的外部路由器對等體的信息。

一旦配置文件已經(jīng)生成,過程800就(在805處)通知BGP守護進程讀取配置文件,以便讓其配置匹配在數(shù)據(jù)庫表中定義的配置。在一些實施例中,通知經(jīng)由命名空間守護進程和BGP守護進程之間的網(wǎng)關(guān)主機內(nèi)的TCP連接發(fā)生。在一些實施例中,BGP守護進程讀取二進制配置文件、計算從其當(dāng)前操作配置的改變,并應(yīng)用這些改變。

IV.在網(wǎng)關(guān)中的BGP操作

一旦BGP守護進程已被實例化,并且其配置文件已加載,L3網(wǎng)關(guān)就可以作為外部路由器的對等體參與路由交換。圖9概念性地示出了由一些實施例的路由協(xié)議應(yīng)用(例如,BGP守護進程)執(zhí)行的一些實施例的過程900,以通告用于L3網(wǎng)關(guān)的到外部路由器的路由。過程900表示在初始啟動時由BGP守護進程執(zhí)行的過程。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,在許多情況下,操作將不是以這個圖中所示的線性方式被執(zhí)行。例如,與不同外部路由器的通信可以需要不同長度的設(shè)置時間,并且在一些實施例中BGP守護進程將每個對等連接視為單獨的過程。

如所示出的,過程900開始于(在905處)接收BGP配置。如在前一部分中所描述的,在一些實施例中,主機的虛擬化軟件中的用戶空間應(yīng)用(例如,命名空間守護進程)生成BGP配置文件、在用于命名空間的主機文件系統(tǒng)的目錄中存儲該配置文件,然后向BGP守護進程通知該配置文件。在這個時候,BGP守護進程可以從目錄檢索BGP配置。

接下來,過程900(在910處)安裝配置。在一些實施例中,BGP守護進程讀取檢索出的二進制文件、確定其當(dāng)前操作配置與在二進制文件中指定的配置之間的差別,并且將這些改變應(yīng)用到現(xiàn)有的配置,使得新的操作配置匹配配置文件中的配置。如果這是對BGP守護進程的初始設(shè)置,則操作配置將沒有數(shù)據(jù)。但是,如果改變局限于添加或除去要通告的路由,或者添加、除去或修改關(guān)于鄰居物理路由器的信息,則BGP守護進程只修改其配置來實現(xiàn)改變,而不是重新加載整個配置。

隨著配置被安裝,該過程(在915處)識別與其設(shè)置連接以便通告路由的BGP鄰居(即,對等的物理路由器)。這可以是單個物理路由器(例如,如以下圖15中所示)或者網(wǎng)關(guān)(利用BGP守護進程)向其通告相同路由的幾個物理路由器(例如,如以下在圖10中)。在一些實施例中,L3網(wǎng)關(guān)在其上操作的網(wǎng)關(guān)主機機器和外部物理路由器之間的物理連接是手動設(shè)置的并且在網(wǎng)絡(luò)被配置時由管理員向網(wǎng)絡(luò)控制器識別,而在其它實施例中,網(wǎng)絡(luò)控制器識別每個網(wǎng)關(guān)自動連接到的路由器,而無需由用戶輸入這個信息。

在一些實施例中,BGP守護進程為每個物理路由器識別路由器的IP地址、路由器所屬的自主系統(tǒng)編號、與路由器的BGP會話的保持活動定時器、指定其后如果沒有接收到保持活動消息則BGP守護進程應(yīng)當(dāng)假設(shè)路由器已出故障的持續(xù)時間的抑制時間,以及可選地用于認(rèn)證的密碼。單個BGP守護進程與其建立連接的不同物理路由器可以使用不同的BGP設(shè)置(例如,不同的保持活動或抑制定時器)并且屬于不同的自主系統(tǒng)。

接下來,過程(在920處)打開,或嘗試打開,與每個識別出的BGP鄰居的BGP會話。在一些實施例中,BGP守護進程作為每個連接的標(biāo)準(zhǔn)BGP狀態(tài)機操作。即,守護進程基本上為與不同物理路由器的每個BGP連接實例化單獨的狀態(tài)機。對于每個連接,守護進程嘗試過渡到已建立(Established)狀態(tài),以便能夠與物理路由器交換路由更新。即,BGP守護進程嘗試發(fā)起與對等體的TCP連接、發(fā)送打開(Open)消息并接收返回的Open消息,并發(fā)送和接收保持活動消息,以便從連接(Connect)狀態(tài)過渡到打開發(fā)送(OpenSent)狀態(tài)再過渡到打開確認(rèn)(OpenConfirm)狀態(tài)并最后過渡到Established狀態(tài)。當(dāng)與對等路由器的連接處于Established狀態(tài)時,BGP守護進程和對等路由器可以交換路由信息。

但是,出于各種原因,BGP守護進程可能無法打開與其識別出的一個或多個鄰居的會話(也被稱為建立相鄰性)。例如,如果在用于特定對等路由器的配置文件中提供的自主系統(tǒng)數(shù)量不匹配在對等路由器上配置的實際自主系統(tǒng)數(shù)量,則相鄰性無法建立。過程900假設(shè)為每個BGP鄰居建立相鄰性–在一些實施例中,如果守護進程無法打開與特定路由器的會話,則它繼續(xù)嘗試(例如,嘗試建立TCP會話、嘗試發(fā)送和接收Open消息,等等)。

該過程還(在925處)基于配置文件識別向已經(jīng)與其建立BGP會話的其對等體通告的路由。在一些實施例中,BGP守護進程向它與其對等的每個路由器通告相同地址和前綴。這些可以是單個IP地址(例如,10.1.1.1)或者表示IP地址范圍的CIDR前綴(例如,10.1.1/24)。在一些實施例中,BGP守護進程以CIDR斜線表示法(例如,利益/32表示單個IP地址)通告所有路由。

利用識別出的前綴和地址,該過程(在930處)為與其已建立相鄰性的每個識別出的鄰居生成分組。在一些實施例中,這些分組是識別已知的可達的前綴以及分組要到達每個前綴將必需經(jīng)過的自主系統(tǒng)列表的標(biāo)準(zhǔn)BGP更新(Update)分組。對于到邏輯交換機的路由,BGP分組通告子網(wǎng)(例如,10.1.1/24)以及僅單個(L3網(wǎng)關(guān)所屬的)自主系統(tǒng)編號,這是因為,一旦到達L3網(wǎng)關(guān),分組就不必為了到達VM主機而被發(fā)送到任何其它自主系統(tǒng)。

在每次生成分組時,該過程(在935處)將從命名空間生成的分組發(fā)送到本地MFE,以便讓MFE經(jīng)外部網(wǎng)絡(luò)將分組送出到目的地物理路由器鄰居。如果BGP守護進程與三個不同的物理路由器建立了相鄰性,則守護進程將經(jīng)由MFE向三個不同的目的地發(fā)送相同的BGP Update分組。此外,幾個不同的命名空間可以在用于不同邏輯路由器的同一臺主機上運行BGP守護進程實例,在這種情況下,同一個路由器可以接收到通告完全不同的路由的幾個不同的Update分組。

圖10-14概念性地示出了在L3網(wǎng)關(guān)中使用BGP來向用于邏輯網(wǎng)絡(luò)的一組三個外部路由器通告路由的一個例子。圖10示出了在受管理網(wǎng)絡(luò)1025中的邏輯網(wǎng)絡(luò)1000及那個邏輯網(wǎng)絡(luò)的物理實現(xiàn)。如該圖的上半部分中所示,邏輯網(wǎng)絡(luò)1000類似于圖1的邏輯網(wǎng)絡(luò)100來配置,具有連接兩個邏輯交換機1005和1010的單個邏輯路由器1015。第一邏輯交換機1005包括在子網(wǎng)10.0.0/24中的IP地址(有時寫成10.0.0.0/24),并且第二邏輯交換機1510包括在子網(wǎng)10.0.1/24中的IP地址(有時寫成10.0.1.0/24)。此外,邏輯路由器1015包括連接到已為其激活路由通告(例如,利用BGP)的外部網(wǎng)絡(luò)1020的三個端口。

圖10的底部示出了邏輯網(wǎng)絡(luò)1000的物理實現(xiàn)。在受管理網(wǎng)絡(luò)中,VM主機機器1030的集合托管附連到邏輯交換機1005和1010的VM。這些VM主機1030可以各自托管來自邏輯網(wǎng)絡(luò)的單個VM,并且一些可能托管或者來自相同邏輯交換機或者來自不同邏輯交換機的多個VM。VM主機上MFE的轉(zhuǎn)發(fā)表各自實現(xiàn)邏輯交換機1005和1010以及邏輯路由器1015。此外,在一些實施例中,這些VM主機1030可以托管來自其它邏輯網(wǎng)絡(luò)的VM,然后MFE的轉(zhuǎn)發(fā)表也將實現(xiàn)這些其它邏輯網(wǎng)絡(luò)。此外,一些實施例的受管理網(wǎng)絡(luò)1025包括托管用于其它邏輯網(wǎng)絡(luò)的VM但是沒有用于邏輯網(wǎng)絡(luò)1000的VM駐留在其上的附加VM主機。

此外,受管理網(wǎng)絡(luò)1025包括三個網(wǎng)關(guān)主機1035-1045。這些網(wǎng)關(guān)主機1035-1045中每一個托管實現(xiàn)面向外部網(wǎng)絡(luò)1020的三個邏輯路由器端口中一個的命名空間。具體而言,第一網(wǎng)關(guān)主機1035托管實現(xiàn)第一邏輯路由器端口的第一命名空間1050、第二網(wǎng)關(guān)主機1040托管實現(xiàn)第二邏輯路由器端口的第二命名空間1055并且第三網(wǎng)關(guān)主機1045托管實現(xiàn)第三邏輯路由器端口的第三命名空間1060。這些命名空間1050-1060中每一個操作BGP守護進程或其它路由協(xié)議應(yīng)用,用于與附連的外部網(wǎng)絡(luò)路由器交換路由信息。MFE還在網(wǎng)關(guān)主機1035-1045中每一個上操作。在一些實施例中,MFE各自實現(xiàn)邏輯交換機1005和1010以及邏輯路由器1015。當(dāng)從VM傳出的分組已經(jīng)通過邏輯網(wǎng)絡(luò)的大部分被處理時,這些MFE充當(dāng)用于傳入分組的第一跳MFE,并且在一些實施例中通過邏輯網(wǎng)絡(luò)處理這些傳入的分組。由于網(wǎng)關(guān)主機可以實現(xiàn)用于其它邏輯網(wǎng)絡(luò)的其它命名空間,因此這些MFE也可以實現(xiàn)其它邏輯網(wǎng)絡(luò)。

在這個例子中,三個外部網(wǎng)絡(luò)路由器1065-1075通過網(wǎng)關(guān)主機上的MFE連接到命名空間1050-1060。第一路由器1065連接到僅主機1035上的命名空間1050、第二路由器1070連接到全部三個命名空間1050-1060,而第三路由器1075連接到主機1045上的命名空間1060。這些路由器可以提供到互聯(lián)網(wǎng)、其它網(wǎng)絡(luò)等的連接。

圖11概念性地示出了由操作成控制受管理網(wǎng)絡(luò)1025的控制器集群1100在網(wǎng)關(guān)主機1035-1045上的三個命名字空間1050-1060中指配BGP守護進程。在不同的實施例中,控制器集群1100可以是單個控制器、在主-備用(一個或多個)配置中操作的一對或一組控制器,或者諸如圖3中所示的控制器的層次結(jié)構(gòu)。如所示出的,基于進入的定義邏輯網(wǎng)絡(luò)1000的配置信息,控制器集群1100向三個網(wǎng)關(guān)主機1035-1045發(fā)送BGP配置數(shù)據(jù),以便指配在那些主機上的命名空間中操作的BGP守護進程。除其它信息外,BGP配置數(shù)據(jù)包括要通告的前綴(其對于每個網(wǎng)關(guān)是相同的)和BGP鄰居(對等路由器)的列表。

在這個例子中,控制器集群將數(shù)據(jù)1105發(fā)送到第一網(wǎng)關(guān)主機1035,指示前綴10.0.0/24和10.0.1/24和兩個BGP鄰居15.1.1.1和16.1.1.1(用于這個網(wǎng)關(guān)與其接口的兩個路由器的IP地址)??刂破骷簩?shù)據(jù)1110發(fā)送到第二網(wǎng)關(guān)主機1040,指示相同的兩個前綴和僅一個BGP鄰居16.1.1.1。最后,控制器集群將數(shù)據(jù)1115發(fā)送到第三網(wǎng)關(guān)主機1045,指示相同的兩個前綴和兩個BGP鄰居16.1.1.1和17.1.1.1。在一些實施例中,控制器集群以與用于網(wǎng)關(guān)的其它非流條目配置數(shù)據(jù)相同的格式發(fā)送這個數(shù)據(jù)(例如,當(dāng)數(shù)據(jù)元組利用OVSDB協(xié)議被發(fā)送時)。從控制器發(fā)送的BGP配置數(shù)據(jù)還可以包括其它數(shù)據(jù),諸如自主系統(tǒng)編號(這將跨網(wǎng)關(guān)是相同的)、用于網(wǎng)關(guān)的路由器標(biāo)識信息,以及關(guān)于對等路由器的附加信息(例如,對等體的自主系統(tǒng)編號)。

在從控制器集群1100接收到配置數(shù)據(jù)之后,在每個網(wǎng)關(guān)主機1035-1045上的應(yīng)用(例如,在虛擬化軟件中運行的守護進程)配置在其相應(yīng)的命名空間上操作的BGP守護進程(例如,通過生成用于BGP守護進程的配置文件)。然后,BGP守護進程開始操作,并嘗試設(shè)置與它們識別出的對等外部路由器的連接。例如,命名空間1050中的BGP守護進程建立與路由器1065和1070的兩個單獨TCP連接,然后再通過發(fā)送BGP Open和保持活動消息來進一步建立與這些路由器的BGP會話。如果這種消息也是從這些路由器接收的,則BGP守護進程可以向?qū)Φ嚷酚善靼l(fā)送Update分組。

圖12概念性地示出了根據(jù)一些實施例、由命名空間1050-1060中的BGP守護進程發(fā)送的BGP Update分組。在一些實施例中,這些分組將它們自己識別為BGP Update分組(即,在BGP報頭中)、識別源路由器,并識別用于各種前綴的可達性信息。在一些實施例中,這種可達性信息識別(i)CIDR格式中的前綴和(ii)如果被發(fā)送到Update分組的源,則分組為了到達由前綴定義的子集中的IP地址而將通過的自主系統(tǒng)的有序集合。例如,在典型的物理網(wǎng)絡(luò)中,路由器可以識別通過自主系統(tǒng)15、8、6可達的前綴192.10.10.0/24(其中發(fā)送路由器位于自主系統(tǒng)15中)。

在用于邏輯網(wǎng)絡(luò)的L3網(wǎng)關(guān)的大多數(shù)情況下,到附連到邏輯交換機的VM的所有路由都將在其可達性信息中只具有單個自主系統(tǒng),網(wǎng)關(guān)所屬的自主系統(tǒng)。一般而言,或者每個邏輯網(wǎng)絡(luò)是單個自主系統(tǒng),或者受管理網(wǎng)絡(luò)作為整體是單個自主系統(tǒng)。但是,在一些情況下,所通告的路由可以有一個以上自主系統(tǒng)(例如,如果受管理網(wǎng)絡(luò)被劃分成分組通過其以便到達邏輯交換機的多個自主系統(tǒng))。

如所示出的,命名空間1050分別向路由器1065和1070發(fā)送兩個Update分組1205和1210。命名空間1050通過其本地MFE發(fā)送這些分組當(dāng)中每一個,其本地MFE包括到網(wǎng)關(guān)主機1035的(一個或多個)NIC的橋。這些分組中每一個是相同的(除了目的地路由器信息之外),該分組指示兩個前綴10.0.0/24和10.0.1/24以及發(fā)送命名空間信息。命名空間1055將單個分組1215發(fā)送到路由器1070,該分組指示相同的前綴可達性數(shù)據(jù)但具有不同的自識別信息。最后,第三命名空間1060將兩個分組1220和1225發(fā)送到路由器1070和1075,該分組也識別具有等效可達性信息的相同的兩個前綴,具有其自己的自識別信息。

作為接收這些Update分組的結(jié)果,外部路由器1065-1075更新自己的路由表。在一些實施例中,路由器將學(xué)習(xí)到的路由添加到其路由信息庫(RIB),然后重新計算到識別出的目的地的路由,以便在轉(zhuǎn)發(fā)信息庫(FIB)中使用。在一些實施例中,RIB包括路由器學(xué)習(xí)到的所有路由(經(jīng)由連接、路由的手動輸入或者或諸如BGP的動態(tài)路由協(xié)議),而FIB包括路由器將實際用來轉(zhuǎn)發(fā)分組的路由。

路由器1065和1075只具有到達前綴10.0.0/24和10.0.1/24的單條途徑–分別通過主機1035和1045上的L3網(wǎng)關(guān)。但是,路由器1070從全部三個網(wǎng)關(guān)主機1035-1045上的命名空間接收路由通告,每個網(wǎng)關(guān)主機將其自己指示為到達這些前綴的可能的下一跳。一般而言,當(dāng)面對RIB中到達特定目的地IP地址或地址范圍的多個路由時,物理路由器之一確定哪條路由最佳(例如,基于所遍歷的自主系統(tǒng)的數(shù)量,或其它數(shù)據(jù))并且選擇最優(yōu)路由在FIB中使用。但是,在這個例子中,對于10.0.0/24向路由器1070給出的三條可能路由是等效的。在一些實施例中,路由器1070簡單地選擇這些路由之一用于其FIB。但是,如果路由器1070能夠進行相同成本的多路徑(ECMP)轉(zhuǎn)發(fā),則路由器將所有這三條路由(即,到命名空間1050-1060的)都添加到其FIB,作為相同成本的選項。這使得流量跨三個網(wǎng)關(guān)散布,從而防止它們當(dāng)中任何一個對于傳入的流量變成單個瓶頸。

圖13和14概念性地示出了由進入受管理網(wǎng)絡(luò)1025的流量所采取的路徑。首先,圖13示出了由從外部源發(fā)送到受管理網(wǎng)絡(luò)中的、具有目的地IP地址10.0.1.1的VM的分組1300所采取的路徑。在這個圖中,由分組1300所采取的路徑被示為粗虛線。分組到達外部路由器1065,它查閱其轉(zhuǎn)發(fā)信息庫?;谟陕酚善?065接收到的Update分組1205,其FIB指示具有在范圍10.0.1/24內(nèi)的目的地IP地址的分組應(yīng)當(dāng)被發(fā)送到命名空間1050。因而,外部路由器1065將分組轉(zhuǎn)發(fā)到網(wǎng)關(guān)主機1035。

分組到達網(wǎng)關(guān)主機1035上的MFE,它將分組轉(zhuǎn)發(fā)到充當(dāng)用于特定邏輯網(wǎng)絡(luò)的網(wǎng)關(guān)的命名空間1050。在一些實施例中,外部路由器1065先前已經(jīng)向網(wǎng)關(guān)主機1050發(fā)送了請求用于10.0.1.1的MAC地址的ARP請求,并且命名空間1050已利用其MAC地址作出響應(yīng)。照此,分組1300被尋址到命名空間1050的MAC地址,其使得MFE將分組轉(zhuǎn)發(fā)到這個目的地。

命名空間1050接收分組、通過其IP網(wǎng)絡(luò)堆棧(包括其路由表)處理其,并通過與MFE的不同接口將分組返回到MFE。在一些實施例中,在該命名空間中的處理流水線可以包括網(wǎng)絡(luò)地址變換、防火墻處理和路由當(dāng)中一些或全部。但是,對于具有多個網(wǎng)關(guān)的分布式邏輯路由器,由于狀態(tài)共享的難度,一些實施例不允許有狀態(tài)的服務(wù),諸如網(wǎng)絡(luò)地址變換,在該網(wǎng)關(guān)上執(zhí)行。在一些實施例中,由命名空間執(zhí)行的路由將目的地IP地址映射到網(wǎng)關(guān)附連到的邏輯路由器端口的目的地MAC地址,在一些實施例中。在其它實施例中,路由將目的地IP地址映射到分組被發(fā)送到的VM或其它實體的目的地MAC地址。當(dāng)MFE通過不同的接口接收分組時,這使得MFE能夠?qū)⒎纸M視為進入邏輯路由器,在這個時候,MFE可以執(zhí)行邏輯處理,以識別用于分組的邏輯交換機的邏輯出口端口,并且將分組發(fā)送VM主機1030中適當(dāng)?shù)囊粋€。

圖14示出了通過路由器1070從外部網(wǎng)絡(luò)發(fā)送到分別具有IP地址10.0.1.1和10.0.1.3的VM的兩個分組1405和1410。在這種情況下,這兩個分組1405都由路由器1070的FIB中的同一條目轉(zhuǎn)發(fā),但是發(fā)送到受管理網(wǎng)絡(luò)1025中的不同網(wǎng)關(guān)。當(dāng)外部路由器1070接收到分組1405時,F(xiàn)IB條目指示路由器使用ECMP技術(shù)來選擇三個相同成本的目的地1050-1060中的一個。在一些實施例中,路由器1070散列分組屬性的集合,以便確定將分組發(fā)送到哪個目的地。例如,一些實施例使用源和目的地IP地址,而其它實施例使用源和/或目的地MAC地址、傳輸連接5元組(源IP地址、目的地IP地址、傳輸協(xié)議、源傳輸端口號和目的地傳輸端口號),或分組屬性的其它組合。為了確定如何將散列結(jié)果關(guān)聯(lián)到相同成本的目的地中特定的一個,一些實施例簡單地計算該散列對列出的目的地數(shù)量取模。其它實施例使用諸如一致性散列或最高隨機權(quán)重的算法,當(dāng)網(wǎng)關(guān)被添加到或從相同成本的目的地列表中被除去時,所述算法對比簡單的模N算法更少的流量修改目的地。

不考慮所使用的算法(一些實施例甚至可以不使用散列函數(shù),而是代替地使用其它負載平衡技術(shù)),相同路由由用于邏輯路由器的幾個活動L3網(wǎng)關(guān)通告到相同的外部物理路由器允許該物理路由器使用其ECMP技術(shù)在這幾個網(wǎng)關(guān)之間散布流量。因此,在這種情況下,路由器1070將第一分組1405發(fā)送到命名空間1055并將第二分組1410發(fā)送到命名空間1060,但是這些分組由路由器中的相同轉(zhuǎn)發(fā)條目支配。

前面在圖10-14中所示的例子示出了在受管理網(wǎng)絡(luò)1025中實現(xiàn)的單個邏輯網(wǎng)絡(luò)的例子。圖15-18的例子概念性地示出了在網(wǎng)關(guān)的集合上實現(xiàn)的兩個邏輯網(wǎng)絡(luò)。在這種情況下,圖15的上半部分示出了第一邏輯網(wǎng)絡(luò)1500和第二邏輯網(wǎng)絡(luò)1525的體系架構(gòu)。這些邏輯網(wǎng)絡(luò)具有相似的體系架構(gòu),其中第一邏輯網(wǎng)絡(luò)1500包括將兩個邏輯交換機1505和1510彼此連接并連接到外部網(wǎng)絡(luò)1520的邏輯路由器1515。第一邏輯交換機1505包括在范圍10.0.0/24內(nèi)的IP地址,并且第二邏輯交換機1510包括在范圍10.0.1/24內(nèi)的IP地址。邏輯路由器1515包括連接到外部網(wǎng)絡(luò)1520的四個端口。第二邏輯網(wǎng)絡(luò)1525包括將兩個邏輯交換機1530和1535彼此連接并連接到外部網(wǎng)絡(luò)1520的邏輯路由器1540。第一邏輯交換機1530包括在范圍11.0.0/24內(nèi)的IP地址,并且第二邏輯交換機1535包括在范圍11.0.1/24內(nèi)的IP地址。邏輯路由器1540包括連接到外部網(wǎng)絡(luò)1520的三個端口。在這種情況下,第一和第二邏輯網(wǎng)絡(luò)1500和1525屬于不同的租戶。

圖15的底部部分示出了這些網(wǎng)絡(luò)在受管理網(wǎng)絡(luò)1550中的物理實現(xiàn),其類似于圖10中所示的邏輯網(wǎng)絡(luò)1000的物理實現(xiàn)。為簡單起見,VM主機1545在這個圖中被共同表示為單個框。雖然該圖指示網(wǎng)關(guān)主機的每個MFE和VM主機1545之間的單個隧道,但是普通技術(shù)人員將認(rèn)識到,在一些實施例中,每個網(wǎng)關(guān)主機具有到托管邏輯網(wǎng)絡(luò)的VM的單獨機器的眾多單獨隧道。

受管理網(wǎng)絡(luò)1550中實現(xiàn)這兩個邏輯網(wǎng)絡(luò)1500和1525的部分包括四個網(wǎng)關(guān)主機1555-1570。在這三個網(wǎng)關(guān)主機1555、1560、1570上,實現(xiàn)用于邏輯路由器1515和邏輯路由器1540二者的邏輯端口的命名空間操作。即,網(wǎng)關(guān)主機1555既托管為邏輯路由器1515實現(xiàn)到外部網(wǎng)絡(luò)的第一連接的命名空間1557又托管為邏輯路由器1540實現(xiàn)到外部網(wǎng)絡(luò)的第一連接的命名空間1559。網(wǎng)關(guān)主機1560既托管為邏輯路由器1515實現(xiàn)到外部網(wǎng)絡(luò)的第二連接的命名空間1562又托管為邏輯路由器1540實現(xiàn)到外部網(wǎng)絡(luò)的第二連接的命名空間1564。網(wǎng)關(guān)主機1570既托管為邏輯路由器1515實現(xiàn)到外部網(wǎng)絡(luò)的第三連接的命名空間1572又托管為邏輯路由器1540實現(xiàn)到外部網(wǎng)絡(luò)的第三連接的命名空間1574。最后,網(wǎng)關(guān)主機1565僅托管為邏輯路由器1515實現(xiàn)到外部網(wǎng)絡(luò)的第四連接的單個命名空間1567(至少當(dāng)考慮這兩個邏輯網(wǎng)絡(luò)的實現(xiàn)時–網(wǎng)關(guān)主機可以具有用于其它未示出的邏輯網(wǎng)絡(luò)的命名空間)。因此,在一些實施例中,不同的邏輯路由器可以具有不同數(shù)量的面向外部網(wǎng)絡(luò)的端口,如由管理員配置確定的。此外,網(wǎng)關(guān)主機1555-1570中每一個連接到僅單個外部物理路由器1575。

圖16示出了在七個命名空間1557-1574中由控制器集群1600指配BGP守護進程,類似于圖11中所示的指配。但是,在這種情況下,控制器集群為實現(xiàn)用于邏輯路由器1515和1540二者的連接的命名空間生成BGP配置數(shù)據(jù)。在諸如圖3中所示的使用控制器的分層網(wǎng)絡(luò)的一些實施例中,控制器集群1600包括生成用于兩個不同邏輯路由器的BGP配置的兩個不同邏輯控制器。然后,這兩個不同的邏輯控制器將都把生成的配置數(shù)據(jù)發(fā)送到物理控制器的同一集合,用于分發(fā)到網(wǎng)關(guān)主機。管理網(wǎng)關(guān)主機1555的物理控制器將從兩個邏輯控制器接收數(shù)據(jù),以分發(fā)到網(wǎng)關(guān)主機1555。

即使同一控制器為兩個BGP配置都生成數(shù)據(jù),在一些實施例中,控制器也在單獨的事務(wù)中分發(fā)這種數(shù)據(jù)。因此,與定義命名空間1559和其BGP配置的數(shù)據(jù)分開,網(wǎng)關(guān)主機1555接收定義命名空間1557和其BGP配置的數(shù)據(jù)。如所示出的,這些配置可以指定同一鄰居路由器,但以不同的前綴通告。在一些實施例中,BGP鄰居被存儲為網(wǎng)關(guān)主機上的全局信息,供在主機上的各種命名空間中運行的所有BGP守護進程使用。即,網(wǎng)關(guān)主機具有到其的連接的每個外部路由器將是在網(wǎng)關(guān)主機上操作的BGP的所有實例的對等體。在其它實施例中,對等是在每個命名空間(每個L3網(wǎng)關(guān))級別上確定的,并且特定主機上的一些BGP守護進程將與路由器對等,而其它的不對等。

圖17概念性地示出了,一旦在各種命名空間中運行的守護進程已建立與路由器的相鄰性,就由各個BGP守護進程發(fā)送到外部路由器1575的BGP Update分組。這些分組類似于上面參考圖12描述的那些。其結(jié)果是,路由器1575將具有用于被發(fā)送到在范圍10.0.0/24和10.0.1/24內(nèi)的IP地址的分組的四個相同成本的選項,以及用于被發(fā)送到在范圍11.0.0/24和11.0.1/24內(nèi)的IP地址的分組的三個相同成本的選項。

圖18概念性地示出由進入受管理網(wǎng)絡(luò)1550的三個分組采取的路徑。第一分組1805和第二分組1810都具有10.0.1.1的目的地IP地址。但是,雖然具有相同的目的地,但這些分組可以具有不同的附加特性(例如,源IP地址、源和目的地傳輸端口號、傳輸協(xié)議,等等)。照此,利用其ECMP算法,路由器1575將分組發(fā)送到不同的命名空間(分組的路徑由不同類型的虛線/點線指示)。路由器1575將第一分組1805發(fā)送到在網(wǎng)關(guān)主機1555中的命名空間1557,同時將第二分組1810發(fā)送到在網(wǎng)關(guān)主機1565中的命名空間1567。因此,即使被發(fā)送到相同IP地址的分組也會被不同地路由到網(wǎng)絡(luò)中。但是,一些實施例需要外部路由器使用將來自相同傳輸連接的分組路由到同一網(wǎng)關(guān)的算法。使用基于在源/目的IP地址或者連接5元組的計算服務(wù)于這一目的。

除了被發(fā)送到網(wǎng)關(guān)主機1555的分組1805,外部路由器1575還將具有目的地IP地址11.0.1.1的分組1815發(fā)送到這個網(wǎng)關(guān)主機。這第三個分組1815由位于網(wǎng)關(guān)主機1555的MFE發(fā)送到另一命名空間1559,該另一命名空間將分組路由回MFE,進行邏輯第一跳處理。在一些實施例中,MFE通過目的地MAC地址區(qū)分分組,如上所述。

這部分提到不同類型的幾個分組。術(shù)語“分組”在這里以及貫穿本申請被用來指以特定的格式跨網(wǎng)絡(luò)被發(fā)送的位的集合。本領(lǐng)域普通技術(shù)人員將認(rèn)識到,術(shù)語“分組”可在本文中被用來指可以跨網(wǎng)絡(luò)被發(fā)送的位的各種格式化集合,諸如以太網(wǎng)幀、TCP段、UDP數(shù)據(jù)報、IP分組,等等。

V.作為路由服務(wù)器的控制器

以上各部分描述了網(wǎng)絡(luò)控制系統(tǒng),其中網(wǎng)絡(luò)控制器生成用于邏輯路由器實現(xiàn)的BGP配置,然后將那個配置發(fā)送到既執(zhí)行用于網(wǎng)絡(luò)的入口和出口路由又執(zhí)行到外部網(wǎng)絡(luò)中一個或多個路由器的路由通告的網(wǎng)關(guān)。但是,在一些實施例中,控制器或控制器集群具有到外部路由器的直接連接,并充當(dāng)路由服務(wù)器。即,除了生成配置數(shù)據(jù)以便讓受管理網(wǎng)絡(luò)實現(xiàn)邏輯網(wǎng)絡(luò)(例如,BGP配置數(shù)據(jù)、用于L3網(wǎng)關(guān)的路由表、用于MFE的流條目,等等),控制器還向外部網(wǎng)絡(luò)中的一個或多個路由器通告路由,由此防止這個流量占用網(wǎng)關(guān)MFE的數(shù)據(jù)路徑中的帶寬。

一些實施例的控制器將BGP更新發(fā)送到外部路由器,其不是將分組的源識別為用于通告的前綴的下一跳,而是代替地將實現(xiàn)L3網(wǎng)關(guān)的命名空間之一識別為下一跳。此外,在一些實施例中,控制器從路由器接收BGP分組,它可以使用其來補充用于一個或多個邏輯路由器的路由表。

圖19概念性地示出了用于為邏輯網(wǎng)絡(luò)生成BGP配置數(shù)據(jù)、然后通過生成該數(shù)據(jù)的控制器中的BGP服務(wù)實現(xiàn)那個配置數(shù)據(jù)的一些實施例的過程1900。在一些實施例中,過程1900的部分由控制器中的表映射引擎和/或路由生成引擎執(zhí)行,而該過程的其它部分由控制器中的BGP應(yīng)用執(zhí)行??刂破魃葿GP配置,但是隨后將其提供給在內(nèi)部運行的模塊,而不是將該配置分發(fā)到運行BGP守護進程的網(wǎng)關(guān)主機。

如所示出的,過程1900開始于(在1905處)接收創(chuàng)建具有連接到外部網(wǎng)絡(luò)的一個或多個端口的邏輯路由器的指令。這些指令可以是網(wǎng)絡(luò)管理員設(shè)計包括邏輯路由器的邏輯網(wǎng)絡(luò)(例如,通過云管理應(yīng)用,該云管理應(yīng)用通過控制器API經(jīng)過邏輯網(wǎng)絡(luò)配置)的結(jié)果。在一些實施例中,創(chuàng)建邏輯路由器的指令具體地指示到外部網(wǎng)絡(luò)的連接應(yīng)當(dāng)利用BGP或另一協(xié)議來實現(xiàn),用于路由器對等和路由通告。在其它實施例中,這個能力對具有到外部網(wǎng)絡(luò)的至少一個連接的所有邏輯路由器自動啟用。

接下來,過程(在1910處)為連接到邏輯網(wǎng)絡(luò)的每個端口選擇網(wǎng)關(guān)主機機器。一些實施例將每個端口分配到不同的網(wǎng)關(guān)主機,而其它實施例允許多個端口(以及因此托管路由表的多個命名空間)在單個網(wǎng)關(guān)主機上創(chuàng)建。在一些實施例中,網(wǎng)關(guān)主機是依據(jù)集群或故障域來布置的。在一些實施例中,這些集群可以是受管理網(wǎng)絡(luò)中物理地一起定位的主機機器的集合,并且因此更有可能全都一起發(fā)生故障(例如,由于架頂式交換機的頂部掉落、電源問題等等)。不同實施例可以相對于集群不同地將網(wǎng)關(guān)分配給主機機器。例如,一些實施例只為特定的邏輯路由器每集群分配一個網(wǎng)關(guān),而其它實施例將用于邏輯路由器的全部網(wǎng)關(guān)分配給同一集群。還有的其它實施例可以將網(wǎng)關(guān)分配給若干個不同的集群,但是允許兩個或更多個網(wǎng)關(guān)在單個集群內(nèi)。

此外,在一些實施例中,網(wǎng)關(guān)主機機器可以基于那些網(wǎng)關(guān)主機被用于的功能被分配給不同的組。例如,在物理受管理網(wǎng)絡(luò)中,一些實施例使用第一組網(wǎng)關(guān)主機用于提供邏輯服務(wù)(例如,DHCP、元數(shù)據(jù)代理)并且第二組網(wǎng)關(guān)主機用于L3網(wǎng)關(guān)。每個組可以橫跨網(wǎng)關(guān)主機的幾個集群,由此允許處理器從幾個集群(即,故障域)選擇在第二組內(nèi)的網(wǎng)關(guān)主機機器。

一些實施例允許管理員指定控制器向其分配邏輯路由器的每個邏輯端口的集群,并且控制器處理那個集群內(nèi)實際網(wǎng)關(guān)主機的選擇。因此,管理員可以指定將兩個邏輯端口分配給第一集群中的網(wǎng)關(guān)、在第二集群中的四個網(wǎng)關(guān),并且在第三集群中的再多兩個網(wǎng)關(guān)。然后,控制器將每個邏輯端口分配給它選定的集群中的特定網(wǎng)關(guān)主機。對于這種分配,一些實施例使用負載平衡技術(shù),諸如計算邏輯路由器或端口的屬性(例如,由控制器分配的UUID)的散列函數(shù)對集群中網(wǎng)關(guān)主機的數(shù)目取模。這有效地隨機(盡管算法本身是確定的)將邏輯路由器端口分配給集群內(nèi)的網(wǎng)關(guān)主機,并且因此從長遠來看跨網(wǎng)關(guān)主機負載平衡L3網(wǎng)關(guān)。

一些其它實施例可以使用其它技術(shù)來跨集群中的主機負載平衡L3網(wǎng)關(guān)。例如,不是使用散列算法在集群中的所有網(wǎng)關(guān)主機之間進行選擇,而是一些實施例在僅僅具有最少量的當(dāng)前在操作的邏輯路由器的那些網(wǎng)關(guān)之間進行選擇,并且用網(wǎng)關(guān)的這個較小數(shù)目對散列函數(shù)的結(jié)果取模。其它實施例分析每個網(wǎng)關(guān)上的邏輯路由器的數(shù)目和網(wǎng)關(guān)的操作負載(例如,基于經(jīng)特定的時間幀被處理的分組的數(shù)目),以便確定特定的邏輯路由器應(yīng)當(dāng)被分配給哪個網(wǎng)關(guān)主機。

接下來,過程1900(在1915處)為VM主機和選定的網(wǎng)關(guān)主機機器上的MFE都生成流條目,以便以分布式方式實現(xiàn)邏輯路由器并且在受管理網(wǎng)絡(luò)中轉(zhuǎn)發(fā)分組,以及處理進入或離開網(wǎng)絡(luò)的分組,并且為路由表生成數(shù)據(jù)元組,用于處理實現(xiàn)連接到外部網(wǎng)絡(luò)的每個邏輯端口的L3網(wǎng)關(guān)中的分組。這各種流條目和路由表數(shù)據(jù)元組在上面參考例如圖5詳細描述過了。

然后,該過程(在1920處)將生成的數(shù)據(jù)元組和/或流條目分發(fā)到各個主機機器。在一些實施例中,兩種類型的數(shù)據(jù)(流條目和路由表數(shù)據(jù)元組)經(jīng)由不同的協(xié)議分發(fā)。一些實施例經(jīng)由諸如OpenFlow的第一協(xié)議將流條目分發(fā)到VM主機和網(wǎng)關(guān)主機二者,而經(jīng)由諸如OVSDB的第二協(xié)議將路由表數(shù)據(jù)元組分發(fā)到網(wǎng)關(guān)主機。在一些實施例中使用的OVSDB協(xié)議還攜帶用于MFE的配置信息(用于VM主機和網(wǎng)關(guān)主機兩者)。

除了生成和分發(fā)數(shù)據(jù)用于在網(wǎng)絡(luò)中分組轉(zhuǎn)發(fā)的指配,一些實施例的控制器還負責(zé)生成路由協(xié)議(例如,BGP)配置并處理與外部路由器的路由信息的交換。照此,過程1900(在1925處)為連接到外部網(wǎng)絡(luò)的每個邏輯端口(即,每個L3網(wǎng)關(guān))識別與其對等的(一個或多個)外部網(wǎng)絡(luò)路由器的地址(以及其它信息)。在一些實施例中,管理員輸入用于每個邏輯端口的這種數(shù)據(jù),并且處理確保外部路由器被正確連接到網(wǎng)關(guān)主機(或者,例如,網(wǎng)關(guān)主機連接到其的架頂式交換機的頂部)。在其它實施例中,網(wǎng)絡(luò)控制器基于其存儲的網(wǎng)絡(luò)狀態(tài)信息自動地確定每個網(wǎng)關(guān)主機連接到其的外部路由器的集合,并且使用這些作為與L3網(wǎng)關(guān)對等的外部網(wǎng)絡(luò)路由器。在一些路由服務(wù)器實施例中,管理員還確??刂破髂軌蚺c外部路由器連接。在各種不同的實施例中,(一個或多個)控制器經(jīng)由直接連接、通過受管理網(wǎng)絡(luò)中的其它機器(例如,網(wǎng)關(guān)或其它主機機器)等連接到路由器。

通過為每個邏輯端口識別出外部路由器,該過程(在1930處)在控制器上利用識別出的外部路由器、邏輯網(wǎng)絡(luò)配置和選定的主機機器生成并安裝BGP配置。在一些實施例中,控制器實例化用于它對其充當(dāng)路由服務(wù)器的每個L3網(wǎng)關(guān)的單獨BGP過程。因此,如果邏輯路由器被定義為具有面朝外部網(wǎng)絡(luò)的三個端口,則控制器實例化三個BGP過程(例如,上述BGP守護進程,或者不同的BGP應(yīng)用),用于通告用于三個網(wǎng)關(guān)中每一個的路由。在其它實施例中,控制器實例化為實現(xiàn)用于邏輯路由器的端口的所有網(wǎng)關(guān)執(zhí)行路由通告的單個BGP過程。在一些此類實施例中,單個BGP過程為由控制器管理的所有邏輯路由器(例如,用于多個不同的邏輯網(wǎng)絡(luò))處理路由通告。

為了生成用于特定邏輯路由器的BGP配置,控制器(例如,控制器中的表映射引擎)識別用于附連到邏輯路由器的邏輯交換機的CIDR前綴,因為這些是作為路由服務(wù)器的控制器將通告給外部路由器的前綴(這將對每個網(wǎng)關(guān)是相同的)。此外,控制器使用對網(wǎng)關(guān)主機機器的選擇用于BGP配置,以及為將在網(wǎng)關(guān)主機機器上運行的命名空間生成的信息。控制器上的BGP過程將發(fā)出通告這些命名空間的分組(而不是其本身)作為用于被通告的路由的實際的(一個或多個)下一跳,并且因此必須能夠提供關(guān)于命名空間的必需數(shù)據(jù)(例如,自主系統(tǒng)編號、路由器標(biāo)識符,等等)。此外,配置需要為每個命名空間識別與其交換路由信息的外部路由器。在一些情況下,命名空間到外部路由器的連接可以類似于圖10中的那些(即,不同的L3網(wǎng)關(guān)用于連接到不同外部路由器集合的邏輯路由器),在這種情況下,控制器不能簡單地向每個外部路由器通告下一跳目的地的相同集合。代替地,控制器存儲用于每個下一跳L3網(wǎng)關(guān)的的鄰居列表,使得其可以將分組發(fā)送到通告特定L3網(wǎng)關(guān)的這些鄰居當(dāng)中每一個作為到邏輯網(wǎng)絡(luò)的路由的下一跳。

在一些實施例中,控制器生成用于(一個或多個)BGP實例的配置文件,或幾個配置文件。這些配置文件可以類似于由上述命名空間守護進程生成的文件??刂破髟贐GP過程可以訪問這些文件并加載它們的配置的位置存儲配置文件。在這個時候,控制器可以開始充當(dāng)路由服務(wù)器來聯(lián)系外部路由器。

照此,過程1900(在1935處)打開,或嘗試打開,與在配置中識別出的鄰居外部路由器的(一個或多個)BGP會話。如在前一部分中所描述的內(nèi)聯(lián)模型中那樣,幾個BGP會話被起動,每個BGP會話作為其自己的獨立狀態(tài)機來操作。例如,如果邏輯網(wǎng)絡(luò)包括面對外部網(wǎng)絡(luò)的三個端口(以及因此三個網(wǎng)關(guān)),其中每一個連接到兩個不同的外部路由器,則在一些實施例中控制器將發(fā)起六個單獨的BGP會話。在其它實施例中,控制器對每個外部路由器發(fā)起僅一個BGP會話,并且發(fā)送指定用于通告給外部路由器的路由的幾種不同下一跳選項的Update。這個過程1900假設(shè)為每個BGP會話建立相鄰性–如果BGP過程未能打開與特定路由器的會話,則在一些實施例中控制器在過渡到操作1940之前繼續(xù)嘗試這樣做。

利用BGP配置數(shù)據(jù),過程(在1940處)為每個建立的BGP會話生成分組。在一些實施例中,這些分組是識別已知的可達前綴、用于那些前綴的下一跳目的地以及分組為到達每個前綴必需經(jīng)過的自主系統(tǒng)的列表的標(biāo)準(zhǔn)的BGP Update分組。在這種情況下,發(fā)送Update分組的控制器不是下一跳–分組代替地識別其中一個L3網(wǎng)關(guān)作為下一跳。對于到邏輯交換機的路由,BGP分組通告子網(wǎng)(例如,10.1.1/24)以及僅單個(L3網(wǎng)關(guān)所屬的)自主系統(tǒng)編號,因為,一旦到達L3網(wǎng)關(guān),分組就不必為了到達VM主機而被發(fā)送到任何其它自主系統(tǒng)。

對于每個生成的分組,該過程(在1945處)將從控制器生成的分組發(fā)送到目的地物理路由器。如上面所提到的,這個連接可被實現(xiàn)為控制器和外部路由器之間的直接連接,或者可以行進通過受管理網(wǎng)絡(luò)的部分(例如,網(wǎng)關(guān),等等)。如果控制器上的BGP過程建立與用于三個L3網(wǎng)關(guān)下一跳的三個不同物理路由器的相鄰性,則該過程將把三個不同的BGP Update分組各自發(fā)送到三個不同的目的地。此外,控制器可能充當(dāng)用于幾個不同的邏輯網(wǎng)絡(luò)的路由服務(wù)器,在這種情況下,控制器還發(fā)送通告完全不同的路由的幾個不同的Update分組。

圖20-22概念性示出了將控制器用作為為邏輯網(wǎng)絡(luò)通告到外部路由器的路由的路由服務(wù)器的例子。圖20示出了邏輯網(wǎng)絡(luò)2000和在受管理網(wǎng)絡(luò)2025中那個邏輯網(wǎng)絡(luò)的物理實現(xiàn)。如該圖的上半部分中所示,邏輯網(wǎng)絡(luò)2000類似于前一部分中例子的邏輯網(wǎng)絡(luò)1000來配置,其中單個邏輯路由器2015連接兩個邏輯交換機2005和2010。第一邏輯交換機2005包括在子網(wǎng)12.0.0/24中的IP地址,并且第二邏輯交換機2010包括在子網(wǎng)12.0.1/24中的IP地址。此外,邏輯路由器2015包括連接到外部網(wǎng)絡(luò)2020的三個端口,對于該外部網(wǎng)絡(luò),利用控制器作為路由服務(wù)器的路由通告被激活。

圖20的底部部分示出了邏輯網(wǎng)絡(luò)2000的物理實現(xiàn)。為簡單起見,VM主機2030在這個圖中被共同表示為單個框,如在上面的圖15中。連接到外部網(wǎng)絡(luò)2020的邏輯路由器2015的三個端口被實現(xiàn)為分別在網(wǎng)關(guān)主機2035-2045上操作的命名空間2050-2060中的L3網(wǎng)關(guān)。在這種情況下,三個網(wǎng)關(guān)主機各自連接到相同的單個外部路由器2065,以便發(fā)送和接收進入和退出邏輯網(wǎng)絡(luò)的分組。

但是,不像先前的例子,命名空間2050-2060不操作BGP守護進程或任何其它路由協(xié)議應(yīng)用,僅運作來處理進入和外出的分組。相反,控制器集群2070操作成(i)向主機機器2030-2045提供指配數(shù)據(jù)和(ii)作為路由服務(wù)器操作,以與外部路由器2065交換路由信息。在這個圖中,控制器集群2070和主機機器2030-2045之間的虛線指示控制路徑連接,而實線(網(wǎng)關(guān)2035-2045和路由器2065之間、網(wǎng)關(guān)2035-2045和VM主機2030之間,以及控制器集群2070和路由器2065之間)指示數(shù)據(jù)路徑連接。

圖21概念性地示出了由控制器集群2070發(fā)送的一些控制和數(shù)據(jù)路徑數(shù)據(jù),以便實現(xiàn)邏輯路由器2015。如圖所示,控制器集群2070向網(wǎng)關(guān)主機2035-2045分發(fā)邏輯路由器配置數(shù)據(jù)2105(例如,作為定義用于命名空間的路由表的數(shù)據(jù)元組、作為用于MFE的流條目,等等)。在一些實施例中,控制器集群在兩個通道中發(fā)送這種數(shù)據(jù),其中用于MFE的流條目經(jīng)由第一協(xié)議(例如,OpenFlow)發(fā)送并且定義命名空間和用于命名空間的路由表的數(shù)據(jù)元組經(jīng)由第二協(xié)議(例如,OVSDB)發(fā)送。一些實施例的控制器集群通過控制器的層次分發(fā)邏輯路由器配置數(shù)據(jù)2105,其中單個邏輯控制器生成該數(shù)據(jù)并將數(shù)據(jù)分發(fā)到管理并直接向三個網(wǎng)關(guān)主機2045提供數(shù)據(jù)的各種物理控制器。

此外,控制器集群2070將三個單獨的BGP分組發(fā)送到外部網(wǎng)絡(luò)路由器2065。一些實施例建立與外部路由器2065的三個單獨的會話(控制器對其充當(dāng)路由服務(wù)器的每個網(wǎng)關(guān)有一個),而其它實施例作為單個會話的一部分發(fā)送三個BGP Update。這些BGP分組各自(i)通告CIDR前綴12.0.0/24和12.0.1/24、(ii)對每個前綴指示用來到達由該前綴定義的范圍內(nèi)的地址的自主系統(tǒng)的有序列表(在大多數(shù)情況下,這對于邏輯網(wǎng)絡(luò)將是單個自主系統(tǒng)),以及(iii)識別用于被通告的前綴的下一跳。在一些實施例中,僅這個下一跳在三個分組之間變化,因為這識別不同的網(wǎng)關(guān)。

作為接收到這三個分組的結(jié)果,物理路由器2065更新其路由表,以包括用于在所識別出的IP地址范圍(12.0.0/24和12.0.1/24)內(nèi)的分組的三種可能的相同成本的下一跳。假設(shè)路由器2065具有ECMP能力,它將在主機2035-2045上的三個L3網(wǎng)關(guān)之間散布用于這些IP范圍的流量。圖22概念性地示出了由進入受管理網(wǎng)絡(luò)2025的幾個分組2205和2210采取的路徑。兩個分組都由邏輯路由器2065接收,并且由相同的轉(zhuǎn)發(fā)信息庫條目處理。這個條目聲明使用ECMP算法在用于分組的三種可能的下一跳(L3網(wǎng)關(guān))之間作出決定。其結(jié)果是,路由器將第一分組2205發(fā)送到網(wǎng)關(guān)主機2040上的命名空間2055并且將第二分組2210發(fā)送到到網(wǎng)關(guān)主機2045上的命名空間2060。MFE和命名空間如上面在前一部分中所述的那樣處理分組,以便將分組轉(zhuǎn)發(fā)到目的地虛擬機。

圖23概念性地示出了對邏輯網(wǎng)絡(luò)充當(dāng)路由服務(wù)器的一些實施例的控制器2300的軟件體系架構(gòu)。如圖所示,控制器2300包括輸入接口2305、表映射狀態(tài)計算模塊2310、主機分配模塊2315、分發(fā)接口2320、BGP服務(wù)2325,以及外部網(wǎng)絡(luò)接口2330。此外,網(wǎng)絡(luò)控制器2300包括在一些實施例中存儲表映射狀態(tài)計算模塊的輸入和/或輸出的一個或多個狀態(tài)存儲數(shù)據(jù)庫2335。

一些實施例的輸入接口2305從一個或多個用戶接收輸入,以定義邏輯網(wǎng)絡(luò)(例如,通過邏輯交換機、邏輯路由器、中間件、網(wǎng)關(guān)連接到外部網(wǎng)絡(luò)的VM的集合,等等)。例如,用戶可以定義邏輯網(wǎng)絡(luò),諸如如上所述在圖20中示出的。在一些實施例中,在輸入接口接收到的請求依據(jù)由用戶輸入(或選擇)的源和目的地MAC地址指定邏輯端口。

當(dāng)輸入接口2305接收到邏輯網(wǎng)絡(luò)的規(guī)范時,一些實施例的接口將這個規(guī)范變換成定義邏輯網(wǎng)絡(luò)的邏輯控制平面數(shù)據(jù),并將這個數(shù)據(jù)傳遞到表映射狀態(tài)計算模塊2310。在一些實施例中,輸入接口2305將這個邏輯控制平面數(shù)據(jù)讀到狀態(tài)計算模塊2310的輸入表中。一些實施例的表映射狀態(tài)計算模塊2310包括具有輸入表和輸出表的集合的表映射引擎,并且根據(jù)規(guī)則集將輸入表中的記錄映射到輸出表中的記錄。更具體而言,一些實施例將邏輯控制平面數(shù)據(jù)變換成邏輯轉(zhuǎn)發(fā)平面數(shù)據(jù)并且隨后將邏輯轉(zhuǎn)發(fā)平面數(shù)據(jù)變換成可被向下傳遞到實現(xiàn)邏輯網(wǎng)絡(luò)的MFE的通用或定制物理控制平面數(shù)據(jù)。一些實施例的表映射狀態(tài)計算模塊2310使用nLog,并且在美國公布2013/0058228中更詳細地描述,其通過引用被結(jié)合于此。

除了生成物理控制平面數(shù)據(jù),在一些實施例中表映射狀態(tài)計算模塊2310還生成其它數(shù)據(jù)元組,諸如用于路由表的那些,以及BGP配置數(shù)據(jù)。如上所述,狀態(tài)計算模塊可以使用由主機分配模塊2315為托管網(wǎng)關(guān)選擇的主機的集合、連接到邏輯網(wǎng)絡(luò)的VM的IP地址范圍以及通過輸入接口輸入的關(guān)于(一個或多個)外部路由器的信息來計算BGP配置數(shù)據(jù)元組。

在一些實施例中,表映射狀態(tài)計算模塊2310在(一個或多個)狀態(tài)存儲數(shù)據(jù)庫2335中存儲其輸出狀態(tài)。在一些實施例中,這個數(shù)據(jù)庫2335存儲MAC地址到邏輯端口綁定、由表映射狀態(tài)計算模塊2335輸出的物理控制平面數(shù)據(jù)、路由表數(shù)據(jù)元組、BGP配置信息,以及其它數(shù)據(jù)。

在一些實施例中,主機分配模塊2315使用散列函數(shù)或其它算法來選擇用于邏輯網(wǎng)絡(luò)的網(wǎng)關(guān)主機?;谟蔂顟B(tài)計算模塊2310提供的信息,主機分配模塊2315確定網(wǎng)關(guān)主機的集合,并將這個選擇返回到狀態(tài)計算模塊。例如,在一些實施例中,基于邏輯網(wǎng)絡(luò)配置輸入,狀態(tài)計算模塊2310指定特定的邏輯路由器將具有位于網(wǎng)關(guān)主機集群的特定集合中的特定數(shù)量的L3網(wǎng)關(guān)。狀態(tài)計算模塊2310請求主機分配模塊2315選擇特定集群中的特定網(wǎng)關(guān)主機、狀態(tài)計算模塊在生成狀態(tài)和BGP配置時所使用的信息。

如所示出的,控制器2300通過其MFE接口2320將數(shù)據(jù)分發(fā)到主機機器(VM主機和網(wǎng)關(guān)主機)。通過這個接口,控制器在主機機器向MFE、L3網(wǎng)關(guān)等分發(fā)物理控制平面數(shù)據(jù)、路由表和配置數(shù)據(jù)元組等。在一些實施例中,接口是到主機機器的直接連接,而在其它實施例中,控制器2300是將所生成的數(shù)據(jù)分發(fā)到物理控制器的集合的邏輯控制器。此外,在內(nèi)聯(lián)模型實施例中,其中BGP服務(wù)在網(wǎng)關(guān)而不是控制器中操作,控制器使用這個接口來分發(fā)BGP配置數(shù)據(jù)元組。

但是,在所示出的實施例中,BGP服務(wù)2325在控制器上操作。這個BGP服務(wù)從表映射狀態(tài)計算2310接收并安裝配置或配置的集合(例如,作為數(shù)據(jù)元組的集合),然后根據(jù)這種配置與受管理網(wǎng)絡(luò)外面的路由器建立BGP會話。在一些實施例中,BGP服務(wù)2325結(jié)合了命名空間守護進程和BGP守護進程的功能,因為它接收定義配置的數(shù)據(jù)元組、生成可用于實例化BGP過程的配置文件、讀取并安裝配置文件,并建立和參與與外部路由器的BGP會話。

一些實施例的BGP服務(wù)2325通過外部網(wǎng)絡(luò)接口2330打開并建立與外部路由器2340的BGP會話。這個接口在一些實施例中可以是處理IP分組的NIC,類似于網(wǎng)關(guān)和外部路由器之間的連接。通過這個接口,BGP服務(wù)2325將針對其建立的每個BGP會話的更新發(fā)送到外部路由器2340,使得路由器2340能夠經(jīng)由由控制器2300指配的網(wǎng)關(guān)將分組轉(zhuǎn)發(fā)到邏輯網(wǎng)絡(luò)。

除了將進入邏輯網(wǎng)絡(luò)的路由通告到外部路由器,在一些實施例中,作為路由服務(wù)器的控制器集群從外部路由器接收BGP分組并使用這些來更新用于邏輯網(wǎng)絡(luò)的路由表。一般而言,BGP是雙向協(xié)議,因為對等會話中的每個路由器在會話中向另一個路由器發(fā)送其路由信息。照此,一些實施例的(一個或多個)外部路由器將它們的信息發(fā)送到控制器集群,指示可達的IP地址和前綴。如在圖10中,如果一些L3網(wǎng)關(guān)連接到多個路由器,則控制器集群可以對由L3網(wǎng)關(guān)通告的各種IP地址確定哪些外部路由器是用于該IP地址的最佳下一跳。然后,控制器集群可以將這個信息添加到其分發(fā)到L3網(wǎng)關(guān)的路由表。

雖然上述部分描述了使用控制器作為路由服務(wù)器,但是一些實施例代替地使用與處理對于邏輯網(wǎng)絡(luò)的入口和出口流量的網(wǎng)關(guān)主機分開的一個或多個網(wǎng)關(guān)主機機器,作為用于邏輯路由器的路由服務(wù)器。圖24概念性地示出了邏輯網(wǎng)絡(luò)(結(jié)構(gòu)與圖1或圖10的類似)在其中實現(xiàn)并且使用單獨的網(wǎng)關(guān)作為路由服務(wù)器的一些實施例的這種受管理網(wǎng)絡(luò)2400。為簡單起見,這個圖沒有示出附連到邏輯網(wǎng)絡(luò)的VM駐留在其上的主機機器。

邏輯路由器具有連接到外部網(wǎng)絡(luò)的三個端口,并且因此這些端口在三個命名空間2420-2430中的三個網(wǎng)關(guān)2405-2415上實現(xiàn)。這些命名空間作為L3網(wǎng)關(guān)操作,以處理入口和出口流量,但是不操作路由協(xié)議應(yīng)用,并且因此不與外部網(wǎng)絡(luò)路由器2435交換數(shù)據(jù)。代替地,控制器選擇第四網(wǎng)關(guān)主機2440作為用于邏輯網(wǎng)絡(luò)的路由服務(wù)器操作。命名空間2445在網(wǎng)關(guān)主機2440上操作,運行類似于上面在部分II中所示的那些的BGP守護進程。

如所示出的,控制器集群2450生成并(i)向三個網(wǎng)關(guān)主機2405-2415分發(fā)邏輯路由器配置數(shù)據(jù),以便配置命名空間2420-2430中的L3網(wǎng)關(guān)和(ii)向網(wǎng)關(guān)主機2440分發(fā)BGP配置數(shù)據(jù),以便配置在命名空間2440中操作的BGP守護進程。這使得命名空間2445能夠打開與外部路由器2435的一個或多個BGP會話并向外部路由器通告指示三個L3網(wǎng)關(guān)作為用于邏輯網(wǎng)絡(luò)的IP地址的可能下一跳的路由信息。

VI.電子系統(tǒng)

許多上述特征和應(yīng)用被實現(xiàn)為軟件過程,該軟件過程被指定為一組記錄在計算機可讀存儲介質(zhì)(也被稱為計算機可讀介質(zhì))上的指令。當(dāng)這些指令被一個或多個處理單元(例如,一個或多個處理器、處理器內(nèi)核、或其它處理單元)執(zhí)行時,它們使得這(一個或多個)處理單元執(zhí)行在指令中所指示的動作。計算機可讀介質(zhì)的例子包括,但不限于,CD-ROM、閃存驅(qū)動器、RAM芯片、硬盤驅(qū)動器、EPROM,等等。計算機可讀介質(zhì)不包括無線地或通過有線連接傳遞的載波和電子信號。

在本說明書中,術(shù)語“軟件”是指包括駐留在只讀存儲器中的固件或者可以被讀入到存儲器中用于被處理器處理的存儲在磁儲存裝置中的應(yīng)用。此外,在一些實施例中,多個軟件發(fā)明可以被實現(xiàn)為更大程序的子部分,同時保持明顯的軟件發(fā)明。在一些實施例中,多個軟件發(fā)明也可以被實現(xiàn)為單獨的程序。最后,一起實現(xiàn)本文所描述的軟件發(fā)明的單獨程序的任意組合是在本發(fā)明的范圍之內(nèi)。在一些實施例中,當(dāng)軟件程序被安裝,以在一個或多個電子系統(tǒng)上操作時,該軟件程序定義運行和執(zhí)行該軟件程序的操作的一個或多個特定的機器實現(xiàn)。

圖25概念性地示出了本發(fā)明的一些實施例利用其來實現(xiàn)的電子系統(tǒng)2500。可以使用電子系統(tǒng)2500來執(zhí)行控制、虛擬化或上述操作系統(tǒng)應(yīng)用中的任意個。電子系統(tǒng)2500可以是計算機(例如,臺式計算機、個人計算機、平板計算機、服務(wù)器計算機、大型機、刀片計算機等)、電話、PDA或任何其它種類的電子設(shè)備。這種電子系統(tǒng)包括用于各種其它類型的計算機可讀介質(zhì)的各種類型的計算機可讀介質(zhì)和接口。電子系統(tǒng)2500包括總線2505、(一個或多個)處理單元2510、系統(tǒng)存儲器2525、只讀存儲器2530、永久儲存裝置2535、輸入設(shè)備2525、以及輸出設(shè)備2545。

總線2505統(tǒng)一地表示通信連接電子系統(tǒng)2500的眾多內(nèi)部設(shè)備的所有系統(tǒng)、外設(shè)和芯片組總線。例如,總線2505將(一個或多個)處理單元2510與只讀存儲器2530、系統(tǒng)存儲器2525、及永久儲存裝置2535通信地連接。

從這些各種存儲器單元中,(一個或多個)處理單元2510檢索要執(zhí)行的指令和要處理的數(shù)據(jù),以便執(zhí)行本發(fā)明的過程。(一個或多個)處理單元在不同實施例中可以是單個處理器或多核心處理器。

只讀存儲器(ROM)2530存儲由(一個或多個)處理單元2510和電子系統(tǒng)的其它模塊所需要的靜態(tài)數(shù)據(jù)和指令。另一方面,永久儲存裝置2535是讀和寫存儲器設(shè)備。這個設(shè)備是即使當(dāng)電子系統(tǒng)2500關(guān)閉時也存儲指令和數(shù)據(jù)的非易失性存儲單元。本發(fā)明的一些實施例使用大容量存儲設(shè)備(諸如磁或光盤及其對應(yīng)的盤驅(qū)動器)作為永久儲存裝置2535。

其它實施例使用可移除存儲設(shè)備(諸如軟盤、閃存驅(qū)動器等)作為永久存儲設(shè)備。與永久儲存裝置2535一樣,系統(tǒng)存儲器2525是讀和寫存儲器設(shè)備。但是,與儲存裝置2535不同,系統(tǒng)存儲器是易失性讀和寫存儲器,例如隨機存取存儲器。系統(tǒng)存儲器存儲處理器在運行時需要的一些指令和數(shù)據(jù)。在一些實施例中,本發(fā)明的過程被存儲在系統(tǒng)存儲器2525、永久儲存裝置2535和/或只讀存儲器2530中。從這些各種存儲器單元中,(一個或多個)處理單元2510檢索要執(zhí)行的指令和要處理的數(shù)據(jù),以便執(zhí)行一些實施例的過程。

總線2505還連接到輸入和輸出設(shè)備2525和2545。輸入設(shè)備使用戶能夠傳遞信息和選擇到電子系統(tǒng)的命令。輸入設(shè)備2540包括字母數(shù)字鍵盤和定點設(shè)備(也稱為“光標(biāo)控制設(shè)備”)。輸出設(shè)備2545顯示由電子系統(tǒng)生成的圖像。輸出設(shè)備包括打印機和顯示設(shè)備,諸如陰極射線管(CRT)或液晶顯示器(LCD)。一些實施例包括諸如用作輸入和輸出設(shè)備兩者的觸摸屏的設(shè)備。

最后,如在圖25中所示,總線2505還通過網(wǎng)絡(luò)適配器(未示出)將電子系統(tǒng)2500耦合到網(wǎng)絡(luò)2565。以這種方式,計算機可以是計算機的網(wǎng)絡(luò)(諸如局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)、或內(nèi)聯(lián)網(wǎng)、或諸如互聯(lián)網(wǎng)的網(wǎng)絡(luò)中的網(wǎng)絡(luò))的一部分。電子系統(tǒng)2500的任何或所有組件可以與本發(fā)明結(jié)合使用。

一些實施例包括電子組件,諸如微處理器、在機器可讀或計算機可讀介質(zhì)(可替代地稱為計算機可讀存儲介質(zhì)、機器可讀介質(zhì)或機器可讀存儲介質(zhì))中存儲計算機程序指令的儲存裝置和存儲器。這種計算機可讀介質(zhì)的一些例子包括RAM、ROM、只讀壓縮盤(CD-ROM)、可記錄壓縮盤(CD-R)、可重寫壓縮盤(CD-RW)、只讀數(shù)字多功能盤(例如,DVD-ROM,雙層DVD-ROM)、各種可記錄/可重寫DVD(例如,DVD-RAM、DVD-RW、DVD+RW,等等)、閃存存儲器(例如,SD卡、小型SD卡、微型SD卡等)、磁和/或固態(tài)硬盤驅(qū)動器、只讀和可記錄盤、超密度光盤、任何其它光或磁介質(zhì)、以及軟盤。計算機可讀介質(zhì)可以存儲可由至少一個處理單元執(zhí)行的并且包括用于執(zhí)行各種操作的指令集的計算機程序。計算機程序或計算機代碼的例子包括諸如由編譯器產(chǎn)生的機器代碼,以及包括由計算機、電子組件、或利用解釋器的微處理器執(zhí)行的更高級別代碼的文件。

雖然以上討論主要指執(zhí)行軟件的微處理器或多核處理器,但是一些實施例通過一個或多個集成電路來執(zhí)行,諸如專用集成電路(ASIC)或現(xiàn)場可編程門陣列(FPGA)。在一些實施例中,這種集成電路執(zhí)行在該電路自身上存儲的指令。

如在本說明書中所使用的,術(shù)語“計算機”、“服務(wù)器”、“處理器”、以及“存儲器”都是指電子或其它技術(shù)設(shè)備。這些術(shù)語不包括人或人群。為了本說明書的目的,術(shù)語顯示或正在顯示意味著在電子設(shè)備上顯示。如本說明書中所使用的,術(shù)語“計算機可讀介質(zhì)”、“多個計算機可讀介質(zhì)”和“機器可讀介質(zhì)”被完全限制為以由計算機可讀的形式存儲信息的、有形的、物理的對象。這些術(shù)語不包括任何無線信號、有線下載信號、以及任何其它短暫的信號。

雖然本發(fā)明已經(jīng)參考許多特定細節(jié)進行了描述,但是本領(lǐng)域普通技術(shù)人員將認(rèn)識到,在不脫離本發(fā)明的精神的情況下,本發(fā)明可以以其它特定形式體現(xiàn)。此外,多個圖(包括圖5、8、9和19)概念性地示出了過程。這些過程的特定操作可能沒有以與所示出和描述的確切順序來執(zhí)行。特定操作可能沒有在一個連續(xù)系列的操作中執(zhí)行,并且不同的特定操作可能在不同的實施例中執(zhí)行。此外,過程可以利用若干個子過程來實現(xiàn),或者作為較大宏過程的一部分來實現(xiàn)。因此,本領(lǐng)域普通技術(shù)人員將理解,本發(fā)明不受上述說明性細節(jié)的限制,而是由所附權(quán)利要求來限定。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
兴和县| 龙泉市| 二连浩特市| 纳雍县| 绿春县| 罗源县| 洞头县| 苏尼特右旗| 建宁县| 柳江县| 滨海县| 高雄市| 六枝特区| 呼玛县| 沛县| 汾阳市| 芜湖市| 双桥区| 富阳市| 嘉定区| 凤山市| 颍上县| 赣榆县| 老河口市| 佛冈县| 安吉县| 察雅县| 清水县| 包头市| 嘉义市| 勐海县| 中超| 上犹县| 榆社县| 民乐县| 克什克腾旗| 平舆县| 海丰县| 伊吾县| 大田县| 呼图壁县|