TCP/MQTT简单介绍
目录
TCP/IP模型
TCP的三次连接:
TCP四次挥手:
为什么握手必须三次:
为什么挥手四次:
MQTT协议:
TCP/IP模型
物理层(PHY)规定了传输信号所需要的物理电平、介质特征;
链路层(MAC)规定了数据帧能被网卡接收的条件,最常见的方式是利用网卡的 MAC 地 址,发送方会在欲发送的数据帧的首部加上接收方网卡的 MAC 地址信息,接收方只有监听到属于自己的 MAC 地址信息后,才会去接收并处理该数据
网络层:网络层规定了主机的网络地址该如何定义网络层实现了数据 在主机之间的传递
传输层:(TCP)可以区分数据包是属于哪一个应用程序的,可以说传输层实现了数据包端到端的传递。
另外,数据包在传输过程中可能会出现丢包、乱序和重复的现象,网络层并没有提供应对这些错误的机制,而传输层可以解决这些问题,如 TCP 协议
应用层:以下的工作完成了数据的传递工作,应用层则决定了你如何应用和处理这些数据,

TCP的三次连接:
- TCP 客户端是创建传输控制块 TCB,然后向服务器发出连接请求报文,此时,TCP 客户端进程进入了 SYN-SENT(同步已发送状态)状态。(需要消耗序列号)
- TCP 服务器收到请求报文后,如果同意连接,则发出确认报文。此时,TCP 服务器进程进入了 SYN-RCVD(同步收到)状态。(需要消耗序列号)
- TCP 客户进程收到确认后,还要向服务器给出确认。确认报文;此时,TCP 连接建立,客户端进入 ESTABLISHED(已建立连接)状态。TCP 规定,(ACK 报文段可以携带数据,但是如果不携带数据则不消耗序号)
- 当服务器收到客户端的确认后也进入 ESTABLISHED (已建立)状态,此后双方就可以开 始通信了。
TCP四次挥手:
- 客户端发出连接释放报文,并且停止发送数据;此时,客户端进入 FIN-WAIT-1(终止等待 1)状态。(消耗一个序号)
- 服务器收到连接释放报文,发出确认报文,此时,服务端就进入了 CLOSE-WAIT(关闭等待)状态。这时候处于半 关闭状态,客户端已经没有数据要发送了,但是服务器若发送数据,客户端 依然要接受。这个状态还要持续一段时间。
- 客户端收到服务器的确认请求后,此时,客户端就进入 FIN-WAIT-2(终止等待 2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发 送的最后的数据)。
- 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,由于在半关闭状态,服务器很可能又发送了一些数据,此时,服务器就进入了 LAST-ACK(最后确认)状态,等待客户端的确认。
- 客户端收到服务器的连接释放报文后,必须发出确认,客户端就进入了 TIME-WAIT(时间等待)状 态。注意此时 TCP 连接还没有释放,必须经过 2∗ *∗MSL(最长报文段寿命)的
- 时间后,当客户端撤销相应的 TCB 后,才进入 CLOSED 状态。
- 服务器只要收到了客户端发出的确认,立即进入 CLOSED 状态。同样,撤销 TCB 后,就结束了这次的 TCP 连接。可以看到,服务器结束 TCP 连接的时间要 比客户端早一些
TCP是面向连接的传输协议,是一对一的两点服务。
优点:TCP可靠稳定:会有三次握手来建立连接,而且在数 据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完之后,还会断开来连接用来节约系统资源
缺点:慢,容易被攻击,占用系统资源高
使用场景:传输一些对信号完整性,信号质量有要求的信息
为什么握手必须三次:
通过三次握手能防止历史连接的建立,能减少双方不必要的资源开销,帮助双方同步初始化序列号。
为什么挥手四次:
服务端由于需要等待完成数据的发送和处理;所以ACK和FIN会分开发送
MQTT协议:
- 基于TCP协议的应用层协议
- 采用C/S架构
- 使用订阅/发布模式,将消息的发送方和接收方解耦
- 提供3种消息的QoS(服务质量):0:至多一次(可能丢失)、1:最少一次(可能重复)、2:只有一次(开销大)
MOTT:广泛应用用于物联网领域,是一种能一对多的通信协议;由3种功能构成;分别为代理(消息的中转站MQTT)、发布者(数据的产生者无需知道订阅者的存在)和订阅者(用过订阅主题用来接收数据)
可通过4g模块搭载EMQX平台接受传感器数据