目录
如图,一个是开发板,一个是手机,可以在开发板上插 一个WiFi模块,两者都可以连接到一个热点,甚至手机可以开启一个热点,两个互相连接后,手机可以跟开发板通信,开发板也可以直接跟手机通信,简单来说就是如果只是实现局域网内使用手机控制开发上的设备,只需要开发板和手机就可以:
要实现拿着手机在任何地方都可以控制家里的开发板,需要考虑更多:需要引入服务器。
1、网络基础知识
1.1 IP和端口的作用
先讲讲网络传输时,怎么表示“自己”、“对方”:
- 自己:源IP、源端口
- 目的:服务器IP、目的端口
- 如左图所示,电脑打开两个浏览器,两个浏览器的源IP都是相同的(因为来自一个电脑),此时两个浏览器同时向http服务器发送数据(服务器IP、端口相同),那么服务器怎么识别数据是来自哪个浏览器的呢:此时就需要端口号进行区分。若想把一个程序发送出去,里面就包含有一个数据包,数据包当中包含IP和端口号,端口号就是一串数字,也就是int整型,http服务器通过识别源端口号来区别是哪个程序发送的数据。
- 如右图所示,电脑上有两个软件,ssh cilent和浏览器访问同一个网站,而ssh client想使用ssh服务,浏览器想使用ssh服务,此时服务器IP相同,那么两个不同的程序怎么声明自己需要什么服务呢:通过目的端口号区分,一般80端口是http服务;22端口是ssh服务。
1.2 路由器的作用
IP和端口都很重要,但是IP不够用:
- 在家里,在公司里,只有路由器才有公网IP
- 其他电脑都只是局域网IP,比如192.168.x.x
- 你家里的电脑,公司的电脑,IP都是192.168.0.100,但是它们并没有冲突:因为它们处于不用的局域网
- 局域网里的电脑要访问公网(物联网),怎么办?要路由器帮忙!
如图,左边的电脑有n多个,其私网IP地址都是不一样的,但他们都是局域网内的IP。例如,公司里面有n多个电脑,那每一个电脑都需要申请一个公网IP吗?答案是不需要的,只需要一个路由器即可。路由器的服务商例如电信、移动和联通,会给路由器分配一个地址(公网IP),那么这个路由器就可以用这个地址(公网IP)去访问互联网,这是路由器实现访问互联网,那么电脑又要怎么才能访问互联网呢?
答案就是电脑需要以路由器为中介才能访问互联网(电脑不能直接访问互联网),假如现在源IP为182.168.0.2,端口号为1234的电脑A想要访问互联网发送数据,例如目的IP、端口号为qq.com,80,他的步骤如下:
- 将电脑A要访问qq.com的请求发送给路由器。
- 路由器记录下该请求。
- 路由器帮忙转发电脑A所要发送的数据。此时路由器会构造出一个新的数据包,该数据包里的源地址和端口发生改变,为路由器自身的IP地址和端口号(例如49.74.234.160,5678),目的IP为qq.com,目标端口例如80,既源IP端口改变,修改成路由器,但目的不变。
- qq.com的80端口号收到请求后返回数据。数据的源IP和端口号是qq.com,80。目标IP和端口号是路由器49.74.234.160.5678。
- 路由器接收到数据之后,将数据转发给电脑A(这里发送给电脑A是因为第2步中路由器记录了电脑A的请求),源IP、端口号是49.74.234.160,5678,目标IP、端口号是192.168.0.2,1234。
如果电脑A、B、C和D没有向路由器发送转发请求,现在有一个病毒,其源IP和端口号是病毒自身的,病毒想去访问电脑B,于是将数据包发送给路由器,源IP和端口号是病毒,目标IP和端口号是49.74.234.160,8888,当数据包到达路由器之后,路由器本身作用就是将数据包进行转发到局域网内的某一台电脑,但此时路由器会发现,该数据是不请自来的,路由器并没有把某个电脑的请求通过8888端口号转发出去,该端口并没有电脑发出传送数据请求,那么路由器就会自动屏蔽病毒发送的数据包。
路由器有以下两个作用:
- 解决公网IP不够用的现象:分配N个局域网地址
- 起到保护作用:屏蔽病毒发送的数据包
IP和端口都很重要,但是IP不够用:
主机A的局域网IP是10.1.1.100,它使用端口1025,去访问公网211.100.7.34
但是它没有公网IP,跟路由器说:哥们,帮帮忙
路由器就把数据包里的(10.1.1.100:1025)改成自己的IP和端口(162.105.176.65:16384),发出伪造的数据包
服务器收到后,返回数据给(162.105.176.65:16384),这是路由器
路由器收到数据后查表:
- 这是主机A要我取的数据,
- 于是把数据包里的目的(162.105.176.65:16384)改为(10.1.1.100:1025),
- 并发给主机A
主机A收到数据
从这个过程可以知道:
- 局域网的电脑,借助路由器,可以访问公网
- 需要局域网内的电脑主动发起网络连接
- 公网无法主动访问局域网内的电脑
- 你访问谁呢?在路由器里都没有记录,丢掉
- 这可以保护局域网内的电脑,比如前两年爆发的勒索病毒
- 但是也造成了:我在家里无法访问公司的电脑,公司的摄像头
1.3 手机访问开发板方式
下图中:手机怎么才能访问到开发板?
- 手机不知道开发板的IP,即使知道也没有意义:开发板的IP是私网IP
- 手机怎么访问开发板?
- 手机无法直接访问到开发板,开发板也无法直接访问到手机
中间要放入服务器:
- 开发板通过路由器连接服务器(可以与2互换顺序)
- 手机通过路由器连接服务器(可以与1呼唤顺序)
- 手机将数据发送给服务器
- 服务器将数据转发给开发板
2、传输数据方式
2.1 通过服务器中转
2.1.1 硬件上
2.1.2 软件上
有很多选择,对于MQTT,它更适合物联网。
2.2 MQTT适合物联网
类似:订阅电视台某个频道。
对于MQTT的深入解析,下一节进行说明。
3.程序设计
3.1 分层
- 网络设备层:负责设备初始化、数据收发
- MQTT协议层:负责数据的解析、打包
- 应用层:根据数据控制设备
3.2 kawaii-mqtt
这是国内开源的一个MQTT客户端:https://github.com/jiejieTop/mqttclient
kawaii 是 卡哇伊 的谐音。