假设我成立了一家新公司并222.123.123.0/25
从互联网注册中心租用了一块 IP 地址,其中一个 IP 地址222.123.123.4
就是我的主要网络服务器。
来自不同国家的客户想要向此 IP 地址发送数据包,路由器(其所在国家的 ISP 路由器)如何知道此 IP 地址的网络前缀是什么222.123.123.4
?由于分类 IP 寻址已被弃用,因此对于 CIDR IP 地址,它可以是222.123.123.4/25
、222.123.123.4/26
等222.123.123.4/27
,而 IP 报头肯定没有称为的报头network prefix
。
那么路由器如何确定IP地址的网络前缀呢?
答案1
你的路由器知道前缀长度,因为您已对其进行了配置。每当为接口配置地址时(无论是在主机上还是在路由器上),都会同时输入前缀长度(或等效的网络掩码)。
它的功能与您家里的 Windows PC 的 IPv4 配置相同 - PC 知道它是 192.168.1.x/24,因为它填写了“网络掩码:255.255.255.0”;路由器知道它是 .123.1/25,因为您(或 ISP)在执行时必须指定“/25” ip addr add
。
遥远路由器要么 a) 不关心,要么 b) 在你通过 BGP 向上游 ISP 通告你的 /25 路由时,会学习到一条路由,并且相同的 BGP 通告包括路由前缀长度和网络地址。目前使用的所有路由协议都已扩展为携带前缀长度 - 这就是“CIDR”努力的重点。
但请注意,远程路由器只关心路线前缀,最多。他们不关心你的子网大小——BGP 通告可能覆盖多个子网(聚合路由),也可能覆盖半个子网,但这对于数据包传输都没有任何影响。
诸如“为广播保留”地址之类的东西在这里不起作用,因此发往“.0”和“.255”地址的数据包将被转发而不进行任何特殊处理(目的地甚至可能根本不是具有广播功能的子网;它可能是任何地址都有效的 /31 或 /32 PtP 链路)。
(路由和子网的分离甚至在 CIDR 出现之前就已经发生了——这就是为什么“子网掩码”被称为子-网络掩码;尽管运营商已经将其有类网络内部细分为无类子网,但 BGP 过去仍在相当长的一段时间内仅承载有类路由。)
这意味着主机或基本 CPE 路由器只能拥有单个 0.0.0.0/0 路由(“默认”路由),并且完全不关心某些远程网络是否是 /25 或其他路由。
在大多数情况下,ISP 会仅有的通过 BGP 通告聚合路由,而不是单独的子网路由 — 通常不建议这样做,因为全局 BGP 表已经很大了。(事实上,您甚至不允许在公共互联网上通告 IPv4 /25;ISP 只接受 /24 或更大的通告,或类似地,IPv6 的 /48 通告。)
换句话说,IP 标头中没有“网络前缀”字段,因为仅有的需要知道该信息的设备(即您所在站点的最终路由器)已经明确配置了该信息。