我们的业务聚焦于后半部分:我们是Geonode,主要销售代理服务。坦率地说,子网多样性才是真正的质量指标,而地址池规模大多只是营销噱头——这与整个行业(包括我们自身)的惯例相悖,因为“1.5亿个IP地址”远比“我们的地址覆盖您所需国家/地区的N个独立/24子网”更容易展示在落地页上。 如果您从这篇文章中只记住一点,那就是向服务商提出的问题:不要问有多少个地址,而要问它们是如何分布的。这个问题更难回答,但也更有价值。
基本原理
每个 IP 地址同时承担两项功能。其中一部分表示该设备所属的网络;另一部分则表示该网络中的具体设备。
192.168.10.42
└──────┘ └─┘
network host
两部分的分界点并非固定不变,而是由子网掩码(或等效的 CIDR 表示法中的前缀长度)来定义。 网络部分即为子网 ID——有时也称为网络地址或网络前缀——该子网内的每台机器都拥有相同的网络部分。
路由器之所以关注这一点,是因为它能让路由器批量做出决策。路由器不需要为每个地址设置一条规则,而是为每个网络设置一条规则。正是这种聚合,才使得互联网的路由表能够保持在可管理的规模。
CIDR 表示法,即实际的写法
现代做法是明确写出分隔符。RFC 4632 定义了该格式:
前缀以 4 个八位组的数值表示,与传统的 IPv4 地址或网络号相同,后跟“/”(斜杠)字符,再后跟一个介于 0 到 32 之间的十进制值,该值表示有效位数。
因此,192.168.99.0/24 表示前 24 位是网络部分,剩余的 8 位用于标识主机。 该 RFC 给出了与旧有类系统之间的映射关系:传统“B 类”网络 172.16.0.0(子网掩码为 255.255.0.0)对应于 172.16.0.0/16,而传统“C 类”网络 192.168.99.0 对应于 192.168.99.0/24。
与旧的固定类相比,其优势正如 RFC 所言:“使用带有显式前缀长度的无类前缀,可以根据实际需求更灵活地匹配地址空间块。 以前只有三种网络规模可供选择,现在可以定义前缀来描述任何二进制幂大小的地址块,其中包含 1 到 2^32 个终端系统地址。”
| 前缀 | 子网掩码 | 地址总数 | 可用主机数 |
|---|---|---|---|
| /24 | 255.255.255.0 | 256 | 254 |
| /25 | 255.255.255.128 | 128 | 126 |
| /26 | 255.255.255.192 | 64 | 62 |
| /27 | 255.255.255.224 | 32 | 30 |
| /28 | 255.255.255.240 | 16 | 14 |
| /30 | 255.255.255.252 | 4 | 2 |
| /32 | 255.255.255.255 | 1 | 1 |
每个普通子网中有两个地址无法用于主机:第一个是子网ID本身,最后一个是广播地址。因此,在/24子网中,可用地址数为254而非256。
前缀号越小,地址块越大。一个 /8 地址块非常庞大——RFC 指出,IANA 向区域互联网注册管理机构(RIR)分配的是“2^24 个地址的连续位对齐地址块(即 /8 前缀)”,随后由 RIR 进行细分。
如何计算子网ID
从技术角度看:将地址与子网掩码进行位与运算。
对于 192.168.10.42/24
:
address 11000000.10101000.00001010.00101010
mask 11111111.11111111.11111111.00000000
AND 11000000.10101000.00001010.00000000
= 192.168.10.0
子网ID为 192.168.10.0
,广播地址为 192.168.10.255
,可用主机范围从 .1
到 .254
。
对于不位于八位组边界上的前缀,其计算方式不太直观。以 192.168.10.42/26
为例,其子网掩码为 255.255.255.192
,因此最后一个八位组被划分为 2 位网络位和 6 位主机位。这将形成四个子网,每个子网包含 64 个地址,边界分别为 0、64、128 和 192。 由于 42 位于第一个块内,因此子网 ID 为 192.168.10.0
,广播地址为 192.168.10.63
。
实际操作中,建议使用工具处理:
ipcalc 192.168.10.42/26
或者使用 Python 代码:
import ipaddress
net = ipaddress.ip_network('192.168.10.42/26', strict=False)
print(net.network_address) # 192.168.10.0
print(net.broadcast_address) # 192.168.10.63
print(net.num_addresses) # 64
strict=False
至关重要:它告诉库,你提供的是主机地址并希望获取其所属的网络,而不是断言该地址 就是 一个网络。
私有地址范围及其无处不在的原因
有三个地址范围永远不会出现在公共互联网上。RFC 1918 将其保留:
10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
该 RFC 将它们描述为“24 位地址块”、“20 位地址块”和“16 位地址块”,并指出使用这些地址的企业“无需与 IANA 或互联网注册机构进行任何协调”。
值得了解的实际影响:
这些地址在互联网上不可路由。 全球每台家用路由器都会分配 192.168.x.x 格式的地址,且这些地址之间不会发生冲突,因为它们从未离开过建筑物。
**如果代理服务器将其中一个地址作为您的“外部 IP”返回,则说明其配置有误。**如果查询服务报告的地址是 10.x 或 192.168.x,说明路径中的某个节点报告的是内部地址而非公共地址。
这些地址对 NO_PROXY 的配置至关重要。 将私有地址范围排除在代理范围之外是标准做法,而配置错误往往是导致内部服务莫名其妙地通过外部代理路由的常见原因。
子网为何对代理服务器至关重要
这就是网络概念如何转化为采购决策的体现。
封锁是在子网层面上进行的。 当某个网站认定某个地址存在问题时,仅封锁该单一地址往往毫无意义,因为该运营商在同一子网块中还有另外 253 个地址。 因此,实际的应对措施是封锁整个地址范围——通常是 /24 范围,有时甚至更大。这是标准的防御性做法,从网站运营商的角度来看完全合乎逻辑。
**这对您意味着什么:**如果您的代理池由几个子网内的众多地址组成,其实际表现就像一个非常小的代理池。 从封禁的角度来看,203.0.113.0/24 中的 50 个地址,其影响更接近于一个地址,而非 50 个。一次误判的请求速率就可能导致所有地址被封禁。
这就是为什么池大小是一个不理想的衡量标准。“1000 万个 IP”并不能说明地址的分布情况。 一个由一万个地址组成、分布在四千个不同 /24 子网中的地址池,比一个集中于几百个子网的一百万个地址池更具抗风险能力。对于服务商而言,连续的地址块不仅成本低廉,而且在关键的关联性方面恰好符合需求。
数据中心地址和住宅地址在此处存在结构性差异。 数据中心地址是以连续块的形式分配给托管服务商的,因此既便宜又易于识别和批量封锁——一个网站只需几条规则就能封锁托管服务商的所有分配地址。而住宅地址则来自消费者ISP,分布在许多地址块中,动态分配,并与普通用户混杂在一起。 这种分布方式正是您额外付费的重要原因之一。
**子网多样性也会影响您应如何轮换。**在同一个 /24 子网内轮换地址其实算不上真正的轮换。如果您的服务商允许您查看地址块信息,请将请求分散到各个地址块中,而不是按顺序依次轮换。
检查地址池中的子网多样性
在正式部署前,建议在试用阶段进行此操作。
收集一组出口地址样本,并统计不同的 /24 子网数量:
for i in $(seq 1 200); do
curl -s -x "$PROXY" https://api.ipify.org
echo
done | sort -u > ips.txt
wc -l < ips.txt # distinct addresses
cut -d. -f1-3 ips.txt | sort -u | wc -l # distinct /24 blocks
该比率就是你需要关注的数值。如果 180 个 /24 子网中共有 200 个唯一地址,则说明该地址池分布良好;而如果 6 个 /24 子网中仅有 200 个地址,则该地址池的实际规模远小于表面看起来的那么大。
若需更宏观的视角,可扩展至 /16 子网:
cut -d. -f1-2 ips.txt | sort -u | wc -l
如果可能,请检查自治系统编号,因为如果一个地址池分散在多个 /24 子网中,而这些子网都属于同一家运营商,那么其多样性就比子网数量所显示的要低。对一组地址样本运行 whois
即可得知。
请按国家分别分析,而非汇总统计。一个在全球范围内多样性极佳的地址池,可能恰好集中在你真正需要的某个特定地区——而汇总数据会完全掩盖这一情况,这正是我们在为什么测试代理很重要中描述的“隐性故障”问题。
子网之上:ASN、WHOIS 和 Geofeeds
子网是分层结构中的一个层次,而其上层对于地址的判定同样至关重要。
区域注册管理机构向下分配。 RFC 4632 描述了这一链条:IANA 将 /8 地址块分配给区域互联网注册管理机构(RIR),而 RIR 则“进而分配或指派更小的地址块”。因此,每个公共地址都位于一组嵌套的分配之中,且每个层级的分配信息均属于公开记录。
**WHOIS 会告诉你谁持有某个地址块。**查询一个地址会返回其所属的分配块、组织、国家以及通常的联系人信息。 这就是任何人判断一个地址属于托管服务提供商还是消费者 ISP 的方式——这不是推断,而是查询:
whois 203.0.113.10 | grep -iE 'netname|orgname|country|cidr'
自治系统编号(ASN)按运营商对地址块进行分组。 自治系统(AS)是一组遵循同一路由策略的前缀集合,单个运营商可能在同一个 ASN 下宣布数百个独立的地址块。 数据中心流量的批量封锁通常发生在这个层面上:站点不会逐一列举托管服务提供商的 /24 子网,而是直接封锁该 ASN。
这对地址池评估的实际意义在于,/24 子网的多样性是必要条件,但并非充分条件。 如果400个不同的/24前缀都属于同一个托管ASN,则只需一条规则即可将其全部屏蔽。检查样本中ASN的分布情况是一项值得与子网数量统计并行进行的、更粗略的测试:
for ip in $(head -50 ips.txt); do
whois "$ip" | grep -iom1 'AS[0-9]\+'
done | sort | uniq -c | sort -rn
地理数据源(Geofeeds)是校正位置数据的方式。 网络运营商可以发布符合 RFC 8805 标准的、将前缀映射到位置的机器可读文件,地理定位服务商则会将其纳入系统。 这解释了一种乍看之下像是供应商能力不足的现象:两个地理位置数据库对同一地址的判定不一致,原因在于其中一个已接收了最新的地理位置数据源更新,而另一个尚未接收。由于地理位置是按前缀而非按地址确定的,因此当更正信息生效时,整个子网的位置会同时发生变化。
声誉是双向继承的。 一个地址会从其所属的 /24 子网、更高级别的分配以及 ASN 继承声誉,同时也会反向贡献声誉。这就是为什么共享住宅地址池中行为良好的用户,可能会受到数小时前他人行为的影响;也是为什么“代理无法正常工作”的情况,往往与用户自身行为无关。
对于任何评估地址池的人来说,相应的检查清单很简单:统计样本中不同的 /24 子网数量,统计不同的 ASN 数量;如果购买的是住宅地址池,请检查 WHOIS 条目是否显示为普通 ISP 用户而非托管公司;并且应按国家分别重复上述所有步骤,而非进行汇总统计。
IPv6 改变了计算规则
简而言之,因为它的重要性日益凸显。
IPv6 采用相同的 CIDR 表示法,前缀长度可达 128。其常规分配规模要大得多:单个终端站点通常会获得一个 /48 或 /56,而单个网络段通常为 /64——其包含的地址数量甚至超过了整个 IPv4 互联网的总和。
这对任何涉及声誉评估的事物都有两个影响:
/64才是有意义的单位,而非单个地址。 由于一个用户控制着整个/64,封锁单个IPv6地址毫无意义。合理处理IPv6的网站会以/64或更粗粒度的单位来追踪声誉。
庞大的地址数量本身并不代表什么。 某服务商宣称拥有海量 IPv6 地址,实际上可能仅提供一个 /64 地址段。关键问题在于该地址池涵盖了多少个不同的 /64 地址段,或者更理想地,有多少个 /48 地址段。
大家还问
什么是子网ID?
IP地址中用于标识网络而非单个主机的部分。它是通过对地址应用子网掩码得到的,该子网中的每台机器都共享该子网ID。在CIDR表示法中,它以前缀长度形式表示,例如192.168.10.0/24。
如何根据 IP 地址计算子网 ID?
对 IP 地址与子网掩码进行位与运算。以 192.168.10.42/24 为例,其子网掩码为 255.255.255.0,计算结果为 192.168.10.0。对于非八位对齐的前缀,请使用工具——ipcalc,或 Python 的 ipaddress.ip_network(addr, strict=False)。
IP 地址中的 /24 是什么意思?
表示前 24 位是网络前缀,剩余 8 位用于主机。一个 /24 包含 256 个地址,其中 254 个可用,因为第一个是子网 ID,最后一个是广播地址。它对应的子网掩码为 255.255.255.0。
为什么网站会屏蔽整个子网?
因为当运营商控制着同一子网块中的其他 253 个地址时,仅屏蔽单个地址通常收效甚微。屏蔽整个地址范围才是有效的应对措施,这也是标准做法。这正是为什么高度集中的代理池表现得比其地址数量所暗示的要小得多的原因。
一个代理池应覆盖多少个子网?
没有固定的数字,但关键在于比例:抽取几百个出口地址,统计其中不同的 /24 子网数量。子网与地址的比例越高,表明多样性越真实。 应按国家分别衡量,而非汇总计算,因为一个池在全球范围内可能具有多样性,但在您真正需要的地方却可能高度集中。
子网多样性比代理池规模更重要吗?
就抵御封锁的韧性而言,是的。同一 /24 子网内的地址存在关联性——封锁一个地址块就可能导致所有相关地址失效。 连续地址也是服务商获取成本最低的类型,因此一个多样性差的大型地址池虽然容易发布,但其实用性远低于表面看起来的那样。
什么是私有 IP 地址范围?
10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16,这些地址范围由 RFC 1918 保留用于内部用途,且绝不会在公共互联网上路由。 任何组织均可无需协调即可使用这些地址段。如果代理服务器将其中一个地址报告为您的外部地址,则说明配置中存在错误。
IPv6 的子网划分是否与 IPv4 不同?
表示法完全相同,但规模却大不相同。 终端节点通常分配到 /48 或 /56 的地址段,而单个子网为 /64,其规模甚至超过了整个 IPv4 互联网。由于单个用户控制着整个 /64 地址段,信誉评估和封锁机制是在 /64 或更粗粒度的层面上运行的——因此,单纯的 IPv6 地址数量几乎毫无意义。
总结
子网ID是IP地址中网络部分,由子网掩码或CIDR前缀长度决定。这是一个简单的概念,其背后的运算原理是位与(bitwise AND)操作,只需一行脚本即可实现。
之所以值得在网络课程之外理解这一点,是因为互联网将子网视为独立单元。路由器以此进行聚合,注册机构以此进行分配,而从商业角度来看——这一点尤为重要——网站也以此进行屏蔽。一个地址很少仅凭其自身价值被评判;它会继承其邻居的声誉。
因此,当你评估要购买的IP地址时,区分优质地址池与“充数”地址池的关键在于分布情况,而非数量。 抽样调查几百个出口节点,统计不同的 /24 子网,按国家分别统计,然后比较不同供应商之间的比例。这只需十分钟,是供应商不会在主页上展示的数据,而且它比那些醒目的数字更能准确预测该地址池的实际表现。
