MQTT协议分析—TCP基础

举报
樊心昊 发表于 2020/08/25 00:51:26 2020/08/25
【摘要】 前面多篇相关文章已经对MQTT协议进行了一些初步的介绍,相信大家也认识到了MQTT属于应用层协议,在传输层之上,传输层采用TCP协议,所以在使用MQTT协议时必须进行一些TCP相关操作,例如使用前的建立连接和使用结束的释放连接,本章讲解一些TCP相关的基础知识,为后面的MQTT分析作铺垫。TCP(Transmission Control Protocol)全称传输控制协议, 是一种面向连接的...

前面多篇相关文章已经对MQTT协议进行了一些初步的介绍,相信大家也认识到了MQTT属于应用层协议,在传输层之上,传输层采用TCP协议,所以在使用MQTT协议时必须进行一些TCP相关操作,例如使用前的建立连接和使用结束的释放连接,本章讲解一些TCP相关的基础知识,为后面的MQTT分析作铺垫。

TCP(Transmission Control Protocol)全称传输控制协议, 是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

一个完整的TCP通信过程概述

       这里暂且忽略IP协议,只关心TCP。

这里假设是一个客户端和一台服务器进行一次TCP通信,在开始通信之前需要建立连接,在成功建立连接之前首先发起“三次握手”,如果顺利的话,连接就算建立了,可以开始传输数据。

因为TCP协议的特点为可靠,所以在传输时通过多种机制保障数据的可靠性。例如超时重传机制、校验和机制和丢失包的重传机制等,这些机制我们暂时不去深究,将其当作“黑盒”使用即可,你只要知道TCP协议层给你的数据不会有错就可以了。

传输完数据之后会进行连接的销毁,其中使用了“四次挥手”,来确保连接的断开。

三次握手连接建立

这里用一个故事向大家讲解三次握手的细节。

服务器==你家

客户端==快递站(快递员)

       有一天快递站收到了一个你的包裹,准备送来给你,首先快递员给你打电话,问:“你在不在家呀?(第一次握手SYN)”,你和快递员说:“我在家的,你送来吧(第二次握手SYN-ACK)”,快递员说:“好的,我来了(第三次握手ACK)”,这样你就可以准备接收快递了(连接成功建立)。

在Wireshark软件中表现如下:

image.png

       这里主要为了后面的MQTT协议通信过程分析作为铺垫,大家只要能认识到在开始一次完整的TCP通信之前都有一个“三次握手“就够了,这时为了证明TCP通信的双方状态都正常,mqtt协议的通信是基于TCP协议的,所以在开始前也会产生”三次握手“。

数据传输

       建立好了TCP连接之后就可以开始数据传输了,这里我也用一个故事的形式将传输内部细节封装起来,简单的讲述给你听,假设你是一家公司的总裁(应用层),你有一个秘书(TCP传输层),你经常需要寄文件给其他公司,因为你有秘书,所以你只需要把信写好,直接拿给秘书告诉她,我要寄给xxx,秘书就会找到xxx的地址并将信用信封包好,将地址写到信封上(填写端口、ip、序号、状态等等信息),这个过程你都不用关心,秘书(传输层)会帮你处理好的,因为你是总裁(应用层),如果快递送来一封信,秘书很贴心,她会帮你拆开,根据信封上的信息(填写端口、ip、序号、状态等等信息)告诉你是xxx寄来的,她还会替你看看信上的签名(校验和),是不是xxx寄来的,如果不是说明快递又出错了,秘书就不把信给你了,她就去找快递叫他们去找寄信给你的人从新写再一份。

       快递有时也不那么给力,可能会丢件,如果秘书发现了丢件为了不打扰你,她会直接和快递联系,叫他们去找寄信给你的人从新写再一份(丢失包的重传机制)。

       数据传输在一个完整的TCP通信中用到了很多机制来保证数据的可靠性,例如上面说的校验和机制和丢失包的重传机制,这里就不再细说了,你只需要了解在mqtt通信中,mqtt是应用层协议,TCP对于它来说只是一个秘书(传输层),秘书会去保证信会被安全送达(数据是可靠)的,秘书不会关心你的信里面写了什么(数据内容)。

四次挥手断开连接

 

“四次挥手”类似于“三次握手”,主要也是为了告知通信双方本次通信正常结束了,可以销毁连接相关的各类信息了,MQTT连接正常断开时也会产生4次挥手。

       当客户端需要断开连接时,它需要给服务器发送FIN标志,服务器收到后发送ACK给客户端,接着又发送一个FIN给客户端,告诉客户端:“我也要断开连接了”,客户端回复ACK标志着本次通信正常结束。

        在Wireshark软件中表现如下:

image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200