簡介
OSPF(開放式最短路由優先協議)
IGP
LS 發送的是LSA(鏈路狀態通告Link Status Advertisement),包含的是拓撲信息。加入LSDB,用SPF計算出Routing Table
VLSM/CIDR
四層協議 三層報頭中的上層協議號爲89
7中鄰接關係
7中LSA
5中報文
3張表
鄰居表(鄰接數據庫)
拓撲表(LSDB)
路由表(轉發數據庫)
鏈路狀態協議特點
鏈路狀態路由協議比距離矢量路由協議更加了解網絡拓撲
每臺路由器都會保存同一區域的拓撲
不會產生環路
OSPF區域
兩個層次
骨幹區域(area 0),或者叫傳輸區域
非骨幹區域
減少路由表表項
OSPF中沒有自動彙總的概念,因爲OSPF中傳遞的是LSA,而不是路由條目。
不能進行域內彙總,只能進行域間彙總和域外匯總。
將拓撲變更的影響限制在一個區域內
特定LSA泛洪停止在域邊界上,不同類型的LSA有不同的傳遞性
名詞
骨幹路由 backbone routers
ABR area border router 區域邊界路由器將其他區域連接到area 0
OSPF鄰接關係
在OSFP中,對鄰居關係(Neighbor)和鄰接關係(Adjacency)嚴格區分。
鄰居關係是指三層直連,鄰接是指7層FULL鄰接關係。
P2P WAN
兩端鄰居成爲FULL鄰接關係
LAN
鄰居與DR和BDR形成FULL鄰接關係
DROTHER之間形成two-way state
只有當鄰接關係建立起來了,才能交換LSA,並同步LSDB。
LSA是泛洪的。
OSPF算法計算
也叫Dijkstra算法
同一個區域內的所有路由器擁有相同的LSDB
度量值稱爲cost,將每段路徑用10^8/BW(bit/s)計算,然後求和,得到整條路徑的cost
LSA
OSPF和RIP一樣,既支持週期發送,也支持觸發發送。
序列號
最小值 0x8000 0001
最大值 0x7FFF FFFF
序列號使用的最右邊的棒棒糖型空間
OSPF報文類型
HELLO
Hello timer:10s或者30s,取決於接口類型。
Dead timer是發送週期的4倍,修改hello時間,dead時間將自動變爲4倍,反過來,修改了dead不會改變hello。
DBD(Database Description)
LSDB的摘要信息,防止不必要的LSA交換
LSR(Link-State Request)
請求自己沒有的LSA
LSU(Link-State Update)
包含LSR請求的LSA信息
LSAck(Link-State Acknowledgment)
確認收到了LSU中的LSA,有多少條LSA,就有多少LSAck進行確認
OSPF的確認機制
顯示確認 使用LSU確認LSR使用LSAck確認LSU
隱式確認(基於序列號的確認機制) 不使用額外的報文確認,而是用相同序列的同類型報文進行確認。如DBD
OSPF包封裝
Router ID的選擇:
手工配置
所有狀態爲UP UP的環回口中選舉最大的IP地址
所有狀態爲UP UP的物理接口最大的IP地址
Router ID和Area ID都可以用點分十進制表示。
HELLO報文
Router ID
Hello and dead intervals *
Neighbors 包含鄰居的RID
Area ID *
Router priority 在P2P接口中,這個字段是沒有意義的
DR IP address
BDR IP address
Authentication password *
Stub area flag *
*表示建立鄰接關係必須協調成功的條目
鄰接關係建立過程的7種狀態
Down 初始狀態,接口被宣告進OSPF,沒有發送任何報文
Init 通過接口發送一份Hello
Two-Way 通過接口收到了一份Neighbor字段包含自身RID的Hello
Exstart 交互3個不帶LSA報頭的DBD,選擇Master/Slave
Exchange 由Master發起的帶有LSA報頭的DBD信息交互
Loading 交互LSR LSU以及LSAck實現LSDB的同步
Full 一旦LSDB同步,鄰接關係到達Full
Two-Way狀態並不是同時到達的。到達了Two-Way State之後,MA網段將進行DR選舉。
在進入Exstart State之後,將交換3個DBD,以確立主從關係(Master/Slave),由RID更大的作爲Master。
圖中,I指initial,M指more,M/S指Master/Slave。
在Exchange State階段中,由Master主導DBD交換。
OSPF小特性
MTU更改
在OSPF中,Loopback口將會處理成一臺stub host,其路由以32位主機路由通告出去,可以防止路由黑洞。
DR/BDR選舉
選舉原則
參與該MA網段的路由器接口的OSPF優先級,越高越好(0-255),缺省值是1。值爲0,表示不參與選舉。
該MA網段所連接的路由器的RID,越高越好。
選舉時間爲wait time,從第一臺路由器到達Two-Way State開始計算,默認爲40s或者120s,是必須選滿的。
選舉完成之後,就不再進行選舉了。與根橋選舉不同,根橋選舉是時時進行的。
特點:
DR/BDR無法被搶佔
DR掛了,BDR會立即搶佔成爲新的DR,新的BDR通過在所有DROther之間重新選舉得出
DR和BDR是接口級別概念,每個MA網段的DR和BDR是單獨選舉的
BDR並不是必需的,可以使用ip ospf priority 0將除了DR以外的接口置爲0。這個在FR中很重要,只將HUB節點作爲DR,沒有BDR。
如果一個網段中,沒有DR和BDR,所有都爲DROther,2-way state,不會有任何鄰接關係,也沒有任何LSA傳遞。
只要一個接口開啓了OSPF進程,該接口會立即監聽224.0.0.5,僅當該節點成爲DR或BDR時,該接口才會同時監聽224.0.0.5和224.0.0.6。
所有路由器發送給DR和BDR的報文的目的地址都是.6,DR發給其他路由器的是.5。
OSPF路由器類型
ABR 連接骨幹區域和非骨幹區域
ASBR 連接其他路由協議AS
LSA類型
LSA類型1:Router LSA
傳遞範圍: 在該區域內泛洪,不穿越ABR
通告者: 區域內的每個路由器將發送一條Router LSA,用Router ID標識
包含內容: 純拓撲信息,包括宣告進該區域的所有直連鏈路的前綴、掩碼和網絡類型、度量值
Link-ID: 通告該LSA的RID
ADV Router: 通告該LSA的RID
LSA類型2:Network LSA
傳播範圍: 在該區域內泛洪,不穿越ABR
通告者: DR
包含內容: 純拓撲信息,該MA網段所連接的Router的RID、該MA網段的掩碼
Link-ID: DR接口的IP地址
ADV Router: DR的RID
LSA類型3:Summary LSA
用來傳遞域間路由的
這裏的Summary只是一個名字,默認是不做彙總的
傳遞範圍: 除了本區域外的所有區域
通告者: ABR
包含內容: 純路由信息,一條域間路由對應一條Summary LSA
Link-ID: 3類LSA路由的前綴
ADV Router: ABR的RID,每跨域一個ABR都會自動改寫爲該ABR的RID
LSA類型4:Summary ASB LSA
傳遞範圍: 除了ASBR所在區域的所有區域
通告者: ABR
包含內容: 拓撲信息,
Link-ID: ASBR RID
ADV Router: ABR RID,每跨域一個ABR都會自動改寫爲該ABR的RID
LSA類型5:External LSA
傳遞範圍: 整個AS
通告者: ASBR
包含內容: 純路由信息,一條域外路由對應一條External LSA
Link-ID: 5類LSA路由的前綴
ADV Router: ASBR的RID,不會改變
小特性
O E1和O E2
當外部路由引入是,需強制添加Seed Metric(種子度量值)。
對於OSOF而言,如果將BGP路由重分發進入,默認爲1;所有其他外部路由缺省Seed Metric爲20。
當我們更加關心內網路徑好壞的時候,可以手動指定類型1,逐跳累加cost。
(config-router)#redistributed eigrp 90 subnets metric-type 1
彙總
域間彙總:需要在該區域的所有ABR上實施對3類LSA彙總
ospf的彙總是在進程內設置的,不是鏈路的。
(config-router)#area 0 range 202.10.8.0 255.255.252.0
該命令之後可以加cost,調整度量值,也可以加not-advertise,不通告該彙總,這樣明細和彙總路由都不會有,相當於路由過濾。
但是,這種路由過濾的方法並不推薦。正常做法是:
(config)#ip prefix-list 10 seq 10 deny 202.10.8.0/23 ge 24 le 24
(config)#ip prefix-list 10 permit 0.0.0.0/0 le 32
(config-router)#area 1 filter-list prefix 10 in
域外匯總:需要再ASBR上對5類LSA彙總
(config-router)#summary-address 192.168.8.0 255.255.252.0
OSPF LSDB過載保護
(config-router)#max-lsa maximum-number
改變cost
(config-if)#ip ospf cost <1-65535>
或者
(config-router)#auto-cost reference-bandwidth ref-bw
改變cost計算公式中的分子,ref-bw單位是Mbits,默認是100,也就是10^8bps。
OSPF建鄰接的條件
相同的hello時間和dead時間
直連接口屬於相同的區域
使用相同的認證類型和密鑰
相同的末節區域標識
相同的MTU
相同的網絡類型
OSPF特殊區域
Stub區域
目的
過濾4/5類LSA
部署條件
建議只有一個ABR,否則每個ABR都會發送缺省路由,可能導致內網路由器根據自己的情況選擇它認爲更近的缺省路由,從而產生次優路徑。
同區域內的所有路由器全部配置爲stub路由器
沒有ASBR
不能是區域0
沒有虛鏈路
部署
(config-router)#area 1 stub
在該區域的所有路由器上部署STUB特性,ABR將入區域方向的4/5類LSA同時過來,同時該ABR會主動向區域內部下放一條O IA的0.0.0.0/0的3類缺省路由,Seed Metric爲1。
Area 1成爲Stub Area,R2將過濾4/5類LSA,同時將發送缺省路由。
部署之前
部署之後
假設Area 1還有一個ABR R6,那麼R6也下放缺省路由,可能產生次優路由。
防止次優路由的方法:在R6上,使用area 1 default-cost修改默認cost,改高一些。
Totally Stub區域
目的
過濾3/4/5類LSA
部署
在ABR上部署,內網路由器上並不需要加no-summary參數
(config-router)#area 1 stub no-summary
部署之後
次末節區域
Not-So-Stubby Areas(NSSA)
過濾4/5類路由
允許區域內部有ASBR
NSSA中的ASBR將外部路由重分發進來的時候,就是以7類LSA發送的,僅在NSSA內存在。
NSSA中的ABR把從內到外的7類LSA轉換成5類LSA,一個NSSA只能有一個ABR(RID最大)充當轉換器。
7類LSA與區域是相關的,在R1上以O N2表示,並轉換爲O E2的5類LSA發送給Area 0。
凡是能發送5類LSA的都是ASBR,因此R1的身份變成了ABR/ASBR,也變成了5類LSA的ADV Router。
因此,NSSA內部的ASBR R3並不爲外界知道,外界知道的是轉換器R1作爲ASBR。
forward address就是用來告知真正需要轉發的是R3而不是R1。
NSSA中的ABR默認不會向區域內部下放缺省路由,建議下放。
下放方法是:
(config-router)#area 2 nssa default-information-roginate
O N2 0.0.0.0/0 Seed-Metric = 1
完全次末節區域
過濾3/4/5類LSA
主動下放缺省路由 O IA 0.0.0.0/0 Seed-Metric = 1
(config-router)#area 2 stub no-summary
加表優先級
O > O IA > O E1/E2 == O N1/N2
OSPF不規則區域
網絡設計時,不要使用不規則區域。不規則區域的產生,大多是由於項目割接。這裏提供的是臨時應急方案。
遠離骨幹區域的非骨幹區域
單點雙向重分發
在沒有與Area 0直連的ABR上,使用OSPF雙進程,啓用單點雙向重分發。
(config)#router ospf 110
(config-router)#redistribute ospf 100 subnets
(config)#router ospf 100
(config-router)#redistribute ospf 110 subnets
缺點:全部是O E2路由。
tunnel
在沒有與Area 0直連的ABR上,建立一個Tunnel鏈路連接到離其最近的Area 0中的ABR路由器上。在這兩臺ABR上對Tunnel配置IP地址爲同一個IP子網段,並且將其宣告進OSPF的Area 0.
讓tunnel狀態爲Up的條件有3個:
(1)配置了tunnel接口的IP地址;
(2)配置了源地址和目的地址;
(3)源和目的地址之間要有可達的路由。
R1(config)#int tunnel 1
R1(config-if)#ip add 31.1.1.1 255.255.255.0
R1(config-if)#tunnel source 1.1.1.1
R1(config-if)#tunnel destination 3.3.3.3
R3(config)#int tunnel 3
R3(config-if)#ip add 31.1.1.3 255.255.255.0
R3(config-if)#tunnel source 3.3.3.3
R3(config-if)#tunnel destination 1.1.1.1
這樣就建立了邏輯接口tunnel。1.1.1.1和3.3.3.3必須有可達路由,這樣tunnel口才能up up。
在ospf進程內宣告tunnel接口的IP地址,如果此時源地址和目的地址(分別是1.1.1.1和3.3.3.3)也宣告進了ospf進程,將造成ospf鄰接關係翻動現象。
因此,只有將1.1.1.1和3.3.3.3做成靜態路由,就可以同時解決翻動現象和tunnel up up的問題了。
缺點:配置量大且繁瑣。
Virtual-Link
在沒有與Area 0直連的ABR和離其最近的Area 0中的ABR路由器上部署。
不能跨域骨幹區域和特殊區域。
R1(config-router)#area 2 virtual-link 93.3.3.3
R3(config-router)#area 2 virtual-link 91.1.1.1
Virtual-Link是一根按需鏈路,DoNotAge LSA,簡稱DNA,也就是說LSA的老化計數器不會計數。
Virtual-Link沒有Hello時間和Dead時間
被分割的Area 0
OSPF認證
不管是鏈路級認證還是區域級認證,密鑰id和密鑰字符串是配置在接口(包括Virtual-Link)上的,因此每個網段內保持一致即可。
鏈路級認證
明文認證
(config-if)#ip ospf authentication-key cisco
(config-if)#ip ospf authentication
密文認證
(config-if)#ip ospf message-digest-key 13 md5 cisco
(config-if)#ip ospf authentication message-digest
區域級認證
明文認證
(config-if)#ip ospf authentication-key cisco
(config-router)#area 0 authentication
密文認證
(config-if)#ip ospf message-digest-key 13 md5 cisco
(config-router)#area 0 authentication message-digest
針對於虛鏈路認證
如果在R1和R2上做了Area 0的區域級認證,由於虛鏈路是area 0的一部分,因此虛鏈路上不做認證,鄰接關係是起不來的。
因此,還需要在虛鏈路兩端配置密鑰,並在R3上開啓Area 0的區域級認證
OSPF網絡類型
Loopback 只有環回口是Loopback的,其他類型接口都不能改爲Loopback無論接口掩碼多少,都以/32主機路由通告
Point-To-Point Serial/ISDN BRI/FR point2point SubIf支持組播,沒有DR HELLO時間10s
Broadcast Ethernet支持組播,有DR HELLO時間10s
NBMA FR主接口/FR多點子接口不支持組播,有DR HELLO時間30s
Point-To-Multipoint 默認情況不會是這種支持組播,沒有DR HELLO時間30s
Point-To-Multipoint Non-Broadcast 默認情況不會是這種 不支持組播,沒有DR HELLO時間30s
這些網絡類型是高層的概念,與物理接口的類型沒有一一對應的關係,也就是說,串口可以是點到點的,也可以是廣播的。
修改網絡類型
(config-if)#ip ospf network + TYPE
NBMA
(config-if)#ip ospf network non-broadcast
(config-router)#neighbor + IP地址
這裏指neighbor只需要單向指就可以了,不需要雙向。應用場景:
在幀中繼環境中,由於Hub接單和Spoke節點物理相聚很遠,一般在Hub上單向指S1/S2/S3就可以了。
NUMA中,Hello時間爲30s
Point-To-Multipoint
(config-if)#ip ospf network point-to-multipoint
支持組播,有DR
自動生成關於直連鄰居接口的/32主機路由
Point-To-Multipoint Non-broadcast
(config-if)#ip ospf network point-to-multipoint non-broadcast
不支持組播,無DR
自動生成關於直連鄰居接口的/32主機路由
在sh ip ospf interface中看不到non-broadcast,只有在sh run中可以看到
OSPF在幀中繼中的部署
在幀中繼環境中,應用OSPF會比其他環境複雜很多。
幀中繼概念回顧
星型拓撲
PVC
DLCI 相當於MAC地址
LMI 本地管理接口有三類:ANSI/CISCO/Q933a
幀中繼映射 本地DLCI與對端IP地址
有兩種方式:
自動映射 Inverse-ARP(目的IP地址爲0.0.0.0,本地DLCI )
自動開啓
關閉命令:(config-if)#no frame-relay inverse-arp
(config-if)#no arp frame-ralay
手工映射
只能發送單播,不能發送組播和廣播,但是可以發送僞廣播
僞廣播在DLCI自動映射中是自動開啓的,在DLCI手工映射中是手工開啓的
幀中繼拓撲
R1作爲HUB節點,R2和R3作爲SPOKE節點,分別從R1建立兩條PVC通往R2和R3。
配置步驟:
1.將R1~R6的serial口上,設置封裝類型frame-relay,並打上時鐘率(模擬器不需要)
(conig-if)#encapsulation frame-relay ietf
2.在R4~R6上,配置以太網接口IP地址,運行某個IGP(如EIGRP)
3.將R4~R6模擬爲幀中繼交換機
(config)#frame-relay switching
4.將R4~R6上的serial口上,在數據鏈路層上,配置爲DCE。不能打時鐘率(物理層概念)
(config-if)#frame-relay intf-type dce
5.定義lmi類型
(config-if)#frame-relay lmi-type ansi
6.在真實環境中,R1、R2、R3之間距離很遠,爲了使其在邏輯上在同一網段,因此必須在R4~R6上創建tunnel接口
如:
R4(config)#interface tunnel 45
R4(config-if)#tunnel source 45.1.1.4
R4(config-if)#tunnel destination 45.1.1.5
R4(config-if)#frame-relay route 102 interface tunnel 45 500(任意一個DLCI號)
目前,通過幀中繼自動映射,R1可以ping通R2和R3。
但是,R2和R3之間並不能ping通。原因是:
當R2 ping R3時,目的IP地址是123.1.1.3,查路由表發現從serial 1/1發出;
serial 1/1是幀中繼封裝的,因此,必須將DLCI號封裝進二層。但是,R2上並沒有123.1.1.3和DLCI的映射關係。
此時,必須手動指定該映射,命令是:
R2(config-if)#frame-relay map ip 123.1.1.3 201 broadcast ietf
R3(config-if)#frame-relay map ip 123.1.1.2 301 broadcast ietf
這時,R2和R3可以相互ping通,R2的ping先發給R1,再發給R3。
但是,此時,R1並不能ping通自己。即
R1#ping 123.1.1.1
是不通的。
解決方法是:在R1上手動指定123.1.1.1的映射
R1(config-if)#frame-relay map ip 123.1.1.1 102 broadcast ietf
ping包先從R1發給R2,再從R2發回R1。不僅在幀中繼環境中,在PPP或HDLC中,也是這樣的。只有在以太網環境中,是在接口上打了個環,就通了。
幀中繼環境中的OSPF
假設幀中繼環境中,只有自動映射,將所有的手工映射先刪除掉。
NBMA網路類型
1.
爲了建立鄰居,需要在Hub節點手工指Neighbor,SPOKE節點不需要回指。
R1(config-router)#neighbor 123.1.1.2
R1(config-router)#neighbor 123.1.1.3
2.
由於軸幅型拓撲,只有HUB節點連接了所有其他節點。默認情況下,選舉DR/BDR,可能造成某些節點缺乏某些路由信息。
爲了保證路由傳遞沒問題,需要手工修改接口的OSPF優先級,保證HUB爲DR,spoke節點爲DRother。
R1(config-if)#ip ospf priority 255
R2(config-if)#ip ospf priority 0
R3(config-if)#ip ospf priority 0
此時,
R1#ping 2.2.2.2 source 1.1.1.1
R1#ping 3.3.3.3 source 1.1.1.1
都是通的,但是R2#ping 3.3.3.3 source 2.2.2.2不通。原因是缺少映射。
3.
爲了保證spoke節點所連接的下游網段內的PC可以互訪,需要在spoke節點彼此指手工FR映射。
R2(config-if)#frame-relay map ip 123.1.1.3 201 broadcast ietf
R3(config-if)#frame-relay map ip 123.1.1.2 301 broadcast ietf
此時,R2#ping 3.3.3.3 source 2.2.2.2就通了。
broadcast網路類型
在R1~R3上,指定廣播類型。由於支持組播發送,不需要手工指neighbor(FR Map開啓僞廣播功能)
(config-if)#ip ospf network broadcast
同樣,需要手動指定優先級
R1(config-if)#ip ospf priority 255
R2(config-if)#ip ospf priority 0
R3(config-if)#ip ospf priority 0
彼此指手工FR映射。
R2(config-if)#frame-relay map ip 123.1.1.3 201 broadcast ietf
R3(config-if)#frame-relay map ip 123.1.1.2 301 broadcast ietf
P2MP Non-broadcast網絡類型
(config-if)#ip ospf network point-to-multipoint non-broadcast
爲了建立鄰居,需要在Hub節點手工指Neighbor,SPOKE節點不需要回指。
R1(config-router)#neighbor 123.1.1.2
R1(config-router)#neighbor 123.1.1.3
在這種情況下,因爲不選DR/BDR,不需要手工修改接口OSPF優先級
不需要手工幀中繼映射,因爲/32的主機路由
P2MP網絡類型
(config-if)#ip ospf network point-to-multipoint
不需要指Neighbor
不需要修改OSPF優先級
不需要手工映射
在幀中繼網絡環境中,使用P2MP是最理想的。
但是,在考試中,一般會考“hub節點爲P2MP,spoke節點爲P2P”。
更改網絡類型,然後修改Hello時間,使其一致。
此時,R2和R3之間ping不通,但是下游主機是可以ping通的。即:
R2#ping 3.3.3.3 不通
R2#ping 3.3.3.3 source 2.2.2.2 通
OSPF高級特性
注入缺省路由
1.
R1(config-router)#default-information originate
R1(config)#ip route 0.0.0.0 0.0.0.0 INTERFACE
2.
R1(config-router)#default-information originate always
不管有沒有0.0.0.0 0.0.0.0缺省路由,R1都會主動下放缺省路由
被動接口
OSPF的被動接口不能發送、接收任何報文。
(config-router)#passive-interfac loopback 0
http://blog.csdn.net/bingosummer/article/details/22926215(原地址)