SFC-I=Auth(Sl)?TM(Sl)?TM(S2) SFC-2=Auth(Sl)?LB(S2) SFC-3=Auth(Sl)?TA(Sl) 到此為止,完成了服務(wù)功能鏈到服務(wù)功能實(shí)例鏈的映射,如圖3所示。接下去的工作是 部署服務(wù)功能實(shí)例鏈。
[0042] 第五步服務(wù)功能實(shí)例鏈中的每一個(gè)服務(wù)功能實(shí)例解析為一個(gè)針對多狀態(tài)的網(wǎng)絡(luò) 策略的選擇機(jī)制,每個(gè)網(wǎng)絡(luò)策略對應(yīng)一種網(wǎng)絡(luò)狀態(tài)下的一套網(wǎng)絡(luò)配置。W下是四個(gè)服務(wù)功 能的多狀態(tài)的網(wǎng)絡(luò)策略選擇機(jī)制: 1."用戶認(rèn)證"服務(wù)功能要求只有通過認(rèn)證的"合法"賬戶才可W訪問網(wǎng)段4中的服務(wù) 器。針對多狀態(tài)的網(wǎng)絡(luò)策略的選擇機(jī)制如下(W下代碼采用python編寫)。
[0043] _auth_flows=self.get_policy( ^authenticated')# 獲取賬號的認(rèn)證狀態(tài)。
[0044] =if_(match_auth_flows,self.allow_polixyQ,self.化op) # 如果認(rèn)證通過 則執(zhí)行轉(zhuǎn)發(fā),若認(rèn)證不通過則執(zhí)行丟包。
[0045] Pl; 2. "流量管理"服務(wù)功能要求,對網(wǎng)段1,2, 3中的終端/主機(jī)進(jìn)行流量監(jiān)視,當(dāng)訪問數(shù) 據(jù)服務(wù)器速率過高時(shí)要限制其流量,針對多狀態(tài)的網(wǎng)絡(luò)策略的選擇機(jī)制如下: match_fast_flows=self. get_policy('fast')# 判斷流量是否屬于過大match_slow_flows=self. get_polixy('slow')# 判斷流量是否屬于正常 pi=if_(match_fast_flows, self. fas1:path〇)# 流量過大,禁止訪問數(shù)據(jù)服務(wù)器 p2=if_(match_slow_flows, self. slowpathO)# 流量正常,允許訪問數(shù)據(jù)服務(wù)器 return pl+p2; 3. "負(fù)載均衡"服務(wù)功能要求比較四臺服務(wù)器A,B,C,D的網(wǎng)絡(luò)延時(shí),找到一條延時(shí)最小 的鏈路。針對多狀態(tài)的網(wǎng)絡(luò)策略的選擇機(jī)制是: se;rverA_flows=self.get_dela}ftime('sa')# 獲取服務(wù)器A的延時(shí)se;rverB_flows=self.get_dela}ftime('sb')# 獲取服務(wù)器B的延時(shí) se;rve;rC_flows=self.get_dela}ftime('sc')# 獲取服務(wù)器C的延時(shí) se;rverD_flows=self.get_dela}ftime('sd')# 獲取服務(wù)器D的延時(shí) a=[serverA_flows,serverB_flows,serverC_flows,serverD_flows] a.sort0 se;rve;r_choice=a[: 1] #選取延時(shí)最小的服務(wù)器 pl=if_(serverA_flows=server_choice,self.serverA-policy0) ;# 若最小延時(shí)月良 務(wù)器為A,則將數(shù)據(jù)包轉(zhuǎn)發(fā)到服務(wù)器A上,W下=行類似。
[0046]p2=if_(serverB_flows=server_choice,self.serverB_policy()); p3=if_(serverC_flows=server_choice,self.serverC_policy()); p4=if_(serverD_flows=server_choice,self.serverD_policy()); returnPl+p2+p3+p4; 策略通過se;rverA_flows=self.get_dela}ftime('sa')函數(shù)獲取對應(yīng)的服務(wù)器上的 延時(shí),再通過a.SCXTtQ和se;rve;r_choice=a[:l]函數(shù)獲取延時(shí)最小的服務(wù)器。
[0047] 4."流量審計(jì)"服務(wù)功能審計(jì)訪問數(shù)據(jù)服務(wù)器(10. 20. 9. 1)的數(shù)據(jù)流。來確保數(shù) 據(jù)服務(wù)器的安全。流量管理中的審計(jì)功能不需要多狀態(tài)選擇機(jī)制,故直接確定策略。
[0048]=match(Switch=Sl) &match化StAd化=10. 20. 9.l&SrcAd化=10. 20. 0. 0/16) [fwd(5)] #目標(biāo)地址為數(shù)據(jù)服務(wù)器的數(shù)據(jù)包轉(zhuǎn)發(fā)到5號端口審計(jì)。
[0049] 第六步根控制器根據(jù)當(dāng)前網(wǎng)絡(luò)的狀態(tài),選擇合適的網(wǎng)絡(luò)策略下發(fā)給對應(yīng)的本地控 制器。
[0050]1.根控制器為每個(gè)服務(wù)功能實(shí)例建立一個(gè)"狀態(tài)參數(shù)一闊值"表,如圖4,其中用 戶認(rèn)證,負(fù)載均衡,流量管理=個(gè)服務(wù)功能對應(yīng)的狀態(tài)參數(shù)分別是"認(rèn)證值","最小時(shí)延云 服務(wù)器"和"數(shù)據(jù)服務(wù)器流量"。圖4是S個(gè)服務(wù)功能的"狀態(tài)參數(shù)一闊值"表。最小時(shí) 延云服務(wù)器"為例,闊值為A服務(wù)器時(shí)延最小(SER_A),B服務(wù)器時(shí)延最?。⊿ER_B),C服 務(wù)器時(shí)延最?。⊿ER_C),D服務(wù)器時(shí)延最?。⊿ER_D)。
[0051]"參數(shù)一服務(wù)功能實(shí)例"表。為SI,S2建立的"參數(shù)一服務(wù)功能實(shí)例"表如圖5,圖 6所示。
[0052]"狀態(tài)參數(shù)監(jiān)視表"。如圖7所示。
[0053] 4.查詢"狀態(tài)參數(shù)監(jiān)視表",根控制器通過本地控制器,將每個(gè)服務(wù)功能敏感的網(wǎng) 絡(luò)狀態(tài)參數(shù)和闊值發(fā)送給其實(shí)例相關(guān)的網(wǎng)絡(luò)節(jié)點(diǎn)。比如根控制器通過查詢"狀態(tài)參數(shù)監(jiān)視 表"獲取"用戶認(rèn)證"服務(wù)功能敏感的網(wǎng)絡(luò)參數(shù)是"認(rèn)證值",W及合法與非法兩個(gè)闊值。根 控制器將運(yùn)些信息下發(fā)到網(wǎng)絡(luò)節(jié)點(diǎn)Sl對應(yīng)的1號本地控制器。同理在其他兩個(gè)服務(wù)功能 上也執(zhí)行類似的操作。
[0054] 5.當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生變化,且某參數(shù)匹配闊值時(shí),網(wǎng)絡(luò)節(jié)點(diǎn)通過本地控制器發(fā)送一 個(gè)事件消息給根控制器。例如,當(dāng)數(shù)據(jù)服務(wù)器訪問流量小于2Mbps時(shí),匹配上"<2M"闊值。 網(wǎng)絡(luò)節(jié)點(diǎn)發(fā)送事件消息給根控制器。
[005引 6.當(dāng)根控制器接收到事件消息后,查詢"參數(shù)一服務(wù)功能實(shí)例嗦獲得對應(yīng)的服務(wù) 功能實(shí)例編號,然后從該服務(wù)功能實(shí)例對應(yīng)的策略集合中選擇特定的網(wǎng)絡(luò)策略下發(fā)給對應(yīng) 的本地控制器。比如收到數(shù)據(jù)服務(wù)器訪問流量小于2Mbps觸發(fā)的事件消息后,查表獲得服 務(wù)功能編號為SF3,然后根據(jù)狀態(tài)選擇執(zhí)行"self.SlowpathO"。
[0056] 下面是每個(gè)服務(wù)功能在當(dāng)前狀態(tài)下需要發(fā)到本地控制器的網(wǎng)絡(luò)策略: (1)"用戶認(rèn)證"服務(wù)功能會阻止未通過認(rèn)證的終端/主機(jī)發(fā)出的數(shù)據(jù)包,比如網(wǎng)段1 中IP為10. 20. 4. 5的PC機(jī)無法通過認(rèn)證,該主機(jī)發(fā)出的數(shù)據(jù)包將被丟棄,其余終端/主機(jī) 發(fā)送的數(shù)據(jù)包都能通過。在當(dāng)前狀態(tài)下,"用戶認(rèn)證"業(yè)務(wù)功能將對運(yùn)兩種數(shù)據(jù)包分別執(zhí)行 "self.化op"和"self.allow_policy0 "語句,從而下發(fā)W下策略: match(S;rcA(Mr=10. 20. 0.0/16\(SrcAcMr:10. 20. 4.5)) [fwd(l)] ;# 將源地址為 10. 20. 0. 0/16的S個(gè)網(wǎng)段(除了 10. 20. 4. 5主機(jī))的數(shù)據(jù)包從Sl的端口 1發(fā)送出去。
[0057] (2)"流量管理"服務(wù)功能也會在不同狀態(tài)下為網(wǎng)絡(luò)設(shè)備下發(fā)不同的網(wǎng)絡(luò)設(shè)備 策略。當(dāng)前狀態(tài)下發(fā)現(xiàn)訪問數(shù)據(jù)服務(wù)器(10.20.9. 1)的流量過大,因此只允許網(wǎng)段1 (10. 20. 4. 0/24)或網(wǎng)段3 (10. 20. 6. 0/24)的主機(jī)/終端訪問數(shù)據(jù)服務(wù)器,因此當(dāng)前狀態(tài) 下,"流量管理"服務(wù)功能對源地址是網(wǎng)段2的數(shù)據(jù)包執(zhí)行"化Stpath0",對源地址是網(wǎng)段 1或3的數(shù)據(jù)包執(zhí)行"slowpath0",從而下發(fā)W下策略: match(switch=Sl)fematch(SrcAddr=IO.20.4. 0/24|SrcAddr=IO.20.6.0/24) [fwd(l)]#源地址是網(wǎng)段1和網(wǎng)段3的主機(jī)可W通過SI的端口 1發(fā)送至數(shù)據(jù)服務(wù)器 match(switch=S2)&match(S;rcA(Mr=10.20.4.0/24|S;rcA(Mr=10.20.6.0/24)[fVd(5)] #源地址是網(wǎng)段1和網(wǎng)段3的主機(jī)可W通過S2的端口 5發(fā)送至數(shù)據(jù)服務(wù)器。
[005引(3)"負(fù)載均衡"服務(wù)功能會查找當(dāng)前狀態(tài)下延時(shí)最小的服務(wù)器,并將訪問服務(wù)器 的云實(shí)驗(yàn)室終端連接到運(yùn)個(gè)延時(shí)最小的服務(wù)器上。假如目前狀態(tài)下服務(wù)器D擁有最小延時(shí) 100ms,策略將把云實(shí)驗(yàn)室終端的流量都連接到服務(wù)器D上。在當(dāng)前狀態(tài)下,"負(fù)載均衡"服 務(wù)功能將對普通數(shù)據(jù)包執(zhí)行"self.serverD_policy0 "語句,從而下發(fā)W下策略: match值StAd化=10. 20. 7. 0/24)[fwd(4) ]# 將目標(biāo)地址為 10. 20. 7. 0/24 的數(shù)據(jù)包從S2 的端口 4發(fā)送出去,到服務(wù)器D。
[0059] (4)"流量審計(jì)"服務(wù)功能在Sl上執(zhí)行數(shù)據(jù)包審計(jì)工作,因此下發(fā)P3策略: match(Switch=Sl) &match(DstAcMr=IO. 20. 9. 1 &SrcAcMr=IO. 20. 0. 0/16) [fwd(f5)] 下面我們匯總一下=個(gè)服務(wù)功能下發(fā)給兩個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)的網(wǎng)絡(luò)策略: Auth(Sl):match(SrcAddr=10. 20. 0. 0/16\(SrcAddr: 10. 20. 4. 5)) [fwd(l)] TM(Sl):match(SrcAd化=10. 20. 4. 0/24ISrcAd化=10. 20. 6. 0/24)[fwd(1)] TA(Sl):match值StAddr=IO. 20. 9. 1 &SrcAddr=IO. 20. 0. 0/16)[fwd妨] TM(S2):match(SrcAd化=10. 20. 4. 0/24ISrcAd化=10. 20. 6. 0/24)[fwd巧)] LB(S2):match值StAcMr=IO. 20. 7. 0/24)[fwd(4)] 說明:當(dāng)執(zhí)行Auth(Sl)〉〉TM(Sl)時(shí),"〉〉"前一個(gè)服務(wù)功能的動作[fwd(l)]將改為[fwdOl(Sl))]操作。
[0060] 第屯步,本地控制器對同一網(wǎng)絡(luò)節(jié)點(diǎn)上來自不同服務(wù)功能實(shí)例鏈的實(shí)例進(jìn)行組 合,組合類型有:無沖突,強(qiáng)沖突,弱沖突;組合方式有:串行,分類并行,復(fù)制并行,合并,排 他; 1.本地控制器根據(jù)參與組合的服務(wù)功能的條件和動作來判斷策略組合的類型。無沖 突組合類型:參與組合的服務(wù)功能條件無交集,或者條件有交集且動作一樣。強(qiáng)沖突組合類 型:參與組合的服務(wù)功能條件有交集,且至少一方的動作為丟包。弱沖突組合類型:參與組 合的服務(wù)功能條件有交集,且動作均為不同目的的轉(zhuǎn)發(fā)。
[0061] (1)網(wǎng)絡(luò)節(jié)點(diǎn)Sl上的來自S條服務(wù)鏈的"用戶認(rèn)證"服務(wù)功能條件有交集,動作一 致,屬于無沖突類型。"用戶認(rèn)證"服務(wù)功能和"流量管理"服務(wù)功能條件有交集,交集部分 動作為丟包或轉(zhuǎn)發(fā),屬于強(qiáng)沖突類型。"用戶認(rèn)證"服務(wù)功能和"流量審計(jì)"服務(wù)功能條件有 交集,交集部分轉(zhuǎn)發(fā)動作不一致,屬于弱沖突類型。"流量管理"服務(wù)功能和