我所理解的子网掩码

首先 IPv4 资源是非常稀少的 大约只有 43亿 而且这还是包括了私有IP地址段的 其次 IP地址分为了五类 其中 D类地址没有主机标识 常被用于广播 E类被保留 我们不去管它

那就只剩下了 A B C 三类 问题是 A类和B类的链路允许非常多的计算机连接 实际网络架构上 根本用不到那么多 这就造成了IPv4的浪费 这个时候 子网掩码出现了

子网掩码的意义

将 A B C类网络进行更细的划分 避免浪费 IPv4地址 也可以把小的网络归并成大的网络即超网

子网掩码的理解

假设有一个财主 他有256间房子 房子的编号是 0~255 然后它的房子都在192.168.0这一条街上 现在他有8个儿子 要分家 则相当于 每个人都分得32间房子

以下为每个儿子分得的房子地址

  • 一: 192.168.0.0-192.168.0.31
  • 二: 192.168.0.32-192.168.0.63
  • 三: 192.168.0.64-192.168.0.95
  • 四: 192.168.0.96-192.168.0.127
  • 五: 192.168.0.128-192.168.0.159
  • 六: 192.168.0.160-192.168.0.191
  • 七: 192.168.0.192-192.168.0.223
  • 八: 192.168.0.224-192.168.0.255

划分出来的各个儿子房子地址的范围 就是这个财主的子网 它们原本是互通的(因为都属于财主一个人) 现在分家了 它们不再是互通的了(不可能你大儿子结婚以后 二儿子还没事去你家看看)

现在我们来看一号儿子的其中一个房子地址

1
2
3
4
     192.     168.       0.       20
11000000|10101000|00000000|000|10100
该类本身的网络标识为24位 |扩展|主机部分
经过分家以后这个IP的网络标识为27位

为什么分家以后网络标识为27位?

首先 我们知道 IPv4的地址为32位 然后这是一个C类地址 网络标识为 24位 剩下 8位做主机号 但是 如果主机号为8位的话 那么也就是说 这个IP的地址的主机号从0-255都是一个子网的

现在我们是有8个儿子分家 所以每个儿子只能有32个房子 也就是说 主机号只能留到刚好能够表示到十进制31的比特位数(0~31) 显而易见 是5位做主机号 那么 32位 - 5位 = 27位 这就是为什么分家以后网络标识为27位 有3位是因为分家以后扩展了的网络标识

由于 192.168.0.0-192.168.0.31 这样表示实在太复杂了 于是乎 产生了下面一种表示方式

1
2
3
4
5
6
7
8
192.168.0.0/27
192.168.0.32/27
. .
. 以此类推 .
. .
192.168.0.224/27
/27 可以理解为 主机号只有 32-27 = 5位
也就是说 这个网段是每32个地址为一个子网划分的

上面这种表示方式虽然人能看得懂 但是计算机不认识 于是产生了 子网掩码

1
2
3
     255.     255.     255.     224
11111111|11111111|11111111|11100000
大概意思就是 网络标识部分为1 主机号标识部分为0

这样 财主的房子分配后的子网掩码就是 255.255.255.224

一道有趣的子网掩码问题

两台服务器 A 和 B 的网络配置如下,B 的子网掩码本应该是255.255.255.0,被不小心配成了 255.255.255.224。它们还能正常通信吗?

Subnet_mask

这道题是我从 林沛满先生的《Wireshark网络分析就这么简单》摘取的 林沛满先生的两本书在我看来都是很不错的(虽然我的水平暂时还没资格评论别人的书) 就是名字取得差了一些 如果能把名字改成 《从Wireshark的角度看网络》 我想会卖的更好!

书中的解法是直接用Wireshark抓一次包

我个人的分析是这样的

  • 当B访问A时
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
B的IP是 192.168.26.3 它的子网掩码是 255.255.255.224
A的IP是 192.168.26.129 因为此时是 B访问A 所以A的子网掩码用不上
将 A的IP的二进制与B的子网掩码的二进制进行与运算
11000000|10101000|00011010|10000001
11111111|11111111|11111111|11100000
得到
11000000|10101000|00011010|10000000
转换为十进制 为 192.168.26.128
因此A的IP处于B的192.168.26.128的子网中
其实 我个人是这么算的 255-224 = 31 说明 每32位为一个子网
接着 129 / 32 约等于 4.03 也就是说比4稍微大一点
也就是说处于第五个子网中 32*4=128
说明 A的IP处于主机号起始为128的子网中
接下来再用相同的方法分析B的IP处于哪个子网中
3 / 32 = 0 说明在第一个子网中 A和B处于不同子网
于是B访问A 需要跨子网通信 所以借助于网关 192.168.26.2 将其转发到 A 去
  • 当A访问B时
1
2
3
4
5
6
7
A的子网掩码为 255.255.255.0
用上面的方法 可以知道 这整个0~255都在一个子网中
B的IP是 192.168.26.3
3 / 0 = 0 所以处于第一个子网也是唯一一个子网
A的IP是 192.168.26.129
129 / 0 = 0 也处于第一个子网也是唯一一个子网
因此 A访问B是同一个网络 不需要借助网关 因此A能直接访问B