《TCP/IP详解》学习笔记(五):IP选路、动态选路
靜態 IP 選路
1一個簡單的路由表
選路是 IP 層最重要的功能之一。前面的部分已經簡單的講過路由器是如何根據 IP 數據包的 IP 地址來選擇路由的。 這里就不重復了。
首先來看看一個簡單的系統路由表:
?
對于一個給定的路由器,可以打印出五種不同的 flag:
?
- ?U 表明該路由可用。
- ?G 表明該路由是到一個網關。如果沒有這個標志,說明和 Destination 是直連的,而相應的 Gateway 應該直接給出 Destination的地址。
- H 表明該路由是到一個主機,如果沒有該標志,說明 Destination 是一個網絡,換句話說 Destination 就應該寫成一個網絡號和子網號的組合,而不包括主機號(主機號碼處為0),例如 192.168.11.0
- ?D 表明該路由是為重定向報文創建的
- M 該路由已經被重定向報文修改
U 沒啥可說的,G 說明這是一個網關,如果你要發數據給 Destination,IP 頭應該寫 Destination 的 IP 地址,而數據鏈路層的 MAC地址就應該是 GateWay 的 Mac 地址了;反之,如果沒有 G 標志,那么數據鏈路層和 IP 層的地址應該是對應的。H 說明了 Destination 的 性質,如果是 H 的,則說明該地址是一個完整的地址,既有網絡號又有主機號,那么再匹配的時候就既要匹配網絡號,又要匹配主機號;反 之,Destination 就代表一個網絡,在匹配的時候只要匹配一下網絡號就可以了。
這樣,IP 選路的方式就可以更加具體化了。如下:
?
- 首先用IP地址來匹配那些帶H標志的DestinationIP地址。
- 如果1失敗就匹配那些網絡地址。
- 如果2失敗就發送到Default網關
順便提一下那個 GenMask(還記得子網掩碼么),它指定了目的地址的子網號,例如第一條的子網就是11。
?
2其他有關路由表的知識
一般,我們在配置好一個網絡接口的時候,一個路由就被直接創建好了。當然我們也可以手動添加路由。用 route add 命令就可以了。而當一個 IP 包在某一個路由器的時候發現沒有路由可走,那么該路由器就會給源主機發送“主機不可達”或者“網絡不可達”的 ICMP包來報錯。
注意,一般的操作系統默認是沒有路由功能的,這需要自己配置。這些歷史原因就不細說了。
?
3ICMP 的 IP 重定向報文和路由發現報文
當 IP 包在某一個地方轉向的時候,都回給發送 IP 報的源主機一個 ICMP 重定向報文,而源主機就可以利用這個信息來更新自己的路由表,這樣,隨著網絡通信的逐漸增多,路由表也就越來越完備,數據轉發的速度也會越來越快。我們需要注意的是:
?
- 重定向報文只能由路由器發出。
- 重定向報文為主機所用,而不是為路由器所用。
在主機引導的時候,一般會發送在網內廣播一個路由請求的 ICMP 報文,而多個路由器則會回應一個路由通告報文。而且,路由其本身不定期的在網絡內發 布路由通告報文,這樣,根據這些報文,每一個主機都會有機會建立自己的路由表而實現網絡通信。路由 器在一份通告報文中可以通告多個地址,并且給出每一個地 址的優先等級,這個優先等級是該 IP 作為默認路由的等級,至于怎么算 的就不深究了。
路由器一般會在450-600秒的時間間隔內發布一次通告,而一個給定的通告報文的壽命是30分鐘。而主機在引導的時候會每三秒發 送一次請求報文,一旦接受到一個有效的通告報文,就停止發送請求報文。在 TCP/IP 詳解編寫的時候,只有 Solaris2.x 支持這兩種報文,大多數系統還不支持這兩種報文。(后面還會講到一些有用的路由 報文)
動態選路協議
前面的選路方法叫做靜態選路,簡要地說就是在配置接口的時候,以默認的方式生成路由表項。并通過 route 來增加表項,或者 通過 ICMP 報文來更新表項(通常在默認方式出錯的情況下)。 而如果上述三種方法都不能滿足,那么我們就使用動態選路。
動態選路協議是用于動態選路的重要組成部分,但是他們只是使用在路由器之間,相鄰路由器之間互相通信。系統(路有選擇程 序)選擇比較合適的路由放到核心路由表中,然后系統就可以根據這個核心路由表找到最合適的網路。也就是說,動態選路是在系統核心網絡外部進行的,它只是用一些選路的策略影響路由表,而不會影響到最后通過路由表選擇路由的那一部分。選路協議有一大類常用的叫做內部網關協議(IGP),而在 IGP 中,RIP 就是其中最重要的協議。一種新 的 IGP 協議叫做開放最短路經優先(OSPF)協議,其意在取代 RIP。另一種最早用在網路骨干網上的 IGP 協議--HELLO現在已經不用了。如今,任何支持動態選路的路由器都必須同時支持 OSPF 和 RIP,還可以選擇性的支持其他的 IGP 協議。
?
1Unix 選路程序
Unix 系統上面通常都有路由守護程序--routed。還有一個叫做 gate。gate 所支持的協議要比 routed 多,routed 只是支持 RIPv1
版本。而 gate 則支持 RIPv1、v2,BGPv1 等等。
?
2RIP:選路信息協議
它的定義可以在 RFC1058內找到,這種協議使用 UDP 作為載體(也就是 UDP 的上層協議)。我們最關心的就是 RIP 其中的一個段,叫做度量的段,這是一個以 hop 作為計數器(就是以走過多少路由為計數器)的段(IP 協議里面也有一個 TTL 不是么)。這個度 量段將最終影響到路由表的建立。
參考圖:
?
一般說來 routed 要承擔如下的工作:
?
- 給每一個已知的路由器發送 rip 請求報文,要求其他路由器給出完整的路由表。這種報文的命令字段為1,地址字段為0,度量 地段為16(相當于無窮大)。
- 接受請求,如果接收到剛才的那個請求,就把自己的完整的路由表交給請求者。如果沒有,就處理 IP 請求表項,把表項中自 己有的部分添上跳數,沒有的部分添上16。然后發給請求者。
- 接受回應。更新自己的路由表。使用 hop 數小的規則。
- 定期更新路由表,一般是30s(真頻繁)給相鄰的路有啟發一次自己的路由表。這種形式可以使廣播形式的。
這個協議看起來會工作的很好,但是,這里面其實有很多隱藏的憂患,比如說 RIP 沒有子網的概念,比如說環路的危險。而且 hop數的上限也限制了網絡的大小。因此,出現了很多 RIPv1的替代品,比如說 RIPv2,比如說 OSPF。他們都是通過某種策略來影響路由表,所以就不說了。
總結
以上是生活随笔為你收集整理的《TCP/IP详解》学习笔记(五):IP选路、动态选路的全部內容,希望文章能夠幫你解決所遇到的問題。