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