一種基于交換機(jī)負(fù)載的域內(nèi)負(fù)載均衡方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種基于交換機(jī)負(fù)載的域內(nèi)負(fù)載均衡 方法。
【背景技術(shù)】
[0002] 網(wǎng)絡(luò)由多個自治域(AutonomousSystem,AS)構(gòu)成,這些自治域內(nèi)部獨立運(yùn)行各自 的路由算法,完成數(shù)據(jù)包的轉(zhuǎn)發(fā)。連接了不同自治域的交換機(jī)位于自治域的邊界,稱為邊界 交換機(jī)。源地址和目的地址不在同一個域的跨域流量通過域內(nèi)路由算法在域內(nèi)轉(zhuǎn)發(fā),從一 個邊界交換機(jī)到達(dá)另一個邊界交換機(jī),然后被轉(zhuǎn)發(fā)到另一個域。
[0003] 目前常用的域內(nèi)路由協(xié)議是開放最短路徑優(yōu)先(OpenShortestPathFirst, 0SPF)協(xié)議,這一協(xié)議為流量提供域內(nèi)最短路徑的轉(zhuǎn)發(fā)。在最短路徑優(yōu)先的選路算法中,負(fù) 載均衡算法通過記錄最短路徑的集合,將流量均分到這些最短路徑上,實現(xiàn)負(fù)載均衡,稱為 等價多路徑(EqualCostMultiPath,ECMP)。這一負(fù)載均衡方法實現(xiàn)簡單,但僅僅基于本 地信息對流量進(jìn)行等價劃分,不能根據(jù)路徑的負(fù)載情況做出及時的調(diào)整。
[0004] 軟件定義網(wǎng)絡(luò)(SDN)是一種新型的網(wǎng)絡(luò)架構(gòu),在這種架構(gòu)中,一個AS由一個 或多個控制器和一組交換機(jī)組成,控制器決定流的轉(zhuǎn)發(fā)策略,并通過控制信道(Control Channel)將策略寫入轉(zhuǎn)發(fā)設(shè)備(支持OpenFlow協(xié)議的交換機(jī))。這些交換機(jī)承擔(dān)數(shù)據(jù)轉(zhuǎn) 發(fā)的功能,選路算法則由控制器來完成。AS中的網(wǎng)絡(luò)信息對于域內(nèi)控制器來說是透明的,控 制器可以根據(jù)域內(nèi)的信息進(jìn)行路由決策。
[0005] 在SDN中,支持OpenFlow協(xié)議的交換機(jī)維護(hù)一個稱為流表的存儲結(jié)構(gòu),流表中保 存了一組流表項,每條流表項包含匹配域、優(yōu)先級、計數(shù)器、指令等信息,用于流量到達(dá)時的 匹配和轉(zhuǎn)發(fā),流表項的計數(shù)器記錄了每條流表項被匹配的次數(shù)。OpenFlow協(xié)議同時支持對 于流表統(tǒng)計信息的查詢,控制器向交換機(jī)發(fā)送查詢請求,交換機(jī)會返回相應(yīng)的消息。交換機(jī) 保存的統(tǒng)計信息范圍包括流表、流表項和端口,其中端口反映了鏈路上的負(fù)載情況。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明的目的在于針對現(xiàn)有技術(shù)的不足,提供一種基于交換機(jī)負(fù)載的域內(nèi)負(fù)載均 衡方法,該方法能夠根據(jù)域內(nèi)交換機(jī)負(fù)載為跨域流量選路,在優(yōu)先保證域內(nèi)流量的情況下, 合理地調(diào)度域間流量,將域間分流到負(fù)載較輕的交換機(jī),最終實現(xiàn)負(fù)載均衡的目的。
[0007] 本發(fā)明的目的是通過以下技術(shù)方案來實現(xiàn)的:一種基于交換機(jī)負(fù)載的域內(nèi)負(fù)載均 衡方法,包括如下步驟:
[0008] (1)計算域內(nèi)交換機(jī)負(fù)載的估計值,該步驟包括以下子步驟:
[0009] (1. 1)控制器通過控制信道,向域內(nèi)的每一個交換機(jī)依次發(fā)送P0RT_STATS_ REQUEST消息,查詢域內(nèi)交換機(jī)每一個端口的統(tǒng)計信息,所述P0RT_STATS_REQUEST消息在 OpenFlow協(xié)議中定義;
[0010] (1. 2)交換機(jī)收到P0RT_STATS_REQUEST消息后,通過控制信道向控制器發(fā)送 PORT_STATS_REPLY消息,所述PORT_STATS_REPLY消息在OpenFlow協(xié)議中定義;控制器在tn時刻收到第i個交換機(jī)的消息,第i個交換機(jī)共有k個端口,記錄交換機(jī)歷史收到的包總 婁
,loac^為第i個交換機(jī)第j個端口歷史收到的包總數(shù),所述歷史為從
交換機(jī)最近一次清空統(tǒng)計數(shù)據(jù)開始,直至、時刻的時間段,
[0011] (1. 3)將交換機(jī)i在時間間隔t內(nèi)的負(fù)載記為 ,所述t為 獲取統(tǒng)計信息的最小間隔,tjPtn_i為相鄰兩次獲取統(tǒng)計信息的時刻;
[0012] (1. 4)每間隔時間間隔T,計算一次交換機(jī)負(fù)載的平均值,當(dāng)前1"時刻交換機(jī)負(fù)載 平均值3 >其中Tm和Tm為相鄰兩次計算平均值的時 刻;
[0013] (1. 5)用指數(shù)平滑法對交換機(jī)負(fù)載進(jìn)行估計,得到交換機(jī)Tm時刻負(fù)載的估計值為 ,,a為平滑指數(shù),aG(〇,1);
[0014] (2)計算域內(nèi)負(fù)載均衡路徑,該步驟包括以下子步驟:
[0015] (2. 1)記錄域內(nèi)每一臺邊界交換機(jī)的編號,并記錄其連接其他域的端口號以及所 連接的域的編號;
[0016] (2.2)對于域內(nèi)每一對連接了不同域的端口對,計算以其中一個端口a所連接的 域A經(jīng)過本域C轉(zhuǎn)發(fā)到另一端口b所在的交換機(jī),再經(jīng)該交換機(jī)轉(zhuǎn)發(fā)到端口b連接的域B 的路徑中所有交換機(jī)的瓶頸負(fù)載,具體如下:
[0017] (2.2. 1)將域內(nèi)所有交換機(jī)的瓶頸負(fù)載X設(shè)為無窮大,即到達(dá)該交換機(jī)的所有路 徑的負(fù)載的最大值為無窮大,將端口a所屬的交換機(jī)s的瓶頸負(fù)載Xs更新為,,并將交換 機(jī)s加入隊列,s的在隊標(biāo)記設(shè)為TRUE;
[0018] (2. 2. 2)當(dāng)隊列不為空時,每次從隊首取一個交換機(jī)記為p,取出交換機(jī)p后將p 的在隊標(biāo)記設(shè)為FALSE ;
[0019] (2. 2. 3)比較X# ,并記錄其較大值記為x;
[0020] (2. 2. 4)對于每一臺與交換機(jī)p相連的交換機(jī)q,如果x<Xq,則更新XqSX,并將 q的上一跳標(biāo)記為P;
[0021] (2. 2. 5)如果交換機(jī)q的在隊標(biāo)記為FALSE且q不是目的端口b所在的交換機(jī),則 將交換機(jī)q加入隊列,并將q的在隊標(biāo)記設(shè)為TRUE;
[0022] (2.2.6)重復(fù)步驟(2.2. 2)_(2. 2. 5),直到隊列為空,得到路徑內(nèi)每個交換機(jī)的瓶 頸負(fù)載;
[0023] (2.3)對于每一對起始端口相同且目的域相同的端口對,找出到達(dá)目的端口瓶頸 負(fù)載最小的路徑,并根據(jù)路徑上每臺交換機(jī)記錄的上一跳交換機(jī)編號記錄整條路徑,該路 徑即為域內(nèi)負(fù)載均衡路徑;
[0024] (3)實現(xiàn)跨域流量的調(diào)度,該步驟包括以下子步驟:
[0025] (3. 1)監(jiān)聽本域交換機(jī)向控制器發(fā)送的PACKET_IN消息,所述PACKET_IN消息在 OpenFlow協(xié)議中定義,如果流量的源地址和目的地址都不是本域,且源地址和目的地址位 于不同域,認(rèn)為這是跨域流量請求,對這條流量進(jìn)行調(diào)度,否則按照域內(nèi)最短路徑為其選 路;
[0026] (3. 2)對于跨域流量請求,尋找域內(nèi)以收到流量請求的端口為起點、有到達(dá)目的域 的路徑的其他端口為終點的域內(nèi)負(fù)載均衡路徑;
[0027] (3. 3)對于域內(nèi)負(fù)載均衡路徑上每一臺交換機(jī),發(fā)送增加流表項命令,其匹配域設(shè) 置為跨域流量的源地址和目的地址,轉(zhuǎn)發(fā)動作設(shè)為從連接路徑下一跳交換機(jī)的端口發(fā)出; 在流表項超時刪除前,該源地址和目的地址的跨域流量都按照步驟3. 2所述的域內(nèi)負(fù)載均 衡路徑轉(zhuǎn)發(fā),從而為跨域流量尋找負(fù)載較輕的轉(zhuǎn)發(fā)路徑,在保證域內(nèi)流量按最短路徑轉(zhuǎn)發(fā) 的同時,實現(xiàn)負(fù)載均衡。
[0028] 本發(fā)明的有益效果是,本發(fā)明根據(jù)域內(nèi)交換機(jī)的統(tǒng)計信息估計交換機(jī)負(fù)載,為跨 域流量尋找負(fù)載較輕的轉(zhuǎn)發(fā)路徑,在保證域內(nèi)流量按最短路徑轉(zhuǎn)發(fā)的同時,實現(xiàn)負(fù)載均衡 的效果。
【附圖說明】
[0029]圖1是跨域流量轉(zhuǎn)發(fā)示意圖;
[0030] 圖2是基于交換機(jī)負(fù)載的域內(nèi)負(fù)載均衡方法的流程圖;
[0031] 圖3是交換機(jī)負(fù)載估計值示意圖;
[0032] 圖4是路徑計算算法執(zhí)行結(jié)果示意圖。
【具體實施方式】
[0033] 下面以圖1所示的拓?fù)錇槔?,描述本發(fā)明。本發(fā)明方法能夠在OpenFlow1. 0或者 OpenFlow1.0以上的更高版本中實現(xiàn)。本發(fā)明一種基于交換機(jī)負(fù)載的域內(nèi)負(fù)載均衡方法, 包括以下步驟:
[0034]步驟1:計算域內(nèi)交換機(jī)負(fù)載的估計值,該步驟包括以下子步驟:
[0035] 1. 1、域A、B、C的控制器分別通過控制信道,向其域內(nèi)的每一個交換機(jī)依次發(fā)送 PORT_STATS_REQUEST消息,查詢域內(nèi)交換機(jī)每一個端口的統(tǒng)計信息,所述P0RT_STATS_ REQUEST消息在OpenFlow協(xié)議中定義;
[0036] 1. 2、交換機(jī)收到P0RT_STATS_REQUEST消息后,通過控制信道向控制器發(fā)送P0RT_ STATS_REPLY消息,所述P0RT_STATS_REPLY消息在OpenFlow協(xié)議中定義;控制器在tn時刻 收到第i個交換機(jī)的消息,第i個交換機(jī)共有4個端口,記錄交換機(jī)歷史收到的包總數(shù):
[0037]
[0038] 1. 3、將交換機(jī)在時間間隔t內(nèi)的負(fù)載記為:
[0039]
[0040]所述t為獲取統(tǒng)計信息