鄰接關系
鄰接建立過程
講完了封包之後我們具體來看一下是怎麼同步的,我們可以看到下圖是我們LSDB的過程:
注意:
我們要注意,在到達同步過程之前我們先要達到2-way的狀态,就是我們首先要有鄰居狀态的建立,才有可能有下面的這些步驟。
首先第一個是ExStart狀态:
在Exstart狀态中,是用于選舉我們的主從的,這裡我們可以看到,選舉主從主要是用到了DD封包。
對于最前面的這三個DD封包,實際上是不攜帶任何的路由摘要消息的,此時有人會問不攜帶路由摘要,那麼這個DD封包的作用是什麼?
現在我們來看一下它是如何去選舉主從的,首先對于RTA而言,它會發送一個DD封包。
- 這裡有一個Seq,我們可以想象X是一個随機數,它的任意取值都是沒有關系的,可以取任意的值。
- 第二個I代表的是這個是否是我的第一個DD封包,很明顯是。
- 而M代表我是不是Master,此時也就是我是不是主,RTA在這裡并不知道RTB的情況肯定以為自己是主,那麼同樣是置為1,認為自己是MASTER。
- 而MS是代表後面還沒有響應選舉的DD封包,這裡後面還是要去選舉DD的,還是要去發送封包資訊,是以也是置為1。
對于RTB來說也是一樣的,RTB收到了DD封包也是去比較我們的Router ID。
這裡對于DD封包,Router ID越大則會成為一個Master,此時RTB就知道自己已經是MASTER。
回複一個DD封包,Seq=Y,這個就是随機數,我們不用管他。
Y表示是不是我的第一個DD封包。
M表示自己是否為MASTER,現在認為自身是MASTER,是以也置為1。
MS表示後面還有沒有相應的選舉封包,這裡是有的,同樣也是置1。
此時RTA收到了DD封包之後,發現RTB的Router ID确實是比我大,那麼RTB就可以作為一個MASTER。
此時路由器就從ExStart變為Exchange狀态,也就是說代表主從去選舉完畢了。但是這裡RTA就會去回複一個DD封包。
這裡的這個DD封包,可以看到它的SEQ就是遵從于我的RTB的SEQ的值了,也就是說之後再去傳遞任何的DD封包,都是以Y為基礎。
在Y上面進行加一、加二等等,第一次傳輸就是加一,第二次傳輸就是加二。它在這裡就是以y為基礎去傳送我們的路由消息已經傳送我們的DD封包了。
這裡其實就可以去保證我們的可靠性了,這個也是選舉出主從的意義,為了保證雙方裝置的可靠性。
這個時候RTA認定RTB是我的DD封包,這個時候SEQ可以了解為一個會話ID,就置為y,它對于I、M、MS這三個參數在我們的封包中還是有的,但是隻不過這三個參數都是置0。
- 因為I首先并不是我的第一個封包了,此時置為0。
- 現在RTA很明顯不是Master,是從,是以M也置為0。
- 現在因為是最後一個參與主從選舉的DD封包了,是以也是置為0了。
表示去認可RTB主從的地位。肯定RTB是RTA的主了,此時RTB收到了這個封包之後,就會從Exstart狀态變為Exchange。
而在Exchange狀态中它們就會開始正式的互動相應的摘要資訊了,此時RTB将我們相應的DD封包的摘要資訊發給RTA。
- 這個時候我們的Seq等于Y+1,這是RTB第一次傳輸摘要資訊的封包。
- 這個時候它後面跟着一個MS,表示後面還跟着其他的一些MS的封包。
然後對于Exchange狀态,RTA現在已經從Exchange狀态,到達了loading狀态。
同時它也會發送Seq=Y+1的封包,在這裡的話也就相應的去發送路由摘要的資訊給RTB。
那麼RTB假如收到了這個路由的摘要資訊之後,發現RTA在這裡的路由資訊我完全在之前已經都學習完成了,已經對所有的摘要資訊在我自己的LSDB鍊路狀态資料庫都存放好了。
那麼這個時候我并沒有重新要從RTA中重新擷取的資訊了,我就會直接從Exchange狀态變為Full狀态。
表示我不需要再去學習任何的路由消息了。
對于RTA來說,假如說RTA在這裡有一些路有消息需要去學習,此時就會去發送LSR去請求響應的路由消息。
比如:
現在我想去學習2.2.2.2這個loopback口,即我去請求2.2.2.2這個32位的路由的消息,同時這裡隻是一個目的網段和一個掩碼的摘要資訊。
對于RTB就會回複一個詳細的路由資訊LSU。
包括Cost值、出接口等。
對于RTA。現在我收到了一個資訊的話,我就會去回複一些ACK的狀态。假如說RTA和RTB之間,RTA已經完全學習了RTB的全部路由消息之後已經到了Full狀态。
到了Full狀态之後就代表了鄰接關系的建立,這個就是整體的過程。
OSPF鄰居狀态機
對于OSPF狀态機的描述,我們可以看一下:
首先第一個是Down狀态,對于Down狀态就代表我剛剛去發送Hello封包。
如果接收到了Hello封包就會進入到Init狀态。
這裡我們要注意有一個Attempt狀态。
Attempt狀态是在對應的NBMA網絡中,如果是NBMA網絡就會是Attempt狀态,即嘗試去建立。
然後進入到了Init狀态。
如果收到了對端的Hello封包我們會到達下一個狀态,即2-way狀态。
有部分的路由器鄰居關系會卡在2way狀态,當然有部分的路由器就可以進入到下一個狀态,即ExStart狀态。
在Exstart狀态會去選舉主從,主從選舉完成就會進入Exchange狀态。
對于Exchange狀态就會去開始互動DD封包。(完整則直接變為Full,不完整則進入Loading狀态去請求路由)
這裡的DD封包就攜帶了響應的路由摘要資訊,知道了對方的路由摘要之後就會開始去互相學習路由。
我們要注意,這裡的學習路由并不是1s、或者很短的時間内可以學習完成,肯定是需要一個過程的:
我想要去發送LSR請求,LSU收到相應的資訊,然後我再去确認。
此時我們在學習路由的這個過程就是一個Loading狀态。
最後,兩邊的路由封包已經學習完成之後,我們就進入到了最後的狀态,即Full狀态。