IM系统如何调试TCP协议

Posted 普通程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IM系统如何调试TCP协议相关的知识,希望对你有一定的参考价值。


最近负责瓜子IM系统开发。客户端选用了微信开源的Mars库。定义通讯协议如下图。

IM系统如何调试TCP协议


20字节的header,包括headLength包头长度,clientVersion客户端版本,cmdId命令Id号,seq消息序列号,bodyLength消息体长度;消息内容body长度由header中的bodyLength标识。


服务器(取名pigeon-gate)和客户端(Mars)程序雏形开发好之后,需要进行协议联调,怎么确定Mars收发消息的行为是否符合预期呢(预期是阅读Mars源代码分析出来的)?抓取TCP消息包!


工具wireshark,安装在IM服务器pigeon-gate 所在的机器,安装方式自己百度。



IM客户端,发送一条消息,工具抓取到若干TCP数据包,其中红框标记的数据是客户端发到服务器的消息数据(多试几次就知道有效的数据是哪一条了)。


点击数据看到该条TCP消息包内容如下图。


蓝色背景(光标)的内容是客户端发到服务器端的内容(含header,body)。


非蓝色背景的内容可以简单理解为TCP协议的消息头(我们自定义的数据可以算作TCP协议的消息体)。


重点分析蓝色背景区域,消息前4个字节是消息头长度 headLength

headLength,4字节,TCP包内容为"00 00 00 14",将16进制转换为10进制为20。按照此方法得到


headLength = 20

clientVersion = 200

cmdId = 3

seq = 2

bodyLength = 36


根据收到的消息头判断Mars响应的这条消息符合预期。客户端向服务器端发送消息的协议正确,服务器进行相关处理。客户端向服务器端发送消息的协议联调通过。


消息体是明文展示的,可以看到chupengyu几个拼音字母。感谢客户端褚鹏宇同学在联调中作出的努力。


以上是关于IM系统如何调试TCP协议的主要内容,如果未能解决你的问题,请参考以下文章

即时通讯技术文集(第10期):IM通信协议该选TCP还是UDP [共12篇]

TCP:传输控制协议

计网 - TCP 实战:如何进行 TCP 抓包调试?

涛哥带你学习 ModBus TCP 协议 – 调试工具

TCP/IP资料

浅析IM即时通讯开发中TCP协议层KeepAlive保活机制