基于TCP隧道技術(shù)的研究_第1頁(yè)
基于TCP隧道技術(shù)的研究_第2頁(yè)
基于TCP隧道技術(shù)的研究_第3頁(yè)
基于TCP隧道技術(shù)的研究_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 基于TCP隧道技術(shù)的研究 摘要:本文從應(yīng)用的角度出發(fā),介紹了TCP穿越NAT,使不同局域網(wǎng)內(nèi)的端點(diǎn)進(jìn)行直連式通信。在遠(yuǎn)程會(huì)議項(xiàng)目應(yīng)用中大大改觀了傳統(tǒng)模式的實(shí)時(shí)流媒體數(shù)據(jù)因從服務(wù)器中轉(zhuǎn)而造成延時(shí)、丟幀等現(xiàn)象,使單位服務(wù)器為更多的端點(diǎn)提供服務(wù),也使服務(wù)質(zhì)量有了明顯的提高。關(guān)鍵詞:TCP隧道NATP2P一、引言隨著Internet的迅速發(fā)展以及IPv4 地址數(shù)量的限制使得網(wǎng)絡(luò)地址翻譯(NAT, Network Address Trans2lation)設(shè)備得到廣泛應(yīng)用。NAT設(shè)備允許處于同一NAT后的多臺(tái)主機(jī)共享一個(gè)公網(wǎng)(本文將處于同一NAT后的網(wǎng)絡(luò)稱為私網(wǎng),處于NAT前的網(wǎng)絡(luò)稱為公網(wǎng)) IP 地

2、址。一個(gè)私網(wǎng)IP 地址通過NAT設(shè)備與公網(wǎng)的其他主機(jī)通信。公網(wǎng)和私網(wǎng)IP地址域,如下圖簡(jiǎn)單所示:一般來(lái)說(shuō)都是由私網(wǎng)內(nèi)主機(jī)(例如上圖中“電腦A-01(192.168.0.2)”)主動(dòng)發(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ī)主動(dòng)向公網(wǎng)內(nèi)主機(jī)發(fā)送數(shù)據(jù),但卻禁止反方向的主動(dòng)傳遞,此時(shí)的數(shù)據(jù)將會(huì)被NAT認(rèn)為是非法數(shù)據(jù)而被拋棄,從而通信不能正常進(jìn)行。但在一些特殊的場(chǎng)合又非常需要不同私網(wǎng)內(nèi)的主機(jī)進(jìn)行互聯(lián)(例如P2P軟件、網(wǎng)絡(luò)視頻會(huì)議、視頻傳輸?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è)備的類型對(duì)于TCP穿越NAT,有著十分重要的影響,根據(jù)端口映射方式,NAT可分為如下4類,前3種NAT類型可統(tǒng)稱為cone類型。1、全克隆(Full Cone): NAT把所有來(lái)自相同內(nèi)部IP地址和端口的請(qǐng)求映射到相同的外部IP地址和端口。任何一個(gè)外部主機(jī)均可通過該映射發(fā)送IP包到該內(nèi)部主機(jī)。2、

4、限制性克隆(Restricted Cone): NAT把所有來(lái)自相同內(nèi)部IP地址和端口的請(qǐng)求映射到相同的外部IP地址和端口。但是,只有當(dāng)內(nèi)部主機(jī)先給IP地址為X的外部主機(jī)發(fā)送IP包,該外部主機(jī)才能向該內(nèi)部主機(jī)發(fā)送IP包。3、端口限制性克隆(Port Restricted Cone): 端口限制性克隆與限制性克隆類似,只是多了端口號(hào)的限制,即只有內(nèi)部主機(jī)先向IP地址為X,端口號(hào)為P的外部主機(jī)發(fā)送1個(gè)IP包,該外部主機(jī)才能夠把源端口號(hào)為P的IP包發(fā)送給該內(nèi)部主機(jī)。4、對(duì)稱式NAT(Symmetric NAT):這種類型的NAT與上述3種類型的不同,在于當(dāng)同一內(nèi)部主機(jī)使用相同的端口與不同地址的外部主

5、機(jī)進(jìn)行通信時(shí),NAT對(duì)該內(nèi)部主機(jī)的映射會(huì)有所不同。對(duì)稱式NAT不保證所有會(huì)話中的私有地址和公開IP之間綁定的一致性。相反,它為每個(gè)新的會(huì)話分配一個(gè)新的端口號(hào)。三、TCP隧道技術(shù)TCP隧道(NAT端口映射)通俗的名字為網(wǎng)絡(luò)打洞,主要解決不同局域網(wǎng)的端點(diǎn)之間的直連式通信,也就是比較流行的P2P通信,此技術(shù)的應(yīng)用能使中心服務(wù)器的載荷大大減輕,從而使原有的服務(wù)器能夠?yàn)楦嗟亩它c(diǎn)提供服務(wù)。我們先假設(shè)一下:有一個(gè)服務(wù)器(S)在公網(wǎng)上有一個(gè)IP,兩個(gè)私網(wǎng)分別由NAT-A和NAT-B連接到公網(wǎng),NAT-A后面有一臺(tái)客戶端A,NAT-B后面有一臺(tái)客戶端B,現(xiàn)在,我們需要借助S將A和B建立直接的TCP連接,即由B

6、向A打一個(gè)洞,讓A可以沿這個(gè)洞直接連接到B主機(jī),就好像NAT-B不存在一樣。流程實(shí)現(xiàn)如下:1、S啟動(dòng)兩個(gè)網(wǎng)絡(luò)偵聽,一個(gè)叫【主連接】偵聽,一個(gè)叫【協(xié)助打洞】的偵聽。2、A和B分別與S的【主連接】保持聯(lián)系。3、當(dāng)A需要和B建立直接的TCP連接時(shí),首先連接S的【協(xié)助打洞】端口,并發(fā)送協(xié)助連接申請(qǐng)。同時(shí)在該端口號(hào)上啟動(dòng)偵聽。注意由于要在相同的網(wǎng)絡(luò)終端上綁定到不同的套接字上,所以必須為這些套接字設(shè)置 SO_REUSEADDR屬性(允許重用),否則偵聽會(huì)失敗。4、S的【協(xié)助打洞】連接收到A的申請(qǐng)后通過【主連接】通知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和端口號(hào)。6、B嘗試與A的經(jīng)過NAT-A轉(zhuǎn)換后的公網(wǎng)IP地址和端口進(jìn)行connect,根據(jù)不同的路由器會(huì)有不同的結(jié)果,有些路由器在這個(gè)操作就能建立連接(例如我用的TPLink R402),大多數(shù)路由器對(duì)于不請(qǐng)自到的SYN請(qǐng)求包直接丟棄而導(dǎo)致connect失敗,但NAT-A會(huì)紀(jì)錄此次連接的源地址和端口號(hào),為接下來(lái)真正的連接做好了準(zhǔn)備,這就是所謂的打洞,即B向A打了一個(gè)洞,下次A就能直接連接到B剛才使用的端口號(hào)了。7、客戶端B打洞的同時(shí)在相同的端口上啟動(dòng)偵聽。B在一切準(zhǔn)備就緒以后通過與S

8、的【主連接】回復(fù)消息“我已經(jīng)準(zhǔn)備好”,S在收到以后將B經(jīng)過NAT-B轉(zhuǎn)換后的公網(wǎng)IP和端口號(hào)告訴給A。8、A收到S回復(fù)的B的公網(wǎng)IP和端口號(hào)等信息以后,開始連接到B公網(wǎng)IP和端口號(hào),由于在步驟6中B曾經(jīng)嘗試連接過A的公網(wǎng)IP地址和端口,NAT-A紀(jì)錄了此次連接的信息,所以當(dāng)A主動(dòng)連接B時(shí),NAT-B會(huì)認(rèn)為是合法的SYN數(shù)據(jù),并允許通過,從而直接的TCP連接建立起來(lái)了。四、用C語(yǔ)言編寫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ù)器要求主動(dòng)端(客戶端A)直接連接被動(dòng)端(客戶端B)的外部IP和端口號(hào)。五、結(jié)論以上是TCP隧道的實(shí)現(xiàn)方法,能夠提供不同局域網(wǎng)的端點(diǎn)之間進(jìn)行直連式通信。使外網(wǎng)數(shù)據(jù)能夠避開路由器的阻欄,順利的到達(dá)內(nèi)網(wǎng)的目的主機(jī),從而使不同內(nèi)網(wǎng)的端點(diǎn)通信變成現(xiàn)實(shí)。TCP隧道技術(shù)的應(yīng)用從經(jīng)濟(jì)角度看能夠大大節(jié)省服務(wù)器投入成本,充分利用現(xiàn)有的網(wǎng)絡(luò)資源更好的服務(wù)于用戶。Reference:1向隅.計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)及應(yīng)用M.西安電子科技大學(xué)出版社

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論