IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 一些 IoT 工程师应该了解的网络知识 -> 正文阅读

[嵌入式]一些 IoT 工程师应该了解的网络知识

IP地址分类(IPV4)

IP是可以分类的,你知道了吗?

首先,从IP地址说起,IP地址其实是一个32比特的整数,把这个32比特分为4段,每段8比特长,8比特正好是一个字节,把这个字节转换成十进制,用点隔开。这样4个数字三个点的表示方法就是我们现在大家熟悉的IP地址,如:192.168.1.1,其实,把这个IP地址写成二进制是这样的:

0d192 = 0b11000000

0d168 = 0b10101000

0d1 = 0b00000001

0d1 = 0b00000001

合起来: 192.168.1.1 = 0b11000000 10101000 00000001 00000001 = 0d3232235777

那这个IP地址真正的值就是整数:3232235777

以上例程中,0d开头的表示十进制数,0b开头的表示二进制数。

http://192.168.1.1 = http://3232235777

你不访可以在浏览器的地址栏里试下输入 http://3232235777 这种IP地址的表示方法,我这里是 OK 的,那你呢?

了解了IP地址的构成,那接下来言归正传,讲讲IP地址的分类吧。

IP 地址分为 5 类,分别是 A 类,B 类,C 类,D 类和 E 类。

为什么前面先讲 IP 地址的构成呢,因为分类用的到,把 IP 地址转成二进制,第一个比特为 0 的IP地址,也就是二进制以 0 开头的 IP 地址,为 A 类地址,10 开头的为 B 类地址,110 开头的为 C 类地址,1110 开头的为 D 类地址,1111开头的为 E 类地址。我们常用的是 A、B、C 类地址,D 类 IP 地址段是多播地址,E 类是保留段。

我们 IoT 工程师最常用的就是 A、B、C 类地址段,再把这三个段的具体范围用点分十进制表示出来。

A 类: 0 ~ 127

B 类: 128 ~ 191

C 类: 192 ~ 223

那这三类地址有什么区别呢?我们的路由器 IP 地址为什么通常都以 192.168 开头呢?下面我们分别聊一下这两点。

区别:A 类地址,一个网段可容纳 16777214 台主机;B 类地址,一个网段可容纳 65534 台主机,而 C 类地址,一个网段可容纳 254 台主机。为什么这样,下面会讲到。

特殊 IP 地址段:

A 类地址中的特殊地址段有:

广播地址段:以 0 开头的地址段广播地址段;

内网地址段:以 10 开头的地址段为内网地址段; (RFC 1918)

运营商私有地址段:以 100 开头的为运营商私有的地址段;如果你是移动宽带用户,理论上你从运营商这里得到的 IP 地址就应该是这个地址段,这也是所谓的移动宽带多个用户是共享一个公网 IP。

回环地址段,以 127 开头的地址段为回环地址;

B 类地址中的特殊地址段有: (RFC 1918)

无法获取 DHCP 时分配的 IP 地址段:如果你的设备获取 DHCP 失败,则会随机分配到一个以 169.254 开头的 IP 地址。

内网地址段:以 172.16 ~ 172.31 开头的地址段为内网地址段;

C 类地址中的特殊地址段有:

内网地址段:以 192.168 开头的地址段为内网地址段; (RFC 1918)

特殊地址段:以 192.0.0 开头的地址段为特殊地址段; (RFC 5736)

测试地址段:以 192.0.2 开头的地址段为测试地址段; (RFC 5737)

测试地址段:以 192.18 ~ 192.19 开头的地址段为测试地址段;

测试地址段:以 192.51.100 开头的地址段为测试地址段; (RFC 5737)

测试地址段:以 203.0.113 开头的地址段为测试地址段; (RFC 5737)

说了那么多,IP 地址分了类,有什么用呢?请往下看。

无类域间路由

无类域间路由 (Classless Inter-Domain Routing —?CIDR),这里的类,就是上面 A、B、C 类,无类就是打破这个类的规则,上面说到的 A、B、C 类 IP 地址段容纳的主机数是怎么回事呢?往下看。

先介绍下子网掩码,子网掩码这个词我相信大家都不陌生了吧,很多时候将电脑的 IP 地址设置成 192.168.x.x,上面说过了,这是 C 类的内网地址,一般掩码会填 255.255.255.0,这是什么意思呢?255.255.255.0 是 C 类地址的默认掩码,同样,把 255.255.255.0 转换为二进制,为 0b11111111 11111111 11111111 00000000,很容易看出,这个掩码的前面有连续的 24 个 1,后面是连续的 8 个 0,把它和 IP 地址放在一起,就拿 192.168.1.1 来举例:

192.168.1.1 = 0b11000000 10101000 00000001 00000001

255.255.255.0 = 0b11111111 11111111 11111111 00000000

排一起:

11000000 10101000 00000001 00000001
11111111 11111111 11111111 00000000

这样,IP 地址和掩码对齐后,掩码的 1 和 0,分 IP 地址分为了两个部分, 0b11000000 10101000 00000001,和 0b00000001,即 192.168.1 和 1;

和掩码 1 对应的部分称为网络段,和掩码 0 对应的部分称为主机地址。

再来两个概念:网络地址和主机地址。

把上述 IP 地址的网络段部分保持不变,把主机地址变为全 0,则为上述 IP 地址所在的网段的网络地址;即 192.168.1.0

把上述 IP 地址的网络段部分保持不变,把主机地址变为全 1,则为上述 IP 地址所在的网段的广播地址;即 192.168.1.255

掩码的二进制都是全 1 到全 0,不然就是非法的,比如:255.255.254.0 是合法的掩码,而 255.255.253 就是不合法的掩码,如果不明白为什么,那转换成二进制一看就明白了,这里不多讲了。

所以有以上 IP 地址和掩码可以简写成 192.168.1.1/24,/24 就是掩码,表示有 24 个连续的 1 开头的 32 比特整数,实质上也就是 255.255.255.0。

A 类地址的默认掩码是:255.0.0.0

B 类地址的默认掩码是:255.255.0.0

C 类地址的默认掩码是:255.255.255.0

所以,A 类地址一共有 2 ^ (8 - 1) 个网段,去掉上述 0 外,实际可用的为 127 个网段,这是包括内网等特殊网段的,而每个网段可容纳的主机数是 2 ^ 24 – 2,则为 16777214 台主机,8 是掩码全 1 部分有 8 个 1,24 是掩码全 0 部分有 24 个 0,减去 2 是一个全 0 的网络地址和一个全 1 的广播地址。

同理, B 类地址一共有 2 ^ (16 - 2) 个网段,即 16384 个网段,这是包括内网等特殊网段的,而每个网段可容纳的主机数是 2 ^ 16 – 2,则为 65534 台主机;

再同理, C 类地址一共有 2 ^ (24 - 3) 个网段,即 2097152 个网段,这是包括内网等特殊网段的,而每个网段可容纳的主机数是 2 ^ 8 – 2,则为 254 台主机;

好了,终于到了 CIDR 登场的时候了。

也许大家有时也会看到过这样的 IP 地址和掩码吧,10.0.0.1 255.255.254.0,不是说 10 开头的是 A 类地址吗?A 类地址的掩码不就应该是 255.0.0.0 吗?这个组合合法吗?答案是肯定的,这个是合法的,这就是无类域间路由 — CIDR。就是为了根据实际需求,超越 A、B、C 类地地址的限制,对调整网段和主机数进行更合理的安排和划分。就拿上面的举例吧,10.0.0.1/23 (不知道这个写法的往前翻翻,这个文档前面有提到) 可容纳的主机数是 2 ^ 9 – 2,即 510 台主机。

那问题又来了,IP 地址分网络段和主机段有什么用呢?网络地址和广播地址有什么用呢?往下看。

交换机和路由器的区别

前面都是铺垫,纯理论知识,有了上面的理论,现在可以和实际结合了,交换机和路由器有什么区别呢?

还是要先从以太网讲起。以太网传输最终的识别信息是网卡的 MAC 地址,首先,我大概描述一下同网段之间的传输,注意,我只是用白话文方式描述原理,如果想了解具体细节的,请阅读相关文档。

网络拓普:

主机 A:IP:192.168.1.100/24 MAC:00:12:34:56:78:9A

主机 B:IP:192.168.1.101/24 MAC:00:12:34:56:2C:AB

场景:主机 A 发起通讯请求,欲与主机 B 交互数据

  1. 主机 A 比对自己的 IP 和 目标 IP,在同一网段;
  2. 主机 A 发起 ARP 广播,内容为:目标 IP 为 192.168.1.101,本机 MAC 为 00:12:34:56:78:9A;
  3. 只要在同网络且网段下在线的主机,均能收到该广播;
  4. 除主机 B 外,其它主机收到广播后,比对主机 A 的目标 IP 不是本机,则忽略广播;
  5. 主机 B 收到广播后,经比对,自己的 IP 和主机 A 广播的目标 IP 吻合,则把自己的 MAC 通过 ARP 广播应答主机 A;
  6. 双方通过 MAC 建立通讯;

当然,这时交换机还做了很多事,比如维护 ARP list 等,这里就不展开了,感兴趣的可以去关心下集线器(HUB),网桥(Bridge),交换机(Switch) 的区别,及以太网的冲突域(CSMA/CD),内容太多了,讲下去没完没了了。

那不同网段呢?

网络拓普:

主机 A:IP:192.168.1.100/24 MAC:00:12:34:56:78:9A

主机 B:IP:192.168.1.101/24 MAC:00:12:34:56:2C:AB

主机 C:IP:192.168.10.102/24 MAC:00:12:34:56:54:71

路由器A Port A:IP:192.168.1.1/24 MAC:00:12:34:56:D1:BB

路由器A Port B:IP:192.168.10.1/24 MAC:00:12:34:56:D1:BC

场景:主机 A 发起通讯请求,欲与主机 C 交互数据

  1. 主机 A 比对自己的 IP 和 目标 IP,不在同一网段;
  2. 主机 A 发起 ARP 广播,内容为:目标 IP 为192.168.10.102,本机 MAC 为 00:12:34:56:78:9A,广播的目标 IP 则为网关(路由器 A),即 192.168.0.1;
  3. 只要在同网络且网段下在线的主机,均能收到该广播;
  4. 除路由器 A 外,其它主机收到广播后,比对主机 A 的目标 IP 不是本机,则忽略广播;
  5. 路由器 A 收到广播后,经比对,自己的 IP 和主机 A 广播的目标 IP 吻合,则把自己的 MAC 通过 ARP 广播应答主机 A;
  6. 路由器 A 把主机 A 的目标 IP 与 其它端口的 IP 网段比对,如果在同一网段,则重复上述 ARP 广播的过程,如果不在同一网段,则再把请求发到自己的网关(上级路由器)上;
  7. 路由器A 在端口 B 上发出 ARP 广播,内容为目标 IP 为 192.168.10.102,本机 MAC 为 00:12:34:56:D1:BC;
  8. 主机 C 收到广播后,经比对,自己的 IP 和路由器 A 广播的目标 IP 吻合,则把自己的 MAC 通过 ARP 广播应答路由器 A;
  9. 路由器 A 再通过端口 A 把应答转给 主机 A;
  10. 双方通过路由器 A 建立通讯;

好了,总结一下:

  • 集线器组成一个冲突域;
  • 网桥切断冲突;
  • 交换机其实相当于每个端口都是一个网桥,它组成的是一个广播域;
  • 路由器切断了广播,承载着不同网段数据的交互;

最后值得一提的是,我们常用的宽带路由器是在普通路由器里固定设置了 NAT 转发功能,因为它的一端是可能是公网地址,而另一段肯定是内网地址,这样,它其实需要的是单向传输,有设置过端口转发经验的朋友应该注意到了,只有通过这样的设置,才能从公网反连到内网上的某台主机,这个我计划后面会另写一篇相关技术的文档,这里不再展开了,也正因为这个原因,有些地区把这种宽带路由器称为 IP 地址分享器。

欢迎来我的TT家园参观,或发邮件给我。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章           查看所有文章
加:2021-10-06 12:23:33  更:2021-10-06 12:26:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:54:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码