MQTT协议详解及开发教程(11)心跳请求PINGREQ及响应PINGRSP报文流程分析

推荐一款稳定的基于C编写的MQTT Client开源库 cMQTT
MQTT协议详解及开发教程(一)MQTT协议概述
MQTT协议详解及开发教程(二)MQTT服务器EMQx搭建
MQTT协议详解及开发教程(三)MQTT Client工具软件选择及简单测试
MQTT协议详解及开发教程(四)MQTT协议报文格式
MQTT协议详解及开发教程(五)CONNECT/CONNACK报文分析
MQTT协议详解及开发教程(六)PUBLISH发布QoS0消息报文分析
MQTT协议详解及开发教程(七)PUBLISH发布QoS1报文流程分析
MQTT协议详解及开发教程(八)PUBLISH发布QoS2报文流程分析
MQTT协议详解及开发教程(九)订阅SUBSCRIBE及SUBACK报文流程分析
MQTT协议详解及开发教程(十)取消订阅UNSUBSCRIBE及UNSUBACK报文流程分析

前言

在上一篇文章中,我们对取消订阅UNSUBSCRIBE和取消订阅确认UNSUBACK的报文进行了分析,本文我们接着分析心跳请求PINGREQ和响应PINGRSP
MQTT的心跳PING本质上是类似于TCP的心跳,检测通信网络是否正常

1. Client 中KeepAlive参数示例

KeepAlive参数
本文中KeepAlive时间设置为30秒

1.1 PINGREQ抓包

PINGREQ抓包
源码如下:

c0 00                                            

1.2 固定报头

c0 0
其中:
c0 – 对应的控制报文类型为PINGREQ
00 – 剩余长度0 = 0个字节

1.3 可变报头

PINGREQ没有 可变报头

1.4 有效载荷

PINGREQ没有有效载荷

2 PINGRSP 报文分析

2.1 PINGRSP 抓包

PINGRSP抓包
源码:

d0 00                                             ..                                

2.2 固定报头

d0 00
其中:
d0 – 对应的控制报文类型为PINGRSP
00 – 剩余长度0x00 = 0个字节

2.3 可变报头

PINGRSP报文没有可变报头

2.4 有效载荷

PINGRSP报文没有有效载荷

3.KeepAlive参数含义

可以简单的认为客户端和服务器之间约定的心跳时间,客户端会每隔KeepAlive时间向broker发送一次ping请求指令,如果服务器返回PINGRSP,则认为网络正常,当然这个检测是双向的,服务器也会检测client有没有在规定的时间内发送ping请求,如果没有,服务器认为客户端已经离线,那么就会关闭客户端会话。

3.1 KeepAlive抓包

两次PINGREQ抓包
通过上图可以看到,两次的PINGREQ之间的间隔是30秒,这跟本文开头设置的KeepAlive时间是一致的。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值