为什么子网掩码不是一个0-31的数字? admin 102755文章 87评论 2024年1月3日21:40:46评论18 views字数 2091阅读6分58秒阅读模式 学了子网掩码一个地方就是不理解,其实子网掩码根本不需要拿四字节去存,更不应该拿四个三位十进制数(比四字节更占内存),更更不应该用字符串存。 应该是用0-31的一个数字就足够。0就是全不掩,31就是全部掩饰。 为什么要用4字节,或者4个3位数甚至字符串? 题主是对的,但是子网掩码长度应该是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的数字? 点赞 http://cn-sec.com/archives/2361135.html 复制链接 复制链接 左青龙 微信扫一扫 右白虎 微信扫一扫
评论