VLSM (可变长子网掩码)
在CIDR以前,每个主类网络号只可以分配给一个组织使用,这个组织利用子网化技术将其划分为多个子网,但限制是所有子网必须是一致的掩码,也就是说只能划分一次子网,即FLSM。
VLSM是FLSM的增强版,可以实现“子网的子网化”,它使得同一网络前缀可以有不同的子网掩码,适用于无类网络环境,目前VLSM+CIDR是路由技术的主流。
但是VLSM只是提高了客户对地址块的使用效率,却没能解决IANA分配地址的低效,很多组织无奈的分配到了多个C类地址,而不是一个单独的B类地址,而显而易见的后者更易于使用和管理。
CIDR (无类别域间路由)
针对上述的问题,CIDR应运而生,CIDR是以'' Bit ''为单位决定IP地址的网路位和主机位,不再受原来的八位组限制。
从后向前归位,CIDR能够聚合汇总路由信息,从而缩小路由表,缓解硬件压力,这对BGP来讲是很有帮助的。
而从前向后的借位,CIDR使得子网不再只有本地意义,分配也更为灵活,比如,131.108.0.0/16 可以分成 131.108.0.0/18 ~ 131.108.192.0/18 四块地址,独立的分配给四个组织,这在一定程度上缓解了IPv4地址的紧缺。
路由表查找顺序 (匹配 = 是否一致)
1.从IP数据包中提取目的IP地址。
2.直连网段依次去匹配,即用每个直连网段的子网掩码和目的网络进行AND运算,再与该直连网段的网络前缀进行匹配。
3.如果没有直连匹配的项,查看是否有目的地址的主机路由存在。
4.如果没有主机路由,则针对路由表中的其他路由条目,逐条进行匹配。
5.如果依然没有匹配的项,就看是否有默认路由,有的话通过默认路由发出去,如果连默认路由都没有,丢弃该数据包,返回ICMP信息指明该目的网络不可达。
命令 ip classless 对路由表查找有影响,如果关闭了(默认是开启的),那么就不会用精确掩码去和目的地址去匹配(比如我写10.1.1.0 255.255.255.0),而是用这个该网络的主网络位去匹配,即255.0.0.0,这样只要有别的子网在,就不会通过默认路由转发数据。
命令 ip subnet-zero 在路由器中是默认启用的,以支持全0的子网,比如172.16.0.0/24,如果关闭的话,在给接口配置地址的时候像 ip address 172.16.0.1 255.255.255.0 这样就是非法的了。
超网 VS 聚合
关于“聚合”和“超网”,大家都说这两个是一个概念,我觉得还是有些区别的。
“聚合”的概念等同于路由汇总,目的是为了减小路由负载,汇总的网络不必连续,但网络前缀必须在数字上相似,确保用唯一的网络前缀向其它网络广播,且这些网络在地域上足够相近,从而能从同一个ISP连接到Internet,举例来讲,将192.168.64.0/24和192.168.65.0/24汇总成192.168.64.0/23通告出去。
“超网”的概念先于CIDR 15个月提出,概念是将数个相邻的网络地址合并成一个单独的更大的网络,目的在于省去在这些网络间路由的麻烦,规则是这些网络地址数字上必须相邻,且必须连在同一个接口上,如果不是的话,这些网络间的流量就会通过Router来路由,超网也就没有意义了,举例来讲,从192.24.0.0/24到192.31.255.0/24有2^11个C类网络,可以用192.24.0.0/13来表示。
简单来说,超网是将小网络合成大网络,针对网络本身,聚合是对现有网络形成的路由条目进行汇总,针对的是路由表。
PS 3: 还有个小技巧,比如192.168.1.129/27 和 192.168.1.65/27一看就不在同一网段,129-65=64,/27掩码每个子网主机数为2^(32-27) = 32, 64>32,所以肯定不在同一子网。
策略路由
策略路由的优先级高于路由表,即使路由表中没有相对应的路由条目,单纯在策略路由也能转发正常数据包。具体是用route-map来实现,步骤如下:
1)定义好对象 即在写route-map的时候需要match的东东,比较常见的是地址,用ACL来定义,注意标准ACL只能针对源来做策略,而扩展ACL可以针对源,目的网络或者具体的上层应用。
(config)# access-list 1 permit 1.1.1.0 0.0.0.255
(config)# access-list 101 permit tcp 1.1.5.0 0.0.0.255 any eq telnet
PS:在我们做实验验证时,可以通过ip telnet source-interface loop 0 来改变自己telnet时的源地址为Loopbak 0
2)写route-map,基本的组成元素就是match和set,即针对什么东东以及执行的动作是什么,下面是一个具体例子,。
(config)# route-map to-r1 // 定义一个route-map,名字要可读性强
(config-route-map)# match ip add 1 // 这里的1就是指的access-list 1 (config-route-map)# match length 0 200 // 针对的源地址以及数据包大小,二者需同时匹配 (config-route-map)# set ip next-hop 23.1.1.3 //定义好要策略的具体动作,这里是改变下一跳
这里最后的一条set命令可以有两种选择:
set ip next-hop 23.1.1.3 (对端IP) set default interface fa0/0 (本地出口) 不过这两条命令是有区别的,前者直接应用策略路由,而后者先检查路由表,如果没有明细路由对应再用策略路由。
需要注意的是,如果default interface为以太口,由于我们并未告知路由器下一跳的IP地址,路由器也就没有办法通过ARP解析出Mac,会出现封装失败的情况,不过在转发失败之后会进行ARP请求。
这样的命令可能会让我们联想到静态路由,不过区别在于静态路由如果指定以太口为本地出口,比如 ip route 0.0.0.0 0.0.0.0 fa0/0,通过show arp 可以看到这条命令在敲下去以后会添加相应的ARP表项,也就是会发起ARP请求。
3)应用在接口,这里没有in 和out 的概念,因为肯定是该接口收到这个数据包后进行匹配然后按策略路由转发。
(config-if)# ip policy route-map to-r1
PS:本路由器产生的数据包默认是不会基于策略路由进行转发,需要用命令来启用:
(config)# ip local policy route-map name
本文出自 “ Steven.Q的学习笔记” 博客,谢绝转载!
本文出自 51CTO.COM技术博客
|