NAT類型判斷

转转优品 2024-06-14 18:36 9次浏览 0 条评论 taohigo.com

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