基于FPGA的TCP粘合設計與實現
在應用級代理的基礎上,為進一步提高數據處理的速度,提出了TCP粘合技術[1]。該技術在通信雙方建立通信之處對雙方的握手信號以及通信原語進行分析,獲取必要的信息,決定數據的流向,一旦雙方開始通信,該代理就不再對數據進行分析,而僅起到了一個透明網關的作用,從而提高了代理的系統性能。
TCP粘合技術采用軟件處理方式時,由于大量數據包不需要上層解析,因此提高了系統性能,但是受軟件處理速度的限制,該技術能很難應用于大規模的集群系統,本文提出了一種基于FPGA的TCP粘合技術的高速實現機制,利用硬件的高速處理特性和流水線的技術來適應高速網絡傳輸的需要。
1 現存的TCP粘合技術
TCP粘合原理如下:(1)監聽客戶端的連接請求,并在客戶端發出連接請求后(從SYN開始),建立客戶端到均衡器之間的連接(通過TCP的三次握手協議完成),(2)在隨后的請求報文中分析數據并決定真正被訪問的服務節點。(3)與服務節點建立性一個連接,將兩個連接粘合在一起(splicing)。其TCP粘合原理示意圖如圖1所示[2]。
2 TCP粘合技術的硬件實現
TCP粘合技術的關鍵在于,當客戶端發起連接請求時,系統并不是立即將該請求發給后端服務器,而是偽裝成服務器與客戶端建立連接,取得用戶的GET數據包,通過對URL的匹配來找到信息在后端服務器的位置,然后再在客戶端與服務器之間建立連接通信。
2.1 系統架構
TCP粘合系統結構如圖2所示。
該系統中首先由客戶數據接收端對接收到的HTTP報文進行解析,發現數據包為一個發起連接的SYN數據包時,傳給地址管理單元,地址管理就為該連接分配一個地址空間,同時通過映射單元告訴客戶數據發送端與客戶端完成三次握手,建立連接。
當客戶數據接收端收到GET數據包時,將該數據包發送給字符串匹配表,該表會將信息在后端服務器的位置返回給地址管理單元,地址管理單元將該信息送給數據包映射單元,映射單元將該信息寫入相應的SSRAM空間中,同時通知服務器發送端與后端服務器建立連接,這樣就完成了一個TCP的粘合過程。
在客戶端與服務器的通信過程中,數據包映射單元通過雙方SIP、DIP信息從SSARM中查找出對應的替換信息,完成雙方數據包的映射。
在客戶端通信結束時,由地址管理單元對雙方使用的地址空間進行回收;同時為防止通過過程中的異常中斷,地址管理單元內部采用了定時器機制對地址空間進行監測,根據定時器返回結果回收過時地址,防止過時信息被查用。
2.2 設計實現
在該系統中,為完成TCP粘合并且保證TCP通信的可靠性,必須能夠正確識別接收到的數據包類型,同時由于實際網絡數據傳輸的延時,在一個客戶端通信過程中可能會插入很多其他客戶端發起的新的連接請求,系統內部根據對CAM查找返回的地址來區分不同的數據流,因此要對內部地址空間進行有效的釋放回收,為處理網絡通信異常中斷而導致內部地址無法回收而引入定時器機制,在數據發送部分,客戶端數據發送模塊偽裝成服務器與客戶端完成TCP三次握手協議,服務器數據發送模塊則偽裝成客戶端與服務器完成TCP三次握手協議,雙方在通信過程中轉發對方的數據包。
2.2.1 數據收發
對于系統的發送接口來說,所有發送數據包的轉發由數據包映射單元完成,因此發送接口僅完成簡單的數據包轉發功能,而當系統接收到數據包時,要對數據包進行協議解析從而決定數據包后端處理得方式,在接收部分主要對三種數據包進行區分:(1)雙方發起連接的SYN數據包。這表示一個新連接的發起,因此交給地址管理單元,為它分配一個新的地址空間,同時要求發送端返回一個ACK數據包;(2)客戶端發送來的GET數據包中含有客戶端所需信息的URL地址,將該數據包送給字符串匹配表以獲得該信息所在后端服務器的位置;(3)雙方通信的普通數據包,該數據包交給數據包映射單元實現雙發的通信,具體接收的狀態轉換圖如圖3所示。
2.2.2 地址管理單元
在地址管理的方式上,在此處利用一個地址鏈表進行管理,如圖4所示。
每次地址管理單元接收到新的請求連接就從鏈表的頭部取出該可用地址空間,將新請求的SIP、DIP信息寫入該地址的CAN中,同時在該地址對應的SSRAM的頁面中寫入相關的信息。假設鏈表中取出地址為n,頁面大小為m,則SSRAM中對應的頁面起始地址l為:
l=n
評論