
************************************************************
QQ是一个基于TCP/UDP协议的通讯软件??
发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!!!??
一、登录??
QQ客户端在局域网内,当你打开QQ登录到QQ服务器时,通过外网,你的客户端与QQ服务器建立了一个长连接。你可以用netstat -bn?? 看到此连接的状态是 establish??
此时,在QQ服务器那面看到的连接的IP是你们局域网对外的IP。举个例子:??????????????
QQ服务器?????????? IP:121.115.11.81???????? 服务端口:80??????????????
你的机器在局域网中内部IP:???? 10.19.9.89??????????????
你局域网出口InternetIP:?? 61.183.172.149??????????????
你的客户端的请求将通过外网出去,如果防火墙没有禁止访问Internet上80端口服务,那么你的QQ客户端可以正常登录。你看到的连接是 (netstat?? -bn)??????????????
10.19.9.89:55579???????????????????? 124.115.11.81:80?????? establish??????????????
????????????
这是一个假象。通过QQ服务器看到的连接是:??????????????
124.115.11.81:80?????????? 61.183.172.149:31234?????? establish??????????????
????????????
这样,防火墙上的31234口对应的就是你机器的55579口。(由于你是发起方,这个数是变化的。动态的)??????????????
当有信息给你时,QQ服务器只需要发给防火墙的55579口即可。(这里防火墙作了地址翻译)??????????????
????????????
不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。因此,假如你所在的网络开放了80端口(80端口是最常用端口。。就是通常访问Web的端口,禁掉它的话,你的网络对你来说价值已经不大了),但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。??
二、聊天消息通信??
?????? 采用UDP协议,通过服务器中转方式。大家都知道,UDP 协议是不可靠协议,它只管发送,不管对方是否收到的,但它的传输很高效。但是,作为聊天软件,怎么可以采用这样的不可靠方式来传输消息呢?于是,腾讯采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。如此来保证消息可以无遗漏传输。之所以会发生在客户端明明看到“消息发送失败”但对方又收到了这个消息的情况,就是因为客户端发出的消息服务器已经收到并转发成功,但客户端由于网络原因没有收到服务器的应答包引起的。??
因为用户一般都是在局域网内,地址都为私有IP,腾讯服务器是如何将信息转发到用户的???
首先先介绍一些基本概念:??
?????? NAT(Network AddressTranslators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Network Address/Port Translator)。??
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-67188-1.html
从来不买
二小时灭中国东海舰队