文章目录
开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。目前针对IPv4协议使用的是OSPF Version 2(RFC2328);OSPF作为基于链路状态的协议,OSPF具有以下优点:
• OSPF采用组播形式收发报文,这样可以减少对其它不运行OSPF路由器的影响。
• OSPF支持无类型域间选路(CIDR)。
• OSPF支持对等价路由进行负载分担。
• OSPF支持报文认证。
由于OSPF具有以上优势,使得OSPF作为优秀的内部网关协议被快速接收并广泛使用。
掌握OSPF的基本配置命令
掌握如何查看OSPF的运行状态
掌握如何通过cost控制OSPF的选路
掌握OSPF发布默认路由的方法
掌握OSPF认证配置方法
拓扑图就是按照前面第一个实验的图,可按照前文配置物理接口和LoopBack接口的IP地址。
或者 使用
undo ip route-static all命令删除前实验配置的静态路由。

设备命名、物理及逻辑接口的ip地址略去。
也可以在第一个实验基础上 使用
undo ip route-static all命令可以删除前文第一个实验配置的静态路由。这样可以减小工作量。
# 查看AR1的路由表

可以看出是没有Loopback接口的相关路由,即loopback接口之间是ping不通的。
# ping Loopback接口

# 创建OSPF进程
[AR1]ospf 1 router-id 10.0.1.1 # 创建进程,并将逻辑接口设为设备id号
创建OSPF进程是配置与OSPF协议有关参数的首要步骤。
OSPF支持多进程,在同一台设备上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立。不同OSPF进程之间的路由交互相当于不同路由协议之间的路由交互。可以在创建OSPF进程时指定进程号,若不指定,默认进程号为“1”。
router-id:用于手工指定设备的ID号,一般设为逻辑接口地址。如果没有通过命令指定ID号,系统会从当前接口的IP地址中自动选取一个作为设备的ID号。
# 创建OSPF区域并使能相应的接口
[AR1-ospf-1]area 0
area:命令用来创建OSPF区域,并进入OSPF区域视图。
[AR1-ospf-1-area-0.0.0.0]network 10.0.12.1 0.0.0.255
[AR1-ospf-1-area-0.0.0.0]network 10.0.13.1 0.0.0.255
[AR1-ospf-1-area-0.0.0.0]network 10.0.1.1 0.0.0.0 # Loopback逻辑接口
此时三个接口都被使能,同时属于区域0
network network-address wildcard-mask:用来指定运行OSPF协议的接口和接口所属的区域。
network-address为接口所在的网段地址。
wildcard-mask:通用符掩码、反掩码。
满足下面两个条件,OSPF协议才能在接口上运行:
接口的IP地址掩码长度≥network命令中的掩码长度。OSPF使用反掩码,例如0.0.0.255表示掩码长度24位。
接口的IP地址必须在network命令指定的网段范围之内。
[AR2]ospf router-id 10.0.1.2 # 默认进程1
[AR2-ospf-1]area 0
[AR2-ospf-1-area-0.0.0.0]network 10.0.12.2 0.0.0.255
[AR2-ospf-1-area-0.0.0.0]network 10.0.23.2 0.0.0.255
[AR2-ospf-1-area-0.0.0.0]network 10.0.1.2 0.0.0.0
当network命令配置的wildcard-mask为全0时,如果接口的IP地址与network-address配置的IP地址相同,则此接口也会运行OSPF协议。
[AR3]ospf 1 router-id 10.0.1.3
[AR3-ospf-1]area 0
[AR3-ospf-1-area-0.0.0.0]network 10.0.13.3 0.0.0.255
[AR3-ospf-1-area-0.0.0.0]network 10.0.23.3 0.0.0.255
[AR3-ospf-1-area-0.0.0.0]network 10.0.1.3 0.0.0.0
# 查看OSPF邻居
[AR1]display ospf peer
OSPF Process 1 with Router ID 10.0.1.1
Neighbors
Area 0.0.0.0 interface 10.0.12.1(GigabitEthernet0/0/0)'s neighbors
Router ID: 10.0.1.2 Address: 10.0.12.2
State: Full Mode:Nbr is Master Priority: 1
DR: 10.0.12.2 BDR: 10.0.12.1 MTU: 0
Dead timer due in 39 sec
Retrans timer interval: 0
Neighbor is up for 00:02:19
Authentication Sequence: [ 0 ]
Neighbors
Area 0.0.0.0 interface 10.0.13.1(GigabitEthernet0/0/1)'s neighbors
Router ID: 10.0.1.3 Address: 10.0.13.3
State: Full Mode:Nbr is Master Priority: 1
DR: 10.0.13.3 BDR: 10.0.13.1 MTU: 0
Dead timer due in 34 sec
Retrans timer interval: 5
Neighbor is up for 00:01:47
Authentication Sequence: [ 0 ]
display ospf peer:命令用来显示OSPF中各区域邻居的信息。包括邻居所属的区域、邻居Router ID、邻居状态、DR和BDR路由器等信息。
- OSPF Process 1 with Router ID 1.1.1.1∶ 本地OSPF进程号为1与本端OSPF Router lD为1.1.1.1
- Router ID:邻居OSPF路由器ID
- Address:邻居接口地址
- GR State:使能OSPF GR功能后显示GR的状态(GR为优化功能),默认为Normal
- State:邻居状态,正常情况下LSDB同步完成之后,稳定停留状态为Full
- Mode:用于标识本台设备在链路状态信息交互过程中的角色是Master还是Slave
- Priority:用于标识邻居路由器的优先级(该优先级用于后续DR角色选举)
- DR:指定路由器
- BDR:备份指定路由器
- MTU:邻居接口的MTU值
- Retrans timer interval:重传LSA的时间间隔,单位为秒
- Authentication Sequence:认证序列号
# 查看IP路由表中由OSPF学习到的路由
[AR1]display ip routing-table protocol ospf
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : OSPF
Destinations : 3 Routes : 4
OSPF routing table status : <Active>
Destinations : 3 Routes : 4
Destination/Mask Proto Pre Cost Flags NextHop Interface
10.0.1.2/32 OSPF 10 1 D 10.0.12.2 GigabitEthernet0/0/0
10.0.1.3/32 OSPF 10 1 D 10.0.13.3 GigabitEthernet0/0/1
10.0.23.0/24 OSPF 10 2 D 10.0.12.2 GigabitEthernet0/0/0
OSPF 10 2 D 10.0.13.3 GigabitEthernet0/0/1
OSPF routing table status : <Inactive>
Destinations : 0 Routes : 0
OSPF认证分为两种:
区域认证:在OSPF区域视图下配置,对本区域的所有接口下的报文进行认证。
接口认证:在接口视图下配置,对本接口的所有报文进行认证。
# 在R1上配置接口认证
[AR1]interface GigabitEthernet 0/0/0 # 与AR2的接口
[AR1- GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher huawei # 配置密码为 huawei,且用加密的方式
[AR1]interface GigabitEthernet 0/0/1 # 与AR3的接口
[AR1- GigabitEthernet0/0/1]ospf authentication-mode md5 1 cipher huawei # 配置密码为 huawei,且用加密的方式
[AR1-GigabitEthernet0/0/1]display this
[V200R003C00]
#
interface GigabitEthernet0/0/1
ip address 10.0.13.1 255.255.255.0
ospf authentication-mode md5 1 cipher %$%$>V0V$=pU#M(N8f&=lKS>s]MA%$%$ # 加密后的密码
#
return
由于cipher是密文口令类型,所以查看配置时以密文方式显示口令。
# 再次查看当前的邻居状态
[AR1]display ospf peer brief
OSPF Process 1 with Router ID 10.0.1.1
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
----------------------------------------------------------------------------
由于其他路由器还未配置认证,所以认证不通过,无邻居。
配置认证的密码要相同。
# 配置R2上的接口认证
[AR2]interface GigabitEthernet 0/0/0 # 与AR1的接口
[AR2- GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher huawei # 配置密码为 huawei,且用加密的方式
[AR2]interface GigabitEthernet 0/0/1 # 与AR3的接口
[AR2- GigabitEthernet0/0/1]ospf authentication-mode md5 1 cipher huawei # 配置密码为 huawei,且用加密的方式
[AR2-GigabitEthernet0/0/1]display this
[V200R003C00]
#
interface GigabitEthernet0/0/1
ip address 10.0.23.2 255.255.255.0
ospf authentication-mode md5 1 cipher %$%$x.y0~cMjg*HujNVEtZc3saW1%$%$
#
return
# 查看R2的邻居状态
[AR2]display ospf peer brief
OSPF Process 1 with Router ID 10.0.1.2
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/0 10.0.1.1 Full
----------------------------------------------------------------------------
此时R2已经可以和R1建立起正常的邻居关系。
# 在R3上配置区域认证
[AR3]ospf # 默认进程 1,已创建好则进入。
[AR3-ospf-1]area 0
[AR3-ospf-1-area-0.0.0.0]authentication-mode md5 1 cipher huawei
# 查看R3上的邻居状态
[AR3]display ospf peer brief
OSPF Process 1 with Router ID 10.0.1.3
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/0 10.0.1.1 Full
0.0.0.0 GigabitEthernet0/0/1 10.0.1.2 Full
----------------------------------------------------------------------------
此时R3已经和R1与R2建立邻接关系。
说明OSPF接口认证与区域认证产生的效果都是在设备的OSPF接口上实现OSPF报文认证。
别忘了所有设备 save 保存
假设R1为所有网络的出口,所以在R1上向OSPF宣告默认路由
# 在R1上宣告默认路由
[AR1]ospf
[AR1-ospf-1]default-route-advertise always
default-route-advertise:命令用来将默认路由通告到普通OSPF区域,如果没有配置always参数,本机路由表中必须有激活的非本OSPF默认路由时才向其他路由器发布默认路由。本例中,本地路由表中没有默认路由,所以需要增加always参数。
# 查看R2与R3上的IP路由表
[AR2]display ip routing-table

R2与R3上已经学习到相应的默认路由。
[AR3]display ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 15 Routes : 16
Destination/Mask Proto Pre Cost Flags NextHop Interface
0.0.0.0/0 O_ASE 150 1 D 10.0.13.1 GigabitEthernet0/0/0 # 默认路由
10.0.1.1/32 OSPF 10 1 D 10.0.13.1 GigabitEthernet0/0/0
10.0.1.2/32 OSPF 10 1 D 10.0.23.2 GigabitEthernet0/0/1
…………………………………… # 略去
通过修改R1相应接口的Cost值,使得R1的 LoopBack0 接口通过 R1->R3->R2 的路径访问R2的 LoopBack0 接口
# 从R1的路由表可知,R1通过R1->R2的路径访问R2的LoopBack0接口的路由开销为1,从R1->R3->R2的路由开销为2,故只要使R1->R2的路由开销大于2即可。
[AR1]interface GigabitEthernet 0/0/0 # 与AR2的接口
[AR1- GigabitEthernet0/0/0]ospf cost 10 # 开销值设为 10
# 查看R1的路由表
[AR1-GigabitEthernet0/0/0]display ip routing-table
如图,此时R1访问R2的 LoopBack0 接口的下一跳为R3的 GigabitEthernet0/0/1 接口

# 通过Tracert命令验证
[AR1]tracert -a 10.0.1.1 10.0.1.2
traceroute to 10.0.1.2(10.0.1.2), max hops: 30 ,packet length: 40,press CTRL_C
to break
1 10.0.13.3 30 ms 10 ms 20 ms
2 10.0.23.2 30 ms 30 ms 20 ms
由此可看出,ospf 路由路径已改变,R1是通过路径 R1->R3->R2 的路径访问 R2。
删除OSPF时,要注意需要先将OSPF认证删除,接口认证的就依次进入认证过的接口进行删除,区域认证的进入区域删除即可。
# 接口认证删除
[AR1-GigabitEthernet0/0/0]undo ospf authentication-mode
# 区域认证删除
[AR2-ospf-1-area-0.0.0.0]undo authentication-mode
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。
我正在使用rails3和cucumber,除了这个小问题,一切都很顺利GivenIamonthe"editautomobile"pageNoroutematches{:controller=>"automobiles",:action=>"edit"}(ActionController::RoutingError)现在路径在paths.rb中设置为edit_automobile_path在routes.rb中我有汽车作为资源,我搭建了它所以请告诉我我遗漏了什么,清楚地定义了路线并且匹配,因为我运行了rake路线并看到了路线。请指出正确的方向 最佳答案
有什么方法可以为url/path助手提供默认值吗?我有一个可选范围环绕我的所有路线:#config/routes.rbFoo::Application.routes.drawdoscope"(:current_brand)",:constraints=>{:current_brand=>/(foo)|(bar)/}do#...allotherroutesgohereendend我希望用户能够使用这些URL访问网站:/foo/some-place/bar/some-place/some-place为了方便起见,我在我的ApplicationController中设置了一个@current
我如何将像“root_path”这样的Rails路由助手作为类方法添加到像my_model.rb这样的类中?所以我的课是这样的:ClassMyModeldefself.fooreturnself.root_pathendendMyModel.foo以上不起作用,因为ClassMyModel不响应root_path这是我所知道的:我可以使用includeRails.application.routes.url_helpers,但这只会将模块的方法添加为实例方法我试过扩展Rails.application.routes.url_helpers但它没用请随时给我上课:)
尝试从我的AngularJS端将数据发布到Rails服务器时出现问题。服务器错误:ActionController::RoutingError(Noroutematches[OPTIONS]"/users"):actionpack(4.1.9)lib/action_dispatch/middleware/debug_exceptions.rb:21:in`call'actionpack(4.1.9)lib/action_dispatch/middleware/show_exceptions.rb:30:in`call'railties(4.1.9)lib/rails/rack/logg