为何要有子网掩码算法
网络上,数据从一个地方传到另一个地方,是依靠 IP 寻址。
从逻辑上来说,是两步的。
第一步,从 IP 中找到所属的网络,比如是去找这我的是哪一个小区的;
第二布,再从 IP 中找到主机在这个网络中的位置,比如是在小区里面找到这我的。
第一步中的网络,就称之为「子网」(Subnet)。
从逻辑上来说,通常同一子网(Subnet)是使用相同的网关。就比如,一个小区的入口。
IPv4 的 IP 地址是 32 位的,形式如 xxx.xxx.xxx.xxx,每个 xxx 取值都是 0 - 255。
究竟是前三个 xxx 相同,就表明同一个子网,仍是前两个,仍是其余?这个并不必定。
就比如小区有大有小,有的小区有上千户人家,有的小区只有区区几个。
因此,就引入「子网掩码」(Subnet Mask)来标识该子网的大小。
咱们通常看到的 IP 地址是十进制的编码,因此若是换一个视角,从二进制的角度看,每个 IP 地址就是 32 位 1 或 0。
子网掩码,就是用来告诉这个子网的覆盖区间。这 32 位中,前多少位是网络段?固然,余下的就是主机段。
举典型的例子:
IP 中前 24 位表明子网号,后 8 位表明主机号。
因此子网掩码就是 24 个 1(表明前 24 位是子网部分),加 8 个 0(后 8 位是主机部分)。
若是沿用 IP 的标识方式,就是 255.255.255.0 。
每个 255 对应 8 个二进制 1,最后一个 0 对应 8 个二进制 0。
该子网能够容纳最多 256 台主机,也就是主机号从 0 到 255。
固然,实际状况没有这么多,有一些特殊数字有保留用处(广播、网关等)。网络
子网掩码的做用是划分网段地址与主机地址。他的做用至关于面具,挡住面孔,只露出眼睛;若是把1当作面具,把0当作孔,子网掩码就挡住了网段地址,只露出主机地址(255对应的二进制数是11111111)。若是把子网掩码与IP地址作逻辑与运算,获得的结果刚好就是网段地址。路由器就是这么工做的。这是为何叫掩码。
子网与网段的关系就至关于切开的扇形饼与没切开大块圆形大饼的关系。这样子网掩码的做用就是掩盖去圆形大饼的属性,露出扇形饼的属性。编码
子网掩码的两种表示方法路由
1. 点分十进制。eg:255.255.0.0或者255.255.255.0路由器
2. 在IP地址后加上"/"符号以及1-32的数字,其中1-32的数字表示子网掩码中网络标识位的长度。eg:192.168.1.1/24,表示掩码位为24位,每一个点分是8位,点分最大值是2^8 = 256 转化成点分就是 255.255.255.0。二进制
子网IP地址范围和点分掩码的计算方法
192.168.33.50/29数据
1. 计算可用IP数工作
掩码最多32位,(每一个点是8位,4*8),那么还剩32 - 29 = 3 位, 3位能够表示 2 ^ 3 = 8个IP地址,除去首尾两个,真正可用的就是 6个。数字
2. 计算IP范围。
IP末尾是50,上面算出有8个可用的IP地址,50 \ 8 = 6 , 6 * 8 = 48 ,网络地址从192.168.33.48-192.168.33.55 总共8个,去掉首尾两个,恰好6个。
3. 计算点分子网掩码
看最后一位,最多2 ^ 8 = 256个,第一步知道咱们表示8个IP,那么256 - 8 = 248,对应的掩码就是 256 - 2 ^ (32 -29) = 248 , 255.255.255.248
更复杂点的:
上面的是简单的c类地址,表示的网络地址有限,那若是想表示更多的呢?
192.168.33.50/22
按照上面的算法 32 - 22 = 10 ,每一个点分只有8位,最后一个点分表示不完,那就只能取倒数第二个点分的后 10 -8 =2 位,最后一个点分只能表示256个地址,还不够,因此不用遮掩这个段了,就是0,算倒数第二个点分 第二个点分用2位,那么表示 2 ^ 2 = 4个网络地址,256 - 4 = 252,对应的掩码就是 255.255. 252.0
同理:4个网络地址,倒数第二个点分,33 \ 4 = 8 , 8 * 4 =32, 那么网络地址范围就是:
192.168.32.0 - 192.168. 35. 255。
看看对不对:
192.168.32.0 - 192.168.32.255
192.168.33.0 - 192.168.32.255
192.168.34.0 - 192.168.32.255
192.168.35.0 - 192.168.32.255
256 * 4 = 1024 = 2 ^ 10