日期:2014-05-16  浏览次数:20706 次

彻底理解Cisco/Linux/Windows的IP路由

-1.只要理解实质,名称并不重要!

很多使用Linux的网络高手在面对Cisco管理员的诸如管理距离,路由度量等词汇时,还没有PK就自觉败下阵来了。我觉得这实在太可惜了,大家本是一家,为何这么为难对方呢?如果理解了实质,如何描述就不是那么重要了。如果一个Cisco设备管理员对你说一些你不懂的名词,或者对你描述一些Cisco上有但是基于Linux的网关设备上没有的特性,而且那个人因为拥有了CCIE证书而目中无人,你要怎么面对?如果你是一个熟悉且精通Linux的人(比如我),你首先就要明白,Linux是无所不能的,只要你愿意,你下班回家就能写一个基于Netfilter的模块,实现所有的Cisco IOS的特性,如果你认为自己做不到,那么就看完本文,给自己一些信心。(注:我并不贬低以Cisco为业的哥们儿,某种意义上,我也是其中一员,当年只是因为没钱才没有考CCIE,因为太TM贵了,因为没钱,我转到了一个草根平台,不高贵,但却自由。背叛的意义在我这里成了类似“出埃及记”的东西...)

0.要读一些历史

一位IT人员,在这里谈历史,有点不妥,但是我请各位关注一下理查德.费曼,一位全才,在关注一下更猛的沃纳·卡尔·海森堡,一位历史系科班出身的顽童。读一点历史能让你知道一些常识,更能让你明白事情为什么会成现在这个样子。任何事情都是一点一滴积累的,我们现在的即便再发达的科学技术,都是从原始人发明弓箭(并不是常规认为的发明火开始的,如有疑问,私信)开始的。你可能看不起原始人,因为他们没有iPad,没有手机,动不动就咬人...但是我们确实不比他们强多少,我们有iPad,因为苹果做了它,我们有手机,因为有人卖,我们不咬人,不随意打人杀人,因为我们害怕法律的制裁...
        任何事情一开始都不是复杂的,其基础理念都是极其简单的。这是我的信条!然后逐步堆积,就成了现在这个样子,然后学子们开始背诵,虽然他们不知道为何如此,但是还是在背诵,然后考试成绩非常好,被认为是高才生,然后,突然有个机会,聚餐,或者年会,抑或相亲,突然听到了重金属摇滚乐,...他们不知所措了,...生活不能自理,...唉,总之,我们是复活的魔鬼,而撒旦就是历史!

1.有类IP和无类IP

IP之初,并无此分类,当时的概念全部是“有类”的。只是到了后来,为了解决逐步发现的问题,才引入“无类”的概念,于是就有了这个分类。不用再强调的是,任何事情一开始是都是无法发现问题和不足的,导致到了后来发现时才能弥补,因此技术上的进化都是逐步堆砌而成的,也造成了一项技术会发展进化得越来越复杂。
        当人们在实验环境下使用IP可以联网的时候,下一步的计划就是制定一套如何将这些IP地址分发给需要联网的机构的方案,这其实也是当时唯一的问题,因为实验环境中发现的问题都在实验环境中解决了,真实世界的问题只有将IP地址分配出去并且大家都使用了之后才能发现!鉴于此,美国短视且一厢情愿地将IP地址空间分成了5个类,每一个IP地址的“网络号”标示了该IP地址的归属方的规模,其中A类地址的规模最大,C类地址的规模最小,仅仅能承载254台主机。

1.1.子网划分

然而使用A类地址的机构并不是很多,A类地址的数量却是如此之多,以至于出现了地址浪费问题,于是分级就成了唯一的解决方案,毕竟地址空间已经划分好,不能推倒重来,那么只能靠分级划分子网了,于是在一个机构的所有IP地址的主机部分,还可以拉出去一部分用来作为子网网络号,这就叫基于分类IP地址的子网划分。于是一个机构中可以承载多个规模相同的子机构,注意是规模相同的!然而这仅仅是裂变的第一步...

1.1.1.问题:为何子网规模必须相同?

    子网划分规模必须相同的言外之意就是子网掩码必须一致,这成了有类IP子网划分的硬性规定,但是为何会这样呢?这就不得不从IP路由的另一个维度,即IP管理平面的路由通告上作一番解释。
            在有类年代,给出一个IP地址,你就能得到所有的信息,你能得到其主类网段,即x.0.0.0/8的A类网段,y.z.0.0/16的B类网段等,进而你就知道该IP属于什么机构...但是子网划分就是机构内部的事情了,外界并不知道你的机构内部的子网是怎么划分的,对于全局的路由通告而言,当然也不能带有任何子网的信息,也就是说,路由通告只能通告主类网段的路由,并不携带子网掩码!比如RIPv1协议就不能通告1.2.3.0/24这样的路由!那咋办捏?毕竟一个子网就是一个小的网段,在IP路由层次上来讲就是一个真正的三层网段,172.16.1.0/24和172.16.2.0/24虽然都是属于172.16.0.0/16这个主类,但是由于有了子网划分这个操作,它们毕竟不是一个网段!怎么识别并区分它们呢?好办(此时我这么说并不是意味着我就是上帝,我站在一个后来人的角度,采用一种历史的眼光来评述这件事)!就配置在接口上的IP地址的掩码来识别。由于IP地址的配置是独立的,即使现在,IP地址的自动配置也不是常见的事,自动配置大多在端系统!为了不丢失被掩码掩掉的网段,必须要求所有同网段的接口配置相同的掩码,实话说,这是上帝的要求,你可以不遵循,但是你要付出某些主机不可达的代价,,比如,某个接口A配置了172.16.1.0/24的地址,和它通过二层交换机直连的某个接口B配置了172.16.1.128/25的IP地址,那么请问,它们能达到共识吗?对于接口B而言,172.16.1.0/25的就不是同一个网段的,但是对于A而言,所有172.16.1.0/24都是一个网段的,虽然在如今的无类环境中,这完全没有问题,完全可以通过路由的方式解决可达性问题,在有类IP环境中,完全按照主类和“通过配置在接口上IP上的掩码”来识别子网,任何路由协议通告的路由都不会携带掩码,这就成了问题,因此这有类环境中,必须要求子网掩码一致!
            这让我想起了小说《猴爪》和基于史蒂芬.金的小说拍成的电影《宠物公墓》(又名《夜半鬼敲门》,有两部)。你希望得到一些逝去的补偿,但是你的代价就是更多的逝去!
            为何这么复杂?因为有类IP年代,“IP类”隐含了很多的隐性信息,信息高度的不凝聚!你可以从类中得到很多东西...这并不是上帝的方式。

1.2.无类以及VLSM

子网在每个机构被不同程度地划分着,然而仅仅如此划分子网是不够的,第一,一个机构中的子机构不一定规模相同;第二,规模比较大的机构的子机构可能还有子机构,现有的IP地址分配方案无法真实反映实际机构的组织架构关系。
        一个分类IP段(即分类IP地址的网络号标示的部分)已经被分配给了一个机构,那么如何来分配该段内的地址是机构内部的事情,为何还要遵循硬性的子网划分规定(划分为规模相同的子王,即子网掩码相同)呢?由于当时做出来的网络设备都是按照当时的“有类”标准执行的,所以其结果阻碍了人们灵活地使用IP地址!
        终于,有人大胆地要求取消地址分类,VLSM被提出。如此标准提出后,在无类环境中,子网掩码成了VL(变长)的了,不再是固定的“IP地址的类别指定的掩码+同分类地址段内相同的子网掩码”的了,于是你可以写成IP/mask的形式,IP不再按照基于第一个字节的头几位二进制值而分类,mask也不再遵循8,16,24等基于分类地址的固定划分,事实上,IP可以是任意的符合规定的IP地址,mask如果写成prefix前缀形式(指示多少连续的1)的话,可以是0到32的任意值!实际上,到此为止,裂变已经发生了!

1.3.合并成超网和CIDR

取消分类带来了超猛的效果!其中最猛烈的效果就是改变了路由器路由查找的算法,另外改变了人们解读IP地址的方式。对于路由查找算法的改变就是将路由查找进化到了“最长掩码匹配年代”,这个后面要说,对于人们解读IP地址方式的改变,则是在无类环境中,一个块IP地址段不再和唯一的机构关联了,它包含的所有IP地址原则上可以属于任何人,任何机构,可以处在任何物理位置。当然,这也带来了不少的问题,实际上是将IP地址的分配任务交给了实施人员,一旦出现地址空间碎片,将会导致无法汇聚,从而最终导致路由表的条目增加。
        有点跑题!正说着无类的好呢,又扯到它的缺点了...言归正传。无类编址的提出实际上最开始是为了解决机构内部分配地址的问题的,然而它事实上却带来了一种副作用,那就是