STUN對NAT類型的判斷是分步實現的:
公網類型(無NAT)->全錐型->對稱型->IP受限錐形->端口受限錐形。
第一步:判斷客戶端是否在NAT後
A向B的IP1+PORT1發送一個UDP 包;
B收到這個包後,會把它收到包的源IP和源PORT(這個IP和PORT就是A的NAT外網 IP和PORT)寫到UDP包中,然後把此包通過IP1+PORT1發還給A;
B返回給A的這個UDP包A一定收到,如果沒有收到STUN的任何回應包,那隻有兩種可能:1.STUN服務器不存在;2.A的NAT拒絕一切UDP包從外部向內部穿透;
當A收到此UDP包後,把此UDP中的IP和自己的IP做比較,如果是一樣的,就說明自己是公網,無NAT。
第二步:判斷全錐型
經過第一步A收到的數據包的IP地址與自己的不同,則肯定有NAT,繼續做下面的檢測;
A向B的IP1發送一個UDP包,請求B通過另外一個IP2+PORT(不同與SETP1的IP1)向A返回一個UDP數據包;
如果A能收到瞭這個數據包,說明NAT沒有對任何數據包過濾,符合全錐型特征;
第三步:判斷對稱型
A向B的IP2+PORT2發送一個數據包,B收到數據包後,把它收到包的源IP和PORT寫到UDP包中,然後通過自己的IP2和PORT2把此包發還給A;
A肯定能收到這個回應的UDP包,此包中的PORT是我們最關心的數據,下面我們來分析:
如果這個PORT和第一步中的PORT一樣,那麼可以肯定這個NAT是個錐形NAT,否則是對稱NAT;
第四步:判斷IP限制錐型 和 端口限制錐形
A向B的IP2的一個端口PORT1發送一個數據請求包,要求B用IP2和不同於PORT1的PORT2返回一個數據包給A;
如果A收到瞭,那也就意味著隻要IP相同,即使PORT不同,NAT也允許UDP包通過,顯然這是IP限制錐形;
如果沒收到,則為端口限制錐形。
P2P打洞限制
全錐型 | 受限錐型 | 端口受限錐型 | 對稱型 | |
---|---|---|---|---|
全錐型 | YES | YES | YES | YES |
受限錐型 | YES | YES | YES | YES |
端口受限錐型 | YES | YES | YES | NO |
對稱型 | YES | YES | NO | NO |
-
扫码下载安卓APP
-
微信扫一扫关注我们微信扫一扫打开小程序手Q扫一扫打开小程序
-
返回顶部