本發(fā)明涉及高速網(wǎng)絡通信,具體涉及一種流水線架構的萬兆tcp/ip硬件卸載方法。
背景技術:
1、隨著人工智能、云計算和5g網(wǎng)絡的發(fā)展,數(shù)據(jù)中心網(wǎng)絡通信系統(tǒng)需處理海量數(shù)據(jù)。傳統(tǒng)的1g網(wǎng)絡已無法滿足帶寬需求,10g網(wǎng)絡日益普及。在10g網(wǎng)絡中,采用傳輸控制協(xié)議(tcp)確保數(shù)據(jù)傳輸正確性,但其握手與重傳機制會造成帶寬損耗。傳統(tǒng)的tcp/ip協(xié)議棧依賴于cpu軟件實現(xiàn),會消耗大量cpu資源,成為數(shù)據(jù)交換的瓶頸。
2、現(xiàn)有解決方案包括采用獨立高速網(wǎng)卡或?qū)S眯酒?。獨立?0g以太網(wǎng)網(wǎng)卡僅實現(xiàn)物理層(phy)和媒體訪問控制層(mac),網(wǎng)絡層和傳輸層處理仍依賴cpu,增加了cpu負載。高性能智能網(wǎng)卡具備tcp/ip協(xié)議棧卸載能力,能減少cpu開銷,但需要開發(fā)獨立驅(qū)動程序且功耗較高。專用網(wǎng)絡處理芯片雖能降低功耗,但存在研發(fā)成本高、開發(fā)周期長、不可編程等問題,難以適應復雜多變的應用場景。
3、特別是在數(shù)據(jù)中心接入層,高頻小數(shù)據(jù)包交互場景下,小數(shù)據(jù)包傳輸帶寬不足會導致大量丟包。現(xiàn)有的基于fpga的tcp/ip實現(xiàn)方案在大數(shù)據(jù)包傳輸中性能尚可,但普遍存在邏輯資源消耗大、小數(shù)據(jù)包傳輸效率低的問題。
4、因此,如何生成一種既能高效利用硬件資源,又能顯著提升小數(shù)據(jù)包傳輸帶寬的tcp/ip硬件卸載方案是本領域技術人員亟需解決的問題。
技術實現(xiàn)思路
1、鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的一種流水線架構的萬兆tcp/ip硬件卸載方法。
2、為了實現(xiàn)上述目的,本發(fā)明采用如下技術方案,方法基于fpga硬件實現(xiàn),包括以下步驟:
3、s1、建立tcp/ip硬件卸載模塊,tcp/ip硬件卸載模塊包括arp模塊、mac解析模塊、udp引擎模塊、tcp引擎模塊、路由模塊和axis互連模塊;
4、s2、sfp+接口接收外部網(wǎng)絡數(shù)據(jù),經(jīng)axis接口傳輸至10g?mac層,10g?mac層將外部網(wǎng)絡數(shù)據(jù)通過axis互連模塊輸出至mac解析模塊或arp模塊;
5、s3、輸出至arp模塊的外部網(wǎng)絡數(shù)據(jù)經(jīng)arp模塊處理后,生成arp響應數(shù)據(jù),arp響應數(shù)據(jù)直接通過axis互連模塊返回至10g?mac層;輸出至mac解析模塊的外部網(wǎng)絡數(shù)據(jù),經(jīng)mac解析模塊提取ip報文,根據(jù)ip報文頭的協(xié)議字段選擇性分發(fā)至udp引擎模塊或tcp引擎模塊;
6、s4、udp引擎模塊或tcp引擎模塊對ip報文頭進行處理,udp引擎模塊根據(jù)udp報文格式對ip報文頭進行地址解析、校驗和計算,提取出udp數(shù)據(jù)包,將udp數(shù)據(jù)包通過axis接口輸出至應用層;tcp引擎模塊根據(jù)tcp報文格式對ip報文頭進行地址解析、校驗和計算,提取出tcp數(shù)據(jù)包,將tcp數(shù)據(jù)包通過axis接口輸出至應用層;
7、s5、應用層根據(jù)接收udp數(shù)據(jù)包或tcp數(shù)據(jù)包,通過axis接口反饋響應數(shù)據(jù)包到tcp/ip硬件卸載模塊,tcp/ip硬件卸載模塊中的udp引擎模塊以三級流水線方式對響應數(shù)據(jù)包進行協(xié)議封裝、校驗和計算;tcp引擎模塊以四級流水線方式對響應數(shù)據(jù)包進行協(xié)議封裝、校驗和計算以及基于有限狀態(tài)機的連接管理;udp引擎或tcp引擎模塊對響應數(shù)據(jù)包進行處理后,獲得響應報文并通過axis接口模塊發(fā)送至10g?mac層。
8、優(yōu)選的,tcp/ip硬件卸載模塊還包括路由模塊,路由模塊用于實現(xiàn)路由查詢,應用層需要進行數(shù)據(jù)發(fā)送時,路由模塊接收udp引擎模塊和tcp引擎模塊發(fā)起的ip詢問,路由模塊為udp引擎模塊和tcp引擎模塊提供物理地址信息,路由模塊產(chǎn)生應答的mac地址輸出到udp引擎模塊或tcp引擎模塊;若路由模塊查詢失敗時,通過arp模塊重新發(fā)起arp請求,獲取新的mac地址輸出到udp引擎模塊或tcp引擎模塊。
9、優(yōu)選的,udp引擎模塊還包括數(shù)據(jù)接收功能,具體實現(xiàn)的流程包括:通過axis接口接收來自10g?mac層的ip數(shù)據(jù);依次進行ip協(xié)議識別、ip地址匹配、端口信息檢測與數(shù)據(jù)校驗和驗證;當所有驗證通過時,從ip報文中提取有效載荷數(shù)據(jù),將有效載荷數(shù)據(jù)通過axis接口輸出至應用層;當驗證不通過時,則重新從10g?mac層獲取ip數(shù)據(jù)。
10、優(yōu)選的,s5中udp引擎以三級流水線方式對響應數(shù)據(jù)包進行處理獲得響應報文并發(fā)送至10g?mac層的過程包括:
11、第一級:將響應數(shù)據(jù)包緩存至axis?fifo接口,同時預計算數(shù)據(jù)校驗和,并輸出映射的端口信息、ip地址信息和mac報文頭信息;
12、第二級:根據(jù)端口信息、ip頭信息和數(shù)據(jù)校驗和,計算ip校驗和與udp校驗和,并組包輸出ip報文頭到axis?fifo接口;
13、第三級:根據(jù)ip報文頭計算出的udp校驗和、udp數(shù)據(jù)和udp數(shù)據(jù)長度信息,進行udp頭組包與udp數(shù)據(jù)組包,最終以axis接口形式輸出udp格式的響應報文到axis?fifo接口,最終輸出到10g?mac層。
14、優(yōu)選的,s5中tcp引擎以四級流水線方式對響應數(shù)據(jù)包進行處理獲得響應報文并發(fā)送至10g?mac層的過程包括:
15、第一級:接收響應數(shù)據(jù)包,將數(shù)據(jù)緩存至ram存儲器,根據(jù)窗口大小和最大分段大小對應用數(shù)據(jù)進行分段,預計算數(shù)據(jù)校驗和,并輸出數(shù)據(jù)傳輸長度;
16、第二級:讀取預配置的ip地址、端口信息和mac信息,結合數(shù)據(jù)長度進行ip校驗和計算,并準備mac報文頭輸出到axis?fifo接口;
17、第三級:根據(jù)數(shù)據(jù)長度和ip信息生成tcp偽頭部,結合預計算的數(shù)據(jù)校驗和進行tcp校驗和計算,并準備ip報文頭;
18、第四級:根據(jù)計算出的tcp校驗和與數(shù)據(jù)長度信息,輸出tcp頭與tcp報文數(shù)據(jù),最終以axis接口形式輸出完整的tcp/ip格式的響應報文。
19、優(yōu)選的,tcp引擎模塊中包括tcp連接模塊,tcp連接模塊用于管理客戶端與服務器之間的通信連接,s5中tcp引擎連接有限狀態(tài)機,用于控制tcp連接的建立與終止;有限狀態(tài)機至少包括以下狀態(tài):
20、狀態(tài)0:初始化有限狀態(tài)機,等待客戶端發(fā)送syn信號,轉換到狀態(tài)0;如果收到復位信號轉換到0狀態(tài);
21、狀態(tài)1:向客戶端發(fā)送syn+ack信號,轉換到狀態(tài)0;如果收到復位信號轉換到0狀態(tài);
22、狀態(tài)2:等待客戶端返回ack信號和seq信號,以完成三次握手;
23、狀態(tài)3:完成第三次握手后,服務器與客戶端之間建立連接,基于tcp協(xié)議進行數(shù)據(jù)傳輸;在狀態(tài)3中,若?;罟δ苁?,服務器啟動連接終止程序并轉換到狀態(tài)6;若接收到客戶端的fin信號,向客戶端發(fā)送ack信號,轉換到狀態(tài)4;
24、狀態(tài)4:向客戶端發(fā)送ack+fin信號,轉換到狀態(tài)5;
25、狀態(tài)5:接收客戶端ack響應信號,完成四次揮手,關閉服務器與客戶端之間的連接,轉換到狀態(tài)0;
26、狀態(tài)6:連接復位或者保活失敗,主動關閉連接,服務器向客戶端發(fā)送fin信號后,等待ack+fin信號,轉換到狀態(tài)7;
27、狀態(tài)7:客戶端接收到服務器的fin信號后,服務端向客戶端發(fā)送ack信號,轉換到狀態(tài)8;如果收到復位信號,則轉換到狀態(tài)0;
28、狀態(tài)8:關閉服務器,返回狀態(tài)0。
29、優(yōu)選的,tcp/ip硬件卸載模塊內(nèi)的udp引擎、tcp引擎、mac解析模塊、arp模塊以及axis互連模塊之間的數(shù)據(jù)接口均采用axis標準接口。
30、優(yōu)選的,s5中若響應數(shù)據(jù)包為udp報文格式,udp引擎模塊對響應數(shù)據(jù)包進行報文封裝,獲得響應報文,通過axis接口連接axis互連模塊,將響應報文發(fā)送至10g?mac層;若響應數(shù)據(jù)包為tcp報文格式,tcp引擎模塊與應用層發(fā)起連接建立,連接建立后,tcp引擎模塊對響應數(shù)據(jù)包進行報文封裝,獲得響應報文,通過axis接口連接axis互連模塊,將響應報文發(fā)送至10g?mac層,tcp引擎模塊完成響應數(shù)據(jù)包發(fā)送,tcp引擎模塊與應用層斷開連接。
31、經(jīng)由上述的技術方案可知,與現(xiàn)有技術相比,本發(fā)明公開提供了一種流水線架構的萬兆tcp/ip硬件卸載方法,本發(fā)明實施例提供的上述技術方案的有益效果至少包括:
32、1、實現(xiàn)近線速的高帶寬傳輸與小包吞吐量優(yōu)化:通過fpga硬件卸載、預計算與多級流水線并行處理技術,顯著提升網(wǎng)絡數(shù)據(jù)處理帶寬,特別是在高頻小數(shù)據(jù)包交互場景下有效減少了丟包與傳輸延遲。
33、2、降低系統(tǒng)資源消耗并增強設計靈活性:將完整tcp/ip協(xié)議棧從cpu卸載至fpga硬件,極大減輕了主機cpu負載;采用模塊化設計與統(tǒng)一axis標準接口,提高了設計的可移植性、可擴展性與功能可重構能力,降低了開發(fā)成本與周期。