IP 地址与二进制级别的默认 0.0.0.0/0 或 ::/0 相比如何?

网络工程 IP地址
2022-02-23 04:51:12

假设我有一个 ipv4 目标地址 -63.168.52.12

二进制格式的地址: 00111111.10101000.00110100.00001100

二进制的默认路由是 00000000.00000000.00000000.00000000

我试图了解默认路由如何匹配所有 IP 地址。子网掩码为零是什么意思?前两位匹配,差异在第三位。是否根据默认路由 ip 逐位检查 IP 并查找匹配项?我在另一个问题中读到所有 IPv4 网络都是 0.0.0.0/0 网络的子网。我不太明白这种说法。

2个回答

默认路由的相关部分是/0前缀长度,而不是真正的0.0.0.0地址部分。通常,/0意味着“至少匹配地址的第一个零位”,使其始终匹配。

从技术上讲,/0长度扩展为子网掩码0.0.0.0(或用于与/16255.255.0.0to/17等进行比较255.255.128.0)。该子网掩码用于与要匹配的地址进行按位AND运算(掩码)。由于所有位都变为零,因此结果始终为0.0.0.0

在操作中,路由表 (FIB) 条目按前缀从最长到最短的顺序进行查询:

if (destinationaddress AND entry.mask) == entry.prefix then use entry.gateway

由于/0是最短的前缀,它总是最后检查并匹配任何地址。

考虑比较的最好方法是恕我直言,有三个可能的值:零、一和“不在乎”。不关心意味着该位同时匹配零和一,匹配无关紧要。让我们使用“*”表示不关心。

现在,使用“不关心”位,您将地址/掩码表示为被掩码部分中的位,而不关心其余部分。例如,前缀 63.168.52.0/24 变为 00111111.10101000.00110100.********,其中 ******** 匹配 8 位的任意组合。显然,默认路由 0.0.0.0/0 变为 32 个无关位(32 个星)并匹配任何位组合。

IP表应该实现最长前缀匹配,即在所有匹配中(有无关位会有多个匹配,默认路由都匹配),无关位最少的匹配应该是选择。所以,如果路由匹配 63.168.52.* 和. . . ,前一个被选中,因为它的“*”更少(也就是更长的前缀)。

这当然提出了如何实现这一点的问题。不,这不仅仅是比较搜索。有一种特殊的硬件,称为TCAM(三元内容可寻址存储器)。内容可寻址内存允许基于内容寻址内存(将其想象为在表格中搜索,而不是基于单元格的内容或行索引)。三元一,允许所述内容(单元格)是“无关位”(匹配一和零)。在软件中,有专门的数据结构。一种常见的数据结构称为trie,它是一种树状结构,可用于对可变长度前缀进行最长前缀匹配。