最长匹配算法计算路由

Posted 阿拉的梦想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长匹配算法计算路由相关的知识,希望对你有一定的参考价值。

最长匹配算法计算路由前缀

在路由匹配时,路由表由以下三部分数据组成,例如:

prefix:10.186.0.0
mask:15或255.254.0.0
nexthop:10.12.12.1

那么,我们有一个ip 10.187.1.5,需要从路由表中找出它经过哪个路由,下一跳是哪个设备?
方法: 将设备的路由表根据前缀倒序排列,然后用下面算法传入目标ip和路由表中的mask,逐个计算,若计算出来的prefix与路由表里的一致,则走这条路由。

所以,我们得到10.187.1.5的下一跳是10.12.12.1

class A
    public static void main(String[] args) 
        String s = computeRoutePrefix("10.187.0.4", "15");
        String s2 = computeRoutePrefix("10.187.0.4", "255.254.0.0");
        System.out.println(s);
        System.out.println(s2);
    

    /**
     * 计算路由前缀
     * @param ip 目标ip
     * @param mask 掩码
     * @return
     */
    public static String computeRoutePrefix(String ip, String mask) 
        String regex = "\\\\.";
        String[] ipArr = ip.split(regex);
        //数值掩码转换为IP掩码
        if (!mask.contains(".")) 
            int inetMask = Integer.parseInt(mask);
            int part = inetMask / 8;
            int remainder = inetMask % 8;
            int sum = 0;
            for (int i = 8; i > 8 - remainder; i--) 
                sum = sum + (int) Math.pow(2, i - 1);
            
            if (part == 0) 
                mask = sum + ".0.0.0";
             else if (part == 1) 
                mask = "255." + sum + ".0.0";
             else if (part == 2) 
                mask = "255.255." + sum + ".0";
             else if (part == 3) 
                mask = "255.255.255." + sum;
             else if (part == 4) 
                mask = "255.255.255.255";
            
        
        //System.out.println("mask="+mask);
        String[] split = mask.split(regex);
        ArrayList<String> resList = new ArrayList<>();
        for (int i = 0; i < 4; i++) 
            resList.add((Integer.parseInt(ipArr[i]) & Integer.parseInt(split[i])) + "");
        
        return String.join(".", resList);
    

结果:

10.186.0.0
10.186.0.0

以上是关于最长匹配算法计算路由的主要内容,如果未能解决你的问题,请参考以下文章

最长匹配算法计算路由

最长前缀匹配(LPM)

路由器根据IP报文中的目的IP地址还是源IP地址进行路由的查找,掩码最长匹配还掩码最短匹配

为什么使用最长掩码匹配?

通用的路由选择算法

第四周IP通信