为什么子网掩码不是一个0-31的数字?

admin 2024年1月3日21:40:46评论18 views字数 2091阅读6分58秒阅读模式
学了子网掩码一个地方就是不理解,其实子网掩码根本不需要拿四字节去存,更不应该拿四个三位十进制数(比四字节更占内存),更更不应该用字符串存。
应该是用0-31的一个数字就足够。0就是全不掩,31就是全部掩饰。
为什么要用4字节,或者4个3位数甚至字符串?
为什么子网掩码不是一个0-31的数字?
题主是对的,但是子网掩码长度应该是0-32,而不是0-31。
IP地址一共有多少个?
232 = 4294967296
差不多42.9亿个,全球的IP地址全在这里。
第1个IP地址   = 00000000.00000000.00000000.00000000   
最后1个IP地址 = 11111111.11111111.11111111.11111111
每个IP地址占32 bit位,每个字节包含8个bit位,所以每个IP地址占4个字节(byte)。
如果全球IP地址配置在一个广播域里,压根不需要网关(Gateway),直接使用ARP广播即可发现对方的MAC地址(根据对方的IP地址)。
但是,如果网络真的这么设计,那么这个网络几乎不可用,因为仅仅广播报文就会将整个网络堵塞得一动不动。
网络设计师引入了网络掩码(mask)的概念,其实目的很简单,就是将全球IP地址池分段(Segment)。
如果将全球IP地址作为一个整体,如何最简练的表达?
0.0.0.0/0
没错,“0.0.0.0/0”代表的是全体IP地址。
读者肯定很好奇“0.0.0.0/0”是如何来的?
“0.0.0.0/0” 这里的数字全部为十进制,将0.0.0.0转换成二进制。而/0中的数字依然保持为十进制,则有:
0.0.0.0/0 = 00000000.00000000.00000000.00000000/0
00000000.00000000.00000000.00000000 其实就是地址池的第一个IP,用十进制如何表达?
0
意味着0.0.0.0/0,也可以简写为0/0。
那么/0中的0表示什么意思?
如果把全球IP地址比喻成一个大西瓜,这个0表示对这个大西瓜切的次数,0表示切0次。说人话,没有切的意思。
接下来玩切西瓜的游戏,先来切1刀,西瓜咔嚓成2半。
第一半如何表达?
00000000.00000000.00000000.00000000(二进制)/ 1(十进制)= 0.0.0.0/1(十进制/十进制)
第二半如何表达?
10000000.00000000.00000000.00000000(二进制)/ 1(十进制)= 128.0.0.0/1(十进制/十进制)
第一半西瓜(整体)最后一个IP地址(个体)是多少?
01111111.11111111.11111111.11111111(二进制)/ 1(十进制)= 127.255.255.255/1(十进制/十进制)
第二半西瓜(整体)最后一个IP地址(个体)是多少?
11111111.11111111.11111111.11111111(二进制)/ 1(十进制)= 255.255.255.255/1(十进制/十进制)
读者纳闷了,为何一会儿十进制,一会儿二进制?
二进制是给计算机看的,因为计算机最擅长二进制计算。
十进制是给人类看的,符合人类的阅读习惯。
将上文的第二半西瓜单独拿出来再切一刀,又诞生了两半。
第一半如何表达?
10000000.00000000.00000000.00000000(二进制)/ 2(十进制)= 128.0.0.0/2(十进制/十进制)
第二半如何表达?
11000000.00000000.00000000.00000000(二进制)/ 2(十进制)=192.0.0.0/2(十进制/十进制)
将上文的第二半再做22次的切割,即一共做2 + 22 = 24次的切割,即可诞生读者最熟悉的西瓜(整体)编号:
192.168.0.0/24 (十进制/十进制)
全部换算成二进制:
11000000.10100100.00000000.00000000/11111111.11111111.11111111
计算机如何计算这是哪个network segment?
将/分开的两部分,从左边对齐:
11000000.10100100.00000000.00000000
11111111. 11111111. 11111111
做bit-wise 与运算,得到network segment = 192.168.0.0 (十进制)
0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1
那么这个网段 192.168.0.10/24的network segment是多少?Host又是多少?
network segment = 192.168.0.0 (十进制)
host= 00001010 = 10 (十进制)
两者相加 network segment + host  =192.168.0.0 + 10 = 192.168.0.10 (十进制)
当西瓜切32刀的时候,就成为最小的单元,无法继续切割了。比如 192.168.0.255/32,这个网段就一个IP地址,即192.168.0.255。
上文中/后的数字为掩码的长度,按照习惯统一为十进制,因为它是为人类阅读习惯而设计的。

原文始发于微信公众号(车小胖谈网络):为什么子网掩码不是一个0-31的数字?

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月3日21:40:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   为什么子网掩码不是一个0-31的数字?http://cn-sec.com/archives/2361135.html

发表评论

匿名网友 填写信息