基于FPGA的TCP粘合設計實(shí)現
在該系統中,為完成TCP粘合并且保證TCP通信的可靠性,必須能夠正確識別接收到的數據包類(lèi)型;同時(shí)由于實(shí)際網(wǎng)絡(luò )數據傳輸的延時(shí),在一個(gè)客戶(hù)端通信過(guò)程中可能會(huì )插入很多其他客戶(hù)端發(fā)起的新的連接請求,系統內部根據對CAM查找返回的地址來(lái)區分不同的數據流,因此要對內部地址空間進(jìn)行有效的釋放回收,為處理網(wǎng)絡(luò )通信異常中斷而導致內部地址無(wú)法回收而引入定時(shí)器機制;在數據發(fā)送部分,客戶(hù)端數據發(fā)送模塊偽裝成服務(wù)器與客戶(hù)端完成TCP三次握手協(xié)議;服務(wù)器數據發(fā)送模塊則偽裝成客戶(hù)端與服務(wù)器完成TCP三次握手協(xié)議。雙方在通信過(guò)程中轉發(fā)對方的數據包。
2.2.1 數據收發(fā)
對于系統的發(fā)送接口來(lái)說(shuō),所有發(fā)送數據包的轉發(fā)由數據包映射單元完成,因此發(fā)送接口僅完成簡(jiǎn)單的數據包轉發(fā)功能。而當系統接收到數據包時(shí),要對數據包進(jìn)行協(xié)議解析,從而決定數據包后端處理的方式。在接收部分主要對三種數據包進(jìn)行區分:(1)雙方發(fā)起連接的SYN數據包。這表示一個(gè)新連接的發(fā)起,因此交給地址管理單元,為它分配一個(gè)新的地址空間,同時(shí)要求發(fā)送端返回一個(gè)ACK數據包;(2)客戶(hù)端發(fā)來(lái)的GET數據包中含有客戶(hù)端所需信息的URL地址,將該數據包送給字符串匹配表以獲得該信息所在后端服務(wù)器的位置;(3)雙方通信的普通數據包。該數據包交給數據包映射單元實(shí)現雙發(fā)的通信。具體接收的狀態(tài)轉換圖如圖3所示。

2.2.2 地址管理單元
在地址管理的方式上,在此處利用一個(gè)地址鏈表進(jìn)行管理,如圖4所示。

每次地址管理單元接收到新的請求連接就從鏈表的頭部取出該可用地址空間,將新請求的SIP、DIP信息寫(xiě)入該地址的CAM中,同時(shí)在該地址對應的SSRAM的頁(yè)面中寫(xiě)入相關(guān)的信息,假設鏈表中取出地址為n,頁(yè)面大小為m,則SSRAM中對應的頁(yè)面起始地址l為:
l=n×m
當地址管理單元接收到字符串匹配表返回的后端服務(wù)器位置信息時(shí),首先通過(guò)該數據包的SIP、DIP從CAM中查找該數據流對應的地址,通過(guò)上述計算公式找出SSRAM中對應的頁(yè)面,寫(xiě)入返回信息。
對于地址空間的回收,為防止通信異常中斷而無(wú)法回收地址,在系統中采用定時(shí)器機制,即在一段時(shí)間后對SSRAM中的定時(shí)器標志位進(jìn)行檢測,一旦發(fā)現該標志位過(guò)時(shí)則通知地址管理單元回收地址。地址管理單元收到某一地址過(guò)時(shí)的信息后,將該地址掛在地址管理鏈表尾部,同時(shí)清除該地址CAM中的SIP、DIP信息。這樣當同一IP發(fā)起新的連接時(shí)就不會(huì )查找到過(guò)時(shí)信息。
評論