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