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