今天的这一篇算是CCNA考试中非常关键的一块内容,原教学视频分成了三个部分,但是因为内容相关,因此我将这三部分合并成一篇来写。
首先我们回忆一下路由协议分为IGP和EGP两大类,EGP就只有一种用path vector来作为metric的BGP,而IGP分为两大类,之前我们说了Distance vector的RIP和EIGRP,剩下的就是Link state的IS-IS和OSPF。
Link state 路由协议的特点就是,每个路由器把自己接口的信息发送给自己的邻居路由,并通过邻居路由发给邻居路由的邻居路由,以此类推,然后路由器会根据收到的信息来创建一个网络图,并且和其他路有互相交换信息,到最后所有路由器拥有同样的网络图。每一个路由器都会根据自己的网络图来计算到达某一个目的地来计算最佳路由。link-state路由协议需要占用更多的CPU资源,这个很容易理解,因为需要更多的信息,更多的计算。这种路由协议的优点就是当网络情况发生改变时,相较于distance vector 协议,其反应和应对速度更快。
好啦,今天我们全部内容都是link-state里的OSPF,
OSPF,全名是Open Shortest Path First,最短路径优先。顾名思义其算法就是基于最短的路径最高的优先级。该算法中文叫迪克斯特拉算法。原名是Dijkstra,来自于荷兰计算机科学家 Dijkstra。
OSPF目前一共有三个版本,
OSPFv1:1989年创建,最老的版本,目前已经不再用了
OSPFv2:1998年创建,适用于IPv4,也是考试的核心内容,也是应用最广泛的协议。
OSPFv3:2008年创建,适用于IPv6,不过也可以向下兼容刀IPv4
接下来有一些专有名字,我会把所有的专有名字都列在上面,这样先有一个简单的概念。
LSA:link state advertisement,链路状态通告,包含了路由器存储进去的路由信息,默认设置为30秒到期,所以每30秒会重新发送一次。
LSDB:link state database,每一个路由器用该结构来管理LSA
Areas:一个area就是共享同一个LSDB的所有路由器和链路,每一个端口在设置的时候都必须要设置areas,不同路由器的areas设置成不同的话,无法形成同一个OSPF。同一个路由器可能属于多个areas,因为每一个端口都可以设置area
Backbone area(area 0):主干区域即最核心的一个区域,所有其他区域必须连接到这里。
Internal router:所有接口全部配置在同一个area的路由器被称为internal router
ABR(Area border router):所有接口配置在不同的area的路由器被称为area border router,ABR会维护更新它所连接的不同area,理论上来说可以设置多个areas,但是实际上建议最多只设置2个,3个及以上会导致路由的负载过重。
Backbone router:连接到骨干area(area0)的被称为Backbone router
Intra-area router:就是在目的地在相同area的routers
interarea router:就是目的地在不同area的routers
ASBR(autonomous system boundary router):自治系统边界路由器就是连接到外部网络的路由器
路由器会不断地flood LSA给其他路由器,直到所有路由器都拥有一样的LSDB
如下图所示,四个路由器都开了OSPF,R4的G1/0端口是新设置的加入了OSPF,然后R4就会创建LSA告诉邻居R2和R3,并通过R2和R3告诉R1。接下来R1,R2,R3收到后会更新自己的LSDB,所有的路由器就有了一样的LSDB,最后每个路由器会根据算法来计算到达这个新加入的网段的最佳路由。

视频教程第一部分简单的分了三步,即
1.become neighbour 和其他连接的路由器在同一个segment里
2.exchange LSAs 就是和自己的邻居交换LSA
3.calculate the best route 计算最佳路由并且加入自己的路由表
前面提到了areas,一般来说,小型网络里把所有路由器加到一个area是没问题的,但是假如是大型甚至超大型网络,如果所有路由器都在一个area,那么每个路由器都会共享同一个LSDB,这会占用非常大的memory,而且CPU计算路由时需要超级多的资源。而且一旦有细小的改动,那么LSAs就会满网络的flooding。
因此呢,建议将超大网络配置成多个areas,当然CCNA考试范围只要求配置single area。如下图所示,分成了四个areas
其中area0的路由器,以及area 1 2 3中下面的一排路由器是internal routers
中间一排的三个路由器则是ABRs,area border router
第一排的一个路由器和第二排的三个路由器都属于Backbone routers
area1 中最左边的路由学到了area1中最右边这台路由,那么就是intra-area router,像下图的例子中有很多
area1 中最左边的路由学到了area3中最右边这台路由,那么就是interarea router

注意事项一:这里Area 1 2 3必须连接到骨干上Area0,每一个area必须有一个area border router,如下图所示是不正确的,

注意事项2:OSPF areas必须是连续的,如下图例子,就属于area1不连续

注意事项3:同一个子网的接口必须在同一个area,如下图所示,area1那个标绿色的路由器,虽然设置了同一个网段,但是area设置的不同,因此不会加入到area0中来。

以上讲的都是多area的情况,但是在CCNA里还是最多关注single CCNA,下面是一些基本的命令
首先是开启ospf
router ospf ?
后面跟着的是 process ID,一个接口可以设置多个OSPF,多个ID,但是这不是CCNA范畴,因此我们把process ID 设置成1就可以了,对其他没影响。不同路由的ID 也不需要匹配
接下来就是添加路由
network 10.0.12.0 0.0.0.3 area 0
注意看和EIGRP差不多,也是设置IP和反掩码,后面跟着的是area id,Single area OSPF里不同的路由之间area必须设置成一样,因为我们只考虑single area的情况所以全部设置成0即可。同样,这里可以设置成特殊的IP网段,也可以设置成大一点的网段,路由器会自动在该范围内寻找特殊的网段,和EIGRP一样。
另外一个方法就是直接在端口上开启,
int g0/0
ip ospf 1 area 0
然后配置passtive端口
passtive interface g0/1
和之前EIGRP,RIP一样的用法,打开之后路由就不会从这个端口发出去LSAs,但是其他端口依然会把这个端口的子网信息等发给其他路由
另外一个方法是直接把所有端口都开启,然后关闭需要的端口
router ospf 1
passive-interface default
no passive-interface g0/0
no passive-interface g0/1
接下来某个路由连接到外网,还是和RIP,EIGRP一样,将该路由设置为
ip route 0.0.0.0 0.0.0.0 203.114.23.34
default-information originate
连接到外网的这个路由器被称为ASBR, autonomous system border router,敲了上面命令必然是ASBR
还有查看路由状态的命令,和RIP,EIGRP一样
show ip protocols
show ip route
下面三个是用来查看OSPF相关状态的
show ip ospf database
show ip ospf neighbor
show ip ospf interface g0/0
下图可以看到show ip protocols后显示的信息,其中这个router ID也EIGRP类似,逻辑优先级顺序还是
1.手动配置
2.最高的loopback ip address
3.最高的端口ip address

这里修改route id有一点点不同,
router-id ?
后面跟着要设置的ID
不过设置后不会立即生效,必须跟一个命令刷新后才行
clear ip ospf process
如下图所示

另外修改maximum path也和EIGRP一样,
maximum-paths ?
后面可以设置为1-32
另外distance 也就是AD值默认是110,也可以修改,和EIGRP一样
distance ?
后面数字跟1-255
我们知道AD值是路由用来比较不同路由协议的,同一种路由协议的优先级要根据自己的metric,而OSPF的metric或者说cost是根据带宽来计算的,计算公式为
reference bandwidth 除以 端口的带宽,但是假如得到的值小于1,那么就转换为1,所以一般来说必须要更改的大一点,不然带宽高的交换机中Fastethernet,gigabit ethernet口,和10G口得到的都是1
比如默认设定 reference bandwidth是 100mbps,所以
Ethernet口: 100mbps/ 10mbps = cost of 10
Fast口: 100mbps/ 100mbps = cost of 1
G口: 100mbps/ 1000mbps = cost of 1
更改这个值得命令是
auto-cost reference-bandwidth ?
后面可以跟着1-4294967的数字,便于计算的话改成10的倍数,另外就是改成比路由器最快端口带宽更高的值,比如改成100,000,这里注意一定要把所有的端口的reference bandwidth都改了,不然会出问题。
改好之后就可以计算一个路由器到一个目的地的cost也就是metric,计算方法为只考虑出口的cost然后加起来即可,
如下图所示,R1要到192.168.4.0的话,cost计算为R1的G0/0是100,R2的G1/0也是100,R4的G1/0也是100,加起来是300
这里注意loopback端口的cost始终为1

第二个办法,那就是直接修改端口的cost值,也不用计算公式,设置多少就是多少
interface g0/0
ip ospf cost ?
后面问号可以跟着 1- 65535之间的值
还有一个方法和第一个方法相关,因为第一个方法就是用reference bandwidth除以端口的bandwidth,所以第三个方法就是修改端口的bandwidth值,当然这个值并不是真的就把端口的实际端口给改了,只是一个用来计算cost的数值而已
interface g0/0
bandwidth ?
后面可以跟 1到10000000的值
但是要注意,尽量不要用这个命令,因为如果修改后,该端口的其他很多东西都会受到影响,比如 EIGRP
接下来我们了解一下OSPF 如何形成neighbor的
首先是路由器的某端口被配置为OSPF,这个路由器就会发出去OSPF hello 信息,默认的情况下是每10秒发送一次。
发送的地址为multcast 224.0.0.5
顺带回忆一下 RIP的multcast是224.0.0.9, EIGRP的multcast是224.0.0.10
继续回忆一下,IP header,protocol field里OSPF是89
尽管该端口被配置为OSPF,它也已经往外发送了OSPF hello 信息,但是它目前还不知道任何关于邻居的情况,因此呢当前的 neighbor state 是Down,如下图所示,仔细看neighbor RID是全0,也就是广播状态,因为R1不知道R2的情况。

接下来,R2会收到R1的Hello message,然后给R1添加一个入口,到自己的neighbor table里。在R1这边,R1依然不知道R2的存在,但是在R2中,R1的状态目前就是init state。如下图所示

接下来,R2会发回去一个Hello message,并且包含了自己和R1的RID,当R1接收到后就把R2添加到自己的neighbor table中,这个时候时候对于R1来说,R2就是2-way state。然后,R1再发回去第二个Hello message,这一次的neighbor ID是R2的。现在R1和R2都是2-way state状态。2-way state就是收到一个Hello message,并且包含了自己的RID。

一旦,两个路由器都进入了 2-way state状态,这就意味着他们成为OSPF neighbor的所有条件满足,他们现在可以共享LSAs并且去构建自己的LSDB了。
下一步,两个路由器根据RID的值要选出哪个是master,哪个是slave,这个时候两者处于exstart state。这两个路由器会交换DBD(database description)包,RID大的就是master,RID小的就是slave。如下图所示,

接下来,两者已经确定了谁是master,谁是slave,那么就进入到了exchange state,R1和R2互相交换DBD,这次的DBD不会包含带所有细节信息LSAs,而是自己LSDB中的LSAs列表,两者然后进行对比,看看对方有哪些LSAs是自己没有的,然后决定下一步需要对方发送哪些。如下图所示,

再下来,路由器进入到loading state,路由器会向对方发送LSR(Link state request) message来向邻居路由索取自己没有的那些LSAs。邻居会发送来包含这些LSAs的LSU(Link state update) messages。最后路由器会发送LSAck message来确认自己收到了LSAs。如下图所示,

最后,路由器进入到full state,所有路由器拥有一样的LSDBs和完整的OSPF adjacency。之前我们说过每10秒会发送一个Hello message,当端口接收到后就会刷新dead time,默认是40秒,一旦40秒后,即4个hello message的时间到了仍然没有收到Hello message,这个邻居路由的信息就会被删除。然后所有路由器的OSPF LSDB 就会更新。
简单总结一下上述过程就是如下所示,前面三个状态是形成neighbors,后面四个状态是交换LSAs。

通过之前说到的show命令我们可以看得到刚才说的各种状态和时间,如下图可以看到full state

如下图可以看到默认的hello 10秒 dead 40 秒

在第二个实验中,注意划线部分应该是有两个才对,但是Cisco Packet Tracker 有问题,只显示了一个,而且AD值应该是110,但是这里是1,涉及到CCNP的内容,所以可以忽略不计。
这里提一下loopback 端口,这是个虚拟端口,通常用来测试的,因为它永远都是up状态(除非手动关闭)。
接下来我们进行一个重要的话题,就是OSPF的网络类型,
一,Broadcast: 在Ethernet和FDDI(Fiber Distributed Data Interfaces)接口中默认打开,这也是我们上面举例学到的
在CCNA中,Broadcast中里的FDDI不作为考试内容,了解即可
我们之前学过的和举的例子都属于这种类型,不管是ethernet口,fastethernet口还是gigabitethernet口都属于ethernet口,路由器会自动的发送接收OSPF hello 信息,信息通过224.0.0.5来发送。
之前讲过的形成neighbor时候,要选出DR(designated router)和BDR(back designated router)。
假如没有OSPF邻居的情况下,那么只有一个DR。
有多个OSPF邻居的情况下,除了DR和BDR,其他都是DROther
选举的原则就是,
1。先对比OSPF interface priority,这个值默认都是1,当然也可以手动更改,谁的高那么谁是DR,第二高是BDR
2。假如OSPF interface priority都一样,那么就对比OSPF Router ID,还是谁的高谁是DR,第二高是BDR
priority修改方法如下
int g0/0
ip ospf priority ?
后面的数字是0-255,设置为0的话无法变成DR或者BDR
注意1:修改后,DR和BDR是仍然不变的,除非设备重启或者端口关了或者重启
注意2:即使是第三台路由器设置了更高的priority,并且DR重启了,那么默认的顺序是原来的BDR变成DR,而刚修改好的路由器端口变成BDR。
注意3:只有DR和BDR会和其他除了自己以外的所有路由器形成full state,而DROthers之间只会停留在 2-way state。这样的好处就是只有DR和BDR交换LSAs,DROthers之间不会交换LSAs。大大的减少了LSAs flooding。这里DROthers给DR/BDR发送信息用的是224.0.0.6,和DR/BDR发送的224.0.0.5不一样
各个路由器的LSDB依然一样
如下图所示:

在上图例子中,在R3上可以看出,之和R4和R5形成了 full state,所以是2,而total count OSPF neighbor是3个

二,Point to Point:在PPP(Point to Point Protocol)和HDLC(High-Level Data Link Control)中默认打开
在CCNA中,Point to Point中里的HDLC也不作为考试内容,了解即可
这种情况一般比较少见,主要是两个路由器之间使用串口线进行连接,使用PPP或者HDLC封包,路由器之间还是通过224.0.0.5来进行。
这里有一个比较大的不同点,在这种模式下,路由器之间不会选出DR和BDR,使用point to point 模式。与此类似的是,使用串口连接的话,两侧分别是DCE(Data Communications Equipment)和DTC(Data Terminal Equipment)。DCE需要提供clock rate(类似于ethernet里的speed)
查看DCE和DTE的方法是
show controllers s2/0
而修改clock rate的方法是
int s2/0
clock rate ?
后面跟一个参数, 1200 2400 等
思科设备里默认的封包协议是cHDLC(cisco HDLC),可以手动改成PPP
修改方法是
int s2/0
encapsulation ppp
切记:如果一端改了,另外一端也得改。
如下图所示

在上个例子里,R2和R1之间没有DR和BDR的关系,查看状态也只有-

三,Non-broadcast:在Frame Relay 和X.25中默认打开
在CCNA中,non-broadcast可以忽略不计,不作为考试内容
三种类型也可以手动切换
进入到端口设定后
ip ospf network ?
后面可以跟 broadcast non-broadcast等
但是修改的时候要注意,连接线是ethernet还是串口线,要注意是否匹配
简单的小总结一下

OSPF的几个注意事项
1. area number 必须匹配
这个之前就讲过,不匹配无法形成同一个OSPF
2. 端口必须在同一个子网
如果不是一个子网,无法形成OSPF
3. OSPF 不能shutdown
默认是不会这样,但是如果手动改了也无法形成OSPF
router ospf 1
shudown
4. OSPF Router ID 必须不同
我们之前讲过可以手动修改,假如把两个接口的OSPF router ID改成一样,那么也会出问题,系统会显示检测当相同的ID,假如不小心手动设置了某个值,也不知道是和哪个冲突了,干脆就设置成默认
no router-id
5. Hello time 和 Dead time必须一样,
进入到ospf设置
ip ospf hello-intervval ?
后面可以跟1-65535的值
假设有人不小心改了,也不知道改成多少,干脆就设置成默认
no ip ospf hello-interval
no ip ospf dead-interval
6. 认证设置必须匹配
比如一端进入到OSPF 设置
ip ospf authentication-key jeremy
ip ospf authentication
7. IP MTU设置必须匹配
这个是更改IP包的最大size,如果两端不匹配,也会形成OSPF但是无法正常工作
手动进入到ospf设置
ip mtu ?
后面可以跟68-1500的值
不小心改错了后,还是可以手动将其设置为默认
no ip mtu
8. OSPF网络类型必须一样,不能一头是PPP一头还是广播,也会出问题
最后一个话题就是LSA,LSA一共有11种类型,在CCNA考试中我们只需要了解3种
Type1 Router LSA
这个就是所有的OSPF路由都会生成的LSA,会表明自己的Router ID,以及激活的OSPF接口或者说添加进去的Network 列表
Type2 Network LSA
这个就是只有每一个multi-access网络(broadcast network)的DR才会生成的,列出了所有的路由器
Type5 AS External LSA
这个就是连接到OSPF以外的ASBR路由器生成的
在show ip ospf database,也可以看到这常见的三种类型

-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
-------------------------------------------------------分隔符-------------------------------------------------------------------
Day 26 Anki Flashcard下载:https://drive.google.com/file/d/1fdPyOj4RFxV-JXMoH5tPwZtja0vPQXIE/view?usp=sharing
Day 27 Anki Flashcard下载: https://drive.google.com/file/d/1wB9lxrPIpb6Dk5rAyRL1LQJyWLGTbQ4E/view?usp=sharing
Day 28 Anki Flashcard下载: https://drive.google.com/file/d/1UcsnWYj-k_CaX_BmAI6kcbCrJR1T8L7g/view?usp=sharing
Day 26 Cisco Packet Tracer 练习题下载:https://drive.google.com/file/d/195S9MIhLq9FG_jRzJ3CkdwSQGUebvcV5/view?usp=sharing
Day 27 Cisco Packet Tracer 练习题下载: https://drive.google.com/file/d/1Yjb2Zs_OIMXS9HpotgEyE7dCwyQY33T_/view?usp=sharing
Day 28 Cisco Packet Tracer 练习题下载: https://drive.google.com/file/d/1IGw2VQdaOW_2LW3OlPXYQBy7B_woIYsa/view?usp=sharing
Day 26 Cisco Packet Tracer 练习题完成下载:https://drive.google.com/file/d/1z-b9zM5DGRYEz9FoPe8jKvX1gwMr3ev0/view?usp=sharing
Day 27 Cisco Packet Tracer 练习题完成下载: https://drive.google.com/file/d/1teOtJ7qYijyMA2KvLT_DwyzOUv5TD3sB/view?usp=sharing
Day 28 Cisco Packet Tracer 练习题完成下载: https://drive.google.com/file/d/1Vv8ZlUFVr4Zi_SVwdYA-4JFOZcRe8poV/view?usp=sharing
0 条评论