面对无知的嘲笑,我只能为他们默哀。 收藏本站
登陆 / 注册 搜索

查看: 5.3K   回复: 4

[# 网络通信] 简说 IPv4 | 网络协议之 CIDR

[复制链接]
发新帖
跳转到指定楼层
楼主
仗剑天涯吾是土豪 发表于 2019-2-28 11:08:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

今生相逢便是缘分,何苦去怨恨,何苦去仇视。

    一、前言

    我一直在强调,打好基础怎么变都不慌,但是一直也没有重点分享过这些基础技术。今天就来讲讲网络协议中的 CIDR(无类型域间选路),先来说说 CIDR 的背景。

    二、CIDR 的背景

    2.1 IPv4 和 IPv6

    现存所有的网络设备硬件中,网卡是设备上网必备的硬件条件,网卡虽然有唯一(相对唯一)的 Mac 地址去标识,但是依然需要分配一个 IP 地址。有了 IP 地址,才能让世界知道你的位置。

    简单来说,IP 地址是一个网卡在网络世界的通讯地址,这就相当于现实世界中,我们在网购时填的收货地址。可以帮助别人,从世界的任何位置,找到我们。

    现存的 IP 协议有两套,就是我们常说的 IPv4 和 IPv6。IPv4 由于最初设计的"缺陷",长度只有 32 位,大约只能提供 40 亿个地址。早期设计时,可能也想不到互联网会发展到现在这个地步,随便一个设备都需要联网。

    这就造成了 IPv4 地址很快就不够用了,尤其是这样 32 位地址中,还被分为了 A、B、C、D、E 这五类地址,抛开一些特殊的 IP 地址,可供使用的就更少了。由此可见 IPv4 在当初设计时,是有多么奢侈。
1.jpg__简说 IPv4 | 网络协议之 CIDR

    随后 IPv6 就被设计出来。我们知道当容量不够的时候,扩容是一条短期正确,但是长期来看依然是存在隐患的事情,无论扩大到多少,如果没有合理的规划,用完其实也是迟早的事情。

    IPv6 的长度增加到 128 位,可以提供更多的地址,但是 IPv4 和 IPv6 相互之间并不兼容,导致迁移困难。如今 IPv6 已经慢慢在被一些大厂所使用,例如在淘宝 App 的启动页底部,就可以看到 IPv6 的标识。即便如此,在未来很长的一段时间内,依然会保持两个协议并行支持。

    IPv6 并不是本文的重点,再说回到 IPv4 的地址过少这个硬伤上。虽然地址确实不够用,但是设备需要联网确实是强需求,这也是必须要解决的问题,联网就需要 IP 地址,是不是感觉进入死循环了。

    IPv4 这种 A、B、C 类为主要的分类的 IP 数量,到底少到什么地步呢?这里看一张表就知道了。
2.jpg__简说 IPv4 | 网络协议之 CIDR

    能够感受到 IPv4 的尴尬了吗?C 类地址能够包含的最大主机数量,是在太少了,现在随便一个网吧可能就不够用了,而 B 类地址包含的最大主机数量又太多了,大量用不到的地址,很容易造成地址的浪费。有句老话怎么说的,旱的旱死,涝的涝死。

    于是就出现了一个折中的方案,那就是我们本文要聊的 CIDR,中文名为无类型域间选路

    2.2 子网的划分

    现在还不到说 CIDR 的时候(就是不爱写这种基础技术,想写清楚会发现有太多需要前置交代)。在说 CIDR 之前,还有个背景需要交代,那就是子网。

    互联网这个大网,中间被分割成一个个子网,而子网下又被进一步分割。

    从我们上面的 IP 分类图中,可以看出,一个 IP 地址的 32 位中,还被分为两类,分别是网络号和主机号,将主机号都置为 0,得到的就是网络地址。
3.jpg__简说 IPv4 | 网络协议之 CIDR

    可以看出,这样很明显的两级划分,也被称为两级 IP 地址。而 IP 地址的利用率有时很低,这种两级划分的方式就显得不那么灵活,于是就出现了子网。
4.jpg__简说 IPv4 | 网络协议之 CIDR

    子网其实就在之前的两级 IP 地址中,又加了一层子网号,将其变成三级结构。虽然增加了子网号,但是 IP 地址的长度依然是 32 位,网络号肯定是无法变更的,所以这里的子网就只能从主机号想办法。此时的子网号,其实就是从主机号中借位,这样就等于是减少了主机数,将其分割到不同的子网中。

    涉及到子网,还有一个重要的概念,就是子网掩码。子网掩码,就是为了区分识别对 IP 地址划分的子网的。子网掩码很简单,它就是将网络号和子网号,对应的位全部置为 1,将主机号对应的位都置为 0,这就是子网掩码了。

    这三个信息中,只要知道 IP 地址和子网掩码,自然就可以推算出对应的网络地址。这也正是我们前面说的子网的概念,其实是将一个大的网络,在其内部分割成一个个小的子网,但是在网 络的外层来看,还是一个大的网络,他们都是通过网络地址来通信的。

    例子一:
5.jpg__简说 IPv4 | 网络协议之 CIDR
    运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1
即:两位同时为“1”, 结果才为“1”, 否则为0

    例子二:
6.jpg__简说 IPv4 | 网络协议之 CIDR

    从上面的两个例子中,可以看出,相同的 IP 地址,不同的子网掩码,可以得出相同的网络地址,但是他们却是被划分在不同的子网当中的。

    三、无类型域间选路(CIDR)

    3.1 什么是 CIDR

    通过子网掩码去划分的子网,是借走的主机号,这是有损耗的。例如借走两位主机号,原则上可以划分四个子网(11、10、01、00),但是其中全 0 和全 1 是不使用的,所以就只剩下两个了。使用 CIDR 是没有这个问题的,它可以使用全 0 和全 1,不会造成浪费。

    终于可以说到 CIDR 了。

    CIDR 中文全称是无分类域间路由,是英文 Classless Inter-Domain Routing 的缩写。CIDR 打破了原先设计的 A、B、C 类地址的概念,将 32 位 IP 地址保持两分的结构,就是依然保持前面是网络号,后面是主机号。

    这样如何区分呢?CIDR 会在 IP 地址的后面,用斜线分割一个网络前缀占位数的标识。
7.jpg__简说 IPv4 | 网络协议之 CIDR

    例如:10.100.120.2/24,斜线后面有一个数字 24,这种地址的表示形式,就是 CIDR。这里的 24 表示,32 位的 IP 地址中,前 24 位是网络号,后 8 位是主机号。

    这一组 CIDR,包含的信息可就多了,还是拿 10.100.120.2/24 来举例。

    将主机号,所有的位都置为 1,就是广播地址,例如:10.100.120.255,如果发送这个地址,10.100.120 网络里面的机器都可以收到。

    将 24 位网络号都置为 1,8 位主机号置为 0,得到的就是子网掩码,255.255.255.0。
    CIDR 除了表示一个 IP 地址,还相当于给出了一个 CIDR 子网的地址范围。将主机号,从全 0 到全 1 的范围,就是当前子网的所能包含的最大地址数。

    3.2 容易算错的 CIDR

    再来回忆一下 IP 地址的格式,32 位中以 8 位为一个单位,用 . 进行分割。所以比较常见的 /24、/16 这种就比较容易区分,不需要将十进制转换成二进制,就可以明显看出来,那些是网路号,那些是主机号,

    家庭 WiFi 中,一般不会超过 256 个设备,所以 /24 也就够用了,例如 192.168.1.117/24。
8.jpg__简说 IPv4 | 网络协议之 CIDR

    如果遇上不是 8 的整数倍 CIDR,有时候我们就容易算错。

    我们来看一下 16.158.165.20/22 这个 CIDR,求一下这个网络的起始 IP 地址、子网掩码和广播地址。

    你要是上来就写 16.158.165.1、255.255.255.0、16.158.165.255,那你就错了。

    首先看到 /22 不是 8 的整数倍,肉眼不好区分,我们转成二进制就清晰了。
9.jpg__简说 IPv4 | 网络协议之 CIDR

    遇到不好算的 CIDR,换成二进制再看看,一切都清晰了。

    3.3 CIDR 应用

    前面说到,互联网就是被切分成一个个子网下存在的,一个个子网往下还可以继续切分,但是对外就是一个整体。所以 CIDR 这种方式,/x 这个数值越小,说明当前子网下的主机数量越多。反之可以通过增加 /x 来继续进行子网的划分。

    例如从 /16 变为 /20,右移了四位,等于又切分出来 16 个子网。

    举个例子,有一个 CIDR 地址块,201.0.68.0/22,然后我们可以怎么切分?拆分成二进制就清晰了。
10.jpg__简说 IPv4 | 网络协议之 CIDR

    要是有心,我们还可以继续往下切分,但是正常我们为了保证子网可用,一般也会保持一个子网下的主机数不会太少。

    四、小结时刻

    CIDR 这种分割子网的规则,其实设计的很巧妙,只要向右移位网络前缀所占的位数,就可以继续分割子网。就算以后全面升级了 IPv6 后,我个人认为应该也不会抛弃 CIDR 这种方式。

    CIDR 这种分割子网的计算方法,你明白了吗?留一道思考题吧,已知 16.158.165.20/20 这个 CIDR,计算子网掩码、网络地址、广播地址吗?(公众号后台回复“CIDR结果”,获取答案)再尝试将其划分成几个子网试试。

楼主| 仗剑天涯吾是土豪 发表于 2019-2-28 11:09:56 | 只看该作者
CIDR不能逾越ipv4地址总空间限制,但是NAT可以。
很多大公司现在推行ipv6是应工信部要求,
清风霁月「出类拔萃」 发表于 2019-2-28 14:01:11 来自手机 | 只看该作者
支持,赞一个
手摘星辰龙战于野 发表于 2019-3-1 21:31:16 | 只看该作者
感谢科普、
微雨黄昏「出类拔萃」 发表于 2019-3-5 09:05:36 | 只看该作者
说得好啊!我在XX社区打滚这么多年,所谓阅人无数,就算没有见过猪走路,也总明白猪肉是啥味道的。一看到楼主的气势,我就觉得楼主同在社区里灌水的那帮小混混有着本质的差别!那忧郁的语调,那熟悉的签名,还有字里行间高屋建瓴的辞藻。没用的,楼主,就算你怎么换马甲都是没有用的,你的亿万拥戴者早已经把你认出来了,你一定就是传说中的最强ID。自从社区改版之后,我就已经心灰意冷,对社区也没抱什么希望了,传说已经幻灭,神话已经终结,留在社区还有什么意思?没想到,没想到,今天可以再睹楼主的风范,我激动得忍不住就在屏幕前流下了眼泪。是啊,只要在楼主的带领下,社区就有希望了。我的内心再一次沸腾了,我胸腔里的血再一次燃烧了。楼主的几句话虽然简单,却概括扼要,一语道出了我们苦想多年仍不可解的几个重大问题的根本。楼主就好比社区的明灯,楼主就好比社区的方向,楼主就好比社区的栋梁。有楼主在,社区的明天必将更好!
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

关于本站|小黑屋|Archiver|古黑论

GMT+8, 2019-11-22 23:42 , Processed in 0.081855 second(s), 28 queries , Gzip On, Redis On.

© 2015-2019 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表