路由器(IPv4)
Destination Interface
0.0.0.0/0 m0
172.58.128.0/17 m1
172.58.128.0/19 m2
172.58.160.0/19 m3
Run Code Online (Sandbox Code Playgroud)
我需要选择哪个接口是正确的.我这样做了:
172.58.218.80 m2
172.58.165.90 m3
172.58.124.36 m1
172.58.169.18 m3
172.58.155.112 m2
172.59.12.142 m0
Run Code Online (Sandbox Code Playgroud)
任何人都可以检查我是否做对了吗?因为我真的不明白"最长的前缀匹配".
我怎么知道路由表中的地址是"匹配"的?
谢谢
谢谢.resmon6
所以Step1将它转换为二进制.
10101100.00111010.10000000.00000000 172.58.128.0/17
10101100.00111010.10000000.00000000 172.58.128.0/19
10101100.00111010.10100000.00000000 172.58.160.0/19
Run Code Online (Sandbox Code Playgroud)
Step2使用子网掩码获取前缀.
10101100.00111010.1 is the prefix for 172.58.128.0/17
10101100.00111010.100 is the prefix for 172.58.128.0/19
10101100.00111010.101 is the prefix for 172.58.160.0/19
Run Code Online (Sandbox Code Playgroud)
第三步:
10101100.00111010.11011010.01010000 172.58.218.80
10101100.00111010.10100101.01011010 172.58.165.90
10101100.00111010.01111100.00100100 172.58.124.36
10101100.00111010.10101001.00010010 172.58.169.18
10101100.00111010.10011011.01110000 172.58.155.112
10101100.00111011.00001100.10001110 172.59.12.142
--------------------------------------------------------
10101100.00111010.1
10101100.00111010.100
10101100.00111010.101
Run Code Online (Sandbox Code Playgroud)
所以这意味着
172.58.218.80 m1
172.58.165.90 m3
172.58.124.36 m0
172.58.169.18 m3
172.58.155.112 m2
172.59.12.142 m0
Run Code Online (Sandbox Code Playgroud)
你能帮我检查一下它是否正确?
谢谢
res*_*on6 18
当你有一个路由表时,前缀是路由本身转换为二进制,只匹配子网掩码中的位数.所以如果你采用这个路由表
192.168.100.0/24
192.168.0.0/16
Run Code Online (Sandbox Code Playgroud)
并将其转换为二进制
11000000.10101000.01100100.00000000 192.168.100.0/24
11000000.10101000.00000000.00000000 192.168.0.0/16
Run Code Online (Sandbox Code Playgroud)
然后使用子网掩码获取前缀.使用子网掩码中的位数,从左侧开始.
11000000.10101000.01100100 is the prefix for 192.168.100.0/24
11000000.10101000 is the prefix for 192.168.0.0/16
Run Code Online (Sandbox Code Playgroud)
现在,当您为目的地选择路线时,您将目的地IP转换为二进制,并选择匹配最长前缀的路线.
您可以看到192.168.100.50的目标与两个路由前缀匹配,因此它选择较长的前缀192.168.100.0/24
192.168.100.50/32 11000000.10101000.01100100.00110010
-----------------------------------------------------
192.168.100.0/24 11000000.10101000.01100100
192.168.0.0/16 11000000.10101000
Run Code Online (Sandbox Code Playgroud)
我知道子网划分起初可能会令人困惑但我不想为你做你的工作.我会告诉你,这不正确.
简介:
到达路由器的每个数据包都有一个目标IP地址.路由器通过将地址与路由表条目列表(通常称为子网前缀)进行匹配,在特定接口上转发数据包.
当IP地址与多个这样的前缀匹配时,就会遇到挑战.在这种情况下,选择最长匹配前缀.
最长前缀结合了路由表的分层方法和灵活性,可以唯一地处理到不同目的地的数据包.
上述程序是正确的.但是你不必总是使用二进制文件.有一种更简单的方法.
步骤1:对于每个接口,请按如下方式标识地址范围.
m1:172.58.128.0/17
考虑右边的15(32-17)位,将它们全部设为0以获取起始IP地址.将它们全部设为1以获取结束IP地址.最后一个八位位组中的1得到255(8 1).第三个八位位组中的1得到127(7 1)并将其添加到128的网络掩码中,我们得到255.
- 开始 - > 172.58.128.0
- 结束 - > 172.58.255.255
m2:172.58.128.0/19
考虑右边的13(32-19)位,使它们全为0以获得该范围内的起始IP地址并使它们全1以获得结束IP地址(第3个八位字节:128 + 31 [5 1] = 159)
- 开始 - > 172.58.128.0
- 结束 - > 172.58.159.255
m3:172.58.160.0/19
- 开始 - > 172.58.160.0
- 结束 - > 172.58.191.255
步骤2:构造一个具有如下接口范围的简单表.
注意:
步骤3:将给定的IP地址与正确的范围匹配.
172.58.218.80 -> m1
172.58.165.90 -> m3
172.58.124.36 -> m0
172.58.169.18 -> m3
172.58.155.112 -> m2
172.59.12.142 -> m0
Run Code Online (Sandbox Code Playgroud)