2016响应式网站模版,室内设计联盟首页,做二手衣服的网站,简述做个人网页的思路写在前面
QQ#xff0c;微信这样的聊天软件。我们一般称为im#xff0c;Instant Messaging#xff0c;即时通讯系统。那大家会不会有疑问#xff0c;自己聊天内容会不会被黑客或者不法分子知道#xff1f;这种体量的im是基于tcp还是udp呢#xff1f;这篇文章我们就来探索…写在前面
QQ微信这样的聊天软件。我们一般称为imInstant Messaging即时通讯系统。那大家会不会有疑问自己聊天内容会不会被黑客或者不法分子知道这种体量的im是基于tcp还是udp呢这篇文章我们就来探索这两个疑问。 涉及两个及其以上的聊天功能就是即使通信系统做过im系统的同学都知道这类系统大多是基于TCP来维持长链接保证可靠传输来进行通信的。根据常识我们知道TCP是可靠传输而UDP是尽最大努力交付。对于即时通信这类实时性很强且不能丢数据的系统也理所应当用TCP来做可靠传输保证自身数据不丢失。 但真的是这样吗我们来对微信和qq做一次实验。用wireshark来抓包看一下这个是什么协议前排提示我们只是针对消息发送讨论不包括视频文件等通讯方式。
微信抓包
使用wireshark来抓取数据包电脑使用Wi-Fi连接所以我们选择WIFI。开始抓包扫码登录pc端微信我们可以看到一次很明显dns请求。 接着就发现了大量的TCP连接这些长链接推断应该是和聊天窗口进行建立tcp长链接。
连续发送几条消息测试发现都显示的是 ip地址不太直观所以我们可以先设置将ip映射成域名再做一次测试这次就明显很多了。 接着我们再测试发送消息在这过程中可以看到大量的tcp链接。我们随便看一个数据包可以发现聊天信息其实是加密传输的如果要破解就必须知道加密算法和密钥。所以大家不用担心自己的聊天消息被别人截取。 同时我们可以暂时敲定微信的文字聊天功能是基于TCP实现的
QQ 抓包
ok既然微信已经可以确定是基于TCP了。那QQ是不是也是TCP呢还是一样使用wireshark抓几个数据包。注意我们这里输入ociq将qq的消息体筛选出来。 出现了 居然是UDP我们打开一个udp的包看一下emmm双击就能看到QQ号。当然消息也是加密的所以看不出来。但也能初步推断出qq是基于udp通信的。
这时候就有彦祖会问了欸udp不是仅最大努力通信吗可能丢失数据呀 udp其实在游戏视频通信、文件传输用的多。
猜想 但为什么qq用的是udp呢 我猜测有两个原因
技术层面udp也可以做超时重传ACK确认确保消息不丢失这是保证服务可用性和稳定性的最低标准。只不过不需要像tcp那样三次握手维持长链接。历史原因。
从这两款软件发布时间我们可以知道。微信发布于2011年1月10号qq发布于 1999 年 2 月 10 日 。好家伙qq比我还老。 在qq发布的那个年代国内的网络基建比较薄弱 如果用tcp会经常出现大量三次握手的重连而大量的重连也会导致网络更加拥堵。 同时当时的io多路复用、分布式技术也不成熟维持长链接的成本为很高。
udp则没有这些繁琐的连接过程更加符合当时的网络环境。 问题又来了20年来QQ就没打算重构吗把udp换成tcp嘛 这个我也不知道。但是从QQ的发展路线我们猜测估计是QQ打算重构的时候发现已经重构不动了。互联网的流动性还是很强的。早期的互联网没有现在的互联网这么规范包括文档、注释、CR等等。一开始的QQ很难变现甚至出现了贱卖的情况。自从有了变现途径后就会专注于变现而回过头来发现自己的核心模块已经是动不了的大山。
当然这也只是猜测我也不是腾讯员工不清楚为啥没重构成TCP。不过也有可能是厂内的udp生态很完善毕竟游戏大厂既然UDP也能用还用的挺好的也没重构成TCP的必要。
那为啥微信又是TCP呢微信诞生的年代网络条件、公司财力、技术架构都比10年前的那个小企鹅强大太多了
总结
QQ的文字聊天基于UDP、微信的文字聊天基于TCP。
参考
https://www.cnblogs.com/zhaojinhui/p/16802391.html