我已經拍了一下在openfire到STUN服務器設置,並從那裏本聲明:爲什麼STUN服務器需要兩個不同的公網IP地址
「爲了充當STUN服務器,兩個不同的公網IP地址需要在同一臺機器上,並且每個IP都需要兩個不同的端口號。「
我對google進行了研究,一般stun服務器需要兩個公有IP地址,這是什麼原因?
我已經拍了一下在openfire到STUN服務器設置,並從那裏本聲明:爲什麼STUN服務器需要兩個不同的公網IP地址
「爲了充當STUN服務器,兩個不同的公網IP地址需要在同一臺機器上,並且每個IP都需要兩個不同的端口號。「
我對google進行了研究,一般stun服務器需要兩個公有IP地址,這是什麼原因?
因爲在一些極少數情況下,NAT轉換的行爲是目標IP地址的函數。這意味着,你必須「ping」兩個不同的IP地址才能找到NAT的精確行爲(是否取決於目標IP地址?)
如果您'ping'兩次不同端口的同一臺服務器,這不會適當地覆蓋這種情況(即,你不會涵蓋所有的基地)。
P.S .:兩個IP地址不需要在同一臺服務器上,它可能是不同的服務器。
我猜測它需要確定正在執行的NAT類型 - 某些NAT將使用相同的源IP地址並通過端口號對會話ID進行編碼(我認爲它被稱爲錐形NAT但不確定) ,某些NAT將使用源IP和端口的組合來編碼會話ID。 STUN服務器爲客戶端提供的答案因NAT類型而異。
對於嘗試建立P2P連接,STUN綁定請求和對STUN服務主地址(IP和端口)的響應是真正重要的。在此請求的響應正文中返回的映射地址被傳遞(通過XMPP或其他服務)到本地客戶端試圖建立直接通信的遠程節點。
STUN服務偵聽的第二個IP和端口對確定NAT端口映射行爲和NAT過濾行爲很有用。
通過向服務上的備用IP端口發送綁定請求,客戶端可以發現他的NAT是否具有本地端口的一致映射語義。如果他爲每個測試獲得不同的端口映射值,客戶可以得出結論,它是在「對稱NAT」後面 - 這是P2P最難以遍歷的。
通過發送帶有「更改請求」屬性的綁定請求,該屬性要求服務響應其他IP或端口,客戶端可以檢測他的NAT是否僅根據IP和端口過濾來自遠程主機的數據報,或者允許來自其發送出站數據報的主機上的備用端口的數據報。
映射行爲和過濾測試僅爲後續P2P連接提供有限的信息。在確定主機和Internet之間的對稱NAT的情況下,一些實現可以觀察到NAT在每個綁定響應中具有端口值的一致增量值。 (例如,由STUN服務觀察到的外部端口增加1)。因此,客戶端可以爲遠程客戶端提供IP和猜測的端口號,以嘗試發送到第一個綁定請求映射回的端口號。或者客戶端可以使用此行爲/過濾測試進行日誌記錄。或者在對稱NAT的情況下自動分配中繼。
這個解釋幫了我很多。如果我理解正確,這意味着STUN服務器上的第二個IP只有在客戶端的STUN請求指示要使用它時纔會使用。在WebRTC和(通過wireshark)方面,我一直在細化STUN,我從來沒有看到任何來自STUN服務器的輔助IP接觸到我。我的理論是,這是因爲第二個IP會證實的是UDP hole punching正在成功,而在WebRTC中,如果它不成功,那些候選者將會失敗,所以額外的檢查是沒有意義的。我的理解在這裏正確嗎? – Ternary
@Ternary - 第二個IP只用於確定NAT類型(即診斷和調試),而不是實際的打孔。客戶端可以向服務器發送「綁定請求」以請求其IP /端口映射。這些綁定請求可以指示響應可以來自服務器的備用IP和/或備用端口。 stun.stunprotocol.org的客戶端請求中有99%是對主要IP和端口3478的簡單綁定請求。少數客戶端使用端口重定向屬性。有幾個SIP電話想要使用這兩個端口。 – selbie
唉,經典的stund實現[不支持](http://sourceforge.net/tracker/?func=detail&aid=1055306&group_id=47735&atid=450612)兩個服務器上的兩個IP地址。這兩個IP可能位於同一個NIC上,但stund會嘗試綁定到這兩個IP,因此它們必須位於同一個服務器上。 –