TCP/IP讀書筆記之動態選路協議
使用靜態選路,用預設方式生成路由表項或者通過ICMP重定向生成表項需要同時滿足三種情況。1.網路很小;2與其他網路只有單個連線點;3沒有多餘路由。如果這三個條件不能完全滿足,則通常使用動態選路。
動態選路是路由器之間採用選路協議進行通訊,從相鄰路由器接受資訊來更新核心中的路由表。這種選路協議有很多種。而Internet是以一組自制系統的方式組織的,每個自制系統通常由單個實體管理,例如一個公司或者大學校園。每個自制系統可以選擇該自制系統內各個路由器之間的選路協議,這種協議稱為內部閘道器協議IGP(interior gateway protocol)。最常用的IGP就是選路資訊協議RIP(routinginformation protocol)另外還有一種新的IGP是OSPF(Open shortest path first).
RIP路由資訊協議
RIP報文包含在UDP報文裡面,然後再加上IP首部發送。
RIP報文格式如下圖:
命令欄位中1表示請求。2表示應答。3和4捨棄不用。還包括兩個非正式的命令:5表示輪詢,6表示輪詢表項。對於RIP-2,版本號為2.路由域是一個選路守護程式的識別符號,指出這個資料報的所有者。在unix中,是一個選路守護程式的程序號。這就允許在單個路由器上執行多個RIP例項。後面緊跟的20個位元組是RIP報文的路由部分。一個RIP報文最多有25個路由部分資訊。地址類欄位用來標識所使用的地址協議,如果採用的IP地址,這個欄位值為2.路由標記欄位表示自制系統號(由IANA分配,16位,最多65535個)。這個欄位是為了支援外部閘道器協議而設定的。最後的度量部分表示到此網路的距離。RIP協議是一種分散式的基於距離向量的路由選擇協議。RIP協議要求網路中的每個路由器都要維護從它自己到其他每一個目的網路的距離記錄。從一個路由器到直接相連的網路的距離定義為1.從一個路由器到非直接相連的網路的距離為所經過的路由器資料加1.RIP協議允許一條路徑上最多隻能包含15個路由器,即最大為16.
RIP協議的特點是:
1. 僅僅和相鄰的路由器交換資訊。如果兩個路由器之間的通訊不需要經過另一個路由器,那麼這兩個路由器就是相鄰的。RIP協議規定,不相鄰的路由器不交換資訊。
2. 路由器交換的資訊時當前本路由器所知道的全部資訊,即自己的路由表。也就是說,交換的資訊為:我到本自制系統中所有網路的最短距離,以及到每個網路應該經過的嚇一跳路由器。如上圖所示
3. 按固定時間間隔交換路由資訊,如每隔30秒。路由器根據收到的路由資訊更新路由表。當網路拓撲發生變化時,路由器也幾十向相鄰路由器通告拓撲變化後的路由資訊。
路由器剛開始工作的時候,只知道直接相連的網路的距離,這些距離為1.接著,每個路由器也只和資料非常有限的相鄰路由器交換並更新路由資訊。經過若干次更新後,所有的路由器最終都會知道這個新的路由器並且這個新的路由器也會知道到達其他網路需要經過的下一跳路由器和距離。
路由表中的主要資訊就是到某個網路的距離(即最短距離),以及經過的下一跳地址。路由表更新的原則就是找到每個目的網路的最短距離。採用的演算法成為距離向量演算法。具體演算法步驟不再詳述。但是RIP協議的資訊交換方式也決定了其具備一定的缺陷。首先,最大距離為16限制了網路的規模。其次,若網路中某一個路由器埠發生了故障,這個訊息不會很快的傳給網路中的所有路由器。只能由相鄰的路由器一層層的擴散,即壞訊息傳播的很慢。
而OSPF協議幾乎克服了RIP的所有限制。
OSPF開放最短路徑優先協議
OSPF名字為開放最短路徑優先(open shortest path first).其中最短路徑優先是因為使用了Dijkstra提出的最短路徑演算法。使用這個演算法需要每個路由器都瞭解自己到網路中所有其他路由器的資訊。這個演算法應該是一個動態規劃的演算法。
OSPF協議交換的並不是距離向量資訊,而是相鄰站點的鏈路狀態。路由器主動地測試與其臨站相連的鏈路狀態,將這些資訊傳送給它的其他鄰站,而鄰站將這些資訊在自制系統內傳播出去,這樣每個路由器接受這些鏈路狀態資訊並建立完整的路由表。這樣鏈路狀態協議總是比距離向量協議收斂的快。收斂的意思為路由發生變化後,例如路由器關閉或鏈路發生故障後,可以穩定下來。
OSPF報文首部如下圖:
型別欄位表示報文的型別。OSPF報文總共有5個型別
1. 問候分組(Hello)分組,用來發現和維持鄰站的可達性。
2. 資料庫描述(Database Description)分組,向鄰站給出自己的鏈路狀態資料庫中的所有鏈路狀態專案的摘要資訊。
3. 鏈路狀態請求(Link State Request)分組,向對方請求傳送某些鏈路狀態專案的詳細資訊。
4. 鏈路狀態更新(Link State Update)分組,用洪泛法對全網更新鏈路狀態。這種分組時最複雜的,也是OSPF協議最核心的部分。路由器使用這種分組將其鏈路狀態通知給鄰站。鏈路狀態更新分組共有五種不同的鏈路狀態。這裡從略。
5. 鏈路狀態確認(Link State Acknowledge)分組,對鏈路更新分組的確認。
分組長度包括SOPF首部在內的分組長度,以位元組為單位。
路由器識別符號 標識傳送該分組的路由器的介面的IP地址
區域識別符號 分組屬於的區域的識別符號
鑑別型別(AuType)目前只有兩種,0(不用)和1(口令)
鑑別 鑑別型別為0時就填入0.鑑別型別為1時就填入9個字元的口令。
OSPF分組由OSPF首部加上某一型別的OSPF分組內容組成。
與RIP報文不同的是,OSPF直接使用IP,OSPF分組直接加上IP資料報首部發送。
OSPF協議規定,每兩個相鄰的路由器每隔10秒就要交換一次問候分組。這樣就能知道哪些鄰站是可達的。對相鄰路由器來說,可達是基本的要求。因為只有可達鄰站的鏈路狀態資訊才存入鏈路狀態資料庫。在正常情況下,網路中傳送的對大多數為OSPF問候分組。若有40秒沒有收到某個相鄰路由器發來的問候分組,就認為該路由器時不可達的,應立即修改鏈路狀態資料庫,並重新計算路由表。而另外四種分組都是用來進行鏈路狀態資料庫的同步。所謂同步就是指不同路由器的鏈路狀態資料庫的內容是一樣的。兩個同步的路由器叫做完全相鄰的路由器。不是完全相鄰的路由器表明它們雖然在物理上是相鄰的,但是其鏈路狀態資料庫並沒有達到一致。當一個路由器剛開始工作的時候,只能通過問候分組得知它有哪些相鄰的路由器在工作,以及將資料發往相鄰路由器所需的代價。如果所有的路由器都把自己的本地鏈路狀態資訊進行全網廣播,則各個路由器只要將這些鏈路狀態資訊綜合起來就能得到鏈路狀態資料庫。但是這樣做的開銷太大,隨意OSPF讓每個路由器用資料庫表述分組和相鄰路由器交換本資料庫中已有的鏈路狀態摘要資訊。摘要嘻嘻主要就是指出哪些路由器的鏈路狀態資訊已經寫入資料庫。經過與相鄰路由器交換資料庫描述分組後,路由器就是用鏈路狀態請求分組,向對方請求傳送自己所缺少的某些鏈路狀態專案的詳細資訊。通過一系列的分組交換,全網同步的鏈路資料庫就簡歷了。若網路執行中,某個路由器的鏈路狀態發生變化,該路由器就要使用鏈路狀態更新分組,用洪泛法向全網更新鏈路資訊。
為了確保鏈路狀態資料庫與全網的狀態保持一致,OSPF還規定每隔一段時間就要重新整理一次資料庫中的鏈路狀態。每隔路由器的鏈路狀態只涉及到與相鄰路由器的連通狀態,所以與整個網際網路的規模並沒有直接關係,即使網際網路的規模很大時,OSPF協議要比RIP協議好得多。設N個路由器連線在乙太網上,每個路由器要向其他N-1個路由器傳送鏈路狀態資訊,所以共有(N-1)2個鏈路狀態要在這個乙太網上傳送。OSPF協議對這種多點介入的區域網採用了指定的路由器的方法,是廣播的資訊量大大減小。OSPF將一個自治系統劃分為若干個更小的範圍,叫做區域。每個區域都有一個32位的區域識別符號。一個區域內的路由器最好不要超過200個。
BGP外部閘道器協議
首先,一個自治系統就是處於一個管理機構控制之下的路由器和網路群組。它可以是一個路由器直接連線到一個LAN上,同時也連到Internet上;它可以是一個由企業骨幹網互連的多個區域網。在一個自治系統中的所有路由器必須相互連線,執行相同的路由協議,同時分配同一個自治系統編號。自治系統之間的連結使用外部路由協議,例如BGP.
在一個自治系統中,其IP資料報分為本地流量和通過流量。在自治系統中,本地流量是起始或終止於該自治系統的流量,即其信源IP地址或者信宿IP地址所指定的主機位於該自治系統。其他的流量成為通過流量。使用BGP的一個目的就是減少通過流量。自治系統可以分為以下三種類型。
一.殘樁自治系統(stub AS),與其他自治系統只有單個連線,即其只有本地流量。
二.多介面自治系統(multihomed AS),與其他自治系統有多個連線,但拒絕傳送同通過流量。
三.轉送自治系統(transit AS),與其他自治系統有多個連線,在一些策略準則之下,可以傳送本地流量和通過流量。
RIP或者OSPF主要是設法使資料報在一個自治系統中儘可能有效的從原站傳送到目的地站。而一個自治系統內部不需要考慮其他方面的策略。而BGP是不同的自治系統的路由器之間進行通訊的外部閘道器協議。由於因特網規模太大,BGP在不同的自治系統間選擇路由非常困難。如果使用鏈路狀態協議,每個路由器需要維護很大的鏈路狀態資料庫並且還要考慮自治系統的不同型別。所以,BGF只能尋找一條能夠到達目的地的網路並且是較好的路由,但並不是最佳路由。BGP採用的演算法是路徑向量路由選擇協議。
與RIP和SOFP不同的是,BGP使用TCP作為其傳輸協議。兩個執行BGP的系統之間建立一條TCP連線,然後交換整個BGP路由表。
CIDR無分類編址
首先介紹兩級IP地址及其缺陷:
分類的IP地址(A/B/C/D/E類IP地址)為兩級IP地址,分為網路號和主機號。
1二級的IP地址空間利用率有的時候很低。例如一個C類地址最多包含256-2=254個主機,如果一個網路擁有289個主機,就需要分配一個B類地址。這樣地址利用率太低。
2每一個網路都分配一個網路號會使得路由表變得太大而影響路由表查詢的效率,單單C類地址可指派的網路總數就是2^21-1個。
3兩級IP地址不夠靈活。例如一個單位需要在新的地點開通一個新的網路。但是新的IP地址申請下來之前,新增加的網路是無法連線因特網進行工作。
由於上述問題,引出了劃分子網的做法。劃分子網的基本思路如下:
1一個擁有許多物理網路的單位,將自己的物理網路劃分為若干個子網。劃分子網純屬單位內部的事情。本單位外網路是不知道這個網路到底是有多少個子網的,這個單位對外表現還是一個網路。
2劃分子網的做法是從網路的主機號中借用若干位作為子網號同時主機號也就相應減少了同樣的位數。兩級IP地址就變為了三級IP地址,由網路號、子網號、主機號組成。對於上面第一個問題,可以給那個網路分配兩個C類地址,即網路號16位,子網號6位,主機號10位。
3凡是從其他網路傳送給本單位的某個主機的IP資料報,仍然是根據IP資料報的目的網路號(即本單位的網路號)找到連結在本單位網路的路由器。再由本單位的路由器按照目的網路號和子網號找到目的子網,交付給目的主機。對於上面的第二個問題,網路中的路由器只需要記錄單位網路(即包含多個子網的打網路)的路由器即可。對於第三個問題,如果需要開通一個新的網路,只需要增加原來單位網路的子網號,就可以再多增加新的子網,但是同時每個子網中所能包含的主機數目會相應減少。
劃分子網增加了靈活性,但是由於RFC950規定,子網號不能為全1或全0,卻減少了能夠連線在網路上的主機總數。不過隨著CIDR的廣泛使用,現在全1和全0的子網號也可以使用了,不過需要注意路由器的路由選擇軟體是否支援。
CIDR:構造超網
CIDR消除了傳統的分類IP地址的概念,有效的利用了IP地址空間。其表示方法為網路字首+主機號。可以使用斜線記法即IP地址後面加上斜線“/”然後再加上網路字首所佔的位數。CIDR把網路字首相同的連續IP地址組成一個CIDR地址塊。
例如:某家公司使用4個B類網路:分部A的IP地址為172.16.0.0/16,分部B的IP地址為172.17.0.0/16,分部C的IP地址為172.18.0.0/16,分部D的IP地址為172.19.0.0/16,可以將它們合併為一個地址塊:172.16.0.0/14,它代表全部4個B類網路,這種操作是CIDR,因為合併跨越了B類網路的邊界。(該舉例來自http://blog.sina.com.cn/s/blog_56c321170100ddlo.html)
上例所採用的方法為路由聚合,這使得路由表中的一個專案可以表示原來傳統分類地址的很多歌路由。路由聚合也成為構成超網。
在使用CIDR時,由於採用了網路字首這種記法,IP地址由網路字首和主機號這兩個部分組成,因此在路由表中的專案也要有相應的改變。每個專案由網路字首和下一跳地址組成。但是在查詢路由表時可能會得到不止一個匹配結果,準則為最長匹配。例如路由表中含有206.0.68.0/22和206.0.71128/25兩項,一個目的IP地址為206.0.71.130,該地址與前述路由表中的兩項均匹配,則匹配後者。對於這些地址塊兒,路由器中建立一個二叉線索樹的結構,查詢的時候從根節點逐層向下層延伸查詢,具體演算法不再贅述。