码农也要懂点网络之《IPv4子网划分》

原作者:一诺CTO
CTO每日参考微信公众号
原文链接: https://mp.weixin.qq.com/s/qViFY0VTaRwUMcMWC9adhQ

在IP的世界里,掩码是个很重要的概念,打个不恰当的比喻:IP地址和掩码的关系就像是人和影子的关系,没有掩码的IP是无法正常工作的。

目前通行的IPv4地址是一个32 bit 的整数,在计算机中用一个长整形变量即可表示。取值范围:0~4294967295(2^32-1)。对于人脑来说,无论是使用十进制还是二进制表示这个32 bit 的整数都不是好的方法。因此,IPv4地址通常采用点分十进制表示。下面是同一个IP地址:122.70.156.25的不同表示方法:
点分十进制:122.70.156.25
十进制: 2051447833
二进制: 01111010.01000110.10011100.00011001
显然点分十进制更加容易记忆。

IP地址分为两个部分,即网络地址(也称作“前缀”)和主机地址。这就好像我们的邮政地址,例如:长安街10号,在这个地址中,长安街就相当于IP地址中的网络地址,10号则相当于IP地址中的主机地址,两者加到一起成为明确描述一个地点的地址。
掩码与IP等长,也是32 bit的整数,主要用于区分IP地址中的网络地址和主机地址,从左至右,网络地址的部分为全1,主机地址的部分为全0,然后将IP地址与掩码逐位进行“与”运算,即:1 & 1 = 1,1 & 0 = 0。
由此得到:
公式一:网络地址 = IP地址 & 掩码
公式二:主机地址 = IP地址 – 网络地址

掩码通常使用掩码长度来描述,比如,掩码长度为24则表示掩码:255.255.255.0,原理是每个255都等于二进制的8个连续的1,即:11111111。3个255连在一起,就相当于24个连续的1。同理掩码长度为25则表示掩码:255.255.255.128,前面3个255相当于24个1,紧跟着的128换成二进制是10000000,正好和前面的24个1一起组成25个1。
由此得到:
公式三:网络包含的IP地址数 = 2 ^ (32-掩码长度)

同时IP协议规定,每个网段的最后一个IP地址为该网段的广播地址,即主机地址部分全为1的地址。网络地址与广告地址不能分配给主机使用。
由此得到:
公式四:网络包含的可用(分配)IP地址数 = 2 ^ (32-掩码长度) – 2

套用以上公式,我们得到IP地址:192.168.100.100/255.255.255.0 的网络地址为192.168.100.0,主机地址为100,该网段有2 ^ ( 32 – 24 ) = 2 ^ 8 = 256个IP地址,去掉网络地址和广播地址后,还有可用IP地址 256-2 = 254个。

以上是IP和掩码的基本概念,下面是如何通过掩码来控制和划分子网,这也是IP规划的精髓所在…
前面说过,IP地址包括网络地址与主机地址两个部分,其实通过掩码的控制,可以实现网络地址的层次化,也就是子网的概念。

请看这个IP地址:北京.西城区.长安街.10号/255.255.255.0,通过掩码我们知道该IP的网络地址是:“北京.西城区.长安街.0”。现在我们将掩码设置为:255.255.0.0,则网络地址变为:“北京.西城区.0.0”,显然前者是后者的一部分,也就是说前者是后者的一个子网。如果你愿意,完全可以通过调整掩码为:255.0.0.0,这样网络地址就变为:“北京.0.0.0”可以用来表示整个北京了。

于是我们得到这样的层次化的IP网络:
北京.0.0.0 / 8
北京.西城区.0.0 / 16
北京.西城区.长安街.0 /24
北京.西城区.府右街.0 /24
北京.东城区.0.0 /16
…….
同理,将上面的地面使用数字替代后得到:
192.0.0.0 / 8
192.168.0.0 / 16
192.168.100.0 /24
192.168.200.0 /24
192.169.0.0 /16
…….
可用看出,所谓子网的划分,无非就是通过控制掩码长度来调整网络地址的大小,下面是一个具体的子网划分的例子。

某单位省公司从总部申请到网段10.100.0.0/16,省公司在每个地市还有分公司,一个13个分公司。现在要求每个地市平均分配,省公司适当保留一部分IP。

具体做法:

13个分公司+省公司,一共14个网段,8<14<16,因此需要先均分成16份(2^4);

父网段掩码长度为16,则此网段一共包含2^(32-16)= 65536 个地址,均分成16个子网,则每个子网包含 65536 / 16 = 4096 个IP地;

4096 = 2^12,因此子网的掩码是32-12=20;同时4096使用点分十进制表示为:0.0.16.0

综上所述,得到如下子网列表:

10.100.0.0/20 10.100.16.0/20 10.100.32.0/20 10.100.48.0/20

10.100.64.0/20 10.100.80.0/20 10.100.96.0/20 10.100.112.0/20

10.100.128.0/20 10.100.144.0/20 10.100.160.0/20 10.100.176.0/20

10.100.192.0/20 10.100.208.0/20 10.100.224.0/20 10.100.240.0/20

我们可以看到,后一个子网都是在前一个子网的基础上加上了“0.0.16.0”。到此,我们可以将前三个网段分配给省公司,剩下13个网段分别分配给分公司。分公司拿到IP后,还可以继续细分。例如,某分公司拿到地址:10.100.160.0/20,可以继续细分成:10.100.160.0/22,10.100.164.0/22,10.100.168.0/22,10.100.168.0/22 四个网段。

参考

IPV4与子网划分_小吕的博客-CSDN博客_ipv4子网划分

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我是一位20多年的老码农,我的IT学习之路从大学时期开始,我就立志要成为一名优秀的程序员。那时,我的专业是计算机科学与技术。我通过自学和老师的讲解,掌握了基本的编程语言,如C、C++、Java等。 后来,我开始应聘IT公司的工作。工作中,我更深入地了解了软件开发的流程,了解了各种软件开发工具和框架。我也去了解了计算机硬件的结构,学会了如何优化代码以及如何调试代码。 我还参加了很多培训课程和研讨会。这些课程和研讨会涵盖了各种主题,包括算法、数据库、网络、安全、人工智能等。我也参加了各种技术社区和论坛,了解了最新的技术趋势和应用。 除此之外,我还逐渐形成了自己的学习方法和习惯。我会在业余时间阅读相关的书籍和论文,并进行实践和探索。我还会与其他IT从业者交流,分享经验和发现。 今天,我已成为一名有经验的开发者和技术专家。通过积累多年的实践经验和持续的学习,我对计算机技术的理解和掌握越来越深入。我相信,在未来的IT学习之路上,我将继续保持热情和学习,迎接新的挑战和机遇。 ### 回答2: 作为20多年老码农,我一直认为学习是一个持续不断的过程。我第一次接触计算机是在1990年,那时我还是一名高中生。那时的计算机技术还很落后,我用的是DOS操作系统,还有些简单的软件和一些基本的编程语言。但是,我对计算机技术的兴趣与日俱增,并在大学里学习了计算机科学专业。在大学里,我学到了关于计算机体系结构、编程语言、数据结构和算法等基础知识。 毕业后,我开始在一家软件公司工作,并继续学习新的技术知识。在那里,我学会了C++和Java等高级编程语言,并开始做一些大型软件的开发工作,在这个过程中,我还深入研究了数据结构和算法等领域的知识,这些知识对于设计高效的程序非常重要。 随着互联网的发展,我开始学习一些Web技术,如HTML、CSS、JavaScript和PHP等。我还学习了数据库编程和网络编程等知识,这些技能对于Web应用程序的开发非常重要。 尽管我一直在学习新的技术和编程语言,但我也认为,编程不仅仅是掌握语言和技术知识,还需要不断地学习软件工程、代码设计、测试和维护等方面的知识。事实上,我认为软件工程实践是我职业生涯中最重要的经验之一。通过反复的代码测试、优化和维护,我发现自己的代码质量有了很大的提高,这使我更能够理解代码设计和开发有效的软件系统的重要性。 总的来说,我认为,编程是一个持续不断的学习过程,需要不断地学习新的技术和知识,以保持自己的竞争力。但是,对于一个成功的程序员,仅仅掌握技术知识是不够的。在实践中,我们还需要学习如何设计高效的程序和系统、如何测试和维护代码,并与其他开发人员进行协作和沟通。在每个开发项目的过程中,我们都有机会从错误中学习,以及提高自己的技能和知识。 ### 回答3: 作为一个20多年的老码农,我的IT学习之路可谓是经历了许多风雨,对我来说其中所经历的各种挫折与成长都是不可或缺的。 我的IT学习之路从初中开始,那时我对计算机十分感兴趣,每天放学后都会去学校的计算机教室玩电脑。那时候的电脑是286的机器,比较简陋,但我激动的心情却一直没有减退。初中之后我考入了一所职业高中的计算机专业,那时候,我们上课基本都是在实验室里进行,许多同学开始学习C++语言,我也跟着学习了一段时间,但是很快发现自己还需要更多的基础知识,于是我花了许多时间学习了计算机原理、数据结构、算法等基础知识。 高中毕业后,我考入了一所大学,在那里我又接触了更多的知识领域,例如数据库、网络、操作系统等等。这个阶段的学习是比较理论性的,但它为我后来的职业发展打下了很坚实的基础。 大学毕业后,我开始在一家小公司工作,那时候我在实际的工作中学习到了更多的技能,例如如何使用版本控制系统、如何与团队协作、面向对象编程等等。这个阶段的学习很实用,它让我能够真正地将我的理论知识用于实际的工作中。 随着我逐渐成长为一个有经验的工程师,我也学会了如何不断地更新自己的技能。我通过参加各种培训、阅读技术书籍、参与技术社区和开源项目,不断地学习新的技术和知识,并将它们应用于我的工作中,这使我的职业生涯不断上升。 总的来说,我的IT学习之路是一个持续不断的过程,从初中到现在,我始终在不断地学习和成长。在过程中,我体验了挫折,但同时也获得了成就感和满足感。通过持续地学习和更新自己的技能,我们可以不断发掘自己的潜力,实现自己的目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值