当前位置: 首页 > 科技观察

为什么IPv4只有32位就足够了?

时间:2023-03-18 01:26:38 科技观察

1.在前言中,我一直在强调打好基础后不慌不忙改,但我从来没有把重点放在分享这些基础技术上。刚好2019年,我决定挖一个新的大坑,开始写一些多年不??变的基础技术,比如算法、数据结构、网络协议、设计模式、操作系统。先挖坑,挖好后再慢慢填,尽量写得有趣,希望大家看得懂。今天我们就来聊一聊网络协议中的CIDR(untypedinter-domainrouting)。首先说一下CIDR的背景。2.CIDR产生背景2.1IPv4和IPv6在现有的所有网络设备硬件中,网卡是设备访问Internet的必备硬件条件。虽然网卡有一个唯一的(相对唯一的)Mac地址来标识它,但它仍然需要分配一个IP地址。有了IP地址,全世界就知道您在哪里。简单的说,IP地址就是一张网卡在网络世界中的通讯地址,相当于我们在现实世界中网上购物时填写的收货地址。可以帮助其他人从世界任何地方找到我们。现有的IP协议有两套,通常称为IPv4和IPv6。由于最初设计的“缺陷”,IPv4只有32位长度,只能提供大约40亿个地址。在早期的设计中,可能没有想到互联网会发展到现在这个地步,任何设备都需要联网。这样一来,IPv4地址很快就会不够用,尤其是这种32位的地址,也分为A、B、C、D、E五种地址。除了一些特殊的IP地址外,还可以用得更少。由此可见IPv4最初设计时是多么的奢侈。然后设计了IPv6。我们知道,在产能不够的情况下,扩容是短期的正确,但从长远来看,还是存在隐患。产能再扩容多少,如果没有合理的规划,用完也是迟早的事。IPv6长度增加到128位,可以提供更多地址,但IPv4和IPv6互不兼容,迁移困难。如今,IPv6已经慢慢被一些大公司所采用。比如在淘宝App的启动页底部,可以看到IPv6的标识。即便如此,在未来很长一段时间内,两种协议仍将并行支持。IPv6不是本文的重点,让我们回到IPv4地址太少的缺陷上。虽然地址确实不够用,但是对于设备联网确实是一个强烈的需求。这也是必须要解决的问题。联网需要IP地址。是不是感觉进入了一个死循环?主要分为IPv4的A类、B类、C类的IP数量有多少?看看这里的表格。你能感受到IPv4的尴尬吗?C类地址能收录的入侵主机数量太少,现在随便一个网吧可能不够用,B类地址的入侵主机数量太多。如果地址过多,大量未使用的地址很容易造成地址浪费。古语有“旱不死,水不死”之说。于是就出现了一个折中方案,也就是我们这篇文章要说的CIDR,中文叫做无类型域间路由。2.2子网的划分还不是说CIDR的时候(我就是不喜欢写这个基础技术,想写清楚的话会发现需要提前说明的太多了).在讲CIDR之前,还有一个背景需要说明一下,那就是子网。互联网这个大网络,中间分成子网,子网再细分。从上面的IP分类图中我们可以看出,IP地址的32位分为两类,分别是网络号和主机号。如果主机号设置为0,则获取网络地址。可见,如此明显的两级划分也称为二级IP地址。但是有时IP地址的使用率很低,这种两级划分的方式不太灵活,于是就出现了子网。其实子网就是在之前的二级IP地址中,再加一层子网号,变成了三级结构。虽然加了子网号,但是IP地址的长度还是32位,网络号是不能改的,所以这里的子网只能从主机号上找。此时的子网号其实是从主机号上借来的,相当于减少了主机的数量,将它们划分到不同的子网中。说到子网,另一个重要的概念就是子网掩码。子网掩码是用来区分和标识以IP地址划分的子网。子网掩码非常简单。就是把网络号和子网号对应的位都设置为1,把主机号对应的位都设置为0。这就是子网掩码。这三项信息中,只要知道了IP地址和子网掩码,自然就可以计算出对应的网络地址。这正是我们前面提到的子网的概念。实际上,一个大网络在内部被划分成小的子网。但是,从网络的外层来看,它仍然是一个大网络。它通过网络地址进行通信。例一:例二:从上面两个例子可以看出,相同的IP地址,不同的子网掩码可以获得相同的网络地址,只是分到了不同的子网。3.无类型域间路由(CIDR)3.1什么是CIDR?子网除以子网掩码就是借用的主机号,有损。比如借用两个主机号,原则上可以划分出四个子网(11、10、01、00),但是全0和全1都没有用,所以只剩下两个了。使用CIDR就没有这个问题,可以全0全1使用,不会造成浪费。最后我们可以谈谈CIDR。CIDR的中文全称是ClasslessInter-DomainRouting,是英文ClasslessInter-DomainRouting的缩写。CIDR打破了原来设计的A、B、C地址的概念,将32位的IP地址保持为两点结构,即仍然保持网络号在前,主机号在后。这种方式怎么区分呢?CIDR将在IP地址后使用斜杠来分隔网络前缀的标识符。例如: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.2CIDR,容易被误算我们回忆一下IP地址的格式。32位中,以8位为一个单位,用.隔开。所以比较常见的/24和/16更容易区分。你不需要将十进制转换为二进制,你可以清楚地看到那些是网络号,那些是主机号。在家庭WiFi中,一般不超过256个设备,因此/24就足够了,例如192.168.1.117/24。如果我们遇到不是8的整数倍的CIDR,有时候我们很容易出错。我们来看看16.158.165.20/22的CIDR,找到这个网络的起始IP地址、子网掩码、广播地址。如果你一上来就写16.158.165.1、255.255.255.0、16.158.165.255,那你就错了。首先我们可以看出/22不是8的整数倍,肉眼是很难区分的,转换成二进制就一目了然了。遇到不好计算的CIDR,改成二进制再看,一切就清楚了。3.3CIDR的应用前面说过,互联网分为子网,存在于各个子网之下,子网又可以进一步细分,但对外来说是一个整体。因此,在CIDR方式中,/x的值越小,表示当前子网中的主机越多。相反,您可以通过增加/x来继续划分子网。例如,从/16变为/20时,右移四位,相当于划分出16个子网。比如有一个CIDR地址块,201.0.68.0/22,那我们怎么拆分呢?将其拆分为二进制将使其清晰。如果需要的话,我们可以继续往下划分,但是一般情况下我们都会让一个子网下的主机数量不要太少,以保证子网可用。4、总结一下CIDR的子网规则,其实设计得很巧妙。只要将网络前缀占用的位数右移,就可以继续划分子网。即使未来IPv6全面升级,我个人认为CIDR也不会被抛弃。分子网的CIDR计算方法你了解吗?留个思考题吧。知道16.158.165.20/20的CIDR,你能算出子网掩码、网络地址、广播地址吗?【本文为专栏作者《张扬》原创稿件,转载请微信联系作者公众号获取授权】点此查看该作者更多好文