★我要吧★

 找回密码
 注册[Register]
搜索
qq空间相册密码查看为什么登陆后需要激活无法注册?

[技术] QQ通信原理概述

[复制链接]
发表于 2016-2-14 09:22:01 | 显示全部楼层 |阅读模式
一、登陆。
6 ~- |# S9 Q0 x1 o+ c' G8 H, A, O0 v  r4 }5 k4 H/ j; A; ^' B
    不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。因此,假如你所在的网络开放了80端口(80端口是最常用端口。。就是通常访问Web的端口,禁掉它的话,你的网络对你来说价值已经不大了),但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。* ~6 R) B; F/ f
二、聊天消息通信。
' i$ {, W4 L4 r# Y- v& \# _3 n. S  `& P+ I1 m* v1 [
    采用UDP协议,通过服务器中转方式。因此,现在的IP侦探在你仅仅跟对方发送聊天消息的时候是无法获取到IP的。大家都知道,UDP 协议是不可靠协议,它只管发送,不管对方是否收到的,但它的传输很高效。但是,作为聊天软件,怎么可以采用这样的不可靠方式来传输消息呢?于是,腾讯采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。如此来保证消息可以无遗漏传输。之所以会发生在客户端明明看到“消息发送失败”但对方又收到了这个消息的情况,就是因为客户端发出的消息服务器已经收到并转发成功,但客户端由于网络原因没有收到服务器的应答包引起的。" o/ N+ S  Y  B# S6 Y9 O/ t3 k

$ S1 t' g0 g, s% s0 ^5 x三、文件/自定义表情传送。& _4 h& m9 C# E( @! F9 I, }$ ~0 f2 {

! Y  M' U! {; X, n$ q6 ?! F    大家都知道,QQ可以传送文件,可以发送自定义表情。先说官方表情。官方表情实际发送的是命令字,而没有发送表情。客户端收到命令字后,会自动解释为对应的表情。因此,QQ2008正式版的客户端发出的新版表情,在2007beta4及以前的版本无法找到相对应的表情,就无法解释,看到的就会是空白信息,但查聊天记录就会有[表情]字样。' I* z; K' ?2 l3 i
    自定义表情的传送是以文件传输方式进行的。# y* j2 n6 M5 F( S, f6 s" A+ N5 G
    下面说文件传输方式:A要向B发送一个文件,于是发出一个文件传送请求。服务器收到这个文件传送请求后,转发给B,同时或者在B应答后,将A的IP地址同时发送给B。B这个时候就得到了A的真实IP。这里的IP是你的本机IP。也就是说,如果A处在内网,B得到的地址就是一个内网地址。B得到了A的地址之后,就会尝试去连接A。如果B也处于内网,那么,显然A跟B之间的连接是无法建立的。这个时候,客户端就会请求服务器进行文件中转。因为服务器具有公网 IP,处在内网的A跟B都是可以连接到服务器的,于是,A跟B的文件传送就通过服务器中转的方式,顺利进行。(注:服务器文件中转使用443端口)/ v3 _% g& y1 d/ P1 ^5 |. S

" J/ G5 X8 o3 A: ^, r) ]+ \$ e" H) L*   注:什么是内网、公网
5 m4 r/ M- ?' ]# d# U    内网、公网是两种Internet的接入方式。
; B- v5 m& J" h% [7 F8 X/ X    内网接入方式:上网的计算机得到的IP地址是Inetnet上的保留地址,保留地址有如下3种形式:
+ A5 R/ a: ~# m6 a1 Y    10.x.x.x
# H2 j. w0 B! O+ C    172.16.x.x至172.31.x.x
' b( {* y! }8 \  r  c) W    192.168.x.x6 \8 X* _$ o6 R9 v$ @
    内网的计算机以NAT(网络地址转换)协议,通过一个公共的网关访问Internet。8 A. Y9 {; q( \; E
    内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。
- y. n, V* W& J3 S    公网接入方式:上网的计算机得到的IP地址是Inetnet上的非保留地址。公网的计算机和Internet上的其他计算机可随意互相访问。  h( f$ S5 Q+ v2 D8 A7 n
. A8 l7 A3 B* j- ^
    所以,如果一个局域网只开放80端口,QQ是可以登陆成功的,也可以进行聊天。但传送文件也是不可以的,除非你们都在同一个内网。如果局域网还同时开放443端口,那么,恭喜你,QQ的功能你都可以正常使用。9 w  H% O3 r- G3 e- |
$ c6 }6 n' S# D

( v: Y: s4 L3 v9 N. H9 {3 r: G; EQQ是不是TCP和UDP一起用?如果用UDP,如何做到信息的可靠发送? 3 I1 N! V$ v, {
答:QQ即可以使用TCP也可以使用UDP,但QQ默认是使用UDP协议,因为UDP协议消耗资源小,发送速度快,但当UDP协议不能正常转发的时候,就会采用TCP协议进行发送.
6 a4 Y( ?# B; v" P0 E9 b6 H而信息的可靠发送是通过各种验证机制来完成的,这一点你可以去GOOGLE之类的网站去搜索下.
) B& R9 Q; C+ A. b0 W8 n7 f/ n! z. ^: U. ?
QQ用的是UDP打洞技术还是HTTP遂道? % c  u3 S3 G+ h+ n: }. d+ c6 z
答:发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服务器,只不过不是常用的那些,那个服务器是TX自行开发的# s1 G: b7 |) }$ r! w6 [5 G

- h7 y$ T2 ~  j/ L6 X4 B0 U因为用户一般都是在局域网内,地址都为私有IP,IM服务器是如何将信息转发到用户的?
. h& c5 q$ k. }1 c4 T- [0 U7 q1 ~0 J答:如果使用TCP就没什么好说了~由内网向外网连接,只要能够连接上进行握手了,消息就可以畅通无阻的进行发送了.如果使用UDP的话,就是使用的打洞技术了,只要通道打通了,发送消息基本和TCP没什么区别,要做的只是维护消息的完整性而已.% e: _2 P8 k  d5 E* Q" L
  n4 A; M5 h: J' y3 E( p
( t% Q6 r0 l0 p$ L  `
QQ是一个基于TCP/UDP协议的通讯软件,而MSN是基于TCP协议的通讯软件。8 \3 S8 Z! N" }) T0 n: d* ]! C
4 _  V, j: J' ?* d& w7 ]4 g% z, D7 r* s
那么QQ是如何通讯的呢?在TCP/IP协议中,唯一标识一个应用进程的是socket,它通过网络层的IP地址和传输层的端口号来实现,对与同一个IP地址的内部网络,通过不同的端口号来标识不同的QQ进程;当你登陆QQ游戏服务器的时候,服务器会保留你的保留IP地址和端口号信息,并在你的好友的QQ进程中进行列表显示,然后两个进程就可以通信了。 0 c; a) Y- v: }0 g
  通常,发送文件的计算机首先要通过消息服务器将其IP地址发送给接收计算机,当接收计算机同意接收的确认消息反馈到消息服务器后,消息服务器将据此设置好文件传输对话。随即,发送计算机与接收计算机就会在确定好的端口范围内,建立起TCP或UDP连接开始文件的检索与传输。
. X. v# b7 v8 _) e3 B  在默认状态下,QQ优先采用了UDP(User Data Protocol,用户数据报协议)协议传送数据,而对可靠性要求高的数据通讯系统往往使用TCP协议传输数据。与TCP协议不同,UDP协议并不提供数据传送的验证机制——在整个文件传输过程中如果出现数据报的丢失,协议本身并不能作出任何的检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。
( ~- z* s$ I4 E0 Y+ ]/ }  UDP协议适用于无须应答、要求时效的软件使用,这样的设计正好与QQ追求的目标相符,所以QQ优先使用了此协议进行一切功能应用。但是,由于  UDP协议具有不可靠性,常会因种种原因导致消息或数据的发送失败(很多时候会发现发送文件给对方接收时,对方根本收不到要求接收文件的消息。或是发送聊天消息时,对方根本没有收到过消息)。显然,UDP协议由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。QQ在数据传输上更注重实际性能,为了获得更好的使用效果,往往可以牺牲一定的可靠性。因此,使用QQ来传输数据,在很多时候就成了一个“不错”的选择。
, K( E. L' c5 h# i* ]& U$ G  一般内网传输首选QQ,速度最快,QQ的文件传输是直接个人对个人,采用P2P的传输方式,具有不需中转的优势,而且服务器都在国内,传输性能要高于外国IM软件。
; ?: W2 S: X8 B, g+ Y. K
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

QQ|手机版|小黑屋|☆我要吧☆ ( 豫ICP备13016831号-1 )

GMT+8, 2024-11-24 21:34 , Processed in 0.058689 second(s), 19 queries .

Powered by abc369 X3.4

© 2001-2023 abc369.

快速回复 返回顶部 返回列表