一個簡單的路由表html
選路是IP層最重要的一個功能之一。前面的部分已經簡單的講過路由器是經過何種規則來根據IP數據包的IP地址來選擇路由。這裏就不重複了。首先來看看一個簡單的系統路由表。linux
Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.11.0 * 255.255.255.0 U 0 0 0 eth0 169.254.0.0 * 255.255.0.0 U 0 0 0 eth0 default 192.168.11.1 0.0.0.0 UG 0 0 0 eth0
對於一個給定的路由器,能夠打印出五種不一樣的flag。
1.U代表該路由可用。
2.G代表該路由是到一個網關。若是沒有這個標誌,說明和Destination是直連的,而相應的Gateway應該直接給出Destination的地址。
3.H代表該路由是到一個主機,若是沒有該標誌,說明Destination是一個網絡,換句話說Destination就應該寫成一個網絡號和子網號的組合,而不包括主機號(主機號碼處爲0),例如 192.168.11.0
4.D代表該路由是爲重定向報文建立的
5.M該路由已經被重定向報文修改
U沒啥可說的,G說明這是一個網關,若是你要發數據給Destination,IP頭應該寫Destination的IP地址,而數據鏈路層的MAC地址就應該是GateWay的Mac地址了;反之,若是沒有G標誌,那麼數據鏈路層和IP層的地址應該是對應的。H說明了Destination的性質,若是是H的,則說明該地址是一個完整的地址,既有網絡號又有主機號,那麼再匹配的時候就既要匹配網絡號,又要匹配主機號;反之,Destination就表明一個網絡,在匹配的時候只要匹配一下網絡號就能夠了。
這樣,IP選路的方式就能夠更加具體化了。以下
1.首先用IP地址來匹配那些帶H標誌的DestinationIP地址。
2.若是1失敗就匹配那些網絡地址。
3.若是2失敗就發送到Default網關
順便提一下那個GenMask(還記得子網掩碼麼),它指定了目的地址的子網號,例如第一條的子網就是11。網絡
其餘有關路由表的知識操作系統
通常,咱們在配置好一個網絡接口的時候,一個路由就被直接建立好了。固然咱們也能夠手動添加路由。用route add命令就能夠了。
而當一個IP包在某一個路由器的時候發現沒有路由可走,那麼該路由器就會給源主機發送「主機不可達」或者「網絡不可達」的ICMP包來報錯。
注意,通常的操做系統默認是沒有路由功能的,這須要本身配置。這些歷史緣由就不細說了。htm
ICMP的IP重定向報文和路由發現報文接口
當IP包在某一個地方轉向的時候,都回給發送IP報的源主機一個ICMP重定向報文,而源主機就能夠利用這個信息來更新本身的路由表,這樣,隨着網絡通訊的逐漸增多,路由表也就愈來愈完備,數據轉發的速度也會愈來愈快。咱們須要注意的是:
1.重定向報文只能由路由器發出。
2.重定向報文爲主機所用,而不是爲路由器所用。
在主機引導的時候,通常會發送在網內廣播一個路由請求的ICMP報文,而多個路由器則會迴應一個路由通告報文。並且,路由其自己不按期的在網絡內發佈路由通告報文,這樣,根據這些報文,每個主機都會有機會創建本身的路由表而實現網絡通訊。路由器在一份通告報文中能夠通告多個地址,而且給出每個地址的優先等級,這個優先等級是該IP做爲默認路由的等級,至於怎麼算的就不深究了。
路由器通常會在450-600秒的時間間隔內發佈一次通告,而一個給定的通告報文的壽命是30分鐘。而主機在引導的時候會每三秒發送一次請求報文,一旦接受到一個有效的通告報文,就中止發送請求報文。
在TCP/IP詳解編寫的時候,只有Solaris2.x支持這兩種報文,大多數系統還不支持這兩種報文。(後面還會講到一些有用的路由報文)ip
動態選路協議路由
前面的選路方法叫作靜態選路,簡要地說就是在配置接口的時候,以默認的方式生成路由表項。並經過route來增長表項,或者經過ICMP報文來更新表項(一般在默認方式出錯的狀況下)。 而若是上訴三種方法都不能知足,那麼咱們就使用動態選路。
動態選路協議是用於動態選路的重要組成部分,可是他們只是使用在路由器之間,相鄰路由器之間互相通訊。系統(路有選擇程序)選擇比較合適的路由放到核心路由表中,而後系統就能夠根據這個核心路有表找到最合適的網路。也就是說,動態選路是在系統核心網絡外部進行的,它只是用一些選路的策略影響路由表,而不會影響到最後經過路由表選擇路由的那一部分。選路協議有一大類經常使用的叫作內部網關協議(IGP),而在IGP中,RIP就是其中最重要的協議。一種新的IGP協議叫作開放最短路經優先(OSPF)協議,其意在取代RIP。另外一種最先用在網路骨幹網上的IGP協議--HELLO,如今已經不用了。
現在,任何支持動態選路的路由器都必須同時支持OSPF和RIP,還能夠選擇性的支持其餘的IGP協議。get
Unix選路程序io
Unix系統上面一般都有路由守護程序--routed。還有一個叫作gate。gate所支持的協議要比routed多,routed只是支持RIPv1版本。而gate則支持RIPv一、v2,BGPv1 等等。
RIP:選路信息協議
它的定義能夠在RFC1058內找到,這種協議使用UDP做爲載體(也就是UDP的上層協議)。咱們最關心的就是RIP其中的一個段,叫作度量的段,這是一個以hop做爲計數器(就是以走過多少路由爲計數器)的段(IP協議裏面也有一個TTL不是麼)。這個度量段將最終影響到路由表的創建。
通常說來routed要承擔以下的工做:
1.給每個已知的路由器發送rip請求報文,要求其餘路由器給出完整的路由表。這種報文的命令字段爲1,地址字段爲0,度量地段爲16(至關於無窮大)。
2.接受請求,若是接收到剛纔的那個請求,就把本身的完整的路由表交給請求者。若是沒有,就處理IP請求表項,把表項中本身有的部分添上跳數,沒有的部分添上16。而後發給請求者。
3.接受迴應。更新本身的路由表。使用hop數小的規則。
4.按期更新路由表,通常是30s(真頻繁)給相鄰的路有啓發一次本身的路由表。這種形式可使廣播形式的。
這個協議看起來會工做的很好,可是,這裏面其實有不少隱藏的憂患,好比說RIP沒有子網的概念,好比說環路的危險。並且hop數的上限也限制了網絡的大小。
所以,出現了不少RIPv1的替代品,好比說RIPv2,好比說OSPF。他們都是經過某種策略來影響路由表,因此就不說了。