通過NAT穿透實現(xiàn)P2P文件分享與傳輸系統(tǒng)原理說明
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
由于p2p網(wǎng)絡(luò)中使用udp報文,所以只介紹udp穿透。 1. NAT類型NAT(Network Address Translation, 網(wǎng)絡(luò)地址轉(zhuǎn)換),是指在IP包通過路由設(shè)備時,修改其IP地址信息的技術(shù)。一般應(yīng)用是,通過將內(nèi)網(wǎng)地址轉(zhuǎn)換為公網(wǎng)地址,從而實現(xiàn)多臺主機使用一個IP地址訪問互聯(lián)網(wǎng),在很多網(wǎng)絡(luò)環(huán)境中,均可見到。這項技術(shù)的好處我們暫且不談,對我們來說它的“壞處”是顯而易見的,因為中間存在了NAT,給我們的p2p網(wǎng)絡(luò)中主機之間的通信造成了不小的麻煩。下面開始先簡單了解一下NAT的類型。(這里只做簡單介紹,針對“一對多”的NAT映射。更加詳細(xì)、嚴(yán)謹(jǐn)?shù)恼f明,請看Wikipedia和相關(guān)文檔 - RFC xxxx。) 一般來說,可以把它分為“對稱型NAT”和“非對稱型NAT(也叫錐形NAT)”。所謂“對稱”,是指內(nèi)部地址與不同的外部地址進行通信的時候,NAT為會話綁定不同的IP和端口。 對于NAT可分為“不限型”、“IP受限型”和“IP-端口受限型”:
正確的判斷NAT類型,在p2p網(wǎng)絡(luò)中的NAT穿透中,是很重要的。NAT類型的判斷,是由Stun Server來實現(xiàn),據(jù)我所知,有現(xiàn)成的,也有開源項目,這里將不做介紹~ 2. NAT 打洞通過以上NAT的特點可知,為了能訪問位于受限NAT后面的內(nèi)網(wǎng)主機Peer,必須讓該內(nèi)網(wǎng)主機先主動向自己發(fā)送會話。但是,如何通知內(nèi)網(wǎng)主機來做這件事呢?這就需要借助NAT Server來實現(xiàn)。NAT Server需要保持可以隨時向Peer發(fā)送命令的能力,首先就是NAT Server必須位于公網(wǎng)(-_-!),Peer定時向NAT Server發(fā)送心跳包。由之前的分析可知,NAT Server可以無障礙的向Peer發(fā)送各種指令。如果你對發(fā)送心跳包的間隔拿捏不定,不妨設(shè)置為10秒。 下面是NAT Server的基本流程
1) 外網(wǎng)主機向NAT Server發(fā)送打洞請求 2) NAT Server向Peer發(fā)送打洞命令 3) Peer向外網(wǎng)主機發(fā)送連接報文 4) NAT為外網(wǎng)主機打開了訪問內(nèi)網(wǎng)Peer的權(quán)限,打洞完成。 3. 其他根據(jù)以上的打洞技術(shù),可以在多種NAT情況下實現(xiàn)穿透,但對于部分情況,例如,兩個客戶端都處于受限型NAT后面,而其中又至少有一個處于對稱型NAT后面,這種技術(shù)就無能為力了,此時可以采用“地址-端口預(yù)測”的方法(據(jù)說迅雷使用了這項技術(shù),據(jù)說而已),所謂“端口預(yù)測”,是猜測NAT給內(nèi)網(wǎng)主機分配地址和端口的算法,比如這篇文章的第一幅圖里,ip1:port1和ip2:port2,ip1和ip2,port1和port2很可能在數(shù)值上相差不遠(yuǎn),比如可能是61.22.3.1:13304, 61.22.3.1:13305,這時,通過多發(fā)幾個端口,就有可能實現(xiàn)打通。實在不行,就只能通過服務(wù)器中轉(zhuǎn)了。下面羅列一下在各種NAT情況之下,實現(xiàn)Peer和Peer1之間互聯(lián)的方法: 我們把情況假設(shè)在p2p網(wǎng)絡(luò)中,Peer1向Peer索取數(shù)據(jù) 該文章在 2017/7/27 9:44:20 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |