前面我们学习了一类LSA,一类LSA描述了接口连接的拓扑信息和网段信息,在区域内进行泛洪。在Router LSA中有三种链路类型:拓扑信息P2P和TransNet类型,StubNet网段信息。然而在TransNet中只有DR的接口地址和宣告本LSA的接口地址,是没有掩码信息的,就是说通过TransNet能够知道当前路由器连接的DR,但是不够详细的。这时候就出现了二类LSA-Network LSA。
Network LSA(2类LSA) :由DR产生,描述本网段的链路状态,在所属的区域内传播。
Network LSA 记录了该网段内所有与DR建立了邻接关系的OSPF路由器,同时携带了该网段的网络掩码。
相关字段描述:
通过Link State ID+Network Mask可以指定当前网段的OSPF连接的信息,加上前面一类LSA的接口拓扑信息可以清楚地反应网络拓扑与网段信息。
小结:同一区域的OSPF路由器拥有完全一致的LSDB。在只有一个区域的情况下,区域内部主要存在两种类型的LSA,即Router-LSA和Network-LSA。每台路由器都会产生Router-LSA,描述了路由器的直连接口信息。在MA网络中,DR会产生Network-LSA来描述接入该MA网络的所有路由器的Router-ID(其中包括DR自身),以及这个网络的掩码。
因为这个过程稍微复杂,所以如果不能理解只能慢慢消化了。
1、OSPF是通过SPF算法依据LSA进行路由计算从而产生最优路由的。
2、路由器将自己作为最短路径树的树根,根据Router-LSA和Network-LSA中的拓扑信息,依次将Cost值最小的路由器添加到SPF树中。路由器以Router ID或者DR标识。
3、广播网络中DR和其所连接路由器的Cost值为0。
4、SPF树中只有单向的最短路径,保证了OSPF区域内路由计算不会出现环路。
5、将Router-LSA、Network-LSA中的路由信息以叶子节点形式附加在对应的OSPF路由器上,计算最优路由。
6、已经出现的路由信息不会再添加到SPF树干上。
因为每个路由器是独立计算最优路径的,这里以R1为例,其它的同理。
先查询自己产生学习到的LSA,然后P-2-P和TransNet加入列表,而StubNet属于网段信息,后面再添加到树上进行计算。根/父节点是自己,然后根据LSA信息将开销和邻居信息分别加入。
然后查询二类LSA,这里可以知道DR的地址就是前面的10.0.12.2,需要注意的是DR可以是一个逻辑的表示不一定是物理路由器,然后从DR到其连接的Cost为0。
然后再通过查看10.0.2.2的一类LSA,排除掉stubnet后根据LSA构建。然后发现10.0.2.2连接了一个transnet网络,构建spf树。
查看二类LSA,将里面的连接成员加入候选列表,这里的开销是要叠加的。
分别查看R3和R5的LSA信息。
发现R5与R4是P-2-P类型的连接,与前面R2的重复了,选择最优的保留。
至此拓扑计算完成,然后把stubnet网段信息进行计算。
总结:Network-LSA(二类LSA)描述的是DR及其连接路由器的信息和掩码信息,通过一类和二类LSA能够构建区域内的SPF树。SPF计算是依据拓扑信息(p-2-p和transnet)进行构建SPF树,构建完成后将stubnet路由信息进行计算从而形成自己的最优路由。每个路由器都独立进行SPF计算。Router-LSA和Network-LSA都只在区域内进行泛洪,因此可以归纳为单个区域内的路由计算。
如果对文章感兴趣欢迎微信搜索公众号:不喜欢热闹的孩子
本文由 mdnice 多平台发布
文章浏览阅读1.8k次,点赞4次,收藏6次。python简易爬虫v1.0作者:William Ma (the_CoderWM)进阶python的首秀,大部分童鞋肯定是做个简单的爬虫吧,众所周知,爬虫需要各种各样的第三方库,例如scrapy, bs4, requests, urllib3等等。此处,我们先从最简单的爬虫开始。首先,我们需要安装两个第三方库:requests和bs4。在cmd中输入以下代码:pip install requestspip install bs4等安装成功后,就可以进入pycharm来写爬虫了。爬
文章浏览阅读2.6k次。解决方法:解决方法可以去github重新下载一个pyflakes.vim。执行如下命令git clone --recursive git://github.com/kevinw/pyflakes-vim.git然后进入git克降目录,./pyflakes-vim/ftplugin,通过如下命令将python目录下的所有文件复制到~/.vim/ftplugin目录下即可。cp -R ...._freetorn.vim
文章浏览阅读210次,点赞7次,收藏3次。本文简述了hello.c源程序的预处理、编译、汇编、链接和运行的主要过程,以及hello程序的进程管理、存储管理与I/O管理,通过hello.c这一程序周期的描述,对程序的编译、加载、运行有了初步的了解。_hit csapp
文章浏览阅读1w次,点赞2次,收藏27次。来源:机器人小妹 很多时候企业拥有重复,乏味且困难的工作流程,这些流程往往会减慢生产速度并增加运营成本。为了降低生产成本,企业别无选择,只能自动化某些功能以降低生产成本。 通过数字化..._人工智能平台
文章浏览阅读2.2k次。热加载能够在每次保存修改的代码后自动刷新 electron 应用界面,而不必每次去手动操作重新运行,这极大的提升了开发效率。安装 electron 热加载插件热加载虽然很方便,但是不是每个 electron 项目必须的,所以想要舒服的开发 electron 就只能给 electron 项目单独的安装热加载插件[electron-reloader]:// 在项目的根目录下安装 electron-reloader,国内建议使用 cnpm 代替 npmnpm install electron-relo._electron-reloader
文章浏览阅读942次。在11.0 进行定制化开发,会根据需要去掉recovery模式的一些选项 就是在device.cpp去掉一些选项就可以了。_android recovery 删除 部分菜单
文章浏览阅读2.2k次,点赞2次,收藏6次。继续上次的echart博客,由于省会流向图是从echart画廊中直接取来的。所以直接上代码<!DOCTYPE html><html><head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /&_java+echart地图+物流跟踪
文章浏览阅读1.4k次。一、OSD模块简介1.1 消息封装:在OSD上发送和接收信息。cluster_messenger -与其它OSDs和monitors沟通client_messenger -与客户端沟通1.2 消息调度:Dispatcher类,主要负责消息分类1.3 工作队列:1.3.1 OpWQ: 处理ops(从客户端)和sub ops(从其他的OSD)。运行在op_tp线程池。1...._ceph 发送数据到其他副本的源码
文章浏览阅读7.9k次,点赞3次,收藏22次。一 定义这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO 算法并不能保证这些页面不被淘汰。这里,我_进程调度fifo算法代码
文章浏览阅读133次。rownum是oracle才有的写法,rownum在oracle中可以用于取第一条数据,或者批量写数据时限定批量写的数量等mysql取第一条数据写法SELECT * FROM t order by id LIMIT 1;oracle取第一条数据写法SELECT * FROM t where rownum =1 order by id;ok,上面是mysql和oracle取第一条数据的写法对比,不过..._mysql 替换@rownum的写法
文章浏览阅读790次,点赞3次,收藏4次。官网下载下载链接:http://www.eclipse.org/downloads/点击Download下载完成后双击运行我选择第2个,看自己需要(我选择企业级应用,如果只是单纯学习java选第一个就行)进入下一步后选择jre和安装路径修改jvm/jre的时候也可以选择本地的(点后面的文件夹进去),但是我们没有11版本的,所以还是用他的吧选择接受安装中安装过程中如果有其他界面弹出就点accept就行..._ecjelm
文章浏览阅读245次。原文链接:https://linux.cn/article-7801-1.htmlifconfigping <IP地址>:发送ICMP echo消息到某个主机traceroute <IP地址>:用于跟踪IP包的路由路由:netstat -r: 打印路由表route add :添加静态路由路径routed:控制动态路由的BSD守护程序。运行RIP路由协议gat..._ifconfig 删除vlan