EIGRP度量值的计算与报文分析大家知道在默认情况:EIGRP的度理值=带宽+延时这里的带宽=10000000/到目标网络链路上最低的带宽*256注:当10000000/到目标网络链路上最低的带宽的值是小数的话舍去小数部份取整数再乘以256延时=数据传出接口延时总和/10*256以上就是EIGRP计算去往目的网络开销度量值的值计算方法有了以上计算方法我们来计算一下R1去往3.0.0.0和5.0.0.0的度量值是多少呢?从拓朴图得知R1到3.0.0.0这条路上的最低带宽是10000Kbit我们先算带宽=10000000/10000*256=256000延时=延时总和/10*256=(1000+100+5000)/10*256=156160注:Loopback口也要加入EIGRP计算我们一定要搞明白数据传出接口延时总和此例数据传出接口分别是R1的E0/0R2的F0/0R3的Loopback度量值=256000+156160=412160接下来我们来看R1去5.0.0.0该怎么计算,同理啊我们看去往目的的最低带宽是多少?肯定是串行链路的1544Kbit吧哪么带宽=10000000/1544=6476.683937这里我们取整数6476*256=1657856然后我们确定一下R1到5.0.0.0的数据传出接口分别是R1的E0/0R2的F0/0R3的S1/0R4的f0/0R5的Loopback延时=(1000+100+20000+100+5000)/10*256=670720度量值=1657856+670720=2328576上面两个例子都是把回环接口的计算参与了进来我们计算得正确与否呢我们再算一下R1到45.0.0.0的度量值后我们查看路由表验证一下我们的计算是否正确。同样的法则:R1去往45.0.0.0的最低带宽还是1544Kbit前面已算好还是1657856确定数据传出接口:R1的E0/0R2的F0/0R3的S1/0R4的f0/0延时=(1000+100+20000+100)/10*256=542720哪么从R1去往45.0.0.0的度量值=1657856+542720=2200576大家可以自已去算一算R1到各个网段的度理值是多少在这里我们就算这三个做为代表。好现在我们来查看一下路由表:你们看对不对呀是对的是吧一点点误差都没有的吧好了至此EIGRP度理值的计算给大家讲完了下面我想给大家提几个问题大家思考一下想一下:看拓朴R1做为一台机器它是怎么就能知道在去往5.0.0.0的路上有一条1544Kbit串行链路并且是到目的路上的最低带宽的呢?它是通过什么报文传递的呢?还有这个R5怎么通过中间的这些路由器一步一步告诉给R1我有5.0.0.0的呢度量值又是多大呢?你们想呀他们是机器只知道自个儿和邻居啊这些路由的信息是怎么一步步的传递的呢?下面呀我们像拓朴图中标的步骤来进行包的抓取,主要来研究一下5.0.0.0是怎么传递给R1,依据路由传递的方向我们应该在各路由器的右边这个口上抓包除R5以外。当报文抓取完毕后首先我们应该看R4F0/0收到的含有关于5.0.0.0的更新报文中说了些什么,它收到了来自R5传过来含有5.0.0.0的更新里面讲了延时是128000带宽是256我们想一下这两个值是怎么来的?我们这样想5.0.0.0通过R5的loopback进入R5再由R5的F0/0通告给R4的我们一定要把这话给理解好了才行的不然后面的也就无法进行下去。路由传播考虑的是“入”这话也要明白大家经过NA的学习不难理解吧这里就不多说了R5的回环口Lo0:BW8000000KbitDLY:5000Us所以带宽=10000000/8000000的值取整数后*256=1*256=256延时=5000/10*256=128000它就是这么得来的。哪么是不是R4到5.0.0.0的距离就应该是128000+256=128256呢我们抓的包很明确的告诉我们R4到5.0.0.0就是128256呀在这里聪明的你应该自已根据前面学到的知识自已算一下到底R4去往5.0.0.0的度理值是多少。继续往后看我们来看一下站在R3上看R4传递过来的5.0.0.0好吧这下我们来计算一下R4到5.0.0.0的度量值是多少我们先还一样确认数据的传出接口R4的f0/0R5的Loopback是吧延时=(100+5000)/10*256=130560R4到5.0.0.0的最低带宽是100000Kbit哪么带宽=10000000/100000*256=25600度量值=25600+130560=156160我们再来看一下R4的路由表:发现什么问题没有?仔细的想啊是不是会认为R4到5.0.0.0正确的度量值在R3上才能抓得到在R4是抓不到的对吧这是我们实实在在看到的其实这才是正常的这是为什么呢?其实认真一想啊就能想得通因为我们在R4的F0/0抓的包而抓的这个包还没有进入R4或者说刚开始进入。从这个口抓到的包还没能体现5.0.0.0这个条目在我R4本地的入接口上所应该影响EIGRP计算的值就被抓包工具捕获了。当R4再把这个5.0.0.0传递给R3时候我们可以确认这个条目已经是重新被R4计算过了之后才发往R3的R3上看到的这个之和就是R4到5.0.0.0的度量值即156160。在这个过程中不知大家还发现了其它什么现像没有?也就是说R4接收通告的带宽是256,然而经过R4之后呀就被R4修改成了25600再传递出去;R4接收的延时是128000,然而经过R4之后呀就被R4修改成了130560再传递出去了。还有就是我们在R4F0/0抓到的R5传过来的5.5.5.0的更新包里带的度理值并不是R4到5.0.0.0的度量值前面我们以经看到了我们把这些个现像先给大家说在这里。我又该发问了想想为什么R4向R3通告带宽的时候是25600为什么是25600而不是1657856的呢?你们还记得住1657856和25600是什么吗?1657856是10000000/1544=6476.683937这里我们取整数6476*256=1657856这么来的R4到R3是串行链路带宽是1544照理来说它向R3传递的时候应该把关于5.0.0.0中的256修改成1657856再传给R3是吧因为R4知道发往R3要通过自已的串口发出去啊,可是R4并不是这样做,它是怎么做的呢?R4从自身的F0/0收到的5.0.0.0这个更新包,哪么它在转发这条路由时它就将我从什么口收到的这条路由更新,哪么我在转发的时候就把我接收到5.0.0.0的这个口的最低带宽来计算一下我们看R4F0/0的带宽是100000Kbit10000000/100000*256=25600R4从R5收到的5.0.0.0里的值是256这个256是怎么来的前面我们已经讲过了是吧R4通过自身比较计算好了的公式里面的“带宽”发现25600比256要大哪么我就将把256修改成25600后发往R3。如果比较出来是要小或者相等哪么就不变发往自已的邻居R3说完带宽我们又来看延时R4收到R5过来的5.0.0.0项里的延时是128000前面也给你们算过了这个是怎么算的它就是5.0.0.0进入loopback口而这个口的延时是50005000/10*256=128000它就是这么来的当R4收到它经过R4的计算就将128000变成了130560传给R3为什么会变成130560我们来减一下130560-128000=2560嘿嘿这个值特殊吧这下我们来看其实它是和上面一样考虑的是进入R4的F0/0口的这个的延时F0/0DLY:100Us100/10*256=2560这下我们已经可以得也结论了:1回环口会参与EIGRP的度理值计算2延时值的传递是叠加和的方式是将哪个条目从我的哪个口进入哪么我就将我这个口的“延时”加上我收到的延时的和传递出去3关于带宽前面很明白的告诉给大家了还是一样的只不过它有一个比较的过程看谁大嘛这样的一个工作方式不就可以解答前面的问题了吗?好了通过5.0.0.0到达R3的这么一个过程我们得到了以上的结论,下面我们就来再次验证我们的这个结果我们又来看r2的F0/0抓到的包来看下R3怎么给R2说的5.0.0.0这是R3收到的现在R3再次修改了延时和带宽发给了R2这些值你们这个时候应当该算得出来得吧R3接收口的延时20000/10*256=512000然后把它叠加到130560就是51200+130560=642560对吧哪么带宽呢我收到的5.0.0.0是25600吧从我的S1/0进入的这下我算下我的这个口的带宽带宽=10000000/1544=6476.683937这里我们取整数6476*256=1657856好R3开始比较了谁大用谁嘛最后R3将5.0.0.0的延时改为642560带宽改为1657856发给了R2好了讲完了上面的我们先不抓给你们看请你们自已算一下R2发给R1的5.0.0.0项中的延时和带宽应当是多大算出来后我们再来看是不是和我们抓取的内容一致好吧我也来算你们也来算首先我们知道R2从它的F0/0口收到的关于5.0.0.0里的延时是642560带宽是1657856先放这里等会儿我们会用到对了顺便说一句接口的带宽和延时是有默认值的有规定这个没什么好讲的就是人们的规定嘛具体可以通过Showint查看得到R2应该知道长在自已身上的F0/0口的带宽和延时吧分别是BW:100000KbitDLY:100Us延时=100/10*256=2560对吧R2将这个值和前面收到的642560叠加得到2560+642560=645120带宽=10000000/100000*256=25600R2将这个值和我前面收到的1657856比较谁大取谁嘛OK我认为抓的包会显示延时是645120带宽还是1657856将这个值传递给R1的好我们来打开抓的包看一下:对的吧是对的吧你们算对了吗再想一想我们在R1的e0/0口抓的这个度量值(645120+1657856=2302976)是不是就R1到5.0.0.0的度量值呢我们前面算过的吧R1到5.0.0.0的度量值是2328576呀这是为什么呢也是我们前面讲过的吧因为这个包还没有进入或者刚进入或者没有完全进入R1就被我们抓到这个包了对吧不管怎么表达反正就是R1还没有来得及把自身收到5.0.0.0的这个接口的相关项加入到EIGRP度量值计算中来是吧哪么我们帮R1计算一下好吗R1自身收到的5.0.0.0的这个接口是E0/0DLY:1000UsBW:10000Kbit还是用上面的方法R1收到R2通告过来5.0.0.0里面的延时是645120带宽是1657856好我们来看R1入接口的带宽是10000000/10000*256=25600R1会比较吧所以这个值还是会取1657856延时=1000/10*256=25600R1通过自身的计算把25600+前面通告过来的645120=670720然后把670720+1657856=2328576这就是R1到5.0.0.0的度量值前面我们也看到了路由表就是这个值是吧从上面我们看到了5.0.0.0是怎么一步步传递到R1的也看到了到目标网络最低带宽怎么传递过来的吧好到此我们全部的分析就告一段落希望这个笔记能加深你们对EIGRP工作原理及过程的理解。由于本人水平的原因不对之处欢迎批评指证和探讨研究。后面我还会对复杂拓朴情况下EIGRP的工作过程再次梳理。你们的师兄绵阳合力2013.3.12