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

揭秘QQ与微信的通信协议:TCP vs UDP

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

揭秘QQ与微信的通信协议:TCP vs UDP

引用
1
来源
1.
http://www.360doc.com/content/24/1003/20/77927521_1135655643.shtml

QQ和微信作为主流的即时通讯工具,它们的通信协议一直是技术爱好者关注的话题。本文通过Wireshark抓包分析,揭示了QQ和微信在文字聊天功能上采用的不同通信协议,并探讨了背后的技术原因。

技术背景

即时通讯系统(IM)通常需要保证消息的可靠传输。根据常识,TCP(传输控制协议)由于其可靠传输的特性,常被用于需要保证数据不丢失的场景。而UDP(用户数据报协议)虽然传输效率高,但可靠性较差,通常用于对实时性要求高但对数据丢失容忍度也较高的场景,如游戏、视频通信等。

那么,QQ和微信这两个主流的即时通讯工具,究竟是基于TCP还是UDP来实现文字聊天功能的呢?让我们通过Wireshark抓包来一探究竟。

微信抓包分析

使用Wireshark抓取数据包,选择Wi-Fi接口进行抓包。扫码登录PC端微信后,可以观察到明显的DNS请求和大量TCP连接。这些长连接很可能是与聊天窗口建立的TCP长连接。

连续发送几条消息后发现,数据包显示的都是IP地址,不够直观。因此,先将IP地址映射为域名,再进行测试。这次可以明显看到大量的TCP连接。查看其中一个数据包,发现聊天信息是加密传输的,需要知道加密算法和密钥才能破解。

结论:微信的文字聊天功能是基于TCP实现的。

QQ抓包分析

同样使用Wireshark抓包,通过输入"ociq"过滤出QQ的消息体。结果显示,QQ使用的是UDP协议。打开一个UDP数据包,可以看到QQ号,但消息内容是加密的。

这引发了一个疑问:UDP不是仅最大努力交付,可能会丢失数据吗?为什么QQ会选择UDP?

猜想

  1. 技术层面:UDP也可以实现超时重传和ACK确认,确保消息不丢失。与TCP相比,UDP不需要三次握手和维持长连接,更适合游戏、视频通信等场景。

  2. 历史原因:QQ发布于1999年2月10日,当时的网络环境和基础设施远不如现在。使用TCP可能会导致大量三次握手重连,加重网络拥堵。同时,当时的IO多路复用和分布式技术也不够成熟,维持长连接的成本很高。UDP则没有这些繁琐的连接过程,更加符合当时的网络环境。

为什么20年来QQ没有重构为TCP呢?可能是因为:

  • 早期的互联网缺乏规范,文档和注释不完善,核心模块已经变成难以改动的大山。
  • 腾讯作为游戏大厂,UDP生态已经非常完善,既然UDP能用得很好,就没有必要重构为TCP。
  • 微信诞生时,网络条件、公司财力和技术架构都比QQ早期强大得多,因此选择了TCP。

总结

通过Wireshark抓包分析,我们发现:

  • QQ的文字聊天基于UDP
  • 微信的文字聊天基于TCP

这种差异反映了不同历史时期的技术选择和网络环境特点。对于技术爱好者来说,了解这些细节有助于更好地理解即时通讯系统的实现原理。

参考资料

https://www.cnblogs.com/zhaojinhui/p/16802391.html

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