魯銘洋,喬廬峰,張 棟
(陸軍工程大學,江蘇 南京 210001)
共享存儲技術廣泛應用于以太網交換機、路由器等網絡設備中。共享存儲管理電路本身是一個隊列管理器,具有存儲資源利用率高、結構簡單、低時延等特性,能夠將所有輸入數據存儲到公共存儲區,通過高效調度管理,實現高速、高效運行[1]。
傳輸控制協議(Transmission Control Protocol,TCP)運行在網絡層IP 協議上,TCP 分段數據在IP網絡傳輸時,存在因網絡擁塞和信道誤碼導致的分段數據丟失以及多路由轉發引起的分段數據亂序問題[2]。TCP 協議提供可靠的面向連接的端到端服務,協議規定每個字節占用一個序列號,數據的發送和接收都要按序進行[3]。如果TCP 協議對不連續報文不加處理,采取簡單丟棄策略,則將導致超時,重傳數據分段,進而增加網絡負載,導致網絡擁塞,降低傳輸效率,因此協議需要高效處理亂序數據分段[4]。現有傳統的TCP 分段亂序重排采用軟件實現,接收端收到TCP 分段后,在亂序鏈節點中依次向后查找,直至將亂序分段插入正確節點,該方式靈活性差,消耗時鐘周期長且占用中央處理器(Central Processing Unit,CPU)的資源,降低了處理器性能[5]。
本文提出了一種基于共享存儲技術的亂序TCP分段重排硬件電路設計方案,不僅能夠克服內容尋址存儲器(Content Addressable Memory,CAM) 或三態內容可尋址存儲器(Ternary Content Addressable Memory,TCAM)高功耗以及可擴展性差的缺點,而且收發緩存總量確定的條件下,通過共享存儲動態為每一條連接分配存儲空間,能夠控制網絡流量總量,緩解網絡擁塞,提高緩存利用率,也能夠充分發揮硬件電路并行處理高速的優點,有效提升處理器性能[6]。
TCP 協議處理電路主要由TCP 發送和接收模塊構成,如圖1 所示。TCP 發送模塊包含TCP 發送控制(tx_tcp_ctl)、發送指針隊列(tx_ptr_qm_hash)、發送窗口(tx_win)和定時器管理電路(ttl_gen);TCP 接收電路包含TCP 接收控制電路(rx_tcp_ctl)和接收指針隊列電路(rx_ptr_qm_hash)。發送緩存管理電路(TX_BM)控制TCP 分段的發送策略。發送控制電路每發送一個TCP 分段,超時定時器電路啟動一個定時器來控制報文段重傳,計算往返時延,預估超時值大小,同時發送窗口電路根據確認信息管理發送窗口,實現流量控制[7]。接收控制電路根據接收的TCP 分段,產生分段起始序號、長度和控制狀態信息并發送至接收指針隊列電路。接收指針隊列電路根據數據分段控制狀態信息,將按序分段信息發至接收緩存管理電路(RX_BM),由接收控制電路交付數據;將亂序分段控制信息存儲于哈希鏈表存儲器中進行分段重排,接收緩存管理模塊緩存亂序分段數據。

圖1 TCP 協議處理電路內部結構
TCP 擁塞控制是通過滑動窗口進行調節,收發端各維護一個滑動窗口,窗口大小隨網絡擁塞程度變化。窗口內數據分段可以接收和發送,窗口外的數據分段不可以接收和發送[8,9]。接收窗口內按序到達的數據可以直接交付給應用層,非按序到達的分段必須先進行緩存,待缺省的分段到達后重新排序再交付給應用層。亂序TCP 分段重排功能是根據接收隊列電路提取的TCP 分段起始序號、數據長度、流號判斷分段是否亂序。若是亂序分段,將分段起始序號、數據長度、流號作為關鍵字,進行哈希計算,以哈希值為地址查找哈希鏈表頭RAM,根據查找結果執行添加、刪除和匹配操作。
哈希散列算法廣泛應用于以太網交換機的轉發表查找和路由器的路由表查找中,利用較小的存儲空間實現高速查找功能。
哈希鏈表查找電路的基本結構如圖2 所示。本設計中,hash_ll 電路內部包括一塊哈希鏈表頭(hash_ll_head)存儲器、一塊hash_ll 存儲器以及hash_ll 狀態機;外部電路包括哈希值運算電路和外部匹配結果查找電路。hash_ll 電路主要完成TCP 分段信息表項添加、刪除和查找功能。表項添加主要完成亂序TCP分段信息的添加,外部哈希查找管理電路提取待匹配的關鍵字。采取循環冗余校驗(Cyclic Redundancy Check,CRC)計算方式,取校驗值低16 位作為哈希值,查找鏈表中是否存在該亂序分段,若不存在,則將表項加入鏈表,確定表項在hash_ll存儲器中的位置,執行表項插入操作;若存在,則直接丟棄該表項信息。表項刪除主要完成刪除亂序鏈表中重新排序后按序交付分段數據表項,歸還鏈表指針和釋放接收緩存空間。表項查找主要完成接收端數據分段的查重及亂序分段排序,根據查找匹配結果讀取相應查找結果的存儲器數據,能有效避免數據的重復接收,進一步提高緩存利用率[10]。

圖2 哈希鏈表查找電路結構
本文接收指針隊列電路的設計重點在于亂序TCP分段在共享緩存中的高效管理。共享存儲技術以其結構簡單、存儲資源利用率高、低時延的特性而廣泛應用,文章引入共享存儲管理,旨在解決軟件、CAM和TCAM 查找排序的缺點。接收指針隊列電路產生TCP 分段數據在共享緩存空間中的控制信息,以此高效調度亂序TCP 數據分段的接收、排序,同時接收指針隊列電路還產生發送控制電路所需的信息,完成TCP 分段數據的收發。下面主要介紹接收指針隊列電路的工作機制。
接收指針隊列電路完成分段排序的功能在一塊哈希鏈表SRAM 中實現,該SRAM 用于存儲接收分段的信息,數據結構包括分段長度、流號、序號和前后表項地址。電路的工作流程如圖3 所示,在正常接收數據分段前,狀態機會先進行電路的初始化和CPU初始化操作,電路初始化操作完成哈希鏈表電路、自由指針電路的初始化以及接收端初始序號與接收緩存區大小的分配。完成初始化操作后,狀態機會不停檢測接收控制電路是否收到TCP 分段數據,如果收到分段數據,則先根據接收控制電路提取出分段數據的頭部信息,如數據分段起始序號、長度和流號,根據控制狀態信息分別完成相應操作。

圖3 接收指針隊列電路工作流程
如果是分段接收,狀態機會比較接收數據分段的序號與接收窗口中期望接收分段的序號大小,如果小于,則說明該分段數據已經接收并交付應用程序,直接丟棄處理;如果等于,則說明該分段是按序到達的分段;如果大于接收窗口左邊界小于接收窗口右邊界,則說明是非按序到達的分段;如果大于接收窗口右邊界,則說明分段數據超出接收窗口上界,直接丟棄。
如果是TCP分段非按序到達,根據分段頭部信息,計算hash 值進行哈希查找,判斷hash_ll 存儲器中是否存在當前亂序分段信息。如果有亂序分段,則說明是重傳分段,對接收到的亂序分段進行丟棄處理,向發送控制電路提供擬接收確認字符(Acknowledgement,ACK)值,接收窗口大小不變;如果無亂序分段,將分段信息存儲在hash_ll存儲器中,記錄相應位置信息,并將分段數據存儲在接收緩存中,同時向發送控制電路發送期望接收的ACK 值,調整接收窗口大小。
如果是按序到達,則向輸出隊列中緩存當前接收分段的指針信息。判斷hash_ll 存儲器中是否有亂序分段信息。如果沒有亂序分段,則向發送控制電路提供當前接收數據分段的ACK 值,接收窗口值不變;如果有亂序分段,根據當前接收分段數據信息進行hash 計算,判斷亂序分段中是否存在當前接收分段數據的后續分段數據信息,如果存在,則根據后續分段數據信息讀出緩存數據交付應用程序,同時歸還自由指針,依此類推,完成緩存數據讀取和自由指針歸還,直至鏈表內無法查找到后續分段信息,同時每完成一次數據交付對接收窗口大小進行調整,向發送控制電路提供擬接收ACK 值;如果不存在后續分段信息,則向發送控制電路提供擬接收ACK 值,接收窗口大小保持不變。
本文以Xilinx ZYNQ-7020 開發板為硬件平臺搭建接收指針隊列電路,其數據分段亂序重排的仿真波形如圖4、圖5 所示。圖4 中1 處CPU 初始化,發送序號為100,字節流號為10,所以此接收電路期望收到的第一個數據分段的序號值是100,接收窗口值設置為最大64 kB;2 處到達一個初始序號值為50,流號為10,長度值為100 的分段,起始序號小于窗口起始值分段,此分段被丟棄,同時向發送控制電路提供序號為100 的ACK 值;3 處到達一組亂序分段,序號分別為為200、300、400、500,長度值均為100,經過hash 查找后給出查找失敗se_nak 信號,將亂序分段執行表項添加,此時接收窗口值減小,分別向發送控制電路發送ACK 值為100 的信息;最后接收到序號為100、長度為100 的分段后,返回查找成功se_ack 信號,向發送控制電路發送ACK 為600 的信息,同時調整接收窗口大小。圖5 中4 處給出自由指針變化,接收亂序分段時讀取自由指針,存放分段控制信息,最后接收到序號值為100,長度值為100的分段后,執行清除請求,清除對應哈希鏈表,歸還自由指針,釋放緩存,調整接收窗口值;5 處為接收窗口以及ACK 值變化情況,接收亂序分段時,接收窗口減小,待接收到按序分段后,歸還自由指針,調整接收窗口值和ACK 值;6 處為hash 查找過程,當接收亂序分段時執行查找和添加工作,按序分段到達后,執行查找和清除功能。

圖4 數據分段亂序到達仿真波形

圖5 數據分段hash 查找及自由指針變化仿真波形
電路在Xilinx ZYNQ 7000 系列的現場可編程門陣列(Field Programmable Gate Array,FPGA )上進行了實現和綜合,得出的綜合結果如表1 所示。電路消耗了1 116 個查找表、1 309 個觸發器以及43 塊BRAM,接收數據采用片外DDR3 進行存儲,片內關鍵資源消耗量較低,對比CAM 或TCAM 器件具有很大優勢。電路綜合后頻率可達127 MHz,查找排序1次亂序TCP 分段最長不超過35 個時鐘周期。該電路在采用127 MHz、位寬為32 位的DDR3 存儲器時,其讀寫峰值帶寬大于32.5 Gb/s,讀寫處理200 字節的TCP 分段需要7 個時鐘周期,接收指針隊列電路數據處理速度可達4.8 Gb/s,能夠滿足高速網絡需求。

表1 綜合結果報告
本文給出一種基于共享存儲技術的亂序TCP 分段重排電路設計方案,詳細說明了亂序重排電路的工作原理,仿真分析及綜合結果表明,采用基于共享存儲技術的亂序TCP 分段重排電路能夠有效降低硬件資源消耗,提高處理效率,亂序重排處理速度達到吉比特,可以滿足高速網絡設計需求,尤其在數據中心服務器應用方面,TCP 分段亂序重排電路具有重要的實踐意義。