QQ通信协议

不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。因此,假如你所在的网络开放了80端口(80端口是最常用端口。。就是通常访问Web的端口,禁掉它的话,你的网络对你来说价值已经不大了),但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。

二、聊天消息通信。

 

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

 

三、文件/自定义表情传送。

 

    大家都知道,QQ可以传送文件,可以发送自定义表情。先说官方表情。官方表情实际发送的是命令字,而没有发送表情。客户端收到命令字后,会自动解释为对应的表情。因此,QQ2008正式版的客户端发出的新版表情,在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端口)

 

*   注:什么是内网、公网

    内网、公网是两种Internet的接入方式。

    内网接入方式:上网的计算机得到的IP地址是Inetnet上的保留地址,保留地址有如下3种形式:

   10.x.x.x

   172.16.x.x至172.31.x.x

   192.168.x.x

    内网的计算机以NAT(网络地址转换)协议,通过一个公共的网关访问Internet。

    内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。

    公网接入方式:上网的计算机得到的IP地址是Inetnet上的非保留地址。公网的计算机和Internet上的其他计算机可随意互相访问。

 

    所以,如果一个局域网只开放80端口,QQ是可以登陆成功的,也可以进行聊天。但传送文件也是不可以的,除非你们都在同一个内网。如果局域网还同时开放443端口,那么,恭喜你,QQ的功能你都可以正常使用。

 

 

QQ是不是TCP和UDP一起用?如果用UDP,如何做到信息的可靠发送? 

答Q即可以使用TCP也可以使用UDP,但QQ默认是使用UDP协议,因为UDP协议消耗资源小,发送速度快,但当UDP协议不能正常转发的时候,就会采用TCP协议进行发送. 

而信息的可靠发送是通过各种验证机制来完成的,这一点你可以去GOOGLE之类的网站去搜索下. 

 

QQ用的是UDP打洞技术还是HTTP遂道? 

答:发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服务器,只不过不是常用的那些,那个服务器是TX自行开发的

 

因为用户一般都是在局域网内,地址都为私有IP,IM服务器是如何将信息转发到用户的? 

答:如果使用TCP就没什么好说了~由内网向外网连接,只要能够连接上进行握手了,消息就可以畅通无阻的进行发送了.如果使用UDP的话,就是使用的打洞技术了,只要通道打通了,发送消息基本和TCP没什么区别,要做的只是维护消息的完整性而已.

 

 

QQ是一个基于TCP/UDP协议的通讯软件,而MSN是基于TCP协议的通讯软件。

 

那么QQ是如何通讯的呢?在TCP/IP协议中,唯一标识一个应用进程的是socket,它通过网络层的IP地址和传输层的端口号来实现,对与同一个IP地址的内部网络,通过不同的端口号来标识不同的QQ进程;当你登陆QQ游戏服务器的时候,服务器会保留你的保留IP地址和端口号信息,并在你的好友的QQ进程中进行列表显示,然后两个进程就可以通信了。 

  通常,发送文件的计算机首先要通过消息服务器将其IP地址发送给接收计算机,当接收计算机同意接收的确认消息反馈到消息服务器后,消息服务器将据此设置好文件传输对话。随即,发送计算机与接收计算机就会在确定好的端口范围内,建立起TCP或UDP连接开始文件的检索与传输。 

  在默认状态下,QQ优先采用了UDP(User Data Protocol,用户数据报协议)协议传送数据,而对可靠性要求高的数据通讯系统往往使用TCP协议传输数据。与TCP协议不同,UDP协议并不提供数据传送的验证机制——在整个文件传输过程中如果出现数据报的丢失,协议本身并不能作出任何的检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。 

  UDP协议适用于无须应答、要求时效的软件使用,这样的设计正好与QQ追求的目标相符,所以QQ优先使用了此协议进行一切功能应用。但是,由于  UDP协议具有不可靠性,常会因种种原因导致消息或数据的发送失败(很多时候会发现发送文件给对方接收时,对方根本收不到要求接收文件的消息。或是发送聊天消息时,对方根本没有收到过消息)。显然,UDP协议由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。QQ在数据传输上更注重实际性能,为了获得更好的使用效果,往往可以牺牲一定的可靠性。因此,使用QQ来传输数据,在很多时候就成了一个“不错”的选择。 

  一般内网传输首选QQ,速度最快,QQ的文件传输是直接个人对个人,采用P2P的传输方式,具有不需中转的优势,而且服务器都在国内,传输性能要高于外国IM软件。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ipad协议免费测试 getLoginQRCode (获取登录二维码) CheckLoginQRCode(检测扫码状态) ManualAuth(扫码登录) ManualAuth(62数据登录) ManualAuth(账号密码登录) newverifypasswd(验证密码) GetQRCode(获取个人或群二维码) F2FQrcode(取收款码) SendNewMsg(发送文本消息) NewInit(获取微信话列表和信息) NewSyncEcode(同步未读信息和好友) SnsSync(同步朋友圈) SnsUserPage(获取指定人朋友圈) SnsTimeLine(取朋友圈首页) GetSnsObjectOp(操作朋友圈) LbsLBSFind(附近的人) GetContactLabelList(获取标签分组) InitContact(获取通讯录) SearchContact(搜索微信号手机号QQ号) UploadMsgImg(发送图片) UploadVoice(发送音频) TenPay(获取钱包信息) TenPay(确认收款) TenPay(生成自定义金额二维码) VerifyUser(V1V2操作,关注公众号,添加好友) OpLogDelUser(删除好友) ShakeReport(摇一摇) FavSync(同步收藏) GetFavItem(获取单条收藏) DelFavItem(删除收藏) addFavItem(添加收藏) logOut(退出登录) AddContactLabel(添加标签) ModifyContactLabelList(修改标签列表) DelContactLabel(删除标签) SnsUpload(上传朋友圈图片) SendAppMsg(发送APP消息) setChatRoomAnnouncement(发布群公告) GetMsgImg(接收消息图片) ExtDeviceLoginConfirmGet(扫码登录) UploadMsgImgCDN(发送CDN图片) GetContact(获取详细资料) TenPay(创建转账) GetA8Key(不想说) CreateChatRoom(创建群) AddChatRoomMember(添加群成员) AddChatRoomMember(删除群成员) GetChatroomMemberDetail(取群成员详细) setChatRoomAnnouncement(修改群公告) GetQRCode(获取群二维码或个人二维码) NewInit(初始化第一次登录使用返回微信列表和信息)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值