明珠的个人博客

是谁告诉你,你是赤裸的?

0%

新的开始之物联网

物联网

啥是物联网?顾名思义,万物联网。
物联网的英文名称是Internet of Things。IoT则是Internet of Things的缩写。因此, 物联网 = IoT。
在公司里下班前的5分钟,你坐在办公室的座椅上打开了手机,控制地下停车场里的汽车打开了座椅和方向盘加热准备下班。汽车(物)需要联网(网)才能接收到你发的信息,这就是物联网。
从连接的角度观察,原来的人与人连接(互联网)扩展到人与物、物与物的连接(物联网)。连接的对象从原来单纯的文档、视频、交互等这些只有人才能理解的信息世界,慢慢侵入到传感器、设备、装备,乃至家居、服装等客观物理世界,实现了技术从互联网到物联网的跃迁。

而本次的物联网,将以C/C++语言通过Arduino IDE来开发NodeMCU来实现…

物联网之互联网基础知识

在网络系统中,为了保证通信设备之间能正确地进行通信,必须使用一种双方都能够理解的语言,这种语言被称为“协议”。
TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式。TCP/IP是一组协议的代名词。
TCP/IP协议被划分为4层,分别是:

1
2
3
4
5
"分层名称	                                     包含协议"
应用层 HTTP, FTP, mDNS, WebSocket, OSC …
"传输层 TCP, UDP"
网络层 IP
"链路层(也称网络接口层) Ethernet, Wi-Fi …"

链路层

链路层的主要作用是实现设备之间的物理链接。举例来说,我们日常使用的WiFi就是链路层的一种。
ESP8266利用WiFi联网时有三种工作模式。
模式1 – 无线终端模式(Wireless Station)
如下图所示,ESP8266可通过WiFi连接无线路由器。这与用您的手机通过WiFi连接无线路由器的模式相同。

模式2 – 接入点模式(Access Point, 也称 AP)
ESP8266也可以建立WiFi网络供其它设备连接。当ESP8266以此模式运行时,我们可以使用手机搜索ESP8266所发出的WiFi网络并进行连接。

模式3 – 混合模式(Wireless Station + AP)
混合模式就是混合模式喽,哈哈

网络层与IP协议

尽管设备可以通过链路层联网,但是光有链路层还无法实现设备之间的数据通讯。因为网络设备没有明确的标识。网络设备无从知晓要向谁传输数据,也无法确定从何处获取数据。

这很像我们在网上购物时需要把收货地址提供给商家。有了这个地址,商家才知道向哪里发货。假如收货后我们不满意,那么商家也要提供退货地址。这样才能确保货物被返还给商家。在这里,商家和我们都有一个明确的地址,以确保货物运输的正常运行。

在网络中传输数据的过程很像刚才这个例子。每一台网络设备都有独立的地址,数据在这些独立的地址间实现传输。但是网络设备的地址是什么呢?很多人都听过这个名字,它叫IP地址。

网络层主要作用是通过IP协议为联网设备提供IP地址。

有了IP地址还不够,因为要确保网络中所有设备IP地址不重复,还需要DHCP (Dynamic Host Configuration Protocol) 服务器来实现这一功能。

当网络中所有设备都有了独立的IP地址后,设备之间就可以收发数据了。

IPv4 / IPv6
IP协议有两个版本,分别是IPv4和IPv6。IPv6是IPv4的升级版本,因为IPv6可以为更多的网络设备提供独立的IP地址(IPv4的地址位为32位,意味着有2的32次方多的电脑可以连接到Internet上,而IPv6的地址位有128位…)。后续将着重讲解IPv4,因为大多数网络系统仍在使用IPv4。

IPv4版本的IP地址由4个数字组成,如 192.168.0.200 这个IP地址由两部分组成。其中前三个数字(192.168.0)是设备所连接的本地局域网络地址(也称子网地址)。而最后一个数字200是该设备在本地局域网络中的地址编号。

举例来说,我们有一个手机,一台电脑和一个NodeMCU开发板。如下图所示,现在我们将这三台设备同时连接到家中的WiFi路由器。家中的WiFi路由器会通过它内置的DHCP服务器功能为这三台设备分配一个独立的IP地址。假设我们的NodeMCU IP地址是192.168.0.2,手机是192.168.0.3,电脑是192.168.0.4。到这里,我们的手机,电脑和NodeMCU就可以使用各自的IP地址彼此收发数据了。

子网掩码(Subnet Mask)
与网络设备相同,网络本身也有自己的地址。

如果我们将网络与网络叠加就可以编织成一张无限大的网,而组成这张大网的每一个小网都可以被称作子网络。通常我们家中的网络是不需要多个子网络的。但是对于大型企业或工业项目,由于联网设备数量很大,一个子网无法满足需求。这时我们就可以将多个网络连接在一起形成一张巨型网络。那么当这些子网组成“大网”后,为了便于网络管理,我们为每一个组成大网的子网络都分配一个独立的地址,这个地址就是子网地址。

那么子网地址长什么样呢?其实它就在网络设备的IP地址里面。我们再来看一看刚刚举得例子。请看下图:

在以上的例子里,我们可以看到这三台设备的IP地址都有一个共同点。他们的IP地址前三位数字都是相同的,即192.168.0。这就是子网地址。同时请注意,这三台设备的IP地址最后一个数字是不同的。而这最后一个数字就是这三台设备在网络中的独立序号。

那么问题就来了,对于一个IP地址来说,是不是总是前三个数字是子网地址,而最后一个数字是设备序号呢? 不是的。

到这里可能有的朋友会感到困惑了。一个IP地址中,到底哪一部分是子网地址,而哪部分是该设备在子网中的设备序号呢?

这就要用到子网掩码了。

在以上示例中,我们的IP地址前三位是子网地址,这是因为我们在对网络设备进行设置的时候,预先设置好子网掩码是 255 . 255 . 255 . 0。可以看到,这个子网掩码也是由4个数字组成的。而且这个子网掩码中只有255和0 这两种数字。而255所在的位置是前3位,最后一位是0。

为了方便理解子网掩码的概念,我们再把刚才的例子找出来。在这个例子里,这三台网络设备的IP地址唯一区别就是最后一个数字。

也就是说,这几台设备的IP地址相同部分对应子网掩码是255的部分,而设备IP地址不同的部分对应子网掩码0。
这就是子网掩码的基本工作原理了。我们用255这个数字标出IP地址的哪一部分是子网地址。而用0这个数字来表示IP地址的哪一部分是设备部分。

到这里,我们也就基本上理解了子网掩码的基本工作原理。请注意,我在这里一直强调基本二字。这是因为子网掩码的工作原理比以上所讲述的要复杂。然而具体子网掩码是如何发挥作用的,呵呵,点到为止…

MAC地址(Media Access Control Address)和ARP(Address Resolution Protocol)
网络设备间要想实现通讯,设备之间不光要知道彼此的IP地址,还要知道设备的MAC地址(也叫MAC码)。

网络中的每一个设备都有一个独立的MAC地址。这个MAC地址是固化在网络设备硬件中的。我们可以通过系统设置或工具软件改变MAC地址,但这也仅仅是临时的修改,而不是真正将设备硬件的MAC地址进行永久性的更改。如果想永久性的修改MAC地址,那就要借助硬件产商所提供的工具软件了。

为了说明MAC地址的用途,我们还是用刚刚的网络示例。如下图所示:

假如ESP8266想要发送数据给网络中的手机, 首先ESP8266要知道手机的IP地址是192.168.0.3。除了这个信息以外,ESP8266还要知道手机的MAC地址。

现在问题就来了,如果ESP8266和手机都是刚刚连入WIFI的, 它们从来没有互相通讯过,因此它们是不可能知道彼此的MAC地址。这可怎么办?

要想解决这个问题,ESP8266会向网络中的所有设备广播一条“寻人启事”。这条广播信息的内容大概是这样的。“各位网络中的兄弟姐妹,我是住在IP地址192.168.0.2的设备。我的MAC码是AB-CD。我现在要发送数据给住在IP地址192.168.0.3的设备。请192.168.0.3地址的设备告知你的MAC码。” (注意:现实中的MAC码肯定不是AB-CD这 4个字母构成的。这里为了便于您的理解而将MAC地址进行了简化。)

如果手机听到了这条广播就会回复一条信息给ESP8266,大概的信息是这样的:“你好!我是住在192.168.0.3的设备。我的MAC码是EF-GH。”发送这条信息的同时,手机也会把ESP8266所拥有的IP地址以及MAC码记录下来,以备后用。

到这里,ESP8266和手机就彼此知道了对方的IP地址和MAC码了。接下来他们就可以愉快的网络通信了。这种让两台完全不认识彼此的设备获取到对方IP和MAC地址的协议就是ARP了。

传输和应用层下篇文章,现在到点了,该睡觉去了…