999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于異步I/O模型的雙機TCP代理的研究與實現

2008-12-31 00:00:00王寶生
電腦知識與技術 2008年33期

摘要:一些特殊領域的應用對于性能要求很高,而通用單機TCP代理不能滿足需求。文章分析了TCP代理的實現機制,借鑒TCP連接管理有限狀態機、以異步I/O模型研究和實現了雙機TCP代理,并將其應用于一個安全網關項目,取得良好效果。

關鍵詞:套接字;異步I/O模型;有限狀態機

中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)33-1329-03

The Research and Implementation of Double Entities TCP Proxy Base on Asynchronous I/O Model

ZHAO kun, WANG Bao-sheng

(Computer College, National University of Defense Technology, Changsha 410073,China)

Abstract: General single entitie TCP proxy can’t satisfy the requirements for high performance in some special applications. By analyzing the implementation mechanism of TCP proxy , we research and implement two entities TCP proxy structure model base on asynchronous I/O model by referring to Finite State Machine of TCP connection management. It has been applied to a secure gateway project successfully.

Key words: socket; asynchronous I/O mode; FSM

1 引言

TCP代理是建立在現代通信網絡技術和信息安全技術基礎之上的應用性安全技術,已經越來越多地應用于專用網絡與公用網絡的互連環境之中,尤其以接入Internet網絡為最甚。TCP代理是TCP/IP協議應用層上的一種代理服務軟件,滿足下列條件:接收并解析客戶端的請求;創建到服務端的新連接,并轉發客戶端的請求信息;接收服務端反饋的信息;發出或解釋服務端的響應并將該響應傳回給客戶端。TCP代理直接與TCP層交互,切斷內外網間的TCP連接,將一條連接分為兩斷,同時阻斷傳輸層TCP網絡協議,將源數據包中的數據拷貝下來,通過應用層過代理轉發實現數據擺渡。

本文在研究和比較傳統TCP代理模型的基礎上,提出了基于異步I/O模型的雙機TCP代理,提供了可靠的端到端的數據傳輸。并設計與實現一套原型系統。

2 雙機TCP代理的結構模型

單機TCP代理:客戶端和服務端建立的連接都是通過同一個代理服務器完成。類似圖1中的客戶端服務器B既要和外網A(客戶端)建立TCP連接,又要和內網D(服務端)建立TCP連接。這樣的結構本身存在著一些缺陷:1) 內外連接都是TCP/IP協議,TCP/IP協議的漏洞帶來的風險。2) 單機代理系統自身體系結構使內網存在受外部攻擊的危險。

雙機TCP代理結構可以有效地克服單機TCP代理的弱點。如圖1所示:代理服務器分別與內外網交互,代理服務器雙機之間用內部專用通道進行數據交換。由外網到內網的一次訪問經過了客戶端A到客戶端服務器B的TCP連接AB,客戶端服務器B到服務端服務器C的專用通道連接BC,服務端服務器C到服務端D的TCP連接CD。外網客戶端和內網服務端由這3個連接互聯,TCP代理則控制和管理這3個連接的建立、數據轉發和斷開。

圖1 雙機TCP代理結構圖

圖2 雙機TCP代理有限狀態機

雙機TCP代理結構可以有效地克服單機TCP代理的弱點:1) 外網和內網在物理上是隔離的,阻斷網絡的直接連接。2) 阻斷網絡的邏輯連接,由于TCP/IP的協議必需被剝離,將裸數據通過內部TCP報文專用通道傳遞。3) 數據都是雙機兩級代理完成,兩級代理之間是隔離的。4) 內外代理之間只傳輸裸數據,不具備攻擊或對網絡安全有害。

3 雙機TCP代理狀態機研究

圖2直觀的反應了圖1所示的雙機TCP代理結構模型中客戶端服務器B和服務端服務器C各自代理狀態遷移:

1) 雙機TCP代理連接狀態遷移:客戶端和服務端

客戶端服務器B監聽到所代理端口的外網A發起的TCP連接請求,建立AB連接,客戶端服務器B向C發送建立內部專用通道BC連接請求,若接收C應答成功,客戶端服務器B則成功建立內部專用通道BC連接。

服務端服務器C接收到B發送的內部專用通道CB連接請求,服務端服務器C向B發送連接建立成功應答,服務端服務器C建立內部專用通CB連接,服務端服務器C向內網D發起TCP連接請求;若應答成功,服務端服務器C建立CD連接。

2) 雙機TCP代理數據交換狀態遷移:

數據傳輸方向A->B->C->D:服務器B在(AB r ok BC w ok)狀態:連接AB接收數據到緩沖區AB_buf[],若緩沖區AB_buf[]有數據,連接BC通過內部專用數據通道發送緩沖區AB_buf[]數據到C;服務器C在(CB r ok CD w ok)狀態:連接CB接收內部專用數據通道數據到緩沖區CB_buf[],若緩沖區CB_buf[]有數據,連接CD發送緩沖區CB_buf[]數據到D。

數據傳輸方向D->C->B->A:服務器C在(CB W ok CD R ok)狀態:連接CD接收數據到緩沖區CD_buf[],若緩沖區CD_buf[]有數據,連接CB通過內部專用數據通道發送緩沖區CD_buf[]數據到B;服務器B在(AB w ok BC r ok)狀態:連接BC接收內部專用數據通道數據到緩沖區BC_buf[],若緩沖區BC_buf[]有數據,連接AB發送緩沖區BC_buf[]數據到A。

3) 雙機TCP代理連接斷開狀態遷移

連接AB斷開:服務器B在(AB r ok BC w ok)狀態:連接AB接收到外網A的fin請求,連接BC發送結束內部專用通道請求到服務器C,連接BC斷開;服務器C在(CB r ok CD w ok)狀態:連接CB接收到服務器B發的結束請求,連接CB斷開,連接CD發送fin請求到內網D,連接CD斷開。

連接BC斷開:服務器B在(AB w ok BC r ok)狀態:連接AB發送fin請求到外網A,連接AB斷開;服務器C在(CB r ok CD w ok)狀態:連接CD發送fin請求到內網D;連接CD斷開。

連接CD斷開:服務器C在(CB W ok CD R ok)狀態:連接CD接收到內網D的fin請求,連接CD發送結束內部專用通道請求到服務器B,連接CB斷開;服務器B在(AB w ok BC r ok)狀態:連接BC接收到服務器C發的結束請求,連接BC斷開,連接AB發送fin請求到外網A,連接AB斷開。

4 異步I/O驅動框架下雙機TCP代理的實現

4.1 異步I/O驅動框架select輪詢機制

select調用一個進程所打開的FD是有一定限制的,由FD_SETSIZE設置,默認值是2048。對于需要支持的上萬連接數目的服務器來說顯然太少了。通常給出解決方案一是選擇修改這個宏然后重新編譯內核,這樣會帶來網絡效率的下降;二是選擇多進程的解決方案(傳統的 Apache方案),不過雖然linux上面創建進程的代價比較小,但仍舊是不可忽視的,加上進程間數據同步遠比不上線程間同步的高效,所以也不是一種完美的方案。

圖3 異步I/O框架select輪循設備圖

select另一個致命弱點就是當你擁有一個很大的socket集合,不過由于網絡延時,任一時間只有部分的socket是活躍的,但是select每次調用都會線性掃描全部的集合,導致效率呈現線性下降。異步I/O驅動框架下的select輪詢設備最主要就是解決了select線性掃描全部集合所帶來的缺陷。它只會對活躍的socket進行操作---這是因為在異步I/O驅動框架中select是根據每個套接字注冊事件的回調函數實現的。那么,只有活躍的socket才會被激活去調用回調函數,其他idle狀態socket則不會,激活后的活躍的socket會在select事件論詢池刪除,這樣select下次調用只會線性掃描idle狀態的socket集合,從而實現了異步I/O。

注冊機制:如圖3所示,首先異步I/O套接字控制塊被iv_select_register_fd()調用,添加到all[512]雙向hash鏈表后;然后根據套接字需要等待發生的事件類型通過FD_SET()添加到readfds_master和writefds_master集合。通過這兩部實現了對異步I/O套接字控制塊在select輪詢設備中的注冊。

輪詢機制:

1) 每次select調用開始前,先將readfds_master和writefds_master集合中各拷貝當前最大文件描述符數的1/8拷貝到需要掃描的readfds和writefds集合。

2) select調用開始后線性掃描readfds和writefds集合,將有等待事件發生的異步I/O套接字控制塊激活添加到active雙向鏈表隊列等待異步I/O框架調度處理。

3) 將異步I/O套接字控制塊的fd從readfds_master和writefds_master集合刪除。下次輪詢的readfds和writefds集合將不會有該活躍的fd。如果下一個循環還要關注這個fd的話,則需要重新注冊該fd的異步I/O套接字控制塊。

4) 最后通過iv_run_active_list()調用active中的每個異步I/O套接字控制塊的回調函數處理異步I/O事件。

這樣的輪詢機制提高了select線性掃描的效率。

輪詢匹配:select調用后返回活躍的套接字fd,將fd匹配到異步I/O套接控制塊的只需從all[fd% HASH_SIZE]位置開始向后遍歷雙向鏈表,找到相同的fd的異步I/O控制塊,這樣不需要遍歷整個all[]鏈表,當all[]注冊了大量的異步I/O控制塊,通過將fd hash后查詢方式提高異步I/O控制塊事件回調函數調用的效率。

4.2 異步I/O框架下雙機TCP代理體系結構

通常的TCP代理軟件用戶進程直接調用Socket層提供的統一套接字接口。而基于異步I/O 模型的TCP代理則在用戶層和Socket層之間通過如圖3所示的異步I/O驅動層來實現上下層的異步關聯。

異步I/O TCP代理實現所遵從的分層原則:(1)Socket層:為用戶進程提供統一的套接字接口,它不僅支持各種網絡工作形式,而且還是一個交互式通信機制。(2)異步I/O驅動框架層:注冊管理Socket層為用戶進程提供的套接字,以套接字的異步I/O事件來觸發上層的調用。(3)TCP代理應用層:按功能分為代理服務控制、代理連接管理、代理數據轉發三部分。

各部分的功能:

代理服務控制:監聽在異步I/O驅動注冊過的控制端口號,建立控制連接后,等待接收控制報文,分析報文,得到需要代理的服務端口號,并添加到服務鏈表。調用代理連接管理,監聽該服務端口,建立監聽套接字,并在異步I/O驅動注冊該套接字。

代理連接管理:監聽代理端口,有訪問端口的TCP連接,為該連接建立一條內部專用通道連接。并將新建的這兩條連接套接字在異步I/O驅動注冊,建立兩個讀寫數據緩沖區,記錄更新連接狀態,在forward狀態新建連接的代理數據轉發啟動。

代理數據轉發:異步I/O驅動探測每個注冊的連接是否有讀寫事件發生,若某個連接有讀寫事件發生,回調代理數據轉發中異步讀寫操作,根據讀寫數據緩沖區的狀態進行數據轉發。

異步I/O驅動:管理控制所有注冊的連接套接字,注冊、撤消、自動處理異步I/O事件,異步觸發代理服務控制、異步觸發代理連接管理、異步觸發代理數據轉發。對于上層應用代理的輸入是注冊連接套接字,輸出是回調應用代理的相關操作。

圖4 雙機TCP代理體系結構

4.3 代理數據轉發的異步觸發機制

代理數據轉發的異步觸發實現主要以讀寫操作的返回值和應用緩沖區的狀態來驅動。讀入和寫出操作是兩個獨立的進程,應用緩沖區數據滿和數據空狀態是讀入和寫出進程死鎖和解鎖的信號量。

當緩沖區數據不為空,也不為滿時,讀寫操作可以同時進行;

當緩沖區數據滿時,讀入進程死鎖,緩沖區不可讀入;

當緩沖區數據空時,寫出進程死鎖,緩沖區不可寫出;

讀入進程運行時,當緩沖區數據空時,寫出進程解鎖;

寫出進程運行時,當緩沖區數據滿時,讀入進程解鎖;

如果讀調用和寫調用失敗返回,則結束讀入和寫出操作。

5 結論

本文在Linux系統上基于異步I/O模型研究與實現了雙機TCP代理傳輸服務的,并得以成功地應用。與通用單機TCP代理應用相比,在異步I/O模型基礎上編寫的該雙機TCP代理傳輸在安全性和可靠性方面有效地滿足了實際項目的需要,并且精簡了實現代碼,從而減少了內存空間的占用、提高了代碼的執行效率。同時該異步I/O模型的實現方法也同樣適用于其它類似場合,具有較為普遍的意義。在后續工作中作者將進一步完善該異步I/O模型的實現,并在提高的性能和穩定性上下功夫。

參考文獻

[1] W.Richard Stevens TCP/IP詳解,卷二:實現[M]. 北京:機械工業出版社,2000.

[2] Andrew S. Tanenbaum,Computer Networks (Third Edition),Prentice Hall PTR,2002

[3] W.Richard Stevens,Bill Fenner,Andrew M.Rudoff著,楊繼張譯,UNIX網絡編程 第一卷:套接口API(第三版)[M]. 北京:清華大學出版社,2006.

主站蜘蛛池模板: 久久精品无码中文字幕| 日韩第九页| 毛片久久网站小视频| 亚洲欧洲日韩综合| 亚洲伦理一区二区| 久久一级电影| 9久久伊人精品综合| 亚洲国产精品国自产拍A| 日韩毛片基地| 精品福利一区二区免费视频| 国产99在线观看| 99视频在线看| 午夜视频日本| 欧美精品亚洲二区| 夜夜操国产| 成人免费午夜视频| 无码在线激情片| 中国精品自拍| 国产区免费精品视频| 91免费片| 国产尤物在线播放| 国产a在视频线精品视频下载| 色综合中文| 婷婷综合色| 亚洲天堂日韩在线| 亚洲无码电影| 国产欧美亚洲精品第3页在线| 91精品国产自产在线观看| 72种姿势欧美久久久久大黄蕉| 欧美另类第一页| 久久国产精品麻豆系列| 91九色视频网| 欧美精品xx| 久久人搡人人玩人妻精品一| 高清久久精品亚洲日韩Av| 在线国产毛片手机小视频| 欧美日本不卡| 精品少妇人妻无码久久| 免费不卡视频| 久操线在视频在线观看| 一级一级一片免费| 精品一区二区三区波多野结衣| 一级毛片在线直接观看| 亚洲无码日韩一区| 国产免费自拍视频| 亚洲区第一页| 亚洲成人精品在线| 日韩精品亚洲一区中文字幕| 国产日韩AV高潮在线| 欧美国产日韩另类| 一本大道无码日韩精品影视| 免费一极毛片| 国产精品久久自在自线观看| 国产97视频在线观看| 欧美专区在线观看| 九九九久久国产精品| 偷拍久久网| 九九九精品成人免费视频7| 国产在线八区| 国产va免费精品观看| 九九久久99精品| 亚洲色图欧美| 亚洲区欧美区| 欧美精品一区二区三区中文字幕| 国产网友愉拍精品| 玖玖免费视频在线观看| …亚洲 欧洲 另类 春色| 亚洲无码91视频| 91久久国产热精品免费| 无码精品福利一区二区三区| 久草青青在线视频| 国产成人a在线观看视频| 国产免费网址| 日韩乱码免费一区二区三区| 亚洲人成影院在线观看| 欧美成人影院亚洲综合图| 久操线在视频在线观看| 巨熟乳波霸若妻中文观看免费 | 国产一二三区在线| 国产麻豆永久视频| 国产精品主播| 高清欧美性猛交XXXX黑人猛交|