UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。由于QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务。
QQ客户端之间的消息传送也采用了UDP模式,这不同于国外的ICQ在客户端之间采用TCP进行通讯的模式。因为国内的网络环境非常复杂,而且很多用户采用的方式是通过代理服务器共享一条线路上网的方式,在这些复杂的情况下,客户端之间能彼此建立起来TCP连接的概率较小,严重影响传送信息的效率。而UDP包能够穿透大部分的代理服务器,因此我们在开发QQ的时候选择了UDP作为客户之间的主要通信协议,因此网友会觉得用QQ传送信息要比ICQ及其它采用TCP协议的ICQ类软件快。
当然,UDP协议优点突出,缺点也很明显:UDP包的传送是不可靠的传输,它不象TCP一样有包重传等机制,因此采用UDP协议的信息在传送过程中很容易丢失,这样就需要辅助的算法实现包重传机制以保证信息不会丢失,而QQ服务器的负荷非常重,因此在QQ 99b 0425之前我们只是在客户端到客户端之间传送消息时采用了这个辅助的机制,当消息在客户间直接传送无法到达时就需要通过服务器来中转,由于服务器端在老版本的时候迫于负荷过重的压力没有对主动发往客户端的信息进行传输控制,因此在老版本的时候容易造成通过服务器中转的信息丢失的现象。在QQ99c 0725之后我们单独设立出了几台专用的服务器采用包重传机制来中转消息(仅限于QQc之间传递的消息),确保通过服务器转发。
登陆:TCP,UDP(UDP登录比较容易些)
数据传输:以UDP为主,辅以TCP协议:
当初腾讯为了保证数据传输速度而采用了UDP通讯协议,在以后的发展中腾讯,QQ一直也是采用UDP通讯协议,聊天的双方在通信的时候信息数据包是直接在双方之间传输的,而不是像微软的MSN那样通过服务器中转,所以对方很容易就能获得你的IP地址,从而对你进行攻击。
不过QQ也有部分的通信数据包是通过服务器中转的,那就是当你隐身或者你发送的对象不在线的时候,所发送的数据包就是经过腾讯的服务器中转(这就是为什么以上这两种方式对方看不到你IP地址的原因)。
不过在QQ2003 III以后的版本上,提供了服务器中转的功能,大家打开腾讯QQ的系统参数设置,然后在安全设置里面,用户终于可以对腾讯QQ的通信模式进行选择了。
大家可以通过服务器模式与好友交换信息,也可以通过点对点方式。采用点对点方式,我们可以看见对方的IP地址,采用了通过服务器模式,我们就不能看见对方的IP地址了。当然我们不能看见对方,对方也不能看见我们了,这样我们聊天的安全性大大的增加了