【问题标题】:How can Skype and Google Talk be mostly peer to peer?Skype 和 Google Talk 怎么能大部分是点对点的呢?
【发布时间】:2012-05-24 02:57:38
【问题描述】:

我已经阅读了很多关于这个主题的内容,包括很多关于 SO 的内容。所以虽然不完全是一个编程问题,但希望可以在这里问。我是一名程序员,正在构建一个包含语音聊天的应用程序,如果有帮助的话。

我正在尝试了解 UDP 转发如何通过 NAT 工作,特别是对于 Skype 和 Google Talk 语音聊天 (VOIP) 等系统。

我认为路由器正确路由 UDP 流量的唯一方法是,如果回复来自它发送数据包的相同 IP/端口组合。或者换句话说,客户端无法从服务器获取UDP数据包,除非它首先发送一个,否则路由器不知道该向哪个客户端发送数据包。

因此,如果我理解正确的话,Skype 和 Google Talk 等服务会进行一些初始设置以帮助对等方定位彼此,但之后通信变为对等通信。如果路由器不期望来自客户端 IP 的任何流量,那么来自客户端的第一个数据包如何直接到达另一个客户端?

【问题讨论】:

    标签: udp xmpp skype google-talk


    【解决方案1】:

    我正在研究它,因为我正在制作游戏(大学工作)P2P。

    1 如何进行 NAT? 当客户端发出请求时,NAT 会通过一扇门转发可用(注意此端口与发送它的计算机上的端口无关),并将源 ip 更改为您的 ip(路由器的公共 IP)。现在来了魔术:它在与该请求关联的 ip 和端口以及他用来发送消息的路由的门中存储了一个表。所以当路由器收到一个请求时,它会查看什么是门和表,看看谁应该发送请求,而不管发出请求的 ip 或端口是什么。

    2 如何为“远程客户端”配置 NAT? 不可能的。但是客户端可以间接设置“你的”NAT。需要一个服务器来调解连接的启动。 * client1 cliente2 并连接到服务器,服务器发送到cliente2 的ip 和端口(NAT)。 * client1 现在有数据连接到 cliente2,所以他发送相同的连接到服务器,接收数据 cliente2 与数据服务器相同。

    注意1:TCP 不工作的原因很明显,即必须是UDP。 Note2:数据在NAT表中存在多长时间,如何防止“超时”?好问题,正如我所说,我正在研究它,如果有人知道的话,请放在这里。

    费利皮CM

    【讨论】:

    • 我明白我错过了什么。我在想 NAT 会关心“回复”来自哪里,如果不是从服务器返回,它就不会正确路由。我现在看到没关系,只要服务器告诉客户端 B 客户端 A 在哪里(IP 和端口),客户端 A 前面的 NAT 并不关心数据包是来自服务器还是客户端 B。
    • developers.google.com/talk/libjingle/important_concepts 有一些很好的信息,也有助于了解“STUN”。
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2017-05-17
    • 2012-09-03
    • 2013-07-14
    • 2014-05-23
    • 2022-10-06
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多