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