这节课韦老师讲解了一些网络基础知识,收获甚多。结合韦东山老师的笔记,我对视频内容也做了一些总结与理解。
1. 网络基础知识
1.1 IP和端口的作用
先讲讲网络传输时,怎么表示“自己”、“对方”:
- IP
- 端口
在网络中如何表示自己的目的(IP,port)
源(IP,port)<-------> 目的(IP,port),ip和端口的作用是用来表示源和目的。
1.2 公网IP不够用
IP和端口都很重要,但是IP不够用:
- 在家里,在公司里,只有路由器才有公网IP
- 其他电脑都只是局域网IP,比如192.168.x.x
- 你家里的电脑,公司的电脑,IP都是192.168.0.100,但是它们并没有冲突:因为它们处于不用的局域网
- 局域网里的电脑要访问公网(物联网),怎么办?要路由器帮忙!
假设我要去访问源信息qq.com的80端口:
1.我的源是192.168.0.2 :1234 数据包,这个数据包发给路由器(我的电脑没有能力去访问外网的设备,需要路由器帮忙);2.路由器接收到请求后就会去修改这个数据包——>源被替换成49.74.234.160(公网IP),端口改成1278。也就源被改了,但是目的没有被改;3.这个数据包就会被放入互联网到达目标;4.qq.com的80端口也会构造出一个包:49.74.234.160,端口1278,把这个包返回给路由器;5.路由器接收到这个包之后就会查表看一下,之前是谁发给我这个包的,源和端口被替换成192.168.0.2 :1234 作为目的;6.最后你收到了信息。
1.3 对外访问时,路由器来帮忙
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.4 对外访问时,访问谁?
下图中:手机怎么才能访问到开发板?
- 手机不知道开发板的IP,即使知道也没有意义:开发板的IP是私网IP
- 手机怎么访问开发板?
中间要放入服务器:
主动访问服务器,如果有人发给我信息,传给我。如果手机传输 data,服务器会保存data,当其他设备查表,会把data传输给他。
2. 双方怎么传输数据
2.1 通过服务器中转
2.1.1 硬件上(要有一个服务器)
2.1.2 协议上(一个APP)
有很多选择,对于MQTT,它更适合物联网。
服务器程序:matt_serser.exe
发布者(开发板):matt_client.exe
订阅者(手机):matt_client.exe
2.2 MQTT适合物联网
类似:订阅电视台某个频道。
MQTT的数据传输是怎么一回事呢:以CCTV为例,CCTV有很多记者,记者1体育,记者2财经,他们会把消息传给CCTV,后面会有很多观众,观众1可能更关注体育新闻,于是观众1就告诉CCTV我要订阅体育新闻,观众2可能更关注财经新闻,于是观众2就告诉CCTV我要订阅财经新闻,(第一步:订阅一些主题topic)。当记者来发布体育’主题‘的信息(第二步:发布),给CCTV,CCTV发现有人订阅,就把信息给这个观众(第三步:转发 )。
这就是MQTT的工作流程。
3. 程序如何设计
3.1 分层
- 网络设备层:负责设备初始化、数据收发
- MQTT协议层:负责数据的解析、打包
- 应用层:根据数据控制设备
3.2 kawaii-mqtt
这是国内开源的一个MQTT客户端:https://github.com/jiejieTop/mqttclient
kawaii 是 卡哇伊 的谐音。
3.2 kawaii-mqtt
这是国内开源的一个MQTT客户端:https://github.com/jiejieTop/mqttclient
kawaii 是 卡哇伊 的谐音。