LogMeIn和TeamViewer等应用程序如何运作?

时间:2015-01-24 22:17:52

标签: remote-desktop teamviewer logmein

已经有一个问题How exactly does a remote program like team viewer work给出了基本描述,但我对客户在服务器上注册后通信的工作原理感兴趣。如果客户端在NAT后面,那么它不会拥有自己的IP地址,那么服务器(或其他客户端)如何向其发送消息?或者客户端是否只是继续轮询服务器以查看它是否有任何请求?

LogMeIn或TeamViewer是否有任何开源等价物?

1 个答案:

答案 0 :(得分:5)

最简单,最可靠的方法(尽管并不总是最有效)是让每个客户端在某处与某个知名服务器建立传出TCP连接并保持该连接打开。只要TCP连接打开,数据就可以随时在任一方向上通过该TCP连接。似乎LogMeIn和TeamViewer都使用这种方法,至少作为后备。这种技术的主要缺点是所有数据都必须通过TeamViewer / LogMeIn公司服务器(可能成为瓶颈),并且TCP不能很好地处理丢弃的数据包 - 它将停止并等待丢弃要重新发送的数据包,而不是放弃它们并发送更新的数据。

他们有时可以使用的另一种技术(为了获得更好的性能)是UDP hole-punching。该技术依赖于以下事实:许多防火墙将接受来自防火墙主机最近向其发送传出UDP数据包的远程主机的传入UDP数据包。鉴于此,TeamViewer / LogMeIn公司的服务器可以告诉两个客户端将传出数据包发送到另一个客户端防火墙的IP地址,之后(希望)每个防火墙都会接受来自其他客户端的UDP数据包。其他客户端面向Internet的IP地址。但是,这并不总是有效,因为不同的防火墙以不同的方式工作,可能不包括上述允许UDP的逻辑。