近一周時間都在玩p2p,本來以為實現(xiàn)很簡單,但做起來實屬不易 。
Udp穿透Nat會遇到多種Nat類型:
1.FULL CORE
2. RESTRICT
3. PORT-RESTRICT
4. SYMMETRIC
1-3三種NAT實現(xiàn)穿透很簡單,問題在于處理第4種類型:對等NAT
SYMMETRIC NAT的工作模式區(qū)分在于內(nèi)網(wǎng)通過NAT時分配的外部端口的方式不同,這又有三種情況:
1. 端口遞增: 通常新端口號會是前一次分配端口號加1或者加固定值
2. 端口在當前NAT最新端口的左右區(qū)間: 例如當前NAT外網(wǎng)端口P,那新的分配端口會落在 -N < P < N
3. 隨機分配SR (這個根據(jù)當時NAT的網(wǎng)絡(luò)情況參數(shù)等作為函數(shù)f(x)的因子決定)
這第三種分配方式,目前無解,只要任意一端存在SR,則無法穿透
當然很多技術(shù)研究者提出了如何猜測動態(tài)端口的方案,例如:統(tǒng)計技術(shù)的使用,服務(wù)器可對固定NAT進行采樣分析等等。。
這個很難哦!
面對SR我直接放棄了,還真不巧,測試了3,4個網(wǎng)絡(luò)環(huán)境的NAT,居然50%是SR,50%是SYMMETRIC的1,2種類型 。
還是老實的服務(wù)器中轉(zhuǎn)把!
一些p2p資料供參考:
http://114.215.178.29/static/p2p