IP选路
Posted lovelaker007
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IP选路相关的知识,希望对你有一定的参考价值。
原理
ip层搜索路由表时,按照主机完全匹配,网络匹配,默认表项的顺序。
下图是一个较简单的路由表
简而言之,路由表指明了对于目的IP为destination的ip数据报,要发往的下一站的地址。
路由的Flags字段
U表示该路由可以使用
G:有G标志表示该路由的gateway地址是下一站路由器地址,称之为间接路由。没有G称之为直接路由,按直接路由发送时,ip层目的地址(这个地址不会变)和链路层地址相对应。按间接路由发送时,两者不对应。
H:有H表示该路由是主机匹配路由,具有最高优先权;没有表示是网络匹配路由,具有第二优先权。
destination为default的路由是默认路由,当没有路由匹配时,按此路由发送。
上面图片的最后一条,表示网络匹配,当ip目的地址时本子网的主机时,使用该直接路由,转发的时候链路层和ip层地址匹配(都指向子网中的某台主机)。该路由的gateway是本机地址,当本机收到该数据帧时,会将数据帧直接发送到子网上的主机。
default条路由,表示ip地址是非子网地址,将其转发到140.252.13.33,该地址是路由器的地址。一般路由器收到数据帧之后转发到自己的对端地址,对端地址位于另一个子网,由此实现了数据帧的跨子网传递。
当svr4收到ip分组需要转发时,有下面时一些示例
假定目的地址是主机sun,140.252.13.33。首先进行主机地址的匹配。路由表中的两个主机地址表项(slip和localhost)均不匹配,接着进行网络地址匹配。这一次匹配成功,找到表项140.252.13.32(网络号和子网号都相同),因此使用emd0接口。这是一个直接路由,因此链路层地址将是目的端的地址。
假定目的地址是主机slip,140.252.13.65。首先在路由表搜索主机地址,并找到一个匹配地址。这是一个间接路由,因此目的端的IP地址仍然是140.252.13.65,但是链路层地址必须是网关140.252.13.34的链路层地址,其接口名为emd0。
假如通过Internet给主机aw.com(192.207.117.2)发送一份数据报。首先在路由表中搜索主机地址,失败后进行网络地址匹配。最后成功地找到默认表项。该路由是一个间接路由,通过网关140.252.13.33,并使用接口名为emd0。
假如给本机发送一份数据报。有四种方法可以完成这件事,用主机名、主机IP地址、环回名或者环回IP地址:
ftp svr4
ftp 140.252.13.34
ftp localhost
ftp 127.0.0.1
在前两种情况下,对路由表的第2次搜索得到一个匹配的网络地址140.252.13.32,并把IP报文传送给以太网驱动程序。但是IP报文中的目的地址为本机IP地址,因此报文被送给环回驱动程序,然后由驱动程序把报文放入IP输出队列中。
在后两种情况下,由于指定了环回接口的名字或IP地址,第一次搜索就找到匹配的主机地址,因此报文直接被送给环回驱动程序,然后由驱动程序把报文放入IP输出队列中。
上述四种情况报文都要被送给环回驱动程序,但是采用的两种路由决策是不相同的。
添加路由的route命令:
route add default sun 1
route add slip bsdi 1
第3个参数(default和slip)代表目的端,第4个参数代表网关(路由器),最后一个参数代表路由的度量(metric)。route命令在度量值大于0时要为该路由设置G标志,否则,当耗费值为0时就不设置G标志。
ICMP重定向差错
简而言之,当主机T1收到数据转发时,按照路由表转发给T2,T2离最终目的地更近。T1会向源主机发送ICMP重定向差错,源主机收到后会更新路由表,以后相同的目的地直接交由T2转发。
规范的说产生重定向报文的条件如下:
数据报接收的入口和指定的出接口是同一个接口,意思即为路由器从接口a收到数据报后,根据数据报目的ip地址进行路由匹配,发现要发往的下一跳地址的接口和a相同。此时该路由器便是“多余的”,因为源主机直接将数据报交友下一跳转发更方便。
数据报的源IP地址和该包应走的下一跳IP地址属于同一个网段。
数据报非源路由的(这种情况应该比较少见了,源路由多见于Token Ring)。
系统开启重定向功能。
报文格式如下
开始的四个字节符合前面介绍的ICMP报文通用格式,此处类型字段为5,代码字段为0-3。
接收者可以从重定向报文中获得三个ip地址:
引发重定向的ip地址
发送重定向报文的ip地址
后续应该使用的路由器的ip地址。
利用这三个值可以更新一条路由。
以上是关于IP选路的主要内容,如果未能解决你的问题,请参考以下文章