



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 基于TCP隧道技術(shù)的研究 摘要:本文從應(yīng)用的角度出發(fā),介紹了TCP穿越NAT,使不同局域網(wǎng)內(nèi)的端點進(jìn)行直連式通信。在遠(yuǎn)程會議項目應(yīng)用中大大改觀了傳統(tǒng)模式的實時流媒體數(shù)據(jù)因從服務(wù)器中轉(zhuǎn)而造成延時、丟幀等現(xiàn)象,使單位服務(wù)器為更多的端點提供服務(wù),也使服務(wù)質(zhì)量有了明顯的提高。關(guān)鍵詞:TCP隧道NATP2P一、引言隨著Internet的迅速發(fā)展以及IPv4 地址數(shù)量的限制使得網(wǎng)絡(luò)地址翻譯(NAT, Network Address Trans2lation)設(shè)備得到廣泛應(yīng)用。NAT設(shè)備允許處于同一NAT后的多臺主機(jī)共享一個公網(wǎng)(本文將處于同一NAT后的網(wǎng)絡(luò)稱為私網(wǎng),處于NAT前的網(wǎng)絡(luò)稱為公網(wǎng)) IP 地
2、址。一個私網(wǎng)IP 地址通過NAT設(shè)備與公網(wǎng)的其他主機(jī)通信。公網(wǎng)和私網(wǎng)IP地址域,如下圖簡單所示:一般來說都是由私網(wǎng)內(nèi)主機(jī)(例如上圖中“電腦A-01(192.168.0.2)”)主動發(fā)起連接,并將數(shù)據(jù)包經(jīng)過NAT地址轉(zhuǎn)換后送給公網(wǎng)(外網(wǎng))上的服務(wù)器(例如上圖中的“Server”),連接建立以后就可以進(jìn)行雙向數(shù)據(jù)傳送了。而NAT設(shè)備允許私網(wǎng)(內(nèi)網(wǎng))內(nèi)主機(jī)主動向公網(wǎng)內(nèi)主機(jī)發(fā)送數(shù)據(jù),但卻禁止反方向的主動傳遞,此時的數(shù)據(jù)將會被NAT認(rèn)為是非法數(shù)據(jù)而被拋棄,從而通信不能正常進(jìn)行。但在一些特殊的場合又非常需要不同私網(wǎng)內(nèi)的主機(jī)進(jìn)行互聯(lián)(例如P2P軟件、網(wǎng)絡(luò)視頻會議、視頻傳輸?shù)鹊龋敲碩CP穿越NAT的問題必
3、須解決。二、NAT的類型NAT(Network Address Translators),網(wǎng)絡(luò)地址轉(zhuǎn)換:網(wǎng)絡(luò)地址轉(zhuǎn)換是在IP地址日益缺乏的情況下產(chǎn)生的,它的主要目的就是為了能夠地址重用。NAT分為兩大類,基本的NAT和NAPT(Network Address/Port Translator)。NAT設(shè)備的類型對于TCP穿越NAT,有著十分重要的影響,根據(jù)端口映射方式,NAT可分為如下4類,前3種NAT類型可統(tǒng)稱為cone類型。1、全克隆(Full Cone): NAT把所有來自相同內(nèi)部IP地址和端口的請求映射到相同的外部IP地址和端口。任何一個外部主機(jī)均可通過該映射發(fā)送IP包到該內(nèi)部主機(jī)。2、
4、限制性克隆(Restricted Cone): NAT把所有來自相同內(nèi)部IP地址和端口的請求映射到相同的外部IP地址和端口。但是,只有當(dāng)內(nèi)部主機(jī)先給IP地址為X的外部主機(jī)發(fā)送IP包,該外部主機(jī)才能向該內(nèi)部主機(jī)發(fā)送IP包。3、端口限制性克隆(Port Restricted Cone): 端口限制性克隆與限制性克隆類似,只是多了端口號的限制,即只有內(nèi)部主機(jī)先向IP地址為X,端口號為P的外部主機(jī)發(fā)送1個IP包,該外部主機(jī)才能夠把源端口號為P的IP包發(fā)送給該內(nèi)部主機(jī)。4、對稱式NAT(Symmetric NAT):這種類型的NAT與上述3種類型的不同,在于當(dāng)同一內(nèi)部主機(jī)使用相同的端口與不同地址的外部主
5、機(jī)進(jìn)行通信時,NAT對該內(nèi)部主機(jī)的映射會有所不同。對稱式NAT不保證所有會話中的私有地址和公開IP之間綁定的一致性。相反,它為每個新的會話分配一個新的端口號。三、TCP隧道技術(shù)TCP隧道(NAT端口映射)通俗的名字為網(wǎng)絡(luò)打洞,主要解決不同局域網(wǎng)的端點之間的直連式通信,也就是比較流行的P2P通信,此技術(shù)的應(yīng)用能使中心服務(wù)器的載荷大大減輕,從而使原有的服務(wù)器能夠為更多的端點提供服務(wù)。我們先假設(shè)一下:有一個服務(wù)器(S)在公網(wǎng)上有一個IP,兩個私網(wǎng)分別由NAT-A和NAT-B連接到公網(wǎng),NAT-A后面有一臺客戶端A,NAT-B后面有一臺客戶端B,現(xiàn)在,我們需要借助S將A和B建立直接的TCP連接,即由B
6、向A打一個洞,讓A可以沿這個洞直接連接到B主機(jī),就好像NAT-B不存在一樣。流程實現(xiàn)如下:1、S啟動兩個網(wǎng)絡(luò)偵聽,一個叫【主連接】偵聽,一個叫【協(xié)助打洞】的偵聽。2、A和B分別與S的【主連接】保持聯(lián)系。3、當(dāng)A需要和B建立直接的TCP連接時,首先連接S的【協(xié)助打洞】端口,并發(fā)送協(xié)助連接申請。同時在該端口號上啟動偵聽。注意由于要在相同的網(wǎng)絡(luò)終端上綁定到不同的套接字上,所以必須為這些套接字設(shè)置 SO_REUSEADDR屬性(允許重用),否則偵聽會失敗。4、S的【協(xié)助打洞】連接收到A的申請后通過【主連接】通知B,并將A經(jīng)過NAT-A轉(zhuǎn)換后的公網(wǎng)IP地址和端口等信息告訴B。5、B收到S的連接通知后首先
7、與S的【協(xié)助打洞】端口連接,隨便發(fā)送一些數(shù)據(jù)后立即斷開,這樣做的目的是讓S能知道B經(jīng)過NAT-B轉(zhuǎn)換后的公網(wǎng)IP和端口號。6、B嘗試與A的經(jīng)過NAT-A轉(zhuǎn)換后的公網(wǎng)IP地址和端口進(jìn)行connect,根據(jù)不同的路由器會有不同的結(jié)果,有些路由器在這個操作就能建立連接(例如我用的TPLink R402),大多數(shù)路由器對于不請自到的SYN請求包直接丟棄而導(dǎo)致connect失敗,但NAT-A會紀(jì)錄此次連接的源地址和端口號,為接下來真正的連接做好了準(zhǔn)備,這就是所謂的打洞,即B向A打了一個洞,下次A就能直接連接到B剛才使用的端口號了。7、客戶端B打洞的同時在相同的端口上啟動偵聽。B在一切準(zhǔn)備就緒以后通過與S
8、的【主連接】回復(fù)消息“我已經(jīng)準(zhǔn)備好”,S在收到以后將B經(jīng)過NAT-B轉(zhuǎn)換后的公網(wǎng)IP和端口號告訴給A。8、A收到S回復(fù)的B的公網(wǎng)IP和端口號等信息以后,開始連接到B公網(wǎng)IP和端口號,由于在步驟6中B曾經(jīng)嘗試連接過A的公網(wǎng)IP地址和端口,NAT-A紀(jì)錄了此次連接的信息,所以當(dāng)A主動連接B時,NAT-B會認(rèn)為是合法的SYN數(shù)據(jù),并允許通過,從而直接的TCP連接建立起來了。四、用C語言編寫P2P直連,參考源碼如下BOOL Handle_SrvReqDirectConnect(t_SrvReqDirectConnectPkt *pSrvReqDirectConnectPkt)CSocket Sock;
9、if(!Sock.Socket()return FALSE;UINT nOptValue = 1;if(!Sock.SetSockOpt(SO_REUSEADDR,&nOptValue ,sizeof(UINT)return FALSE;if(!Sock.Bind(g_nHolePort)return FALSE;for(int ii=0; iiszInvitedIP, pSrvReqDirectConnectPkt-nInvitedPort) Sleep (100);else break;if(WaitForSingleObject(g_hEvt_ConnectOK,0) != WAIT_O
10、BJECT_0)if(HANDLE_IS_VALID(g_hEvt_ConnectOK)SetEvent (g_hEvt_ConnectOK);char szRecvBufferNET_BUFFER_SIZE =0;int nRecvBytes =0;for(int i=0;i0)memset(szRecvBuffer,0,sizeof(szRecvBuffer);SLEEP_BREAK(1);elseSLEEP_BREAK ( 300 );return TRUE;此段代碼功能描述:服務(wù)器要求主動端(客戶端A)直接連接被動端(客戶端B)的外部IP和端口號。五、結(jié)論以上是TCP隧道的實現(xiàn)方法,能夠提供不同局域網(wǎng)的端點之間進(jìn)行直連式通信。使外網(wǎng)數(shù)據(jù)能夠避開路由器的阻欄,順利的到達(dá)內(nèi)網(wǎng)的目的主機(jī),從而使不同內(nèi)網(wǎng)的端點通信變成現(xiàn)實。TCP隧道技術(shù)的應(yīng)用從經(jīng)濟(jì)角度看能夠大大節(jié)省服務(wù)器投入成本,充分利用現(xiàn)有的網(wǎng)絡(luò)資源更好的服務(wù)于用戶。Reference:1向隅.計算機(jī)網(wǎng)絡(luò)基礎(chǔ)及應(yīng)用M.西安電子科技大學(xué)出版社
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年電工(中級)職業(yè)技能鑒定實操試卷:電力系統(tǒng)運(yùn)行維護(hù)與管理試題
- 2025年江西省事業(yè)單位招聘考試教師招聘美術(shù)學(xué)科專業(yè)知識試卷(美術(shù)教育創(chuàng)新與實施策略)試題
- 大數(shù)據(jù)應(yīng)用實戰(zhàn)案例分析試題集
- 那一次的感動講述一個感人的故事(12篇)
- 教育精準(zhǔn)扶貧項目實施過程中的社會影響評估報告
- 2025年腫瘤早篩技術(shù)臨床應(yīng)用在癌癥患者社會活動參與創(chuàng)新中的價值與市場前景報告
- 商業(yè)空間設(shè)計與施工承攬合同
- 2025年快時尚品牌線上線下融合策略深度報告
- 學(xué)習(xí)生活的點滴話題作文(6篇)
- 電子健康檔案管理合同
- 2024年 黃岡市法院系統(tǒng)招聘審判輔助人員考試真題試題含答案
- 荊州中學(xué)2024-2025學(xué)年高二下學(xué)期6月月考?xì)v史試題答案
- 公司消防網(wǎng)格化管理制度
- 外科換藥拆線技術(shù)規(guī)范
- 護(hù)士職業(yè)溝通技巧課件
- 2025至2030中國氧化鋁纖維行業(yè)供需趨勢及投資風(fēng)險報告
- 2025年四川瀘州市中考數(shù)學(xué)試卷真題及答案詳解(精校打印)
- 2025年中考考前最后一卷化學(xué)(武漢卷)(全解全析)
- 2026屆高考語文復(fù)習(xí):直擊2025年語文高考閱讀客觀題關(guān)鍵詞比對
- 健康教育大講堂:跌倒
- 江西中考語文試題及答案
評論
0/150
提交評論