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