问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Wireshark 解析QQ、微信的通信协议|TCP|UDP

创作时间:
作者:
@小白创作中心

Wireshark 解析QQ、微信的通信协议|TCP|UDP

引用
CSDN
1.
https://blog.csdn.net/weixin_45304503/article/details/142689804

QQ、微信这样的聊天软件,我们一般称为IM(Instant Messaging),即时通讯系统。大家可能会有疑问:自己的聊天内容会不会被黑客或者不法分子知道?这种体量的IM是基于TCP还是UDP呢?这篇文章就来探索这两个疑问。

涉及两个及其以上的聊天功能就是即时通信系统,这类系统大多是基于TCP来维持长链接,保证可靠传输来进行通信的。根据常识我们知道,TCP是可靠传输,而UDP是尽最大努力交付。对于即时通信这类实时性很强且不能丢数据的系统,也理所应当用TCP来做可靠传输,保证自身数据不丢失。

但真的是这样吗?我们来对微信和QQ做一次实验。用Wireshark来抓包看一下这个是什么协议!前排提示,我们只是针对消息发送讨论,不包括视频、文件等通讯方式。

微信抓包

使用Wireshark来抓取数据包,电脑使用Wi-Fi连接,所以我们选择WIFI。开始抓包,扫码登录pc端微信,我们可以看到一次很明显DNS请求。接着就发现了大量的TCP连接,这些长链接推断应该是和聊天窗口进行建立TCP长链接。

连续发送几条消息测试发现都显示的是IP地址,不太直观,所以我们可以先设置将IP映射成域名,再做一次测试,这次就明显很多了。接着我们再测试发送消息,在这过程中可以看到大量的TCP链接。我们随便看一个数据包,可以发现聊天信息其实是加密传输的,如果要破解就必须知道加密算法和密钥。所以大家不用担心自己的聊天消息被别人截取。

同时我们可以暂时敲定,微信的文字聊天功能是基于TCP实现的

QQ 抓包

既然微信已经可以确定是基于TCP了。那QQ是不是也是TCP呢?还是一样使用Wireshark抓几个数据包。注意我们这里输入ociq,将QQ的消息体筛选出来。

出现了,居然是UDP,我们打开一个UDP的包看一下,emmm,双击,就能看到QQ号。当然消息也是加密的,所以看不出来。但也能初步推断出QQ是基于UDP通信的。

这时候就有彦祖会问了?欸!UDP不是仅最大努力通信吗?可能丢失数据呀?!UDP其实在游戏、视频通信、文件传输用的多。

猜想

但为什么QQ用的是UDP呢?

可能有两个原因:

  1. 技术层面:
    UDP也可以做超时重传,ACK确认,确保消息不丢失,这是保证服务可用性和稳定性的最低标准。只不过不需要像TCP那样三次握手,维持长链接。

  2. 历史原因。
    从这两款软件发布时间我们可以知道。微信发布于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

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号