IP 地址基础:结构、版本与表示法
做网络安全的人,天天跟 IP 地址打交道。但你真懂它吗?
我记得刚入行那会儿,总觉得 IP 地址就是一串数字,没什么好琢磨的。直到有一次处理一起 DDoS 溯源,发现攻击源 IP 全是伪造的,我查了半天才发现——原来我连地址结构都没搞清。从那以后,我老老实实把这部分基础啃透了。
IP 地址到底长什么样?
说白了,IP 地址就是网络上每台设备的门牌号。它分两部分:网络位和主机位。网络位负责定位你在哪个“小区”,主机位定位你在哪一栋“楼”。
核心公式:IP 地址 = 网络前缀 + 主机标识
对于 IPv4,总共 32 位;对于 IPv6,总共 128 位。
为什么区分这两个部分这么重要?因为做异常行为检测时,你经常需要判断两个来源 IP 是否属于同一个子网。如果网络位相同,它们就可能来自同一个局域网段,行为特征往往更相似。我就在项目里遇到过这种情况:同一网段内多个 IP 同时发起端口扫描,我们直接用子网掩码一算就锁定了攻击范围。
IPv4 vs IPv6:你别只记得“32位 vs 128位”
| 对比项 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 位(4 字节) | 128 位(16 字节) |
| 表示方式 | 点分十进制,如 192.168.1.1 | 冒号十六进制,如 2001:db8::1 |
| 地址空间 | 约 43 亿个 | 约 3.4×10³⁸ 个 |
| 常见特性 | NAT 广泛使用,地址耗尽 | 内置安全扩展,无需 NAT |
| 在异常检测中的区别 | 内网地址(10.x.x.x / 192.168.x.x)常见于内部扫描 | 地址更庞大,更难扫描但更容易隐藏 |
你想想看,IPv4 地址快用完了,IPv6 才慢慢铺开。但在异常检测场景下,两者都要处理。我建议你重点记住 IPv4 的私有地址段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16),因为这些地址经常出现在内部攻击或伪造源 IP 的案例中。
子网掩码与 CIDR:别再说“255.255.255.0”就够了
子网掩码的作用就是告诉你:这个 IP 里,前多少位是网络位。比如 255.255.255.0 表示前 24 位是网络位,后 8 位是主机位。
但更现代、更简洁的写法是 CIDR 表示法——直接在 IP 后面加个斜杠和数字,比如 192.168.1.0/24。
实战技巧:我写网络规则时,一律用 CIDR /24、/16、/8 来界定范围。比如要屏蔽某个 C 段,直接写 192.168.1.0/24,比写一长串掩码方便多了。
为了让你快速理解,看个对照表:
| CIDR 表示 | 子网掩码 | 可用主机数 | 典型用途 |
|---|---|---|---|
| /8 | 255.0.0.0 | 约 1677 万 | 大型 ISP |
| /16 | 255.255.0.0 | 65,534 | 中型企业 |
| /24 | 255.255.255.0 | 254 | 最常见局域网 |
| /30 | 255.255.255.252 | 2 | 点对点链路 |
⚠️ 曾经踩过的坑:有一次我写脚本做来源 IP 白名单过滤,直接用了 192.168.1.0/24,结果漏掉了 192.168.2.0/24 的合法 IP。因为我没意识到 /24 已经固定了前 24 位,使用 /23 才能覆盖两个 /24。从此我检查 CIDR 时一定会先换算二进制验证。
IPv6 地址结构:比 IPv4 复杂,但核心思路一样
IPv6 虽然地址长,但结构上也分网络前缀(前 64 位)和接口标识(后 64 位)。常见写法是 2001:db8:1234:5678::/64。其中双冒号代表省略连续的多组 0。
在做检测时,我经常利用 IPv6 的前缀来聚合分析。比如监控某个 /48 前缀内的所有流量,可疑行为往往集中在某几个 /64 子网里。
一张图理清本章知识体系
下面这张 SVG 图把 IP 地址基础的核心概念串起来了,建议你照着理解。
异常检测中怎么用这些知识?
说白了,没有 IP 结构的基础,你连日志里的源地址都读不懂。我给你三个实用场景:
- 判断来源是否伪造:如果源 IP 是 10.1.2.3/8,却从公网接入,那基本是伪造的。因为私有地址不能在公网路由。
- 聚合分析:把大量告警按 CIDR 前缀汇总,比如所有 /24 子网的扫描行为,能快速发现是谁在搞事情。
- 配置白名单:我曾在防火墙上用 /24 精确放行合作方 IP 段,既安全又省心。
我的经验:遇到可疑流时,别急着全局封锁。先用 CIDR 算出精确范围,只封那个 /24 或 /28,减少对正常业务的影响。这个习惯让我少接了好几次投诉电话。