对QQ通信协议的讨论

来源:互联网 发布:短信转移软件 编辑:程序博客网 时间:2024/05/01 00:53

TCP/IP协议中又分为TCP协议和UDP协议,TCP协议是面向连接的协议,它比较安全、稳定,但是效率不高,占用资源较多。UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。

QQ登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术。总来的说:

1、登陆过程,客户端client 采用TCP协议向服务器server发送信息,采用HTTP协议下载信息登陆之后,会有一个TCP连接来保持在线状态。

2、和好友发消息,客户端client采用UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采用上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。

3、如果是在内网里面的两个客户端传文件,QQ采用的是P2P技术,不需要服务器中转。

QQ并不是完全基于UDP实现。比如在使用QQ进行非内网的在线文件传输活动的时候,就会使用TCP作为可靠传输的保证。使用UDP进行交互通信的好处在于,延迟较短,对数据丢失的处理比较简单。同时,TCP是一个全双工协议,需要建立连接,所以网络开销也会相对大。如果使用QQ语音和QQ视频的话,UDP的优势就更为突出了,首先延迟较小。最重要的一点是不可靠传输,这意味着如果数据丢失的话,不会有重传。因为用户一般来说可以接受图像稍微模糊一点,声音稍微不清晰一点(这表示音频与视频数据包丢失一部分没有关系),但是如果在几秒钟以后再出现之前丢失的画面和声音(如果用TCP的话,会有超时重传,就可能出现这种情况,这恐怕是很难接受的。

对于QQ这样级别的应用来说,TCP有诸多不便和限制,你可以认为QQ用的UDP其实是符合QQ的要求的一个升级版协议UDP协议优点突出,缺点也很明显:UDP包的传送是不可靠的传输,它不象TCP一样有包重传等机制,因此采用UDP协议的信息在传送过程中很容易丢失,这样就需要辅助的算法实现包重传机制以保证信息不会丢失,腾讯根据自己的产品在应用层增加了很多TCP的特性比如丢包重发机制。另外,QQ应该是优先采用UDP协议,如果不通的话会自动转为TCP

采用UDP协议,通过服务器中转方式。因此,现在的IP侦探在你仅仅跟对方发送聊天消息的时候是无法获取到IP的。大家都知道,UDP协议是不可靠协议,它只管发送,不管对方是否收到的,但它的传输很高效。但是,作为聊天软件,怎么可以采用这样的不可靠方式来传输消息呢?于是,腾讯采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包,以此来保证消息可以无遗漏传输。之所以会发生在客户端明明看到“消息发送失败”但对方又收到了这个消息的情况,就是因为客户端发出的消息服务器已经收到并转发成功,但客户端由于网络原因没有收到服务器的应答包引起的。

0 0
原创粉丝点击