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

par*_*y72 2 remote-desktop logmein teamviewer

已经有一个问题,像团队查看器这样的远程程序究竟是如何工作的,它提供了一个基本的描述,但我对客户端在服务器上注册后通信的工作原理感兴趣.如果客户端在NAT后面,那么它将没有自己的IP地址,那么服务器(或其他客户端)如何向其发送消息?或者客户端是否只是继续轮询服务器以查看它是否有任何请求?

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

Jer*_*ner 5

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

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