我正在解决练习问题并得到:
考虑一个使用 8 位主机地址的数据报网络。假设路由器使用最长前缀匹配,并具有以下转发表:
| Prefix Match | Interface |
| 1 | 0 |
| 10 | 1 |
| 111 | 2 |
| otherwise | 3 |
其结果是:
1100 0000
为1101 1111
为0
1000 0000
为为为1011 1111
1
1110 0000
1111 1111
2
0000 0000
0111 1111
3
对于 的范围0
,为什么前缀匹配不表示110
,即最长前缀匹配?我可以采取哪些步骤来思考和计算这个范围?
答案1
这个问题有点棘手,我一直假设范围是连续的。我意识到接口 0、1 或 2 都不包含目标地址 0000 0000,因此它将是其他范围的起点。要确定其他范围的终点,我需要知道其他前缀匹配中未考虑的最小可能值。因此,从接口 0 前缀匹配中减去 1 得到 0111
0000 0000
1111 0111 1111
。3
确定了范围的起点后,我可以确定终点吗?是的!接口 2 将在 1111 1111 处停止,知道两者之间的前缀匹配是使用 AND 逻辑比较创建的,只有 1110 0000 才会生成111的前缀匹配到目前为止,我有
:
0000 0000
0111 1111
3
1XXX XXXX
1XXX XXXX
0
10XX XXXX
10XX XXXX
1
1110 0000
1111 1111
2
如果 1110 0000 是接口 2 的范围的起始,那么从中减去 1 将得到较低相邻范围的结束,即 1101 1111。现在,如果我将地址 1101 1111 传递到转发表,它将退出接口 0。因此,1101 1111 是接口 0 的结束范围。根据我拥有的范围重新排列我的表:
0000 0000
到0111 1111
到3
10XX XXXX
到10XX XXXX
到1
1XXX XXXX
到1101 1111
到0
1110 0000
到1111 1111
2
现在,将 1 添加到接口 3的结束范围,得到:1000 0000。将此值传递通过转发表将使其退出接口 1。
0000 0000
因此,1000 0000 是接口 1 范围的起始。0111 1111
3
1000 0000
10XX XXXX
1
1XXX XXXX
1101 1111
0
1110 0000
1111 1111
2
剩下要确定的是接口 0 的起始位置,如果是 1000 0000,它将与接口 1 重叠。因此,1100 0000 是唯一与它前缀匹配的地址。从 1100 0000 中减去 1,即可得出接口1地址范围的
0000 0000
结尾。0111 1111
3
1000 0000
1011 1111
1
1100 0000
1101 1111
0
1110 0000
1111 1111
2
有人对此有什么意见吗?