QQ通讯原理浅析

来源:互联网 发布:淘宝怎么去除同款 编辑:程序博客网 时间:2024/05/17 07:10

引入:当今社会,通讯的方式越来越多,QQ和MSN应该是我们在网络上(主要是PC,鉴于现在微信比较火)最常用即时通讯(IM)软件,它们除了可以当作通讯软件外,还可以用于用户之间传输数据和文件,但是我相信很多人都有注意到,大多数情况下,MSN的传输速度都比QQ要慢很多。这个是什么原因?网上有很多帖子和文章对此作了说明,说QQ是一个基于TCP/UDP协议的通讯软件,而MSN是基于TCP协议的通讯软件。下面就个人的一些理解分析一下:

一、登录方式

登录QQ服务器有两个方式,一种是以UDP方式登录,另一种就是TCP方式。QQ登录时,首先采用UDP方式登录,首先向本地端口4000发送DNS请求,解析腾讯服务器的IP;然后用UDP 8000目的端口登录。如果无法登陆,会继续尝试几次(一般为3次),继续无法登录,就会尝试采用TCP 80端口方式登录了。

不管是UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。因此,假如你所在的网络开放了80端口,但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。

如果登录用户处在局域网内(内网)时,如何登录?当打开QQ登录到QQ服务器时,通过外网(局域网对外的网络),QQ客户端与QQ服务器建立一个长连接,举个例子:

QQ服务器IP:117.79.157.201    端口:80

内网IP:192.168.0.8

外网IP:202.116.32.59

你的客户端的请求通过外网出去,如果防火墙没有禁止访问Internet上80端口,那么你的QQ客户端就可以正常登录,你看到的连接是(netstat -bn)

192.168.0.8:53866      117.79.157.201:80         ESTABLISHED

而通过QQ服务器看到的连接是:

117.79.157.201:80      202.116.32.59:31234     ESTABLISHED

这样,防火墙上的31234口对应的就是你机器上的53866口。(由于你是发起方,这个数是不固定的)

当有消息发给你时,QQ服务器只需要发给防火墙的53866口即可。(这里防火墙作了地址翻译)


二、聊天通讯

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


三、文件传输

假设发送方和接收方分别为A和B,首先判断A和B是否在同一个局域网内,如果是,那么直接采用P2P的传输方式,不经过服务器中转,所以速度相当快(这个大家应该深有体会);如果A和B不在同一局域网,那么就必须经过服务器中转了,依然默认采用UDP的方式,虽然UDP是不可靠传输协议,但是其上层提供了一些验证机制和应答机制来保证传输的可靠性(这个是腾讯自己实现的),对于传输可靠性要求高的,会采用TCP协议来进行传输。


0 0
原创粉丝点击