网络:最长前缀匹配

时间:2012-02-17 21:15:38

标签: 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

我需要选择哪个界面正确。 我这样做了:

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

任何人都可以检查我是否做对了吗?因为我真的不明白“最长的前缀匹配”。

我怎么知道路由表中的地址是“匹配”?

由于


感谢。的 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

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

Step3

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

所以这意味着

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

你能帮我检查一下它是否正确?

谢谢

2 个答案:

答案 0 :(得分:18)

当你有一个路由表时,前缀是路由本身转换为二进制,只匹配子网掩码中的位数。所以如果你采用这个路由表

192.168.100.0/24
192.168.0.0/16

并将其转换为二进制文件

11000000.10101000.01100100.00000000   192.168.100.0/24
11000000.10101000.00000000.00000000   192.168.0.0/16

然后使用子网掩码获取前缀。使用子网掩码中的位数,从左侧开始。

11000000.10101000.01100100   is the prefix for 192.168.100.0/24
11000000.10101000            is the prefix for 192.168.0.0/16

现在,当您为目的地选择路线时,您将目的地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

我知道子网可能会让人感到困惑,但我不想为你工作。我会告诉你,这不正确。

答案 1 :(得分: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)和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:构建一个界面范围如下的简单表。

nterface range description table

注意:

  • 更长的水平分割(如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