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