网络:最长前缀匹配

Jim*_*mmy 18 networking

路由器(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)

我知道子网划分起初可能会令人困惑但我不想为你做你的工作.我会告诉你,这不正确.


sha*_*rhp 8

简介:

到达路由器的每个数据包都有一个目标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:构造一个具有如下接口范围的简单表.

接口范围描述表

注意:

  • 水平分割越长(如m2和m3的情况)更具体,在重叠范围的情况下应选择前缀.
  • m2和m3的范围是独立的(即,不重叠),但两者都与m1的范围重叠.
  • 总而言之,m1,m2和m3与默认范围m0(包括所有IP地址)重叠.

步骤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)