文章目录

  • 协议基本数据类型
    • 固定宽度类型
    • 变长数据类型
    • 数组类型
  • 请求响应结构
    • 请求格式
    • 响应格式

协议基本数据类型

固定宽度类型

int8, int16, int32, int64 , 采用大端字节序

变长数据类型

bytes, string, 用一个整型来存储字节长度, 加上该长度的字节数据来表示。 整型值为-1表示null, 字符串用int16来表示长度, 字节数据由int32来表示长度

数组类型

长度用一个int32类型数据表示, 加上该长度的其他类型数据的数组

请求响应结构

RequestOrResponse => Size (RequestMessage | ResponseMessage)
Size => int32

Size - 一个4字节整数, 来表示一个字节长度, 后面跟随该长度的字节数据, 来表示请求响应的消息

用wireshark抓下包看看

kafka用的2.11版本, java客户端用的是2.7的版本

因为我们使用的kafka端口是9093, 所以配置抓取过滤为 tcp port 9093

然后启动我们的应用, 应用代码很简单, 自行编写, 就是producer发送一个字符串, consumer过5秒拉取并打印

显示过滤配置 tcp.flags & 0x002来过滤出syn包, 这样可以查看建立几次连接, 方便追踪tcp数据流

这里要注意下, wireshark中配置的kafka协议解析端口是9092, 如果我们的kafka服务端口不是9092, 要修改

编辑->首选项->protocols->找到kafka协议->tcp ports里加上你的kafka端口号, “,”分隔

这样配置后, wireshark就会自动解析你的kafka协议,, 方便分析

我们追踪第一个tcp流数据看下

我们可以看到三次握手后, 客户端会发送一个request请求

我们看下请求内容

可以看到, 开始是MessageSize, 4个字节, 值是0x14, 表示后面的message字节长度为20个

apikey占2个字节, 值是0x12(18), 表示ApiVersions请求

api version 占2个字节, 版本号0 ,这个是ApiVersions的版本号

CorrelationId 占4个字节

ClientId 占12个字节, 内容是producer-1, 前面说过, 字符串是个数组类型, 需要一个unit16来表示长度,加上 producer-1字节长度为10, 总共长度12字节

最后可以看出整个message内容长度为20字节

请求格式

RequestMessage => ApiKey ApiVersion CorrelationId ClientId RequestMessageApiKey => int16ApiVersion => int16CorrelationId => int32ClientId => stringRequestMessage => MetadataRequest | ProduceRequest | FetchRequest | OffsetRequest | OffsetCommitRequest | OffsetFetchRequest
字段名 说明
ApiKey 一个数字id, 表示是哪种请求(meta请求, 生产请求, 拉取请求等)
ApiVersion 表示这个api的版本号, 会关系到响应格式
CorrelationId 用户提供的整数数据, 服务器不会修改, 直接通过响应传回。
ClientId 这是用户提供的客户端id。

响应格式

Response => CorrelationId ResponseMessage
CorrelationId => int32
ResponseMessage => MetadataResponse | ProduceResponse | FetchResponse | OffsetResponse | OffsetCommitResponse | OffsetFetchResponse
字段名 说明
CorrelationId 服务端回传客户端请求发过来的CorrelationId内容

再用wireshark看下请求响应的包

这个是请求协议数据, 从蓝底字开始分析字节数据内容

4个字节(蓝底部分) —— 请求消息体长度为20字节

2个字节 —— api key表示请求消息类型, 18表示请求获取服务端支持的api 版本号明细

2个字节 —— api版本号, 使用的是0版本

4个字节 —— 客户端提供, 服务端会通过响应消息体传回该数据

12个字节 —— 前俩个字节是一个unit16的数据类型, 表示字符串长度是10个字节, 后面10个字节表示字符串字节编码内容

这个是响应的协议数据, 第一个图是解析后的内容 , 包含了服务端支持的共43个API协议

接下来分析第二个图中的字节数据含义, 从蓝底字节开始

4个字节 —— 响应体长度, 268个字节长度

4个字节 —— 之前请求消息中的correlationId值, 通过响应消息这个字段传回来了

2个字节 —— 状态码, errorcode, 0表示没出错

4个字节 —— unit32类型, 代表接下来的字节数组长度, 这里是表示数据元素的个数, 不是字节长度, 要注意, 0x2b值表示字节数组元素个数有43个

接下来循环43次,每6个字节代表一个api version信息对象, 这里可能有人有疑惑, 怎么确定的这6个字节代表一个api version对象呢? 这是根据前面请求消息体中api key 和api version来确定的, 之前咱们有提到过, 会关系到响应体的格式, correlationId可以确定是哪个请求的响应。

那我们再看下这6个字节又有什么含义呢

前2个字节表示api key值, 用来区分是哪种消息类型

中间2个字节表示服务端支持的最小版本号

后2个字节表示服务端支持的最大版本号

现在通过抓包分析, 大家应该对kafka协议的请求响应消息格式有了更清楚直观的认识, 接下来我们再学习kafka协议的其他内容。

wireshark 之 kafka协议分析1相关推荐

  1. PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析

    Python黑帽编程1.5  使用Wireshark练习网络协议分析 1.5.0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...

  2. 图解用Wireshark进行Http协议分析

    一 安装WireShark 安装完成后,运行,如果出现NPF未运行的提示,如下图:说明可能是装的时候WinPcap未装上:一般安装Wireshark会同时自动安装Winpcap: 如果装了Winpca ...

  3. Wireshark嗅探和协议分析

    一.实验目的 1.初步掌握Wireshark的使用方法,熟悉其基本设置,尤其是Capture Filter和Display Filter 的使用. 2.通过对Wireshark抓包实例进行分析,实现捕 ...

  4. 使用 Wireshark 进行计算机网络协议分析

    文章目录 实验准备 Wireshark基本操作 一.数据链路层 实作1:Ethernet帧结构 实作2:子网内/外通信时的 MAC 地址 实作3:掌握 ARP 解析过程 二.网络层 实作1:熟悉 IP ...

  5. 利用WireShark进行DNS协议分析

    一.准备工作 系统是Windows 8.1Pro 分析工具是WireShark1.10.8 Stable Version 使用系统Ping命令发送ICMP报文. 二.开始工作 打开CMD.exe键入: ...

  6. WireShark实战笔记之DNS协议分析

    DNS协议分析 DNS协议概述 DNS工作机理概述 dns报文 WireSahrk分析DNS协议 查看第一个包: 查看第四个包(响应包) DNS协议概述 DNS协议也可以称为DNS服务,全称是Doma ...

  7. 工业协议分析1——攻防世界

    工业协议分析1 工具: wireshark 原理:协议分析 题目: 题解: 首先拿到一个流量包,分析流量包的异常.从长度分析,发现在某一处的长度异常. 里面藏有png图片,并且是经过了base64加密 ...

  8. 计算机网络实验报告 实验4 TCP协议分析

    实验4 TCP协议分析 1.实验目的 了解运输层TCP协议基本概念.报文结构 分析TCP报文头部 分析TCP连接建立过程.TCP连接释放 掌握利用tcpdump和wireshark进行tcp协议分析技 ...

  9. Wireshark数据抓包分析(网络协议篇)1.2安装Wireshark

    Wireshark数据抓包分析(网络协议篇)1.2安装Wireshark Wireshark(前称Ethereal)是一个网络包分析工具.该工具主要是用来捕获网络包,并显示包的详细情况.本节将分别介绍 ...

最新文章

  1. SAP MM 没有录入盘点结果的盘点凭证不能执行MI07
  2. .NET 中 如果一个Task A正在await另一个Task B,那么Task A是什么状态
  3. html手机端页面meta,手机页面的 HTMLmeta 标签使用与说明
  4. 手机/移动前端开发需要注意的20个要点
  5. Navicat导出表结构
  6. textView 加入链接
  7. 华为南太无线解决方案部梁旭阳_华为无线充电新专利:激光无线充电,替代传统半接触式...
  8. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals)
  9. 里面怎么使用import引用_谈谈模块化的 require 和 import
  10. 送书|北大出版:R语言数据分析与可视化从入门到精通
  11. SpringCloud学习之Hystrix
  12. Microsoft Visual Studio--- 未能加载文件 %CommonDir%\dte90a.olb。未能找到该文件,因此解决此问题的尝试,请重新安装此程序。
  13. FileZilla Server连接服务器失败
  14. 如何彻底删除adobe?adobe官方清理工具怎么用?
  15. R语言——相关系数图
  16. 北京航班延误_预测航班延误
  17. singleton模式 C++
  18. NTLite 1 2 0 4453授权注册版
  19. 【调剂】南华大学2021硕士研究生招生调剂公告
  20. 超松弛迭代法求解二维电磁场有限差分方程(附Matlab代码)

热门文章

  1. DocuPrint 2050 纸盒设置
  2. (大)数据处理:从txt到数据可视化
  3. 人工智能智能决策支持系统:技术、特点和挑战
  4. 全球最先进机器人,或将替代你的工作,害怕吗?
  5. 软件测试之外国语言测试
  6. Python机器学习Sklearn入门之神经网络
  7. 写在2016年底(r11笔记第30天)
  8. 同是“千亿”目标:伊利势在必得,蒙牛恐难实现
  9. 向西,向西,到栖霞去(一)
  10. 大数定律 与 中心极限定理 的理解