看见协议,浅析TCP、HTTP、MQTT

article/2025/9/29 13:43:23

如果对tcp还不了解的,可以看看计算机网络基础简单了解一下;

如果对tcp的深入感兴趣,看了上一篇还不过瘾的可以看吊打面试官!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题

好了,如果看回来了我们来进入正题,首先了解一下wireshark

抓包工具wireshark

首先去官网下载对应安装包https://www.wireshark.org/download.html 

window安装下一步下一步、默认就行,其中有一个统计usb的包是否安装,可以不装

启动服务,第一步选择网卡

常用知识

不同的协议有不同的着色规则;点击  视图-->着色规则 查看

过滤栏包含:保存,停止、重新捕获、切换网卡等等

数据过滤

通过数据过滤,来查看我们的请求的具体执行情况

ip.addr == 216.58.200.42 根据ip筛选

ip.addr == 10.200.60.88 and http 根据ip和协议筛选,好像还有http2

 看见HTTP协议

首先,从之前的两篇TCP博客拿一些TCP协议的基本概念,方便后面的理解

准备一个简单的http接口如图:

请求地址 http://127.0.0.1:11003/demo/servicea/person/123  ,响应很简单

使用postman来请求,开启wireshark的抓包,然后通过ip.addr == 10.200.60.88过滤指定请求

 HTTP请求分析

## tcp摘要信息
54251 → 11003 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
54251 → 11003 端口号:源端口--->目标端口
[SYN] client-->server [SYN、ACK] server响应ACK [ACK] 客户端确认ack、连接建立
Seq : 消息序列号、【基本上针对的ack = seq+1】
Win: TCP 窗口大小;最大65535=64kb
Len: 消息长度;len = TCP数据长度 = IP总长度-IP首部长度-TCP首部长度
Mss: 最大报文段长度;规定的最大报文长度;
Ws: 窗口缩放调整因子;ws * win = 时间窗口长度  
SACK_PERM : SACK选项,这里等于1表示开启 SACK。

 明显看到133-134-135是tcp的三次握手;然后136是http请求:client-->server

137是针对136的http的ack确认,140的[PSH,ACK]是针对136的http消息体响应

141是服务端对客户端的响应server-->client;142是客户端对服务端的确认。

http1.1默认开启keepAlive;后面就是keepalive;

keepalive使用心跳检查,client-->server ;服务端响应ack;

间隔固定的时间去重复这个过程;

TCP的[PSH,ACK]

网上对TCP segment of a reassembled PDU解释不清不楚;

使用postman在body放无效数据来观察

对面上面两张 wireshark抓包的图:可以看到客户端包含数据时候,会发送[PSH,ACK];没有数据的情况直接使用http请求

使用google浏览器试一试,发现执行了两次tcp三次握手,有博客说为了google可用性设计、供参考;

 一次MQTT协议异常的排查

对mqtt不了解的可以看看MQTT和协议笔记;

mqtt是一个工业环境下的mq协议,需要mqtt server端,一端发消息,一端收消息;

某个项目中使用mqtt协议,同事排查发现问题,发现mqtt server挂了重启以后,客户端会一直重连;但是一直重连不上

表现为:连接成功--->订阅----阻塞---订阅成功---断开连接 ---->重连成功---->订阅      一直循环

由于不方便贴源码,直接说造成这次后果的原因

1、重连以后会重新订阅topic、订阅调用阻塞的await方法导致无法处理订阅的ack响应,阻塞10秒

2、mqtt client有个定时器发送消息失败(未接到响应ack)会重新发送消息,默认10秒每次加5秒去重发消息;

但是重发的消息是针对PUBLISH的消息,导致重发订阅消息协议错误,服务端断开连接

## mqtt消息类型回顾
CONNECT – 连接服务端
CONNACK – 确认连接请求
PUBLISH – 发布消息
PUBACK –发布确认
PUBREC – 发布收到(QoS 2,第一步)
PUBREL – 发布释放(QoS 2,第二步)
PUBCOMP – 发布完成(QoS 2,第三步)
SUBACK – 订阅确认
UNSUBSCRIBE –取消订阅
UNSUBACK – 取消订阅确认
PINGREQ – 心跳请求
PINGRESP – 心跳响应
DISCONNECT –断开连接

mqtt server mosquitto报错: Client netty-mqtt/08elI9Go disconnected due to protocol error 

再此开启wireshark的抓包,信息如下

简单分析:

118~120 tcp三次握手

121~124 mqtt的连接和确认

135~138 mqtt的订阅确认,topic是mqtt-test

147~150 tcp的四次挥手

将Mqtt服务关闭,客户端有重连机制去重新连接服务端,发送tcp的syn;

[RST,ACK]服务端断开连接;[TCP Retransmission] 客户端重传

服务端发送 tcp rst终止重连,TCP重传一次;继续这个过程

等服务端正常启动,又进入上面的流程tcp三次握手,建立mqtt connect;

通过比对第一次正常订阅,和第二次异常订阅导致服务端关闭连接的信息;

mqtt 订阅的消息头,一个是82,一个是8a;协议重发出现问题;

最终确认订阅消息重发了,重发的消息出现问题导致报错协议错误,服务端主动断开连接,问题得到定位。 

2021.01.22  Add  Mqtt ssl 连接建立

第一步还是三次握手

第二步是 Mqtt层面的Connect  Comand  客户端向服务端发起mqtt连接

第三步就不再是   原来的逻辑   服务端向客户端发送Mqtt响应 Connet ack 连接响应

而是变成了mqtt服务端向客户端发送证书、秘钥等等、客户端向服务端发送证书、秘钥等等;确认以后就可以发送消息了。和http层面的ssl不一致


http://chatgpt.dhexx.cn/article/etYeB9I0.shtml

相关文章

MQTT协议简介

一、mqtt协议简介1.1 MQTT协议特点1.2 发布和订阅1.3 QoS(Quality of Service levels)QoS 0QoS 1QoS 2 二、MQTT 数据包结构2.1 MQTT固定头 ( FixedHeader )2.2 MQTT可变头 ( Variable header )2.3 消息体 ( Payload ) 三、环境搭建3.1 MQTT服务器搭建3.…

MQTT 协议是什么

MQTT 协议是什么 随着 5G 时代的来临,万物互联的伟大构想正在成为现实。联网的 物联网设备 在 2018 年已经达到了 70 亿,在未来两年,仅智能水电气表就将超过10亿。 海量的设备接入和设备管理对网络带宽、通信协议以及平台服务架构都带来了很…

简述MQTT协议

目录 简介MQTT协议组成MQTT三种QOS 1.简介 1.1 MQTT介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输): 是IBM推出的一种针对移动终端设备基于TCP/IP的发布/订阅协议;可以连接大量的远程传感器和…

MQTT协议详解(完整版)

1 MQTT协议概念: 1.1 MQTT特点: 基于Publish/Subscribe(发布订阅)模式的物联网通信协议简单易实现支持Qos(服务质量)报文精简基于TCP/IP 发布订阅模式: 客户端只需要订阅这个主题,当有其他客户端向这个服务端发布消息时,这个客户端就可以收到这个消息…

MQTT协议-MQTT协议简介及协议原理

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布…

MQTT协议详解及v5.0实践——实践类

本文主要包含了以下内容: 1)MQTT协议演进历史及协议特点,总结和分析MQTT协议族的优缺点,分析和总结了为什么相比于其他协议,MQTT适合IoT,业内支持现状等。 2)阿里云IoT MQTT3和5协议在实践中的…

MQTT与TCP通信协议的对比

一、背景 在物联网场景开发中,大多数通信模组都支持TCP、UDP、MQTT、CoAP、HTTP、LwM2M等网络通信协议,其中既有负责传输层协议,也有应用层协议,不同协议适用的场景也不尽相同。 二、协议分层 上图中举例了网络分层中最常见的几…

MQTT协议介绍

MQTT(Message Queuing Telemetry Transport, 消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码…

MQTT协议超全面总结来啦

一、概念 MQTT 是基于 Publish/Subscribe 模式的物联网通信协议,凭借简单易实现、支持 QoS、报文小等特点,占据了物联网协议的半壁江山。 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)&#xff0c…

【MQTT协议详解】MQTT协议

文章前注:本文的大量素材来自于百度百科和MQTT协议3.1.1中文板 MQTT协议3.1.1中文版网址:http://blog.mcxiaoke.com/mqtt/protocol/MQTT-3.1.1-CN.html 一、认识MQTT MQTT(消息队列遥测传输) 是ISO 标准(ISO/IEC PRF 20922)下基于 发布/订阅 范式的消息…

MQTT协议 详解

文章目录 一、啥是MQTT?1. MQTT协议特点2. 发布和订阅3. QoS(Quality of Service levels)QoS 0 —— 最多1次QoS 1 —— 最少1次QoS 2 —— 只有1次 二、MQTT 数据包结构1. MQTT固定头2. MQTT可变头 / Variable header3. Payload消息体 三、M…

MQTT协议图解,一文看懂MQTT协议数据包(真实报文数据解析解释)

文章目录 一、MQTT协议二、协议详解2.1 协议结构2.1.1 固定报头2.1.2 可变报头2.1.3 有效载荷 三、具体协议报文详解3.1 连接服务器报文详解3.2 发布消息报文详解 四、开源的MQTT实现五、官方文档3.1.1中文翻译下载六、官方文档5.0中文翻译下载 本文主要介绍MQTT协议的结构和具…

MQTT协议(概括与详解)

I概括 一,MQTT协议 1、MQTT协议可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。 2、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。 对负载内容屏蔽的消息传输。 使用 TCP/IP 提供网络…

大数据挖掘分析经典案例,主要包含哪几种?

1.预测产品未来一段时间用户是否会流失,流失情况怎么样; 2.公司做了某个促销活动,预估活动效果怎么样,用户接受度如何; 3.评估用户信用度好坏; 4.对现有客户市场进行细分,到底哪些客户才是目…

用户复购行为预测--数据挖掘分析案例(天池/python)

–阿里天池新人赛中的一个,记录分享。 Repeat Buyers Prediction-Challenge the Baseline-天池大赛-阿里云天池 第一次提交:8简单特征,随机森林模型,score:0.5507327,排名:278 第二次提交:13特…

数据挖掘简介

数据挖掘(Data Mining,DM)又称数据库中的知识发现(Knowledge Discover in Database,KDD) 数据挖掘又称数据库中的知识发现(Knowledge Discover in Database,KDD)&#xf…

数据挖掘实战(聚类分析)

目录 数据探索 数据初步认识 查看数据相关信息 图形数据探索 回归分析 矩阵图分析 相关性分析 数据预处理 k-means聚类 算法简介 算法实现 k-medoids方法 算法简介 算法实现 层次聚类 som方法 实验对比 数据探索 数据初步认识 为研究我国31个省市的城镇居民…

基于数据挖掘的疾病数据可视化分析与预测系统

温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 随着医院信息系统(HIS)在全国各大医院的推广和应用,会有大量和病人相关的临床数据每天在医院中记录,而这些真实的数据随着规模积累的增加&a…

2019疫情海量数据挖掘分析与可视化实战(源码数据见附件)

海量数据挖掘分析与可视化实战报告 课程名称:海量数据挖掘分析与可视化实战 实训学期: 2021-2022学年第二学期 实训时间: 第16周 专 业: 数据科学与大数据技术 班 级: …

数字MIC(es7202 PDM协议)MIC录音声音较小

问题:我司有个项目,android 11 rk3566 的项目,该项目带audio 模块,项目MIC 使用的es7202(ADC),该芯片是一个编码芯片,没有解码功能,该模块的录音的增益已经调到最大,但录入的MIC音量…