前段时间写的东西,要么一下子内容太多,要么一个实验几十张配图,实在是不适合茶余饭后观看,得花点时间来鼓捣一下,所以我决定后面做一些简单的实验好了。

关于ospf其实是有很多内容可以研究的,比如FA地址和LSA的过滤,甚至邻居建立过程也是可以从每个包进行分析的,这些原SK部落--ospf小组已经出了很多帖子了,大家如果想看,可以去bbs.sovand.com进行搜索。

那么今天我们简单说一下ospf的虚链路的建立。拓扑图如下:


我们可以看到,R1学习补刀区域2的条目(如下图),所以我们需要做虚链路。

大家都知道虚链路使用透传区域的两个边界路由器的RID建立,所以先查看R2和R4的RID是多少,这里由于我在配置ospf前,设置了环回口,所以分别为2.2.2.2和4.4.4.4。

接下来使用对方RID建立虚链路邻居,这里没有使用认证。

下图我们很明显可以看到,R2和R4之间开始互相发送hello包建立邻居关系通过虚链路,也可以看到R2将hello包单播发向34.34.34.4,且是区域0的hello包,并且也能看到R2收到了R4发来的hello包是从34.4发来,收到R4发来的hello包之后,立刻回复了一个hello包,直译是直接立即的hello包,那这个其实在正常建立ospf邻居关系的时候也能抓包看到,就是说当你收到邻居来的hello包,你会回一个单播hello包,不管邻居发来的是组播还是单播,感兴趣的可以抓包看一下。

R4上看到的现象和R2的如出一辙,如下图。

那其实我要表明的意思就是说,虚链路的建立使用RID连建立,但是并不是使用RID这个地址来建立的(一般来说RID都是一个路由器上有的地址),因为选出的RID的接口,比如说环回口,可能没有通告进ospf,或者通告进了区域2,那样根本没法通,因为没有路由,甚至我们RID有可能只是你随意配置的,并不是一个接口地址。

那我们的ospf虚链路怎么建立的呢,我们的建立虚链路的两台路由器都在透传区域内,比如我们这个环境的区域1,我们可以在区域的LSDB内看到他们的一类LSA,那他们也能互相看到,他们可以通过1、2类LSA计算出区域内路由,自然也知道到达对方,需要使用什么地址。

如下图的一类LSA的明细内容里面,很容易找到接口地址,加上这个区域内的其他1、2类LSA也能算出路由,自然他们能知道往什么地址发送单播hello包,也知道往哪个下一跳发送。

接下来我们看看,如果我把路由过滤掉能否继续建立虚链路的邻居关系,当然一般情况下,我们没法过滤同区域内的1、2类LSA(看清楚是说一般情况下),那我们只能用分发列表的in方向,来使得LSDB同步之后,计算路由表时,把某些条目不加进路由表,比如下图的配置中,我将R4去往23.0网段的条目过滤了。

然后我们就可以看到,虽然这边提示虚链路up,但是邻接状态是init,而且提示说hello包被抑制了,因为我们的数据包转发最终还是要看路由表,路由表内没有路由,所以hello包发不出去。

下面第一张图很明显可以看到,我们也收到了邻居的hello包,也试图发送直接hello回去;下二图就能看到,说我们的直接hello包被限制了,还能检测出来很牛叉,这个是在GNS3做出来的现象,在WEB-IOU上,可能看到现象内容大意是:我已经给它发了两次hello了,它发过来的hello包邻居字段还是没老子,看不起我么,那我也不发了,也就是说在WEB-IOU里,R4就发几个hello包就不发了,但是GNS3的现象是一直在尝试发送。

这个实验也没啥意思,就是因为在TS的排错中遇到了,觉得现象很神器,做出来供大家赏析。

接下来,再提一个有趣的命令,就是在配置ospf时,会自动生成一条命令,log-adjacency-changes,这条命令是说把邻居关系的变化保存成日志,然后我们又默认会把日志小夕从console线路显示出来,所以我们当ospf邻居up或者down的时候出现日志,当然有的时候也会出现报错。

那我们可以在log-adjacency-changes后加上一个参数,details,就是说你显示的详细点撒,把邻居关系的每个步骤的变化都日志好了,所以通过这个参数,我们可以很轻松的看到ospf的7个状态机,比debug ip ospf events看到的要精准和简略多了。

   好,这个就到此结束,谢谢观看,有问题弹窗cy,如果是在曹叔博客看到,可以点击右上角,QQ联系曹叔。