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