ip4和ipv6的路由匹配
来源:互联网 发布:邮箱反查域名 编辑:程序博客网 时间:2024/06/04 20:09
网络实验涉及到ipv4和ipv6的路由匹配问题,当时上网络理论课,只知道路由表要匹配,却没去深究到底是怎么匹配的。
不去追寻过去路由器如何匹配,只说现在的最长匹配规则。
最长掩码匹配规则的一个例子:
1.2.3.0/24
1.2.0.0/16
1.2.3.4/30
当一个目的地址为1.2.3.5的ipv4分组到达时,将会选择1.2.3.4/30的路由转发出去。即选择最长掩码的匹配项。
我要说的重点不是如何选择匹配项,而是如何判断一个路由表项是否匹配。
若已知子网掩码长度masklen(子网掩码中=1的bit数)
int mask = 0x1;//mask 子网掩码for(i=0;i<masklen;i++)//masklen 子网掩码长度 mask = 0x1 + mask<<1;mask = mask<<(32-masklen);//dest为分组目的地址,temp为路由表的表项if(dest&mask == temp&mask)//匹配成功 route = temp;//然后进入下一个路由表项的匹配
上面方法,只是匹配方法,没有加入最长匹配的规则。并且masklen为主机字节序,dest和temp要保证字节序的一致。
对于ipv6要麻烦一点,因为ipv6地址有128位,若ipv6地址使用int型数组表示,那么就要根据masklen的大小,来计算mask,同样的使用int型数组来存放mask。
bool destEQdesip(char *pBuffer,route_table *temp){//pbuffer指向ipv6的头部,判断目的地址是否与路由表项temp的目的地址相同int i=0;int j=0;UINT32 mask = temp->rmsg->masklen;int zero = 128 - mask;int mask1[4];if(mask>=96){mask1[0] = 0x1;for(i=0;i<32-zero;i++)mask1[0] =0x1+mask1[0]<<1;mask1[0] = mask1[0] <<zero;}else if(mask>=64){mask1[0] = 0xFFFFFFFF;mask1[1]=0x1;for(i=0;i<64-zero;i++)mask1[1] =0x1+mask1[1]<<1;mask1[1] = mask1[1] <<(zero-32);}else if(mask>=32){mask1[0] = 0xFFFFFFFF;mask1[1]=0xFFFFFFFF;mask1[2]= 0x1;for(i=0;i<96-zero;i++)mask1[2] =0x1+mask1[2]<<1;mask1[2] = mask1[2] <<(zero-64);}else{mask1[0] = 0xFFFFFFFF;mask1[1]=0xFFFFFFFF;mask1[2]= 0xFFFFFFFF;mask1[3]=0x1;for(i=0;i<128-zero;i++)mask1[3] =0x1+mask1[3]<<1;mask1[3] = mask1[3] <<(zero-96);}for(i=0;i<4;i++){unsigned int *desip = (unsigned int*)(pBuffer+24+j);if( (ntohl(temp->rmsg->dest.dwAddr[i])&mask1[0]) != (ntohl(*desip)&mask1[0]))break;j=j+4;}if(i==4) return true; else return false;}
- ip4和ipv6的路由匹配
- 网络知识 关于IPv6的寻址和路由方法介绍
- 自定义路由匹配和生成
- 谈移动IPv4和IPv6中的路由机制
- CentOS中更改IPV4和IPV6地址以及路由
- IPv6静态路由设置
- IPV6 路由设置
- IPv6 路由相关知识
- IPv6静态路由配置
- Linux下的IPv6地址、路由以及隧道配置
- Linux下的IPv6地址、路由以及隧道配置
- Linux下的IPv6地址、路由以及隧道配置
- IPv4嵌入到IPv6的网络中的路由(RFC6992)
- PF_NETLINK 协议 获取IPV6路由信息的一些陷阱
- Linux下的IPv6地址、路由以及隧道配置
- ipv6:linux上发生路由查找的两个位置
- 命令查看IPV6的IP,路由,邻居信息
- Linux下的IPv6地址、路由以及隧道配置
- RenameFile.cpp
- fmpp代码生成po(一)
- Linux必学的60个命令
- 除去次方数 自然数的平方数是:1 4 9 16 25 … 自然数的立方数是:1 8 27 64 125 … 自然数的4次方数是:1 16 81 256 …
- eclipse 快捷键
- ip4和ipv6的路由匹配
- textarea保存原文的空格和回车
- mmap详解
- 手把手教你把Vim改装成一个IDE编程环境(图文)
- php Ajax Post 传值
- Jboss中间件安全设计方案
- Android异步加载图像(含线程池,缓存方法)
- IE, FireFox, Opera 浏览器支持CSS实现Alpha半透明的方法
- struts2保存图片