在網(wǎng)絡(luò)場(chǎng)景下铺纽,一個(gè)數(shù)據(jù)流通常需要通過多個(gè)網(wǎng)絡(luò)服務(wù)設(shè)備,例如IDS/IPS叛复,防火墻,LB呜笑,等袖裕,最終才能到達(dá)目的端疾宏。這就是服務(wù)鏈(SFC岩馍, Service Function Chain)最常用的場(chǎng)景双谆。SFC對(duì)于傳統(tǒng)硬件網(wǎng)絡(luò)幌羞,或者SDN(什么讲逛?你還不知道SDN馆类,那看看這吧SDN閑聊)都是很常見的乾巧。但是在傳統(tǒng)網(wǎng)絡(luò)中供璧,SFC存在以下幾個(gè)問題:
1. 受限于網(wǎng)絡(luò)拓?fù)洹D愕木W(wǎng)絡(luò)服務(wù)設(shè)備能不能,怎么擺放很大程度上取決于你的網(wǎng)絡(luò)拓?fù)洹?/p>
2. SFC相對(duì)固定。一旦設(shè)備接好之后乒融,不能輕易改動(dòng)申钩,改動(dòng)涉及到重新布線命迈。并且所有的數(shù)據(jù)流都必須流經(jīng)固定的Chain碍讨。比如說防火墻部署好之后,如果只想讓首包過防火墻蒙秒,其他的包直接進(jìn)入數(shù)據(jù)中心勃黍。這在傳統(tǒng)網(wǎng)絡(luò)中不太可能,一般情況下晕讲,所有的包都會(huì)流經(jīng)防火墻設(shè)備覆获。
3. 擴(kuò)容較為麻煩,已有的拓?fù)湓跀U(kuò)容的時(shí)候必須考慮如何不影響現(xiàn)有業(yè)務(wù)瓢省。
如果是基于SDN弄息,那問題都將迎刃而解。SDN的靈活性勤婚,能使SFC的作用得到更大的發(fā)揮摹量。
之前的文章里說過的,SDN主要提供的服務(wù)可以分為兩類:
Networking Infrastructure:提供網(wǎng)絡(luò)基礎(chǔ)架構(gòu)功能馒胆∮С疲或者說,提供SDN中各個(gè)終端設(shè)備(例如VM)的網(wǎng)絡(luò)連通性功能祝迂。
Networking Service:提供網(wǎng)絡(luò)服務(wù)功能睦尽。向SDN的用戶提供網(wǎng)絡(luò)服務(wù)(Networking As A Service),Load Balance液兽,F(xiàn)irewall骂删,QoS等等,都可以認(rèn)為是網(wǎng)絡(luò)服務(wù)功能四啰。
SFC將會(huì)是實(shí)現(xiàn)Networking Service的一種很靈活的方式宁玫。由云服務(wù)運(yùn)營(yíng)商提供各種各樣的Service Function,由SDN管理SFC柑晒,將Service Function加入到網(wǎng)絡(luò)流量路徑中欧瘪,即能實(shí)現(xiàn)Networking Service(L4-L7)。
接下來看一下SFC里面的幾個(gè)主要概念:
SFC Classifier: 識(shí)別網(wǎng)絡(luò)流量匙赞,并將其分配到不同的SFC佛掖。Classifier可以運(yùn)行在任意設(shè)備上,并且一條SFC中可以有多個(gè)Classifier涌庭,通常情況下芥被,Classifier存在于SFC的頭結(jié)點(diǎn)。SFC Classifier還將給網(wǎng)絡(luò)流量包加上SFC識(shí)別符坐榆。具體的說拴魄,它會(huì)在網(wǎng)絡(luò)包里加上一個(gè)SFC Header,也就是說它會(huì)改變包的結(jié)構(gòu)席镀。這個(gè)Header包含一個(gè)SFC的唯一識(shí)別ID匹中。
SFI(Service Function Instance):一個(gè)Service Function的實(shí)例,可以是個(gè)進(jìn)程豪诲,也可以就是一個(gè)server顶捷。最近很火的NFV也可以認(rèn)為是一個(gè)SFI(2017-04-09糾正,SFI 對(duì)應(yīng)的應(yīng)該是NFV中的VNF概念)屎篱。
SFF(Service Function Forwarder):提供服務(wù)層的轉(zhuǎn)發(fā)服赎。SFF接收帶有SFC Header的網(wǎng)絡(luò)包,利用SFC Header芳室,將網(wǎng)絡(luò)包轉(zhuǎn)發(fā)給相應(yīng)的SFI专肪。在某些場(chǎng)合,SFF也可以不基于SFC Header堪侯,例如基于五元組嚎尤。
SF Proxy:任何不能理解SFC的設(shè)備,在SFC中都必須配合proxy使用伍宦。因?yàn)閭鹘y(tǒng)的SF設(shè)備沒有SFC的概念芽死,proxy將會(huì)把網(wǎng)絡(luò)包中的SFC Header去掉,并把原始的數(shù)據(jù)包轉(zhuǎn)發(fā)給傳統(tǒng)的SF設(shè)備次洼,當(dāng)網(wǎng)絡(luò)包處理完之后关贵,proxy還將負(fù)責(zé)把SFC Header加回到網(wǎng)絡(luò)包中,并發(fā)回到SFC中卖毁。
SFF與SFI的連接:
SFF可以是與SFI獨(dú)立的設(shè)備揖曾,也可以是兩者集成在一起落萎。SFF與SFI的連接方式,可以是以下兩種:
單臂模式(one-armed):在這種模式下炭剪,SFF將網(wǎng)絡(luò)流量包轉(zhuǎn)發(fā)給SFI练链,SFI處理完成之后再轉(zhuǎn)發(fā)回給SFF,由同一個(gè)SFF發(fā)送回SFC奴拦。
串聯(lián)模式(bump-in-the-wire):這種模式下媒鼓,SFI處理完成之后,會(huì)將網(wǎng)絡(luò)流量包轉(zhuǎn)發(fā)給SFC中的下一個(gè)SFF错妖。
綜合看起來SFC的邏輯抽象如下圖所示:
綠線和藍(lán)線的路徑分別是兩個(gè)SFC绿鸣,Classifier負(fù)責(zé)識(shí)別網(wǎng)絡(luò)流量,并分發(fā)給不同的SFC暂氯,SFF負(fù)責(zé)將網(wǎng)絡(luò)流量轉(zhuǎn)發(fā)至SFI潮模。為什么會(huì)有多個(gè)SFF?因?yàn)镾FI可能連接在不同的交換設(shè)備上痴施,每個(gè)交換設(shè)備可能都需要一個(gè)SFF做轉(zhuǎn)發(fā)再登。圖中SFI和SFF的連接都是one-armed模式。其實(shí)標(biāo)題配圖也能從邏輯上很好的說明SFC晾剖。
SFC Header
這個(gè)可以說是SFC的Magic所在了锉矢。SFC Header的意義是:在網(wǎng)絡(luò)包遍歷整個(gè)Chain時(shí),攜帶的以供Service Function使用的的信息齿尽。 SFC Header可以是基于現(xiàn)有的網(wǎng)絡(luò)協(xié)議中的Header沽损,例如IPv4 header中的DSCP bits,或者是MPLS labels循头。據(jù)說IETF也正在制定為SFC專用的header绵估,以期實(shí)現(xiàn)更多的功能。
SFC卡骂、SDN国裳、NFV:
NFV就是將網(wǎng)絡(luò)服務(wù)部署成VM,這樣的虛機(jī)可以認(rèn)為是一個(gè)SFI全跨。SDN可以方便的將SFC需要的網(wǎng)絡(luò)控制功能下發(fā)到Classifier缝左,SFF和SFI。這三者是共同發(fā)展的浓若,可以說SFC是一種實(shí)現(xiàn)Networking Service的標(biāo)準(zhǔn)方式渺杉,借助SDN和NFV能更好的實(shí)現(xiàn)SFC。尤其是在公有云場(chǎng)景中挪钓,用戶對(duì)L4-L7服務(wù)的需求是多種多樣的是越,如果都由SDN實(shí)現(xiàn),將加大SDN的復(fù)雜性碌上,借助NFV和SFC倚评,能夠更加靈活實(shí)現(xiàn)Networking Service浦徊。
OpenStack有一個(gè)專門的SFC項(xiàng)目,networking-sfc in Launchpad天梧。以后有機(jī)會(huì)結(jié)合這個(gè)項(xiàng)目講一些SFC更實(shí)際的東西辑畦。