針對不同應(yīng)用場景在不同時間內(nèi)對交換功能的需求不一致的特點,F(xiàn)AST流水線支持利用FPGA現(xiàn)場可編程特性,動態(tài)增加和卸載流水線模塊以滿足不斷變化需求的特性。
一、硬件流水線的擴展
FAST基本流水線包含通用分組解析(GPP)、通用關(guān)鍵字提取(GKE)、通用匹配引擎(GME)、通用轉(zhuǎn)發(fā)動作(GAC)和通用輸出引擎(GOE)五個模塊。基于這五個模塊搭建的基本架構(gòu),F(xiàn)AST流水線支持動態(tài)模塊的插入和刪除,如下圖所示。
在GAC之前的流水線稱為Ingress流水線,主要在輸入端口的上下文中對分組進行轉(zhuǎn)發(fā)決策處理。由于分組元數(shù)據(jù)到達GAC模塊后,可根據(jù)GME的匹配結(jié)果查表的到分組輸出的接口號(或軟件UA編號),因此在GAC之后分組在輸出接口的上下文中處理,因此GAC模塊之后的流水線稱為Egress流水線。
FAST流水線的功能擴展主要通過增加以下幾類硬件模塊:
(1)用戶定義的解析(UDP)模塊
在GPP模塊之后增加一個或多個UDP模塊,可實現(xiàn)對GPP不支持的其他協(xié)議進行解析,并根據(jù)解析結(jié)果修改元數(shù)據(jù)中的協(xié)議類型字段PST。一個UDP模塊在修改完P(guān)ST后,將DMID設(shè)置為GKE,旁路掉后續(xù)的UDP,即每個分組最多支持一個UDP模塊的協(xié)議分析。
(2)UKE模塊
在GKE模塊之后增加用戶定義的關(guān)鍵字提取模塊UKE,擴展支持GKE不支持的關(guān)鍵字提取能力,UKE可以修改KEY字段。通常如果一個UKE模塊完成KEY的提取和修改后,直接將DMID設(shè)置為GME,旁路掉后續(xù)的UKE(如果有的話),即每個分組最多支持一個UKE模塊的處理
(3)UDA模塊
UDA模塊主要實現(xiàn)用戶定義的action處理。UDA模塊插在GME和GAC之間可以擴充Ingress流水線的處理功能,插入在GAC和GOE之間可以擴充Egress流水線的處理功能。位于GAC之前和之后的UDA模塊有兩點不同。一是UDA之前的只能對分組的元數(shù)據(jù)進行操作,而GAC之后的UDA可以直接修改整個分組;二是GAC之前的UDA是在分組輸入的上下文處理分組,而GAC之后的UDA是在分組輸出端口的上下文中處理分組。
(4)UDO模塊
UDO模塊物理位置并不在FAST流水線之內(nèi),而是位于FPGA OS中分組最終從FPGA引腳輸出之前。由于UDO的位置位于分組輸出調(diào)度之后,因此UDO處理的分組在輸出時不存在任何阻塞,能夠保證分組離開后到最終輸出到鏈路上有一個確定的延時。因此UDO可以看作是FAST流水線在FPGA OS中的一個“飛地”。其主要作用是獲取精確的分組輸時間戳,可以支持IEEE 1588透明時鐘的計算或者網(wǎng)絡(luò)測量中精確發(fā)送時間的獲取。
FAST流水線擴展模塊的設(shè)計必須遵循標(biāo)準(zhǔn)的模塊接口定義,而且擴展插入的模塊對上下游模塊都是透明的,即流水線中原有的上下游模塊在都應(yīng)該感知不到新模塊的插入。
二、硬件流水線擴展的示例
通過對FAST硬件流水線進行擴展,可以支持在原有的交換平臺中擴充支持新的協(xié)議以及新的分組處理機制。例如下圖分別介紹了通過擴展UDP和UDA模塊支持IEEE 1588,L3轉(zhuǎn)發(fā)控制以及安全網(wǎng)關(guān)功能的例子。
在(a)中,由于GPP協(xié)議無法識別封裝在特定UDP端口號中傳輸?shù)腎EEE 1588的PTP協(xié)議,因此GPP處理后PST字段表示的分組類型為ETH/IP/UDP,如果交換平臺需要支持IEEE 1588的PTP協(xié)議,需要插入一個UDP模塊,對使用319和320端口的UDP分組進行解析。如果UDP目地端口號為319,即UDP內(nèi)部包含需要交換平臺計算透明時鐘的事件消息(sync,delay_req),這些消息可在PST中標(biāo)記,UDO會根據(jù)PST的標(biāo)記跟新分組的透明時鐘。如果目的端口號為320,則其中包含不需要透明時鐘計算的PTP通用消息,UDP會進一步分析消息類型,將分組轉(zhuǎn)發(fā)(follow_up消息或delay_resp消息),或送特定的軟件UA處理(BMC協(xié)議消息)。
在(b)中,增加UDA1實現(xiàn)輸出組播復(fù)制功能,根據(jù)組播分組元數(shù)據(jù)中Outport攜帶的組播組信息查表獲得輸出接口集合,將分組一次復(fù)制發(fā)送到每個輸出接口,而UDA1實現(xiàn)綁定到特定輸出接口的ACL過濾功能,UDA3實現(xiàn)對輸出分組的修改,例如修改目的MAC等。因此通過擴展Egress流水線中的UDA模塊,可以使FAST流水線支持三層的單播和組播轉(zhuǎn)發(fā)功能。顯然,每個新增的UDA模塊內(nèi)部也包含相應(yīng)的控制表格,這些表格會通過相應(yīng)的軟件配置。
在(c)中,可在Ingress流水線中增加連接管理和復(fù)雜的流量統(tǒng)計功能,實現(xiàn)與特定輸入端口綁定的安全控制。利用連接管理功能,可以維護五元組標(biāo)識的TCP/UDP/ICMP的連接狀態(tài),實現(xiàn)狀態(tài)防火墻,并為其他基于流的middlebox功能提供流的狀態(tài)信息。而利用復(fù)雜的流量統(tǒng)計功能可以檢測到特定輸出接口甚至是到特定服務(wù)器流量的非對稱性,用于早期的發(fā)現(xiàn)DDoS攻擊。而在Egress流水線中增加流量過濾功能,可對具有特定屬性分組進行過濾,例如在“勒索病毒”爆發(fā)期間,可以針對該病毒的特點快速部署硬件過濾模塊,對傳播病毒的惡意分組進行過濾,而過了“勒索病毒”爆發(fā)期以后,該模塊可以刪除以節(jié)約資源用于其他功能的實現(xiàn)。
上圖中三個例子只是對通過模塊擴展實現(xiàn)功能擴展的示意。后續(xù)會更加深入的介紹基于軟硬件協(xié)同方式快速實現(xiàn)特定處理功能的方法。