基于FPGA的TCP粘合設計實現
在該系統中,為完成TCP粘合并且保證TCP通信的可靠性,必須能夠正確識別接收到的數據包類型;同時由于實際網絡數據傳輸的延時,在一個客戶端通信過程中可能會插入很多其他客戶端發(fā)起的新的連接請求,系統內部根據對CAM查找返回的地址來區(qū)分不同的數據流,因此要對內部地址空間進行有效的釋放回收,為處理網絡通信異常中斷而導致內部地址無法回收而引入定時器機制;在數據發(fā)送部分,客戶端數據發(fā)送模塊偽裝成服務器與客戶端完成TCP三次握手協議;服務器數據發(fā)送模塊則偽裝成客戶端與服務器完成TCP三次握手協議。雙方在通信過程中轉發(fā)對方的數據包。
2.2.1 數據收發(fā)
對于系統的發(fā)送接口來說,所有發(fā)送數據包的轉發(fā)由數據包映射單元完成,因此發(fā)送接口僅完成簡單的數據包轉發(fā)功能。而當系統接收到數據包時,要對數據包進行協議解析,從而決定數據包后端處理的方式。在接收部分主要對三種數據包進行區(qū)分:(1)雙方發(fā)起連接的SYN數據包。這表示一個新連接的發(fā)起,因此交給地址管理單元,為它分配一個新的地址空間,同時要求發(fā)送端返回一個ACK數據包;(2)客戶端發(fā)來的GET數據包中含有客戶端所需信息的URL地址,將該數據包送給字符串匹配表以獲得該信息所在后端服務器的位置;(3)雙方通信的普通數據包。該數據包交給數據包映射單元實現雙發(fā)的通信。具體接收的狀態(tài)轉換圖如圖3所示。
2.2.2 地址管理單元
在地址管理的方式上,在此處利用一個地址鏈表進行管理,如圖4所示。
每次地址管理單元接收到新的請求連接就從鏈表的頭部取出該可用地址空間,將新請求的SIP、DIP信息寫入該地址的CAM中,同時在該地址對應的SSRAM的頁面中寫入相關的信息,假設鏈表中取出地址為n,頁面大小為m,則SSRAM中對應的頁面起始地址l為:
l=n×m
當地址管理單元接收到字符串匹配表返回的后端服務器位置信息時,首先通過該數據包的SIP、DIP從CAM中查找該數據流對應的地址,通過上述計算公式找出SSRAM中對應的頁面,寫入返回信息。
對于地址空間的回收,為防止通信異常中斷而無法回收地址,在系統中采用定時器機制,即在一段時間后對SSRAM中的定時器標志位進行檢測,一旦發(fā)現該標志位過時則通知地址管理單元回收地址。地址管理單元收到某一地址過時的信息后,將該地址掛在地址管理鏈表尾部,同時清除該地址CAM中的SIP、DIP信息。這樣當同一IP發(fā)起新的連接時就不會查找到過時信息。
評論