我已經閱讀了很多關於這個主題,包括很多關於這個問題。所以雖然不完全是一個編程問題,但希望在這裏問一下。如果有幫助,我是一名程序員並構建一個包含語音聊天的應用程序。Skype和Google Talk如何能夠大部分是點對點的?
我想了解UDP轉發如何通過NAT工作,特別是針對Skype和Google Talk語音聊天(VOIP)等系統。
我認爲路由器可以正確路由UDP流量的唯一方法是,如果答覆從它發送數據包的相同IP /端口組合返回。換句話說,除非客戶端首先發送一個UDP數據包,否則客戶端無法從服務器獲取UDP數據包,否則路由器不知道將數據包發送給哪個客戶端。
因此,如果我理解正確,Skype和Google Talk等服務會進行一些初始設置,以幫助對等方找到對方,但在此之後,通信便成爲點對點。如果路由器不期望來自客戶端IP的任何流量,那麼客戶端的第一個數據包如何直接到達另一個客戶端?
我明白我錯過了什麼。我以爲NAT會關心「回覆」來自哪裏,如果不從服務器回來,它將無法正確路由。我現在看到它並不重要,只要服務器告訴客戶端B客戶端A在哪裏(IP和端口),客戶端A前面的NAT不關心數據包是來自服務器還是客戶端B. – eselk
https://developers.google.com/talk/libjingle/important_concepts有一些很好的信息,也有助於瞭解「STUN」。 – eselk