TCP/IP学习笔记(5)-IP选路

一个简单的路由表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。他们都是经过某种策略来影响路由表,因此就不说了。

本文原创地址:https://www.linuxprobe.com/ip-routing.html

相关文章
相关标签/搜索