QQ2007beta4 版本的通讯原理

TCP与UDP的选择
        若是比较UDP包和TCP包的结构,很明显UDP包不具有TCP包复杂的可靠性与控制机制。与TCP协议相同,UDP的源端口数和目的端口数也都支持一台 主机上的多个应用。一个16位的UDP包包含了一个字节长的头部和数据的长度,校验码域使其能够进行总体校验。(许多应用只支持UDP,如:多媒体数据 流,不产生任何额外的数据,即便知道有破坏的包也不进行重发。)
        很明显,当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时,TCP协议是固然的选择。当强调传输性能而不是传输的完整性时,如:音频和多 媒体应用,UDP是最好的选择。在数据传输时间很短,以致于此前的链接过程成为整个流量主体的状况下,UDP也是一个好的选择,如:DNS交换。把 SNMP创建在UDP上的部分缘由是设计者认为当发生网络阻塞时,UDP较低的开销使其有更好的机会去传送管理数据。TCP丰富的功能有时会致使不可预料 的性能低下,可是咱们相信在不远的未来,TCP可靠的点对点链接将会用于绝大多数的网络应用。
QQ通讯原理--
我研究的是 QQ2007beta4 版本的通讯原理,相信以后的版本暂时也不会有改动。。
1 、登录。无论 UDP 仍是 TCP ,最终登录成功以后, QQ 都会有一个 TCP 链接来保持在线状态。这个 TCP 链接的远程端口通常是 80 ,采用 UDP 方式登录的时候,端口是 8000 。所以,假如你所在的网络开放了 80 端口( 80 端口是最经常使用端口。。就是一般访问 Web 的端口,禁掉它的话,你的网络对你来讲价值已经不大了),但没有屏蔽腾讯的服务器 IP ,恭喜你,你是能够登录成功 QQ 的。
2 、聊天消息通讯。采用 UDP 协议,经过服务器中转方式。所以,如今的 IP 侦探在你仅仅跟对方发送聊天消息的时候是没法获取到 IP 的。你们都知道, UDP 协议是不可靠协议,它只管发送,无论对方是否收到的,但它的传输很高效。可是,做为聊天软件,怎么能够采用这样的不可靠方式来传输消息呢?因而,腾讯采用 了上层协议来保证可靠传输:若是客户端使用 UDP 协议发出消息后,服务器收到该包,须要使用 UDP 协议发回一个应答包。如此来保证消息能够无遗漏传输。之因此会发生在客户端明明看到 “ 消息发送失败 ” 但对方又收到了这个消息 的状况,就是由于客户端发出的消息服务器已经收到并转发成功,但客户端因为网络缘由没有收到服务器的应答包引发的。
3 、文件 / 自定义表情传送。你们都知道, QQ 能够传送文件,能够发送自定义表情。先说官方表情。官方表情实际发送的是命令字,而没有发送表情。客户端收到命令字后,会自动解释为对应的表情。所以, QQ2007 正式版的客户端发出的新版表情,在 2007beta4 及之前的版本没法找到相对应的表情,就没法解释,看到的就会是空白信息,但查聊天记录就会有 [ 表情 ] 字样。自定义表情的传送是以文件传输方式进行的。下面说文件传输方式: 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 端口)
“ 穿透内网 ” 的原理就是这样的。至于其中的程序细节,暂时还没研究到。。谁有空就研究研究吧,呵呵
4 、小结。结合 1 跟 2 ,能够知道,若是一个局域网只开放 80 端口, QQ 是能够登录成功的,也能够进行聊天。但传送文件也是不能够的,除非大家都在同一个内网。若是局域网还同时开放 443 端口,那么,恭喜你, QQ 的功能你均可以正常使用。

原文:http://hi.baidu.com/sunsee/blog/item/d3f3b9228e8ae5fcd6cae252.html
相关文章
相关标签/搜索