QQ既有UDP也有TCP!
无论UDP仍是TCP,最终登录成功以后,QQ都会有一个TCP链接来保持在线状态。这个TCP链接的远程端口通常是80,采用UDP方式登录的时候,端口是8000。
UDP协议是无链接方式的协议,它的效率高,速度快,占资源少,可是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。算法
QQ采用的通讯协议以UDP为主,辅以TCP协议。服务器
因为QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发链接,网络
所以服务器端只有采用UDP协议与客户端进行通信才能保证这种超大规模的服务。
QQ客户端之间的消息传送也采用了UDP模式,由于国内的网络环境很是复杂,并且不少用户采用的方式是经过代理服务器共享一条线路上网的方式,并发
在这些复杂的状况下,客户端之间能彼此创建起来TCP链接的几率较小,严重影响传送信息的效率。spa
而UDP包可以穿透大部分的代理服务器,所以QQ选择了UDP做为客户之间的主要通讯协议。
采用UDP协议,经过服务器中转方式。设计
所以,如今的IP侦探在你仅仅跟对方发送聊天消息的时候是没法获取到IP的。代理
你们都知道,UDP 协议是不可靠协议,它只管发送,无论对方是否收到的,但它的传输很高效。资源
可是,做为聊天软件,怎么能够采用这样的不可靠方式来传输消息呢?效率
因而,腾讯采用了上层协议来保证可靠传输:若是客户端使用UDP协议发出消息后,服务器收到该包,须要使用UDP协议发回一个应答包。服务器端
如此来保证消息能够无遗漏传输。
之因此会发生在客户端明明看到“消息发送失败”但对方又收到了这个消息的状况,就是由于客户端发出的消息服务器已经收到并转发成功,
但客户端因为网络缘由没有收到服务器的应答包引发的。