<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于FPGA的TCP粘合設(shè)計(jì)與實(shí)現(xiàn)

          基于FPGA的TCP粘合設(shè)計(jì)與實(shí)現(xiàn)

          ——
          作者:程文青,曾鳴,黃建 (華中科技大學(xué) 電子與信息工程系,湖北 武漢 430074) 時(shí)間:2007-01-26 來源:《電子技術(shù)應(yīng)用》 收藏

          傳統(tǒng)的數(shù)據(jù)分流一般基于三層、四層交換,不能在應(yīng)用層解析數(shù)據(jù),導(dǎo)致數(shù)據(jù)在后端服務(wù)器解析后還要相互重新分發(fā),增加了服務(wù)數(shù)據(jù)傳輸?shù)拈_銷,為解決該問題,可以在客戶端與服務(wù)器之間采用應(yīng)用級(jí)代理服務(wù)器,利用該服務(wù)器專門對(duì)數(shù)據(jù)包進(jìn)行解析分發(fā),但是該方式下,數(shù)據(jù)要進(jìn)入tcp/ip協(xié)議棧,處理速度慢,同時(shí)代理服務(wù)器還需要與客戶端、服務(wù)器雙方通信,需要處理的數(shù)據(jù)量非常大,因此在集群應(yīng)用中,特別是大規(guī)模負(fù)載平衡集群系統(tǒng)中很少使用應(yīng)用級(jí)代理。

          在應(yīng)用級(jí)代理的基礎(chǔ)上,為進(jìn)一步提高數(shù)據(jù)處理的速度,提出了tcp粘合技術(shù)[1]。該技術(shù)在通信雙方建立通信之處對(duì)雙方的握手信號(hào)以及通信原語(yǔ)進(jìn)行分析,獲取必要的信息,決定數(shù)據(jù)的流向,一旦雙方開始通信,該代理就不再對(duì)數(shù)據(jù)進(jìn)行分析,而僅起到了一個(gè)透明網(wǎng)關(guān)的作用,從而提高了代理的系統(tǒng)性能。

          tcp粘合技術(shù)采用軟件處理方式時(shí),由于大量數(shù)據(jù)包不需要上層解析,因此提高了系統(tǒng)性能,但是受軟件處理速度的限制,該技術(shù)能很難應(yīng)用于大規(guī)模的集群系統(tǒng),本文提出了一種基于fpga的tcp粘合技術(shù)的高速實(shí)現(xiàn)機(jī)制,利用硬件的高速處理特性和流水線的技術(shù)來適應(yīng)高速網(wǎng)絡(luò)傳輸?shù)男枰?br>
          1 現(xiàn)存的tcp粘合技術(shù)

          tcp粘合原理如下:(1)監(jiān)聽客戶端的連接請(qǐng)求,并在客戶端發(fā)出連接請(qǐng)求后(從syn開始),建立客戶端到均衡器之間的連接(通過tcp的三次握手協(xié)議完成),(2)在隨后的請(qǐng)求報(bào)文中分析數(shù)據(jù)并決定真正被訪問的服務(wù)節(jié)點(diǎn)。(3)與服務(wù)節(jié)點(diǎn)建立性一個(gè)連接,將兩個(gè)連接粘合在一起(splicing)。其tcp粘合原理示意圖如圖1所示[2]。

          本文引用地址:http://www.ex-cimer.com/article/21524.htm


          2 tcp粘合技術(shù)的硬件實(shí)現(xiàn)

          tcp粘合技術(shù)的關(guān)鍵在于,當(dāng)客戶端發(fā)起連接請(qǐng)求時(shí),系統(tǒng)并不是立即將該請(qǐng)求發(fā)給后端服務(wù)器,而是偽裝成服務(wù)器與客戶端建立連接,取得用戶的get數(shù)據(jù)包,通過對(duì)url的匹配來找到信息在后端服務(wù)器的位置,然后再在客戶端與服務(wù)器之間建立連接通信。

          2.1 系統(tǒng)架構(gòu)

          tcp粘合系統(tǒng)結(jié)構(gòu)如圖2所示。

          該系統(tǒng)中首先由客戶數(shù)據(jù)接收端對(duì)接收到的http報(bào)文進(jìn)行解析,發(fā)現(xiàn)數(shù)據(jù)包為一個(gè)發(fā)起連接的syn數(shù)據(jù)包時(shí),傳給地址管理單元,地址管理就為該連接分配一個(gè)地址空間,同時(shí)通過映射單元告訴客戶數(shù)據(jù)發(fā)送端與客戶端完成三次握手,建立連接。

          當(dāng)客戶數(shù)據(jù)接收端收到get數(shù)據(jù)包時(shí),將該數(shù)據(jù)包發(fā)送給字符串匹配表,該表會(huì)將信息在后端服務(wù)器的位置返回給地址管理單元,地址管理單元將該信息送給數(shù)據(jù)包映射單元,映射單元將該信息寫入相應(yīng)的ssram空間中,同時(shí)通知服務(wù)器發(fā)送端與后端服務(wù)器建立連接,這樣就完成了一個(gè)tcp的粘合過程。

          在客戶端與服務(wù)器的通信過程中,數(shù)據(jù)包映射單元通過雙方sip、dip信息從ssarm中查找出對(duì)應(yīng)的替換信息,完成雙方數(shù)據(jù)包的映射。

          在客戶端通信結(jié)束時(shí),由地址管理單元對(duì)雙方使用的地址空間進(jìn)行回收;同時(shí)為防止通過過程中的異常中斷,地址管理單元內(nèi)部采用了定時(shí)器機(jī)制對(duì)地址空間進(jìn)行監(jiān)測(cè),根據(jù)定時(shí)器返回結(jié)果回收過時(shí)地址,防止過時(shí)信息被查用。

          2.2 設(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ā)起的新的連接請(qǐng)求,系統(tǒng)內(nèi)部根據(jù)對(duì)cam查找返回的地址來區(qū)分不同的數(shù)據(jù)流,因此要對(duì)內(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ā)對(duì)方的數(shù)據(jù)包。

          2.2.1 數(shù)據(jù)收發(fā)

          對(duì)于系統(tǒng)的發(fā)送接口來說,所有發(fā)送數(shù)據(jù)包的轉(zhuǎn)發(fā)由數(shù)據(jù)包映射單元完成,因此發(fā)送接口僅完成簡(jiǎn)單的數(shù)據(jù)包轉(zhuǎn)發(fā)功能,而當(dāng)系統(tǒng)接收到數(shù)據(jù)包時(shí),要對(duì)數(shù)據(jù)包進(jìn)行協(xié)議解析從而決定數(shù)據(jù)包后端處理得方式,在接收部分主要對(duì)三種數(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所示。

          每次地址管理單元接收到新的請(qǐng)求連接就從鏈表的頭部取出該可用地址空間,將新請(qǐng)求的sip、dip信息寫入該地址的can中,同時(shí)在該地址對(duì)應(yīng)的ssram的頁(yè)面中寫入相關(guān)的信息。假設(shè)鏈表中取出地址為n,頁(yè)面大小為m,則ssram中對(duì)應(yīng)的頁(yè)面起始地址l為:

          l=n×m

          當(dāng)?shù)刂饭芾韱卧邮盏阶址ヅ浔矸祷氐暮蠖朔?wù)器位置信息時(shí),首先通過該數(shù)據(jù)包的sip、dip從cam中查找該數(shù)據(jù)流對(duì)應(yīng)的地址、通過上述計(jì)算公式找出ssarm中對(duì)應(yīng)的頁(yè)面,寫入返回信息。

          對(duì)于地址空間的回收,為防止通信異常中斷而無法回收地址,在系統(tǒng)中采用定時(shí)器機(jī)制,即在一段時(shí)間后對(duì)ssram中的定時(shí)器標(biāo)志位進(jìn)行檢測(cè),一旦發(fā)現(xiàn)該標(biāo)志位過時(shí)則通知地址管理單元回收地址,地址管理單元收到某一地址過時(shí)的信息后,將該地址掛在地址管理鏈表尾部,同時(shí)清除該地址cam中的sip、dip信息,這樣當(dāng)同一ip發(fā)起新的連接時(shí)就不會(huì)查找到過時(shí)信息。

          2.2.3 數(shù)據(jù)包映射單元

          為完成數(shù)據(jù)包的映射,該部分需要實(shí)現(xiàn)兩個(gè)功能:ack序列號(hào)轉(zhuǎn)換和雙方轉(zhuǎn)換信息的存儲(chǔ)。

          在tcp粘合過程中,由于tcp粘合系統(tǒng)送給客戶端的ack序列號(hào)和后端服務(wù)器送給客戶端的ack序列號(hào)不相同,因此要進(jìn)行ack序列號(hào)的轉(zhuǎn)換,同時(shí)要重新計(jì)算數(shù)據(jù)包的tcp/ip校驗(yàn)和。

          現(xiàn)假設(shè)客戶端發(fā)送了請(qǐng)求連接的syn數(shù)據(jù)包,而客戶端返回給客戶端的syn序列號(hào)為地址管理單元分配給該連接的地址a0,而當(dāng)系統(tǒng)和服務(wù)器建立鏈接時(shí)服務(wù)器端返回的syn序列號(hào)為a1,則根據(jù)這兩個(gè)序列號(hào)可計(jì)算差值a為:a=a0-a1。

          以后通信的過程中,只要將服務(wù)器發(fā)送給系統(tǒng)的序列號(hào)加上a就能夠轉(zhuǎn)換成為系統(tǒng)送給客戶端的序列號(hào),這樣就完成了服務(wù)器端向客戶端發(fā)送數(shù)據(jù)的轉(zhuǎn)換,反之就可以完成客戶端向服務(wù)器發(fā)送數(shù)據(jù)的轉(zhuǎn)換。

          對(duì)于數(shù)據(jù)包的校驗(yàn)和轉(zhuǎn)換而言,由于校驗(yàn)和本質(zhì)上是加法運(yùn)算,所以只需要在原來的校驗(yàn)和基礎(chǔ)上加上序列號(hào)之差(或減去一個(gè)差值)即可完成校驗(yàn)和的轉(zhuǎn)換。

          在同一個(gè)通信過程中,ack序列號(hào)轉(zhuǎn)換、校驗(yàn)和的轉(zhuǎn)換、發(fā)起連接的syn、get數(shù)據(jù)包和定時(shí)器標(biāo)志位等信息都需要存儲(chǔ),由于每個(gè)數(shù)據(jù)流需要存儲(chǔ)的內(nèi)容較多,單一的地址已經(jīng)無法滿足存儲(chǔ)要求,此處存儲(chǔ)管理采用頁(yè)面式的管理方式,將整個(gè)存儲(chǔ)空間若干頁(yè)面,每個(gè)數(shù)據(jù)流信息存入一個(gè)頁(yè)面中,ssram的存儲(chǔ)格式如圖5所示。

          3 性能分析

          該架構(gòu)已在試驗(yàn)系統(tǒng)上實(shí)現(xiàn),接收端為兩個(gè)ge口,相對(duì)于采用tcp粘合的應(yīng)用代理服務(wù)器來說(其中代理服務(wù)器cpu pentium iv 2ghz),具體的性能對(duì)比如表1所示。

          從上表可以看出在最大連接數(shù)方面,在本系統(tǒng)中采用一個(gè)18mbit的cam,它能夠提供的最大地址空間為288k×144bit,只能支持288k的連接數(shù),對(duì)于服務(wù)器的最大連接數(shù)來說,syn和get數(shù)據(jù)包需要經(jīng)過軟件協(xié)議解析,因此當(dāng)最大連接數(shù)達(dá)到582k時(shí)cpu的利用率將達(dá)到90%以上[3]。無法再處理新的連接,從上述分析中可以看出,由于受硬件資源的限制,硬件系統(tǒng)可以支持的最大連接數(shù)小于代理服務(wù)器,但是在實(shí)際的網(wǎng)絡(luò)傳輸過程中,一個(gè)http連接持續(xù)的時(shí)間一般為幾百個(gè)毫秒,在硬件系統(tǒng)達(dá)到每秒21k的連接數(shù)時(shí),能夠承受的一個(gè)http最大持續(xù)時(shí)間為13秒,遠(yuǎn)遠(yuǎn)大于實(shí)際http連接的持續(xù)時(shí)間,因此硬件系統(tǒng)支持的最大連接數(shù)是夠用的,當(dāng)代理服務(wù)器采用千兆網(wǎng)卡來接收數(shù)據(jù)時(shí),由于數(shù)據(jù)需要經(jīng)過上層協(xié)議解析,因此實(shí)際能夠接收的數(shù)據(jù)量只能達(dá)到300mbps,假設(shè)每次平均請(qǐng)求512b,則代理服務(wù)器能夠支持的最大每秒連接數(shù)大約為7k,而當(dāng)硬件系統(tǒng)工作在133mhz,內(nèi)部采用32bit總線傳輸時(shí),整個(gè)系統(tǒng)的帶寬達(dá)到4gbit,同時(shí)系統(tǒng)內(nèi)部采用流水線方式,能夠線速處理1gbps數(shù)據(jù)的接收,假設(shè)平均每次請(qǐng)求512b,則硬件系統(tǒng)能夠處理的每秒最大連接數(shù)達(dá)到21k,因此在單位時(shí)間內(nèi)能夠處理的連接數(shù)量會(huì)高于代理服務(wù)器。

          隨著http訪問量的不斷增大,對(duì)于訪問數(shù)據(jù)包的分流力度要求越來越細(xì),本文提出的基于硬件實(shí)現(xiàn)的tcp粘合系統(tǒng),在tcp粘合技術(shù)的基礎(chǔ)上,利用硬件的高速處理特性,可以達(dá)到2個(gè)ge口收發(fā)(2gbps)的線速處理性能,同時(shí)能夠較好的基于內(nèi)容來區(qū)分?jǐn)?shù)據(jù)流,從而避免了后端服務(wù)器數(shù)據(jù)的重新分發(fā)。

          tcp/ip相關(guān)文章:tcp/ip是什么




          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();