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