Linux MQTT智能家居项目(网络基础知识)

2023-07-15 00:00:00


前言

本篇文章带大家来做一个LinuxMQTT智能家居项目,这个项目将会讲解到网络的基础知识和MQTT协议一些相关的知识。

一、IP和端口的作用

1.IP

IP(Internet Protocol):
IP是一种网络层协议,它负责在互联网中标识和定位设备。每个连接到互联网的设备,如计算机、服务器、路由器等都拥有一个唯一的IP地址。IP地址由一系列数字表示,例如IPv4使用32位地址,IPv6使用128位地址。
IP地址的作用是用于识别和寻址网络上的设备,类似于人类在现实世界中的地址。它使得在网络上的数据包能够被正确地发送和路由到目标设备。通过IP地址,计算机可以准确地确定数据包的发送和接收位置。

IP地址分为两个主要类型:公网IP和私有IP。公网IP是全球范围内可以访问的地址,用于允许设备与互联网进行通信。私有IP是在私有网络内使用的地址,用于在局域网中进行内部通信。

2.端口

在计算机网络中,端口是用于区分不同应用程序或服务的逻辑门户。每个网络应用或服务都可以通过特定的端口号与网络进行通信。端口号是一个16位的数字,范围从0到65535。

端口分为两种类型:TCP端口和UDP端口。TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常用的传输层协议。

TCP端口:TCP协议使用端口号来提供面向连接的、可靠的数据传输。常见的应用如Web服务(HTTP使用端口80)、安全网页浏览(HTTPS使用端口443)、邮件传输(SMTP使用端口25)、文件传输(FTP使用端口21)等。

UDP端口:UDP协议使用端口号来提供无连接、不可靠的数据传输。它适用于对速度和实时性要求较高的应用,如实时音视频传输(视频流使用端口号5004和5005)、DNS查询(端口号53)等。

在这里插入图片描述

二、路由器的转发作用

在局域网中,连接到同一路由器的各个设备可以通过路由器访问公网。这是因为路由器在局域网和公网之间起到了中继的作用,它具有连接局域网和公网的能力,同时提供网络地址转换(NAT)和端口转发等功能。

这里使用百问网的一张图片:
在这里插入图片描述
注意:
公网无法直接访问到局域网中的设备,需要局域网中的设备主动发起连接访问到公网。

原因:

NAT:在一个网络中,公网IP地址是有限且宝贵的资源,而局域网中的设备通常使用私有IP地址(例如,IP地址范围为192.168.x.x或10.x.x.x)来唯一标识自己。当设备从局域网中尝试访问公网时,路由器上的网络地址转换(NAT)会将源IP地址从私有IP地址转换为路由器在公网上分配的公网IP地址。这样做是为了保护局域网中的设备,同时节约公网IP地址的使用。

防火墙:大多数网络都有防火墙保护,包括位于路由器上的防火墙。防火墙起到了保护网络安全的作用,它可以过滤和控制数据包的流动。通常情况下,防火墙会限制从公网到局域网的连接,这样可以阻止未经授权的访问和潜在的安全威胁。

当不同局域网下的设备需要进行通信时,可以通过路由器和服务器进行连接和交互。

在这里插入图片描述
需要服务器的原因:

1.网络隔离:不同的局域网通常使用不同的私有IP地址段,并且由于网络安全限制,它们被隔离在各自的局域网中。要实现这些局域网之间的通信,需要一个位于公共互联网上的服务器来连接它们。

2.网络地址转换(NAT):如果两个局域网具有冲突的IP地址段,即它们使用相同的私有IP地址范围,那么连接它们的设备将无法直接进行通信。此时,服务器可以充当一个NAT设备,通过将源IP地址和目标IP地址转换为适当的地址,实现数据包在不同局域网之间的转发。

3.防火墙和安全策略:通常情况下,网络中会设置防火墙和其他安全策略以保护网络的安全性。这些安全策略可能在不同的局域网之间禁止直接通信。服务器可以配置为遵守网络安全策略,并根据需要进行连接转发和访问控制。

4.特定服务或应用需求:有时,不同的局域网之间需要访问特定的服务或应用程序。服务器可以部署这些服务或应用程序,并作为访问点供不同局域网的设备连接和使用。

三、MQTT概念

MQTT(Message Queuing Telemetry Transport)是一种轻量级的、开放的、基于发布/订阅模式的消息传输协议,旨在为物联网设备和应用程序提供可靠的通信。
以下是MQTT的一些关键概念:

1.发布/订阅模式:MQTT使用发布/订阅模式,其中设备可以发布(publish)消息到一个主题(topic),其他设备可以订阅(subscribe)这个主题并接收相应的消息。这种模式允许消息在不直接知道接收方身份的情况下进行传输。

2.客户端:MQTT使用客户端/服务器架构。设备或应用程序可以作为客户端连接到MQTT代理(broker),并发布/订阅消息。

3.主题(Topic):是MQTT消息的目的地或标识符。客户端可以订阅感兴趣的主题,并接收与该主题相关的消息。主题可以是层次结构的,使用斜线(/)进行分隔,例如"home/living-room/temperature"。

4.代理(Broker):是MQTT网络中的中间件,负责接收发布的消息,并将其传递给相关的订阅客户端。代理是MQTT通信的核心组件,负责路由和转发消息。

5.QoS(Quality of Service):MQTT提供了三种不同的服务质量等级(QoS)用于消息传递。这些级别是:QoS 0(最多一次),QoS 1(至少一次)和QoS 2(只有一次)。QoS级别决定了消息传递的可靠性和保证。

6.消息保留:MQTT允许发布的消息在代理上保留,这意味着在某个客户端订阅相关主题之前,可以接收到最新的保留消息。

7.清理会话:MQTT客户端可以选择性地建立持久的或非持久的会话。持久会话允许客户端在断开连接后重新连接时保留其订阅状态,而非持久会话则不会保留。

MQTT的轻量级设计使其非常适用于传输小型数据包,对带宽、资源消耗和网络延迟都有较低的要求。因此,MQTT在许多物联网应用中广泛使用,如传感器网络、物联网通信、远程监控等。

总结

了解这些网络的基本知识有助于我们后面对程序的理解。

更多推荐

C++ PrimerPlus 复习 第七章 函数——C++的编程模块(上)

第一章命令编译链接文件make文件第二章进入c++第三章处理数据第四章复合类型(上)第四章复合类型(下)第五章循环和关系表达式第六章分支语句和逻辑运算符第七章函数——C++的编程模块(上)本章重要点注意函数指针,const指针参数。其他的其实都简简单单第七章函数——C++的编程模块(上)函数基本知识;函数原型(函数声明

【数据结构】AVL树的删除(解析有点东西哦)

文章目录前言一、普通二叉搜索树的删除1.删除结点的左右结点都不为空2.删除结点的左结点为空,右节点不为空3.删除结点的右结点为空,左节点不为空4.删除结点的左右结点都不为空二、AVL树的删除1.删除结点,整棵树的高度不变化1.1parent的平衡因子在删除结点之前为01.1.1删除结点为parent的左节点1.1.2删

就只说 3 个 Java 面试题

在面试时,即使是经验丰富的开发人员,也可能会发现这是一些很棘手的问题:1、Java中“transient”关键字的用途是什么?如何才能实现这一目标?在Java中,“transient”关键字用于指示类的特定字段不应包含在对象的序列化形式中。这意味着当对象被序列化时,其状态将转换为可以写入文件或通过网络发送的字节序列。通

Mybatis学习笔记10 高级映射及延迟加载

Mybatis学习笔记9动态SQL_biubiubiu0706的博客-CSDN博客无论简单映射(前面所学的单表和对象之间的映射关系)还是高级映射说到底都是java对象和数据库表记录之间的映射关系准备数据库表:一个班级对应多个学生.班级表:t_class学生表:s_stu(自增)新建模块项目整体结构pom.xml<?xm

深度学习——卷积神经网络

卷积神经网络1计算机视觉(ComputerVision)2边缘检测示例(EdgeDetectionExample)3更多边缘检测内容(MoreEdgeDetectionExample)4Padding5卷积步长(StridedConvolutions)6三维卷积(ConvolutionsOverVolumes)7单层卷

汽油辛烷值的测定 马达法

声明本文是学习GB-T503-2016汽油辛烷值的测定马达法.而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们8试剂和标准物8.1气缸夹套冷却液若实验室所处海拔的水沸点为100℃±1.5℃(212F±3F),应使用水作为气缸夹套冷却液。当实验室海拔高度不确定时,应使用添加商用乙二醇防冻剂的水溶液,加

面向Java开发者的ChatGPT提示词工程(8)

GPT是一种强大的自然语言处理技术,能够对文本进行深入分析,实现多种任务,如提取标签、识别实体、理解情感等。在传统的机器学习工作流程中,若要分析一段文本的情感,首先需要收集带有标签的数据集,然后训练模型,接着探索如何在云端部署模型并进行推断。虽然这种方法可能取得不错的效果,但其工作流程较为繁琐。此外,对于每个任务(如情

ChatGPT扇动翅膀后带来的蝴蝶效应

对于蝴蝶效应最常见的阐述是:“一只南美洲亚马逊河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,可以在两周以后引起美国得克萨斯州的一场龙卷风。”简介肯尼亚essay正文论文代写之都为什么是肯尼亚?蝴蝶效应简介在印象中贫穷且落后的东非国家肯尼亚,几乎承包了全球的英文essay代写业务。肯尼亚肯尼亚共和国(TheRepublico

面向Java开发者的ChatGPT提示词工程(6)

在使用GPT构建应用程序时,我们通常不会直接使用第一次写的提示词,而是通过不断迭代来改进它们,以找到最适合我们想要实现的任务的提示词。虽然第一次写的提示词可能会有一定的可用性,但最重要的是找到适合你的应用程序的提示词的过程,而不是第一个提示是否有效。因此,我们需要不断地尝试和改进,才能找到最佳的提示词。使用GPT构建应

MySQL基础—从零开始学习MySQL

01.MySQL课程介绍_哔哩哔哩_bilibili1、MySQL安装以管理员身份运行cmdnetstartmysql80netstopmysql80客户端连接1).方式一:使用MySQL提供的客户端命令行工具2).方式二:使用系统自带的命令行工具执行指令mysql[-h127.0.0.1][-P3306]-uroot

PostgreSQL 入门

文章目录PostgreSQL介绍PostgreSQL和MySQL的区别PostgreSQL的安装PostgreSQL的配置远程连接配置配置数据库的日志PostgreSQL基本操作用户操作权限操作图形化界面安装总结PostgreSQL介绍PostgreSQL是一个功能强大的开源的关系型数据库,底层基于C实现。其开源协议和

热文推荐