【百问网智能家居6】MQTT和网络知识
本博客是基于百问网视频和资料做的一些个人总结,如有错漏,欢迎纠正。
一、MQTT基础知识
MQTT是常用的一种网络协议,他的通信原理示意图如下:
服务器:接收来自客户端的网络连接;接收客户端发来的消息;处理来自客户端的订阅和退订请求;向订阅的客户转发应用程序消息;
客户端:客户端连接服务器,可以是消息的发布者和订阅者,用于发布和订阅信息;退订或者删除其他客户端的消息;断开和服务器的连接。
在MQTT中,要进行通信,即消息传递,需要以下步骤:
首先由客户端向服务器发送连接请求进行连接,连接成功后订阅某个主题或者发布某个主题的消息,然后由另一个客户端发布该主题的消息或者订阅该主题。这时,服务器会把该主题的消息内容发送给订阅该主题的客户端,以此来完成消息的网络传递。
消息传递中涉及需要的操作有:
订阅(Subscribe),取消订阅(UnSubscribe),连接(Connect),断开连接(DisConnect),发布(Pbulish)。
二、网络知识
对于一般的设备进行通信,如IIC、SPI,一般都是在知道对方的设备地址来用以区分通信。对于网络设备通信也是类似的,每个网络设备都有自己的一个IP地址,通过这个IP地址来用以区分设备。但是IP地址是有限的,难以承载数以亿计的网络设备区分。于是,在每个网络设备加以端口来区分。此外,对于用户设备而言,不可能允许任何其他设备都能通过IP地址和端口号来与之进行通信,这样极容易导致恶意数据损坏用户设备。于是,采用路由器来做中继器,用户设备采用一个私有IP地址和端口号,路由器将用户设备的数据通过转换,生成一个新的公有IP地址和端口号来进行与服务器的数据交换。这样一来,外来数据尽管能知道我的路由器的公有IP地址和端口号,但是却不能够知道用户设备的私有IP和端口号,路由器就不会把数据转义再发回用户设备,就被舍弃掉了。