網絡互通:
-交換,同網段之間的設備通信;使用的互聯設備是,叫交換機;
*核心工作表:MAC地址表
- MAC地址 ~~~~ 端口
-路由,不同網段之間的設備通信,使用的互聯設備是,叫路由器;
*核心工作表:路由表
-網段 ~~~~ 端口
*路由器的類型:即路由表中的每個條目的學習方式
&直連路由
&非直連路由
#靜態路由
#動態路由
IGP(internal gateway protocol ):內部網關協議,即在一個公司內部運行的路由協議
% DV(distance vector):距離矢量。該協議在路由器之間互相發送的是路由
1. RIP(routing information protocol):路由信息協議,適用於小型網絡
2. EIGRP:增強型的內部網關路由協議;該協議是Cisco的私有協議;
%LS(link state):鏈路狀態。該協議在路由器之間互相發送的是‘鏈路狀態信息’
1. ISIS;當年提出是為了傳遞 CLNP 協議的路由;現在的ISIS也支持IPv4 / IPv6;
2.OSPF:open shortest path first ,開放式最短路徑優先級協議,對網絡規模理論來說是沒有任何限制的
#EGP(external gateway protocol):外部網關協議,即運行在公司之間的路由協議
1. BGP(border gateway protocol):邊界網關協議
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
OSPF:
- 概述:
該協議屬於IGP中的LS類型,位於OSI模型的第三層,即該協議的數據包時包含在IP頭部 后面
該協議運行在路由器之間,通過互相建立鄰居,同步數據庫的過程中,確保路由器之間的鏈路狀態信息完全一致,從而可以計算出路由條目信息,實現不同網段之間的互 通。
-工作原理:
1. 建立鄰居表,包含的是鄰居路由器;
2. 同步數據庫,包含的是鏈路狀態信息;
3. 計算路由表,包含的是每個路由器基於自己的數據庫條目信息‘獨立計算’出來的路由條目
-報文類型:
1. 發送hello包,用於鄰居的建立,維護和拆除
2. DD(database description),數據庫描述報文。
3. LSR(link state request),鏈路狀態請求
4. LSU(link state update),鏈路狀態更新
5. LSACK(link state ack),鏈路狀態確認報文,確保LSR和LSU的可靠傳輸;
實例:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
display ospf peer brief //查看ospf的鄰居表
結果如下:
OSPF Process 1 with Router ID 192.168.12.1
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/0 192.168.12.2 Full
----------------------------------------------------------------------------
#process,表示OSPF的進程號,用於在同一個路由器上區分不同的 OSPF 協議;進程號不同的兩個OSPF互相不能通信;
#router-id,表示OSPF協議為該路由器起的名字。作用:在一個企業內網中,唯一的表示一個OSPF路由器。
router-id的格式類似於IP地址,是“點分十進制” 的表示方法。確定方式有兩種:
--手動指定:手動指定的router-id,數值隨意,比如1.1.1.1或2.2.2.2
--自動選舉:首先會選擇設備上的接口IP地址最大的 loopback接口,如果沒有這種接口,就選擇一個IP地址大的物理接口
#area ID,表示OSPF的接口所在的區域號。OSPF協議為了支持將企業網絡分為兩層,所以引入了“區域”這個概念
OSPF協議可以將網絡分為“骨干區域”和“非骨干區域”。每個不同的區域都有一個區域號,該字段是4個字節;
取值范圍是0---4294967295.其中的區域 0 表示骨干區域。其中非 0 的區域,稱之為非骨干區域。
不同區域之間的互聯原則是:所有的非骨干區域,必須連着骨干區域。
#interface,表示的是本地設備上用於和對方設備監理鄰居時所使用的接口;
#neighbor ID ,表示的是鄰居設備的router-id
#state ,表示的是鄰居設備的狀態。兩個OSPF路由器之間的完美的狀態,應該是FULL。此時兩邊的數據庫完全同步!
但是中間也有很多中間狀態:down--->init --> two-way-->exstart -->exchange-->loading --> full
如何修改R1的router-id ?
例:修改R1的router id 為1.1.1.1,修改R2的route ID為2.2.2.2
R1: ospf 1 router-id 1.1.1.1
R2:ospf 1 route-id 2.2.2.2
但是配置后使用display ospf peer brief 查看route id還是原來的route-id,配置並沒有生效。
需要重啟OSPF協議進程分別在R1和R2路由器上的用戶模式使用命令:reset ospf process 選擇 Y,就可以了。
router-id的特點:
穩定,即一旦OSPF進程的router-id確定了,那么就不會再改動。除非設備重啟或者OSPF協議重啟
OSPF建立的影響因素:
@確保兩邊的IP地址可以互通
*可以ping通
@確保設備可以發送OSPF報文
*設備互聯接口網段進行了network
*設備之間的互聯接口沒有被配置為“被動接口”/“靜默接口”
#命令:ospf 1
silent-interface GigabitEthernet 0/0/0 //配置g0/0/0為靜默接口
@確保設備之間發送的方式相同
*要么都是組播,要么都是單播【單播的鄰居,只有在“NBMA”環境下才會有!】
@確保設備可以接收OSPF報文
*設備互聯接口網段進行了network
*設備之間的互聯接口沒有被配置為“被動接口”/“靜默接口”
*設備之間配置的ACL沒有拒絕OSPF報文
@比較hello報文參數。
--router-id,必須不同
--area ID,必須相同
--認證必須成功
--掩碼必須相同(特殊情況下-即選舉DR的情況下)
--子網掩碼必須相同
--hello計時器必須相同(默認是10s發送一次hello包)
--dead計時器必須相同(默認是40s)
--特殊標記位必須相同
--優先級不能全為0(兩個同域的ospf接口不能同時為0)
特殊情況下-即選舉DR的情況下優先級不能全為0
修改優先級命令:int g0/0/0
ospf dr-priority 0 //范圍0-255,默認是1
hello計時器和dead計時器配置命令:
查看hello計時器時間:display ospf int g0/0/0 //就是ospf協議的出接口
修改hello的時間使用命令:int g 0/0/0
ospf timer hello 5 //修改hello發送時間為5s,注意修改hello時間后 Dead (router dead interval)時間也會被動改變
dead的時間總是hello時間的4倍,所以修改hello時間為5S后,dead時間被動變為20s。
*Dead(router dead interval):表示維護ospf鄰居關系的超時時間,默認40s,超時后未收到對方發送 的hello報文,鄰居關系斷裂。
修改dead的時間使用命令:int g0/0/0
ospf timer dead 15 // 單位為S,修改dead的時間不會影響hello的時間改變。
OSPF的網絡類型:
任何一個運行了OSPF協議的鏈路,都對應這一個默認的網絡類型。在不同的網絡類型下,OSPF的工作方式不同的,並且,在數據庫中表示這個鏈路的方式也是不相同的(即LSA也是不相同的)。
但是,我們可以基於需要,人為的修改每個鏈路的OSPF網絡類型。
類型分類:
*broadcast,廣播
*nbma,非廣播(non-broadcast mulit-access)
*p2p,點到點(point to point)
*p2mp,點到多點(point to multi-point)
OSPF有多個鄰居的情況下:
OSPF路由器建立鄰居之后,就會在不同的路由器之間“同步數據庫”。
如果一個接口上同時連着多個OSPF路由器,那么就會認為建立了多個OSPF鄰居。所以后面再進行同步數據庫的時候,就會出現:
&同網段中存在多個路由器的情況下,數據庫的同步過程中,會出現大量的重復信息,降低了數據庫的同步效率。
為了提高數據庫的效率,我們可以:在多個路由器之間指定一個OSPF路由器,用來收集和擴散其他鄰居設備的數據庫信息,從而提高數據庫的同步效率。
&這個指定的OSPF路由器稱之為:DR(designated router) 指定路由器,該網段中的所有路由器都僅僅和DR路由器同步數據庫信息。
&但是,如果DR故障了,那么數據庫就無法同步了。所以為了安全,我們可以再次選舉一個備份的DR出現,即BDR-backup DR。
如果在一個網段中存在多個OSPF路由器的情況下,我們選舉DR和BDR,那么其他的設備,就只能稱之為DRother。
那么他們的關系是:
&所有的設備都和DR/BDR 同步數據庫,之間的狀態時FULL
--224.0.0.5,表示的是所有的OSPF路由器;224.0.0.6,表示的是DR和BDR。即DRother發送數據庫更新時,是給該地址
&DRother之間的狀態時two-way
--DR指的並不是一個路由器,而是一個接口
DR的特點:
即當一個網段中需要選舉DR的時候,並且已經選定了DR.那么即使后續該網段中再次接入其他優先級更高的路由器,也不會搶占DR的身份,除非重啟OSPF協議進程。
DR的選舉原則:
只有接口的DR優先級不為0的設備,才有資格參與。【優先級為0的設備,永遠只能稱之為DRother】
&首先比較設備的DR的優先級,數值越大越好;默認是1
&其次比較設備的router-id,越大越好
並且,OSPF的工作方式完全取決於一個接口的“網絡類型”,當接口的網絡類型是:廣播和非廣播的時候,才會進行DR/BDR的選舉。
網絡類型:廣播(broadcast)
是否要DR:是
是否發包:是
發包方式:組播,224.0.0.5
hello計時器:10s
dead計時器:40s
網絡類型:非廣播(NBMA)
是否要DR:是
是否發包:否
如果要發包,則發包只能是:單播
hello計時器:30s
Dead計時器:120s
網絡類型:點到點(P2P)
是否要DR:否
是否發包:是
發包方式:組播,224.0.0.5
hello計時器:10s
Dead計時器:40s
網絡類型:點到多點(P2MP)
是否要DR:否
是否發包:是
發包方式:組播,224.0.0.5
hello計時器:30s
Dead計時器:120s
OSPF網絡類型配置命令:
interface g0/0/0
ospf network-type [ broadcast | nbma | p2p | p2mp ]
手動向鄰居發送hello包:
ospf 1
peer x.x.x.x //x.x.x.x為鄰居接口的IP地址
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
詳細分析OSPF鄰居的狀態:
Down-表示鄰居掛掉了或者“在Dead時間內”,沒有收到對方發送過來的Hello報文;
init-初始化,表示能夠收到對方設備發過來的hello報文,但是對方的報文中並沒有自己的router-id;
Two-way:雙向通信狀態。表示能夠收到對方設備發送過來的hello報文,並且該報文中還能看到自己的router-id;
如果此時鄰居之間需要選舉DR,那么這個選舉的過程,就是發生在“該狀態”。此時選舉但是選舉不出來,兩個路由器之間狀態,就會卡在two-way(比如在廣播和非廣播環境下,兩個DRother之 間,就會卡在two-way)
Exstart:交換初始化狀態。在該狀態的事情,都是為了后續的exchange(交換)過程更加的高效和靠譜。
所以會在這個階段,雙方互相發送“第一DD”報文,用於選舉出‘主/從’路由器,目的就是為了確保在exchange狀態發送的大量的DD報文,是按照可靠的方式發送的。
選舉主/從關系的原則:比較設備之間的route-id,越大越好
選舉出DR/BDR之后:從路由器發送的DD報文的序列號一定要跟隨着主路由器發送DD報文的序列號的變化而變化。
並且在這個階段,我們還會比較DD報文的"MTU字段",如果兩邊相同,則繼續進入下個狀態;如果兩邊不同那么鄰居之間的狀態,就有可能卡在這里。【默認情況下,華為設備是不檢查這個參數的
;但是可以人為打開該功能】
*在DD報文中,有三個重要的標記為:
I(init)表示該DD報文是不是第一個DD報文;如果取值為1,表示為第一個DD,如果是0,表示不是第一個;
M(more)表示該DD報文是不是最后一個DD報文;如果取值為1,說明后面還有更多DD,不是最后一個;如果取值為0,說明后續已經沒有更多的DD報文了,即表示當前的DD報文
是最后一個DD報文;
M/S (master/slave)表示發送這個DD報文的路由器的的身份,是“主”路由器,還是“從”路由器;
剛進入exstart狀態的時候,大家發送的第一個DD報文中,都認為自己很牛,所以該標記位都是1.
經過route-id的比較之后,大的路由器發送的MS位就是1;小的路由器發送的MS位就是0;
exchange:交換狀態。在該狀態下就是依據上述的主從關系,進行大量的DD報文的發送,用於描述彼此的數據庫條目信息。
當然我們在DD報文中包含的是自己的數據庫中的每個條目的“摘要”信息,不是詳細的。
當兩邊的DD報文全都傳輸完畢以后,就會進行DD報文的比較,從而找出兩邊的數據庫的差異
loading:加載狀態。基於上述數據庫的比較結果,我們就知道兩邊數據庫的差異。所以在這個階段就開始向鄰居設備發送LSR進行請求自己沒有的數據庫條目的詳細信息。對方設備收到以后,就會回應一個 LSU,里面包含的就是鏈路狀態的詳細信息。此時,每次發送LSR和LSU,兩邊都會發送LSACK對上述的兩個報文進行確認。
full:一旦loading狀態完成,說明鄰居之間的數據庫就已經完全一致了。從而進入到了FULL狀態,此時稱之為“鄰接”!
’