远程协助小结
大家用远程协助恐怕大部分都是通过主流IM如QQ、阿里旺旺。现在网络上也可以找到一些独立的远程协助工具。
最近两个月的时间一直在接触远程协助,对网络方面的了解也从一窍不通变为略懂。具体的原理网络上都有介绍,这里做一下简单的总结。
【控制前的协商】
不管是想要协助别人或者邀请别人来协助自己,一般都需要经过对方的确认,这里需要一个协商的过程。
首先客户端都需要登录到服务器,服务器给每个登录用户分配一个唯一的ID。
此时客户端之间是没有直连接的(到最后也不一定有),所以协商需要登录服务器来协助完成。
发起方发送的消息中需要包含接收方的ID,服务器转发消息给接收方。接收方响应邀请的时候同理。
这个协商过程是可以有用户界面弹出可供用户操作的,也可以是隐藏的,视具体的业务设计而定。
【建立P2P连接】
如果双方都确认了本次远程协助,协商顺利达成,则接下来要建立P2P的连接,根据双方的网络环境分不同的情况。
当然客户端P1通常情况下无法知道自己和另一台客户端P2的拓扑关系,所以按照连接速度从快到慢逐级尝试创建连接:
1. 尝试局域网内直连接
双方需要通过服务器告知对方自己的局域网IP。只有当双方处于同一局域网内时可以成功建立这种连接。
2. 尝试NAT穿透
如果方法1行不通,则很可能有一台以上的客户端是在NAT后面的。
此时双方可以从服务器请求对方的NAT IP,并往对方的NAT IP发一个UDP包,即可实现NAT穿透。
IP穿透成功后也可以建立起直连接。
3. 服务器中转
如果方法2行不通,则很可能有一台以上客户端的NAT不允许IP穿透。
此时双方可以分别跟一台有公网IP的服务器建立起直连接,通过服务器来中转数据。
【控制原理】
QQ的远程协助中,“发起方”是被人控制的那一方,但是并不是必须的,同样是需要根据业务来设计。
所以下面是用“控制方”和“被控方”来表示两个客户端,而不是“发起方”和“接收方”。
1. 被控方需要定时截取桌面图像传输给控制方,控制方在控制窗口展示该图像。
为了让控制方获得流畅的控制体验,图像传输的优化尤为关键。如可以奖本次要发送的图像跟上次已经发送的图像做一个对比,去除相同部分。
旺旺远程协助提供了3种不同的图像模式,有灰度、标准、高清。这几种模式分别对应不同的图像BPP和压缩算法。
低BPP和有损压缩能够换取流畅的控制体验,但是控制方看到的图像会略显粗糙。
相反高BPP和无损压缩能够让控制方看到清晰及色彩丰富的图像,但是对于网络速度不是非常快的环境,控制方会感到控制起来很吃力。
2. 控制方需要HOOK鼠标、键盘事件,如果当前激活窗口为控制窗口,则将事件发送给被控方。
在被控方模拟这些事件。
【协议】
远程协助中需要实时传输桌面图像,使用的协议一般是RUDP。
使用RUDP的优势是,即能在速度上优于TCP,又能在可靠性上优于UDP,比如它基于UDP增加了重发机制和拥塞控制算法。
当然如果是在局域网内则使用TCP或者UDP协议也无妨。
很长一段时间不敢提笔写博文,因为一直觉得如果自己对于某项技术理解不够透彻和全面,拿出来分享给大家就没有什么价值。
但是平时通常是以解决某一问题而开始研究某一新鲜事物,等问题解决了就会马上投身到其他新问题上,也就没有足够的时间精力达到自己所期望的“理解透彻”。
这种写博心态往往让我错过了最佳的总结时期,所以现在觉得不管理解多少都先写下来,做一个积累。这样以后就可以快速地重新进入到老问题的某个细节中。
其实我更希望的是能够得到博友的指点,帮助我快速提升。
所以,欢迎各种拍砖~![]()
浙公网安备 33010602011771号