2012-05-24 47 views
2

我已經閱讀了很多關於這個主題,包括很多關於這個問題。所以雖然不完全是一個編程問題,但希望在這裏問一下。如果有幫助,我是一名程序員並構建一個包含語音聊天的應用程序。Skype和Google Talk如何能夠大部分是點對點的?

我想了解UDP轉發如何通過NAT工作,特別是針對Skype和Google Talk語音聊天(VOIP)等系統。

我認爲路由器可以正確路由UDP流量的唯一方法是,如果答覆從它發送數據包的相同IP /端口組合返回。換句話說,除非客戶端首先發送一個UDP數據包,否則客戶端無法從服務器獲取UDP數據包,否則路由器不知道將數據包發送給哪個客戶端。

因此,如果我理解正確,Skype和Google Talk等服務會進行一些初始設置,以幫助對等方找到對方,但在此之後,通信便成爲點對點。如果路由器不期望來自客戶端IP的任何流量,那麼客戶端的第一個數據包如何直接到達另一個客戶端?

回答

1

我正在研究它,因爲我正在做一個遊戲(大學工作)的P2P。

1 NAT如何? 當客戶端發出請求時,NAT通過一個門轉發(請注意,此端口獨立於發送它的計算機上的端口),並將源IP更改爲您的IP(路由器的公共IP)。現在來了魔術:它在與該請求相關聯的IP和端口以及他用來發送消息的路線的門中存儲表格。所以當路由器收到一個請求時,它看起來和門和表是什麼,看看誰應該發送請求,而不管創建它的IP或端口。

2如何爲「遠程客戶端」配置NAT? 不可能。但客戶端可以間接建立「你的」NAT。調解連接的啓動需要一個服務器。 * Client1 cliente2並連接到服務器,服務器發送到client1的客戶端ip和端口(NAT)cliente2。 * client1現在有數據連接到cliente2,所以他發送相同的連接到服務器,接收數據客戶端2相同的數據服務器。

注1:TCP不能工作,原因很明顯,即必須是UDP。 注2:NAT表中的數據有多長,如何防止「超時」?好問題,正如我所說我正在學習它,哈哈,如果有人知道放在這裏。

Felippi CM

+0

我明白我錯過了什麼。我以爲NAT會關心「回覆」來自哪裏,如果不從服務器回來,它將無法正確路由。我現在看到它並不重要,只要服務器告訴客戶端B客戶端A在哪裏(IP和端口),客戶端A前面的NAT不關心數據包是來自服務器還是客戶端B. – eselk

+2

https://developers.google.com/talk/libjingle/important_concepts有一些很好的信息,也有助於瞭解「STUN」。 – eselk