摘要:針對傳統(tǒng)基于軟件的協(xié)議棧無法滿足高速數(shù)據(jù)傳輸處理需求的問題,提出了一種基于硬件加速的UDP協(xié)議棧設(shè)計方案,該方案基于硬件高效并行的特點,實現(xiàn)了UDP/IP協(xié)議棧,滿足了萬兆以太網(wǎng)數(shù)據(jù)高帶寬傳輸?shù)男枨蟆Mㄟ^實際測試表明,該設(shè)計最高可以達到9.32 Gbps傳輸速率,滿足10 Gbps帶寬下線速處理的需求,與傳統(tǒng)軟件實現(xiàn)相比,處理能力更接近理論極限。
關(guān)鍵詞:FPGA; 萬兆以太網(wǎng); 硬件協(xié)議棧; UDP協(xié)議
中圖分類號:TP393文獻標志碼:A
文章編號:1001-3695(2022)08-038-2465-04
doi:10.19734/j.issn.1001-3695.2021.12.0689
Design and implementation of 10G ethernet UDP/IP hardware protocol stack based on FPGA
Dong Yongji, Wang Yu, Yuan Zheng
(PLA Strategic Support Force Information Engineering University, Zhengzhou 450002, China)
Abstract:Aiming at the problem that the traditional software protocol stack can not meet the performance requirement of high-speed data transmission, this paper presented a design scheme of UDP protocol stack based on hardware acceleration. The design was based on the characteristics of efficient and parallel hardware to implement the UDP/IP protocol stack. And it solved the problem of poor performance of high-speed data transmission. The actual test shows that the design can reach the highest level. To 9.32 Gbps transmission rate, it meets the need of 10 Gbps bandwidth downlink speed processing. Compared with traditional software implementation, it shows that the processing capacity of the proposed method is closer to the theoretical limit.
Key words:FPGA; 10G ethernet; hardware protocol stack; UDP protocol
0引言
隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展、網(wǎng)絡(luò)帶寬的迅速提升,數(shù)以萬計的視頻、圖像等業(yè)務(wù)數(shù)據(jù)逐漸成為高速鏈路傳輸?shù)闹饕M成,面對海量數(shù)據(jù)的傳輸壓力,傳統(tǒng)操作系統(tǒng)內(nèi)置協(xié)議?;蛞攒浖楹诵牡膮f(xié)議棧加速技術(shù)已經(jīng)不能滿足高速、低延遲傳輸?shù)男枨蟆?/p>
根據(jù)網(wǎng)絡(luò)處理經(jīng)驗,1 Gbps的以太網(wǎng)傳輸需要1 GHz的處理器頻率,面對萬兆高速網(wǎng)絡(luò)的傳輸需求,大量CPU計算資源都將消耗在網(wǎng)絡(luò)協(xié)議的處理上?;谟布崿F(xiàn)的UDP/IP協(xié)議棧,因通過硬件固化協(xié)議棧的處理邏輯,進而能提供高吞吐率、低延遲、高帶寬的傳輸性能[1]。
鑒于FPGA兼?zhèn)潇`活可配置和高速并行處理的特性,尤其適合在高速傳輸領(lǐng)域固化協(xié)議棧來提升系統(tǒng)的處理能力。熊光陽等人[2]提出了一種基于FPGA實現(xiàn)MAC及UDP/IP協(xié)議棧的方法,旨在解決千兆以太網(wǎng)高速傳輸?shù)膯栴};崔鶴等人[3]利用硬件實現(xiàn)了UDP/IP協(xié)議數(shù)據(jù)的封裝和拆封;Orriols[4]面向DAQ應(yīng)用,基于INTEL FPGA實現(xiàn)了一個通用的千兆UDP/IP協(xié)議核;馮?。?]面向高性能協(xié)議處理需求,設(shè)計了一個高效的千兆協(xié)議棧;Liu等人[6]提出了一個適用于大型傳感器網(wǎng)絡(luò)的UDP/IP協(xié)議棧,比軟件處理提升了8倍的性能。面對萬兆應(yīng)用場景,王禹衡[7]設(shè)計了一個10G以太網(wǎng)UDP/IP處理器視頻傳輸接口;夏楊[8]設(shè)計了一種萬兆以太網(wǎng)分發(fā)平臺,滿足萬兆以太網(wǎng)UDP傳輸?shù)男枨?;彭鵬[9]面向核物理低時延的處理需求,實現(xiàn)了一個高速協(xié)議處理模塊,而國外廠商PLDA[10]、Fraunhofer HHI[11]、Intilop[12]以及Dini Group[13]等公司也分別提出價格不菲的商用IP核。
綜上可知,當前硬件協(xié)議棧研究主要集中在千兆以太網(wǎng)環(huán)境,而萬兆以太網(wǎng)的硬件協(xié)議棧是當前的應(yīng)用熱點。本文基于FPGA實現(xiàn)的UDP/IP協(xié)議棧為面向10G網(wǎng)絡(luò)環(huán)境設(shè)計,具有以下優(yōu)勢:a)集協(xié)議幀的解析、處理、發(fā)送和接收于一體,大幅提升系統(tǒng)UDP應(yīng)用的傳輸效能;b)基于FPGA可重構(gòu)可配置的特點,可以部署于不同場景的網(wǎng)絡(luò)環(huán)境中;c)面向服務(wù)器應(yīng)用設(shè)計,可支持多端口多點業(yè)務(wù)的并發(fā)連接。
1硬件結(jié)構(gòu)設(shè)計思路
為了提高UDP協(xié)議的傳輸效能,本文提出了一種基于FPGA的UDP協(xié)議棧設(shè)計方案,該設(shè)計基于斯坦福大學的NetFPGA 10G[14]板卡實現(xiàn),能夠盡可能多地支持各種應(yīng)用。本方案利用該板卡PCI express接口的便攜擴展能力強的特點,方便在服務(wù)器應(yīng)用場景中通過擴展物理接口的方式,部署該硬件協(xié)議棧到服務(wù)器系統(tǒng)中,提升服務(wù)器中各種應(yīng)用UDP協(xié)議的加速傳輸處理。
FPGA作為硬件子系統(tǒng)設(shè)計中的重點和難點,根據(jù)FPGA硬件結(jié)構(gòu)特點實現(xiàn)了協(xié)議處理功能,并將硬件部分劃分為10GMAC接口模塊、協(xié)議解析模塊、ARP響應(yīng)模塊、ICMP響應(yīng)模塊、協(xié)議封裝模塊、UDP協(xié)議處理模塊、PCIE-DMA模塊,模塊劃分如圖1所示。
1)協(xié)議解析模塊
該模塊主要實現(xiàn)數(shù)據(jù)報文的協(xié)議解析處理,并為后續(xù)響應(yīng)報文的生成和封裝提取用戶的相關(guān)信息。首先該模塊對到達系統(tǒng)的數(shù)據(jù)報文協(xié)議逐層進行解析,最終實現(xiàn)對本地支持的UDP協(xié)議請求協(xié)議報文的解析、本地協(xié)議報文的提取以及無關(guān)報文的過濾三部分功能。鑒于FPGA硬件結(jié)構(gòu)的特殊性,無法完整實現(xiàn)所有協(xié)議的解析和處理,針對設(shè)計的應(yīng)用場景,實現(xiàn)的具體處理算法流程如圖2所示。
具體處理算法步驟如下所示:
a)判斷到達以太網(wǎng)幀的以太類型是否為0×0800,如果為0×0800(IPv4協(xié)議),則執(zhí)行步驟b),否則執(zhí)行步驟g);
b)判斷到達的IPv4協(xié)議報文中目的IP字段是否匹配本地配置的多個服務(wù)IP,如果命中本地多個服務(wù)IP中的一個,則執(zhí)行步驟c),否則丟棄該報文;
c)判斷到達的IPv4協(xié)議報文頭中協(xié)議字段是否為ICMP,如果為ICMP協(xié)議,則執(zhí)行步驟d),否則執(zhí)行步驟f);
d)提取到達的ICMP協(xié)議報文中的源IP地址和ICMP協(xié)議號,用于后續(xù)ICMP響應(yīng)報文的生成,并跳轉(zhuǎn)結(jié)束協(xié)議解析處理;
e)判斷到達的IPv4協(xié)議報文頭中協(xié)議字段是否為UDP,如果為UDP協(xié)議,則執(zhí)行步驟f),否則丟棄該報文;
f)提取到達的UDP協(xié)議報文中的源IP地址,用于后續(xù)UDP響應(yīng)報文的封裝,并跳轉(zhuǎn)結(jié)束協(xié)議解析處理;
g)判斷到達以太網(wǎng)幀的以太類型是否為0×806,如果為0×0806(ARP協(xié)議),則執(zhí)行步驟h),否則丟棄該報文;
h)判斷到達的ARP協(xié)議報文中目的IP字段是否匹配本地配置的多個服務(wù)IP,如果命中本地多個服務(wù)IP中的一個,則執(zhí)行步驟i),否則丟棄該報文;
i)判斷到達數(shù)據(jù)幀的目的MAC地址是否為全F(廣播地址),如果為全F,則執(zhí)行步驟j),否則執(zhí)行步驟l);
j)判斷到達數(shù)據(jù)幀的目的MAC地址是否為本地MAC,如果是本地MAC地址,則執(zhí)行步驟k),否則丟棄該報文;
k)提取到達的ARP協(xié)議報文中源MAC地址和源IP地址,用于構(gòu)建ARP緩存表以及后續(xù)APR響應(yīng)報文的重組,并跳轉(zhuǎn)結(jié)束協(xié)議解析處理;
l)提取到達的ARP協(xié)議報文中源MAC地址和源IP地址,用于構(gòu)建ARP緩存表以及后續(xù)ARP響應(yīng)報文的生成,并跳轉(zhuǎn)結(jié)束協(xié)議解析處理。
2)ARP響應(yīng)模塊
該模塊實現(xiàn)ARP請求、響應(yīng)報文的構(gòu)建以及ARP緩存表的維護功能?;贔PGA構(gòu)建該模塊時,采用FPGA片內(nèi)BLOCK RAM存儲ARP表項,鑒于硬件資源的有限性,故在標準的ARP協(xié)議處理的基礎(chǔ)上,該模塊增加了硬件資源這一限制條件,即當BLOCK RAM中存儲的ARP表即將溢出時,會選擇性地刪除老化時間最長的表項,進而維持整個ARP表的正常操作。
首先根據(jù)ARP請求報文信息,構(gòu)建ARP響應(yīng)報文;其次響應(yīng)協(xié)議封裝模塊請求,提供IP-MAC映射服務(wù),并定時刷新ARP緩存表,根據(jù)老化時間刪除過期表項;再次根據(jù)需求,對于緩存表中未存在的IP-MAC映射關(guān)系,主動組織ARP請求報文內(nèi)容。ARP緩存表維護的算法流程如圖3所示。
ARP緩存表維護具體步驟如下所示:
a)判斷使用待發(fā)送數(shù)據(jù)包的目的IP地址與緩存表空間中的表項進行匹配,如果匹配,執(zhí)行步驟b),否則執(zhí)行步驟c);
b)檢查表項空間中的表項地址上是否已經(jīng)全部建立了緩存表項(表項空間是否已經(jīng)被使用完畢),如果是,執(zhí)行步驟f),否則執(zhí)行步驟g);
c)依據(jù)緩存表中存儲的時間戳與當前時刻進行對比,判斷待匹配的緩存表項是否已經(jīng)超時,如果是,執(zhí)行步驟d),否則執(zhí)行步驟e);
d)刪除超時的緩存表項信息,并生成對應(yīng)的ARP請求報文內(nèi)容;
e)更新緩存表項的時間戳信息;
f)刪除緩存表空間中的一條老化時間最長的表項;
g)在表項空間中未被占用的地址上創(chuàng)建新的緩存表項。
3)ICMP協(xié)議響應(yīng)模塊
該模塊實現(xiàn)了ICMP協(xié)議的一個子集。每當收到ICMP請求報文之后,根據(jù)當前系統(tǒng)的狀態(tài),按照ICMP協(xié)議規(guī)定,對應(yīng)生成相應(yīng)的響應(yīng)報文。本文設(shè)計的UDP協(xié)議棧目標部署在服務(wù)器端,故根據(jù)服務(wù)終端的協(xié)議特性,實現(xiàn)了包括“回顯應(yīng)答”“超時”和“目標不可達”三類響應(yīng)功能。其中“回顯應(yīng)答”用于支持客戶端的PING信息,“超時”用于支持數(shù)據(jù)段TTL過期,“目標不可達”用于指示服務(wù)器端未開放的端口。
4)協(xié)議封裝模塊
該模塊主要實現(xiàn)兩個功能:a)對UDP數(shù)據(jù)報進行協(xié)議封裝;b)對封裝后的UDP、ICMP和ARP協(xié)議數(shù)據(jù)幀進行數(shù)據(jù)合流,統(tǒng)一發(fā)送到10G MAC接口。其中針對UDP報進行IP協(xié)議的封裝時,需要根據(jù)用戶的IP地址(目的IP地址)信息在ARP響應(yīng)模塊的ARP緩存表中匹配查找表項,并獲取該IP地址對應(yīng)的MAC地址信息,進而將該IP包封裝成數(shù)據(jù)幀。協(xié)議封裝模塊的結(jié)構(gòu)如圖4所示。
5)UDP協(xié)議處理模塊
該模塊主要實現(xiàn)UDP協(xié)議的封裝和拆裝、UDP校驗和的計算以及與應(yīng)用軟件的套接字接口和數(shù)據(jù)通道。UDP協(xié)議處理模塊與應(yīng)用軟件接口如圖5所示。
軟件應(yīng)用運行在服務(wù)端,軟件功能在提供服務(wù)之前,需要通過配置端口向硬件協(xié)議棧申請/釋放服務(wù)端口,硬件模塊根據(jù)服務(wù)端口的狀態(tài),決定提供或是拒絕服務(wù)。
當該模塊接收到來自線路的數(shù)據(jù)時,若通信的目的端口為開放狀態(tài),硬件則進行UDP協(xié)議的拆裝,提取通信套接字和接收數(shù)據(jù);若通信的目的端口為關(guān)閉狀態(tài),硬件則丟棄該UDP數(shù)據(jù)段。
當該模塊接收到來自軟件的數(shù)據(jù)時,若通信的源端口為開放狀態(tài),硬件則根據(jù)軟件提供的套接字和應(yīng)用數(shù)據(jù),封裝成UDP數(shù)據(jù)段;若通信的源端口為關(guān)閉狀態(tài),硬件則丟棄該應(yīng)用數(shù)據(jù)。
為了實現(xiàn)服務(wù)器場景下對眾多UDP端口狀態(tài)的管理,支持多端口多點業(yè)務(wù)的并發(fā)連接,該模塊內(nèi)部采用雙口BRAM建立了一個地址為16 bit位寬的端口狀態(tài)表,軟件系統(tǒng)通過申請/釋放操作將該查找表中對應(yīng)端口號設(shè)置為開放/關(guān)閉,狀態(tài)表中共有216個地址,可以將UDP所有的端口號一一映射到該表中,且每個表項內(nèi)有1 bit指示位用于標志該端口號是否開放。如圖6所示,53端口(DNS協(xié)議)狀態(tài)開放,并結(jié)合時間和事件觸發(fā)機制輪詢整個狀態(tài)表,實現(xiàn)對整個UDP端口的生存周期管理。通過在FPGA片內(nèi)資源搭建這樣一個端口狀態(tài)查找表,支持多端口狀態(tài)的并行查找,實現(xiàn)多端口多業(yè)務(wù)的共存,利用雙端口RAM的操作特性,也可以有效提升多端口多業(yè)務(wù)時狀態(tài)的查找速率。
6)PCIe-DMA模塊
PCIe-DMA 模塊主要包括Xilinx PCIe IP核和DMA模塊。PCIe IP核直接在Vivado中調(diào)用,用于實現(xiàn)PCIe協(xié)議的物理層和數(shù)據(jù)鏈路層。如圖5所示,PCIe-DMA模塊主要實現(xiàn)了UDP協(xié)議處理模塊與上位機軟件的透明通信。
2設(shè)計驗證
本設(shè)計的驗證分為功能仿真驗證和物理性能驗證。驗證的硬件平臺依托于斯坦福大學的NetFPGA-10G板卡,其具有四個10 Gbps的PCI express適配卡,采用Virtex-5XC5VTX240T-2 FPGA作為主處理芯片,該 FPGA 可用的邏輯資源為18 720可編程邏輯單元(configurable logic blocks)、2 400 Kbit 分布式存儲單元(distributed RAM)和 11 664 K(324×36 K)bit 塊存儲單元(block RAM),整個系統(tǒng)采用Verilog語言開發(fā),基于Xilinx公司的Vivado 2016.4工具進行開發(fā),并使用Xilinx ISIM工具進行了仿真驗證。仿真結(jié)果表明,該協(xié)議棧設(shè)計能夠正確完成ARP、ICMP、IPv4、UDP等協(xié)議報文的發(fā)送和接收等功能。如圖7所示,協(xié)議棧實現(xiàn)了10G速率下數(shù)據(jù)線速的接收和發(fā)送功能。
為了對本文所提出的設(shè)計方案進行性能驗證,采用斯博倫TestCenter3.61的兩個10G接口進行實際發(fā)包測試,采用逐步增大測試數(shù)據(jù)包MTU長度的方法,測試本系統(tǒng)以及基于Linux原生UDP協(xié)議棧在處理不同數(shù)據(jù)包長情況下的性能,測試結(jié)果如圖8所示。
從圖8中可以看出,隨著數(shù)據(jù)報文MTU值的增加,硬件協(xié)議棧對于UDP協(xié)議負載的傳輸能力越發(fā)貼近理論值,而軟件實現(xiàn)的UDP協(xié)議棧受限于處理器串行處理能力的瓶頸,與本方案的性能差距愈發(fā)明顯;當MTU達到1 400 Byte時,協(xié)議棧對于UDP數(shù)據(jù)可以達到9.32 Gbps的傳輸速率,接近理論值9.7 Gbps,達到了設(shè)計的要求,滿足10G鏈路上線速傳輸數(shù)據(jù)的需求。
3結(jié)束語
傳統(tǒng)基于FPGA的UDP/IP協(xié)議棧研究都是集中在一對一的點到點傳輸,無法適用于10G網(wǎng)絡(luò)環(huán)境下提供多點并發(fā)連接的服務(wù)器場景,本文研究了一種面向服務(wù)器應(yīng)用場景的UDP硬件協(xié)議棧。本設(shè)計充分利用硬件在并行處理上的優(yōu)勢,流水化設(shè)計UDP協(xié)議處理流程,將UDP協(xié)議處理固化在FPGA中,降低傳輸層協(xié)議對處理器的處理需求,提升系統(tǒng)的傳輸效能。通過實驗結(jié)果表明,該協(xié)議??梢赃m用于10G網(wǎng)絡(luò)UDP協(xié)議的線速處理。在未來的工作中,將面向5G應(yīng)用場景上一些傳輸速率非常高的服務(wù)進行研究和討論,并研究其與智能網(wǎng)卡方向的結(jié)合與應(yīng)用。
參考文獻:
[1]柯洋. 基于FPGA的高速數(shù)據(jù)傳輸板設(shè)計與開發(fā) [D]. 武漢: 華中師范大學, 2020.( Ke Yang Design and development of high speed data transmission board based on FPGA [D]. Wuhan: Central China Normal University, 2020.)
[2]熊光陽, 王野, 李志茹, 等. 基于FPGA的千兆UDP/IP協(xié)議棧的實現(xiàn)及其在高速圖像傳輸中的應(yīng)用 [J]. 儀器儀表用戶, 2020, 27(3): 38-41.( Xiong Guangyang, Wang Ye, Li Zhiru, et al. Implementation of gigabit UDP / IP protocol stack based on FPGA and its application in high-speed image transmission [J]. Instrument Users, 2020, 27(3): 38-41.)
[3]崔鶴, 劉云清, 盛家進. 基于 FPGA 的 UDP/IP 協(xié)議棧的研究與實現(xiàn) [J]. 長春理工大學學報:自然科學版, 2014,37(2): 133-137.(Cui He,Liu Yunqing,Sheng Jiajin.Research and implementation on UDP/IP protocol stack base on FPGA[J].Journal of Changchun University and Technology:Natural Science, 2014,37(2): 133-137.)
[4]Orriols G G. Design and implementation of an UDP/IP Ethernet hardware protocol stack for FPGA based systems [D]. Barcelona: Universitat Politècnica de Catalunya, 2019.
[5]馮琛. 基于SAR的高性能協(xié)議處理引擎技術(shù)研究 [D]. 杭州: 浙江大學, 2021.(Feng Chen. Research on high performance protocol processing engine technology based on SAR [D]. Hangzhou: Zhejiang University, 2021).
[6]Liu Nianyun, Xu Zhiqiang. The design of high-speed hardware UDP/IP stack based on FPGA for large-scale sensing systems[J]. Journal of Internet Technology, 2017, 18(3): 579-587.
[7]王禹衡. 基于FPGA的10G以太網(wǎng)UDP/IP處理器視頻傳輸接口設(shè)計 [D]. 沈陽: 沈陽工業(yè)大學, 2018.(Wang Yuheng. Design of video transmission interface of 10G ethernet UDP / IP processor based on FPGA [D]. Shenyang: Shenyang University of Technology, 2018.)
[8]夏楊. 基于FPGA的萬兆以太網(wǎng)數(shù)據(jù)分發(fā)平臺設(shè)計 [D]. 北京: 北京理工大學, 2016. (Xia Yang. Design of 10 gigabit ethernet data distribution platform based on FPGA [D]. Beijing: Beijing University of Technology, 2016.)
[9]彭鵬. 基于萬兆以太網(wǎng)的核物理實驗高速數(shù)據(jù)傳輸系統(tǒng)研究 [D]. 蘭州: 西北師范大學, 2021.( Peng Peng. Research on high speed data transmission system of nuclear physics experiment based on 10 gigabit ethernet [D]. Lanzhou: Northwest Normal University, 2021.)
[10]https://www.plda.com/products/fpga-ip/xilinx/fpga-ip-tcpip/quicktcp-xilinx/[EB/OL].
[11]Langenbach U, Berthe A, Traskov B, et al. A 10 GbE TCP/IP hardware stack as part of a protocol acceleration platform [C]// Proc of the 3rd IEEE International Conference on Consumer Electronics. Piscataway,NJ: IEEE Press, 2013: 381-384.
[12]http://www. intilop. com/tcpipengines. php/[EB/OL].
[13]http://www. dinigroup. com/new/TOE. php/[EB/OL].
[14]劉宇寒. 基于NetFPGA10G的網(wǎng)絡(luò)數(shù)據(jù)包加密實現(xiàn)及其低功耗研究 [D]. 杭州: 杭州電子科技大學, 2018.( Liu Yuhan. Implementation of network packet encryption based on NetFPGA10G and its low power consumption [D]. Hangzhou: Hangzhou University of Electronic Science and Technology, 2018.)
收稿日期:2021-12-31;修回日期:2022-02-27基金項目:國家重點研發(fā)計劃資助項目
作者簡介:董永吉(1983-),男,吉林汪清人,副研究員,博士,主要研究方向為高速網(wǎng)絡(luò)技術(shù)(ug_dong@qq.com);王鈺(1997-),男,山西介休人,助理工程師,學士,主要研究方向為新型網(wǎng)絡(luò);袁征(1982-),女,河南駐馬店人,助理研究員,學士,主要研究方向為新型網(wǎng)絡(luò).