形象理解
想象一下,你要给一位朋友打电话。你需要知道两样东西:国家/地区代码(确定大致范围)和电话号码(精确找到个人)。在互联网世界中,IP地址就扮演着这个“电话号码”的角色,而子网掩码则定义了哪里是“区号”,哪里是“本地号码”。
一、IP地址:互联网的“门牌号”
1.1 两种表示法:人类可读 机器可读
点分十进制表示法(人类友好):
192.168.1.100
二进制表示法(机器本质):
11000000.10101000.00000001.01100100
一个IPv4地址实际上是32位二进制数,被分成4个8位组(字节),每个字节转换为十进制并用点分隔。
1.2 IP地址的结构:网络位 + 主机位
每个IP地址都由两部分组成:
[ 网络部分 Network Part ] [ 主机部分 Host Part ]
网络部分:标识设备所属的“街道”或“小区”
主机部分:标识该“小区”内的具体“门牌号”
单看IP地址本身,你无法知道从哪里划分网络部分和主机部分。这就是子网掩码要解决的问题。
二、子网掩码:网络部分与主机部分界线
2.1 子网掩码的本质
子网掩码也是一个32位二进制数,其唯一作用是明确指出IP地址中哪些位属于网络部分,哪些位属于主机部分。
掩码规则:
掩码中的 1 对应IP地址中的网络位
掩码中的 0 对应IP地址中的主机位
常见掩码示例:
| 点分十进制 | 二进制表示 | CIDR表示 | 网络位长度 |
|---|
| 255.255.255.0 | 11111111.11111111.11111111.00000000 | /24 | 24位 |
| 255.255.0.0 | 11111111.11111111.00000000.00000000 | /16 | 16位 |
| 255.255.255.252 | 11111111.11111111.11111111.11111100 | /30 | 30位 |
2.2 网络号、主机号与广播地址的计算
举个例子:
IP地址: 192.168.1.100
子网掩码: 255.255.255.0
第一步:转换为二进制
第二步:计算网络地址
IP地址: 11000000.10101000.00000001.01100100
子网掩码: 11111111.11111111.11111111.00000000
----------------------------------- (逻辑AND运算)
网络地址: 11000000.10101000.00000001.00000000
= 192.168.1.0
第三步:计算广播地址
将网络地址的所有主机位全部置1:
网络地址: 11000000.10101000.00000001.00000000
----------------------------------- (主机位置1)
广播地址: 11000000.10101000.00000001.11111111
= 192.168.1.255
第四步:确定可用主机范围
第一个可用IP:网络地址 + 1 = 192.168.1.1
最后一个可用IP:广播地址 - 1 = 192.168.1.254
可用主机数量:2^8 - 2 = 254台(减2是因为去掉网络地址和广播地址)
三、CIDR表示法:更简洁的网络标注
CIDR(Classless Inter-Domain Routing,无类别域间路由)提供了一种更简洁的表示方法。
传统表示:
IP: 192.168.1.0
掩码: 255.255.255.0
CIDR表示:
192.168.1.0/24
这里的“/24”表示网络部分占24位。这种表示法不仅简洁,而且能直观地看出网络规模:
| CIDR | 掩码 | 可用IP数 | 典型用途 |
|---|
| /30 | 255.255.255.252 | 2 | 点对点链路 |
| /29 | 255.255.255.248 | 6 | 小型网络 |
| /28 | 255.255.255.240 | 14 | 小型网络 |
| /24 | 255.255.255.0 | 254 | 常见局域网 |
| /16 | 255.255.0.0 | 65,534 | 大型网络 |
| /8 | 255.0.0.0 | 16,777,214 | 巨型网络 |
四、网络连通性的核心判断逻辑
4.1 连通性判断的三步法
当一台计算机(源主机)想要与另一台计算机(目标主机)通信时,它遵循以下决策流程:
判断是否在同一子网的具体计算:
用源主机的子网掩码,计算源IP的网络地址
用同一个子网掩码,计算目标IP的网络地址
比较两个网络地址是否相同
4.2 实战示例分析
让我们看一个具体场景:
场景配置:
计算过程:
# 对于目标主机B (192.168.1.200):
源主机网络地址 = 192.168.1.100 & 255.255.255.0 = 192.168.1.0
目标主机网络地址 = 192.168.1.200 & 255.255.255.0 = 192.168.1.0
# 结果相同 → 在同一子网 → 直接通信
# 对于目标主机C (192.168.2.100):
源主机网络地址 = 192.168.1.100 & 255.255.255.0 = 192.168.1.0
目标主机网络地址 = 192.168.2.100 & 255.255.255.0 = 192.168.2.0
# 结果不同 → 不在同一子网 → 通过网关转发
4.3 特殊地址空间
了解这些特殊地址有助于排除网络问题:
私有地址空间(不可在公网路由):
10.0.0.0/8 (10.0.0.0 - 10.255.255.255)
172.16.0.0/12 (172.16.0.0 - 172.31.255.255)
192.168.0.0/16 (192.168.0.0 - 192.168.255.255)
特殊用途地址:
五、实际案例:多网络环境配置
5.1 双网卡环境的路由配置
# 计算机配置:
网卡1:
IP: 172.16.6.187
掩码: 255.255.255.0 (/24)
网关: 172.16.6.254
用途: 连接内部服务器网络
网卡2:
IP: 192.168.0.107
掩码: 255.255.255.0 (/24)
网关: 192.168.0.1
用途: 连接互联网
问题:默认情况下,Windows会为每个接口配置默认路由,导致路由表混乱。
解决方案:添加精确的静态路由
route add 172.16.0.0 mask 255.255.0.0 172.16.6.254
route add 192.168.0.0 mask 255.255.0.0 172.16.6.254
route add 172.17.0.0 mask 255.255.0.0 172.16.6.254
# 外网流量走默认路由(通过192.168.0.1)
# 这条路由通常已存在
路由表决策流程:
访问172.16.x.x → 匹配第一条路由 → 走172.16.6.254
访问192.168.x.x → 匹配第二条路由 → 走172.16.6.254
访问8.8.8.8(互联网)→ 不匹配任何特定路由 → 走默认路由192.168.0.1
5.2 网络连通性测试工具
ipconfig (Windows) 或 ifconfig/ip addr (Linux)
ping 192.168.1.1
ping google.com
tracert 8.8.8.8 (Windows)
traceroute 8.8.8.8 (Linux)
route print (Windows) 或 route -n/ip route (Linux)
telnet 192.168.1.1 80
nc -zv 192.168.1.1 80
六、子网划分进阶:可变长子网掩码(VLSM)
6.1 为什么需要子网划分?
假设你有一个192.168.1.0/24的网络(254个可用地址),但需要分配给:
部门A:120台主机
部门B:60台主机
部门C:30台主机
部门D:10台主机
路由器间链路:2台主机
如果给每个部门都分配/24网络,会浪费大量IP。VLSM解决了这个问题。
6.2 子网划分
需求:将192.168.1.0/24合理分配给以上部门
划分步骤:
按主机数从大到小排序分配
从剩余地址继续划分
继续划分
最后划分
结语
正确的IP地址 + 正确的子网掩码 + 正确的路由 = 网络连通性
当你下次遇到网络问题时,可以考虑:
这两个设备在同一个子网吗?
它们的网关配置正确吗?
路由表是否指向了正确的路径?
附录:在线工具推荐
转自https://blog.csdn.net/qq_36944952/article/details/156224130