久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

p2p實現(xiàn)原理及打洞技術(shù)介紹

 西北望msm66g9f 2018-12-15

 p2p實現(xiàn)原理

什么是打洞,,為什么要打洞

由于Internet的快速發(fā)展 IPV4地址不夠用,,不能每個主機分到一個公網(wǎng)IP 所以使用NAT地址轉(zhuǎn)換。

下面是我在網(wǎng)上找到的一副圖

一般來說都是由私網(wǎng)內(nèi)主機(例如上圖中“電腦A-01”)主動發(fā)起連接,,數(shù)據(jù)包經(jīng)過NAT地址轉(zhuǎn)換后送給公網(wǎng)上的服務器(例如上圖中的“Server”),,連接建立以后可雙向傳送數(shù)據(jù),NAT設備允許私網(wǎng)內(nèi)主機主動向公網(wǎng)內(nèi)主機發(fā)送數(shù)據(jù),但卻禁止反方向的主動傳遞,,但在一些特殊的場合需要不同私網(wǎng)內(nèi)的主機進行互聯(lián)(例如P2P軟件,、網(wǎng)絡會議、視頻傳輸?shù)龋?,TCP穿越NAT的問題必須解決,。

下面是NAT的幾種類型

NAT設備的類型對于TCP穿越NAT,有著十分重要的影響,根據(jù)端口映射方式,NAT可分為如下4類,前3種NAT類型可統(tǒng)稱為cone類型。
(1)全克隆( Full Clone) : NAT把所有來自相同內(nèi)部IP地址和端口的請求映射到相同的外部IP地址和端口,。任何一個外部主機均可通過該映射發(fā)送IP包到該內(nèi)部主機,。
(2)限制性克隆(Restricted Clone) : NAT把所有來自相同內(nèi)部IP地址和端口的請求映射到相同的外部IP地址和端口。但是,只有當內(nèi)部主機先給IP地址為X的外部主機發(fā)送IP包,該外部主機才能向該內(nèi)部主機發(fā)送IP包,。
(3)端口限制性克隆( Port Restricted Clone) :端口限制性克隆與限制性克隆類似,只是多了端口號的限制,即只有內(nèi)部主機先向IP地址為X,端口號為P的外部主機發(fā)送1個IP包,該外部主機才能夠把源端口號為P的IP包發(fā)送給該內(nèi)部主機,。
(4)對稱式NAT ( Symmetric NAT) :這種類型的NAT與上述3種類型的不同,在于當同一內(nèi)部主機使用相同的端口與不同地址的外部主機進行通信時, NAT對該內(nèi)部主機的映射會有所不同。對稱式NAT不保證所有會話中的私有地址和公開IP之間綁定的一致性,。相反,它為每個新的會話分配一個新的端口號,。

 

先假設:有一個服務器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向A打一個洞,讓A可以沿這個洞直接連接到B主機,,就好像NAT-B不存在一樣,。

實現(xiàn)過程如下:
1,、 S啟動兩個網(wǎng)絡偵聽,一個叫【主連接】偵聽,,一個叫【協(xié)助打洞】的偵聽,。
2、 A和B分別與S的【主連接】保持聯(lián)系,。
3,、 當A需要和B建立直接的TCP連接時,首先連接S的【協(xié)助打洞】端口,,并發(fā)送協(xié)助連接申請,。同時在該端口號上啟動偵聽。注意由于要在相同的網(wǎng)絡終端上綁定到不同的套接字上,,所以必須為這些套接字設置 SO_REUSEADDR 屬性(即允許重用),,否則偵聽會失敗。
4,、 S的【協(xié)助打洞】連接收到A的申請后通過【主連接】通知B,,并將A經(jīng)過NAT-A轉(zhuǎn)換后的公網(wǎng)IP地址和端口等信息告訴B。
5,、 B收到S的連接通知后首先與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地址和端口進行connect,根據(jù)不同的路由器會有不同的結(jié)果,,有些路由器在這個操作就能建立連接,,大多數(shù)路由器對于不請自到的SYN請求包直接丟棄而導致connect失敗,但NAT-A會紀錄此次連接的源地址和端口號,,為接下來真正的連接做好了準備,這就是所謂的打洞,,即B向A打了一個洞,,下次A就能直接連接到B剛才使用的端口號了。
7,、 客戶端B打洞的同時在相同的端口上啟動偵聽,。B在一切準備就緒以后通過與S的【主連接】回復消息“我已經(jīng)準備好”,S在收到以后將B經(jīng)過NAT-B轉(zhuǎn)換后的公網(wǎng)IP和端口號告訴給A,。
8,、 A收到S回復的B的公網(wǎng)IP和端口號等信息以后,開始連接到B公網(wǎng)IP和端口號,,由于在步驟6中B曾經(jīng)嘗試連接過A的公網(wǎng)IP地址和端口,,NAT-A紀錄了此次連接的信息,,所以當A主動連接B時,NAT-B會認為是合法的SYN數(shù)據(jù),,并允許通過,,從而直接的TCP連接建立起來了。


    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多