| |
|
开发:
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 这样,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 交互数据
当然,这时交换机还做了很多事,比如维护 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 交互数据
好了,总结一下:
最后值得一提的是,我们常用的宽带路由器是在普通路由器里固定设置了 NAT 转发功能,因为它的一端是可能是公网地址,而另一段肯定是内网地址,这样,它其实需要的是单向传输,有设置过端口转发经验的朋友应该注意到了,只有通过这样的设置,才能从公网反连到内网上的某台主机,这个我计划后面会另写一篇相关技术的文档,这里不再展开了,也正因为这个原因,有些地区把这种宽带路由器称为 IP 地址分享器。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |