一徊哑、引言
選路是IP層最重要的功能之一殿雪。該選路規(guī)則核心一點(diǎn)是每一個(gè)主機(jī)都維護(hù)了一張路由表。IP層進(jìn)行的選路實(shí)際上是一種選路機(jī)制谤牡,它搜索路由表并決定向哪個(gè)網(wǎng)絡(luò)接口發(fā)送分組。
二姥宝、原理
在路由表中翅萤,是有一定的搜索規(guī)則來確定數(shù)據(jù)包發(fā)送網(wǎng)絡(luò)端口的:
- 先搜索搜索匹配的主機(jī)地址;
- 沒有找到,搜索匹配的網(wǎng)絡(luò)地址套么;
- 再?zèng)]有找到培己,搜索默認(rèn)表項(xiàng)(默認(rèn)表項(xiàng)一般在路由表中被指定為一個(gè)網(wǎng)絡(luò)表項(xiàng),其網(wǎng)絡(luò)號(hào)為 0)胚泌。
可以使用netstat -rn
列出當(dāng)前主機(jī)的路由表:
說明省咨,每一行表示一個(gè)路由表項(xiàng),第一行中的第一列為0.0.0.0玷室,這是一個(gè)默認(rèn)路由表表項(xiàng)零蓉。每個(gè)主機(jī)都有一個(gè)或多個(gè)默認(rèn)路由。
- 第1列(Destination):指明目的地穷缤,搜索該列敌蜂。
- 第2列(Gateway):該網(wǎng)絡(luò)/主機(jī)的網(wǎng)關(guān)地址。
- 第3列(Genmask):該主機(jī)/網(wǎng)絡(luò)的子網(wǎng)掩碼津肛。
- 第4列(Flags):標(biāo)志位章喉,有5種不同的標(biāo)志位
- U:有該值表示當(dāng)前路由表項(xiàng)可用,沒有表示不可用身坐;
- G:有該值表示當(dāng)前路由是到一個(gè)網(wǎng)關(guān)(路由器)秸脱,沒有表示目的地與該主機(jī)是直接相連的;
- H:有該值表示當(dāng)前表項(xiàng)的目的地是一個(gè)主機(jī)(中間可能跳轉(zhuǎn)多次部蛇,不一定直接相連)摊唇,沒有該值表示當(dāng)前路由表項(xiàng)的目的地是一個(gè)網(wǎng)絡(luò)。
- D:有該值表示該表項(xiàng)由路由重定向報(bào)文創(chuàng)建搪花,沒有不是遏片;
- M:有該值表示該表項(xiàng)由路由重定向報(bào)文修改,沒有不是撮竿。
- 第5列(MSS):Default maximum segment size for TCP connections over this route.
- 第6列(Window):Default window size for TCP connections over this route.
- 第7列(irtt):Initial RTT (Round Trip Time). The kernel uses this to guess about the best TCP protocol parameters without waiting on (possibly slow) answers.
- 第8列(Ifac):該路由表項(xiàng)屬于哪個(gè)網(wǎng)絡(luò)接口(一臺(tái)主機(jī)可以有多個(gè)網(wǎng)絡(luò)接口)
三吮便、路由表的創(chuàng)建
從來沒有說過這些路由表是如何被創(chuàng)建的彻亲,這里介紹如何創(chuàng)建路由表拼弃。通常有三種方式來創(chuàng)建路由表-route(主動(dòng)添加)、ICMP重定向差錯(cuò)數(shù)據(jù)包(被動(dòng)修改)肉渴、ICMP路由發(fā)現(xiàn)請(qǐng)求/應(yīng)答數(shù)據(jù)包(主動(dòng)詢問)房蝉。
1. 路由表可以是在系統(tǒng)初始化的時(shí)候通過route
命令來添加默認(rèn)路由僚匆。
這是一種手動(dòng)添加方式。
2. 通過ICMP重定向差錯(cuò)數(shù)據(jù)包
當(dāng)IP數(shù)據(jù)包應(yīng)該被發(fā)送到另一個(gè)路由器時(shí)搭幻,收到數(shù)據(jù)包的路由器就要發(fā)送ICMP重定向差錯(cuò)報(bào)文給ICMP數(shù)據(jù)包的發(fā)送端咧擂。ICMP重定向數(shù)據(jù)包只能有路由器生成,主機(jī)接收使用檀蹋。
- 主機(jī)想發(fā)送一份IP數(shù)據(jù)包給R2松申,但通過查找路由表只找到R1的表項(xiàng)。主機(jī)將IP數(shù)據(jù)包發(fā)送給R1
- R1通過網(wǎng)絡(luò)端口A接收到該IP數(shù)據(jù)包;
- R1查找自己路由表到R2的表項(xiàng)贸桶,發(fā)現(xiàn)轉(zhuǎn)發(fā)端口也是A舅逸。這時(shí)候發(fā)送一份ICMP差錯(cuò)重定向數(shù)據(jù)包給IP數(shù)據(jù)包的源(主機(jī))。
- R1將IP數(shù)據(jù)包轉(zhuǎn)發(fā)給R2皇筛。
- 主機(jī)收到R1發(fā)過來的ICMP差錯(cuò)重定向數(shù)據(jù)包后琉历,根據(jù)數(shù)據(jù)包修改自己的相應(yīng)的路由表項(xiàng)。這時(shí)候從主機(jī)發(fā)送IP數(shù)據(jù)包給R2就能直接發(fā)送過去了水醋。
重定向一般用來讓具有很少選路信息的主機(jī)逐漸建立更完善的路由表旗笔。主機(jī)啟動(dòng)時(shí)路由表中可以只有一個(gè)默認(rèn)表項(xiàng)。一旦默認(rèn)路由發(fā)生差錯(cuò)离例,默認(rèn)路由器將通知它進(jìn)行重定向换团,并允許主機(jī)對(duì)路由表作相應(yīng)的改動(dòng)。
ICMP差錯(cuò)重定向數(shù)據(jù)包格式如下:
ICMP重定向數(shù)據(jù)包的接收者必須查看三個(gè)IP地址:( 1 )導(dǎo)致重定向的IP地址(原IP數(shù)據(jù)包的目標(biāo)地址)宫蛆; ( 2 )發(fā)送重定向報(bào)文的路由器的IP地址(主機(jī)路由表該表項(xiàng)中的下一跳地址)艘包;( 3 )應(yīng)該采用的路由器IP地址(要修改的IP地址)。
3. ICMP路由發(fā)現(xiàn)請(qǐng)求/應(yīng)答數(shù)據(jù)包
主機(jī)在引導(dǎo)以后要廣播或多播傳送一份ICMP路由器請(qǐng)求報(bào)文耀盗。一臺(tái)或更多臺(tái)路由器響應(yīng)一份路由器應(yīng)答報(bào)文想虎。另外,路由器定期地廣播或多播傳送它們的路由器應(yīng)答報(bào)文叛拷,允許每個(gè)正在監(jiān)聽的主機(jī)相應(yīng)地更新它們的路由表舌厨。
IP地址必須是發(fā)送路由器的某個(gè)地址。優(yōu)先級(jí)是一個(gè)有符號(hào)的 32 bit整數(shù)忿薇,指出該IP地址作為默認(rèn)路由器地址的優(yōu)先等級(jí)裙椭,這是與子網(wǎng)上的其他路由器相比較而言的。值越大說明優(yōu)先級(jí)越高署浩。優(yōu)先級(jí)為 0 x 8 0 0 0 0 0 0 0說明對(duì)應(yīng)的地址不能作為默認(rèn)路由器地址使用揉燃,盡管它也包含中通告報(bào)文中。優(yōu)先級(jí)的默認(rèn)值一般為 0筋栋。
都看到這里了炊汤,要不要掃二維碼關(guān)注一下微信公眾號(hào)林灣村龍貓。