读书笔记七:TCP/IP详解之IP选路(静态路由协议) 和动态路由协议
IP选路的介绍
需要进行选路的数据报可以由本机产生,也可以由其他主机产生。若是其他主机产生,主机必须配置成一个路由器,否则通过网络接口接收到的数据报,如果目的地址不是本机,就要被丢弃。
选路原理
IP搜索路由表的几个步骤:
1) 搜索匹配的主机地址;
2) 搜索匹配的网络地址;
3) 搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为 0)。
××匹配主机地址步骤始终发生在匹配网络地址步骤之前。
IP层进行的选路实际上是一种【选路机制】,它搜索路由表并决定向哪个网络接口发送分组。
这区别于【选路策略】,它只是一组决定把哪些路由放入路由表的规则。IP执行选路机制,而路由守护程序则一般提供选路策略。
一个简单的路由表
在命令行输入命令:
netstat -rn
显示如下:
目的地址 网关 子网掩码 标志位 接口
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。
路由表标志(Flags字段):
- U 该路由可用.
- G 该路由通过路由转发与目的地址相连,无此标志表示本机与目的地址是直接相连的.
- H 该路由的目的地址为主机地址,无此标志表示目的地址为网络地址,换句话说Destination就应该写成一个网络号和子网号的组合,而不包括主机号(主机号码处为0),例如 192.168.11.0
- D 该路由由重定向报文创建.
- M该路由已经被重定向报文修改G说明这是一个网关,如果你要发数据给Destination,IP头应该写Destination的IP地址,而数据链路层的MAC地址就应该是GateWay的Mac地址了;反之,如果没有G标志,那么数据链路层和IP层的地址应该是对应的。H说明了Destination的性质,如果是H的,则说明该地址是一个完整的地址,既有网络号又有主机号,那么再匹配的时候就既要匹配网络号,又要匹配主机号;反之,Destination就代表一个网络,在匹配的时候只要匹配一下网络号就可以了。
此时,IP选路的方式就可以更加具体化了。如下:
- 首先用IP地址来匹配那些带H标志的DestinationIP地址(主机地址)。
- 如果1失败就匹配那些网络地址。
- 如果2失败就发送到Default网关
顺便提一下那个GenMask(还记得子网掩码么),它指定了目的地址的子网号,例如第一条的子网就是11
ICMP主机与网络不可达错误
当路由器收到一份IP数据报但不能转发时,将向原始发送端发送ICMP’主机不可达’差错报文.
ICMP的IP重定向报文
当IP包在某一个地方转向的时候,都回给发送IP报的源主机一个ICMP重定向报文,而源主机就可以利用这个信息来更新自己的路由表,这样,随着网络通信的逐渐增多,路由表也就越来越完备,数据转发的速度也会越来越快。我们需要注意的是:
- 重定向报文只能由路由器发出。
- 重定向报文为主机所用,而不是为路由器所用。
在主机引导的时候,一般会发送在网内广播一个路由请求的ICMP报文,而多个路由器则会回应一个路由通告报文。而且,路由其本身不定期的在网络内发布路由通告报文,这样,根据这些报文,每一个主机都会有机会建立自己的路由表而实现网络通信。路由器在一份通告报文中可以通告多个地址,并且给出每一个地址的优先等级,这个优先等级是该IP作为默认路由的等级,至于怎么算的就不深究了。
路由器一般会在450-600秒的时间间隔内发布一次通告,而一个给定的通告报文的寿命是30分钟。而主机在引导的时候会每三秒发送一次请求报文,一旦接受到一个有效的通告报文,就停止发送请求报文。
举例如下:
如图,主机与R2实际上在同一个局域网下。
1.主机有一份数据要发往R2,但是由于主机的路由表中没有R2的信息,所以数据报发给默认网关R1;
2.R1通过自己的路由表发现R2是该IP数据报的下一站;
3.当R1把数据报发给R2时,发现接收主机数据报使用的端口和发送给R2使用的端口相同(即主机与R2在同一局域网下);
4.R1向主机发送ICMP重定向报文,修改主机的路由表,以后主机直接把数据报发往R2.
举例如下:
如图,主机与R2实际上在同一个局域网下。
1.主机有一份数据要发往R2,但是由于主机的路由表中没有R2的信息,所以数据报发给默认网关R1;
2.R1通过自己的路由表发现R2是该IP数据报的下一站;
3.当R1把数据报发给R2时,发现接收主机数据报使用的端口和发送给R2使用的端口相同(即主机与R2在同一局域网下);
4.R1向主机发送ICMP重定向报文,修改主机的路由表,以后主机直接把数据报发往R2.
ICMP重定向报文的接收者必须查看3个IP地址:
1.导致重定向的地址(即ICMP重定向报文的数据位于IP数据报的首部);
2.发送重定向报文的路由器的IP地址(包含重定向信息的IP数据报中的源地址);
3.应该采用的路由器IP地址(在ICMP报文中的4 ~ 7字节)。
××重定向报文只能由路由器生成,而不能由主机生成。另外,重定向报文是为主机而不是为路由器使用的!
动态选路协议的介绍
上面讲的是静态选路:通过默认方式生成路由表项(对于直接连接的接口),并通过route命令增加表项,或者通过ICMP重定向生成表项。
而如果上诉三种方法都不能满足,那么我们就使用动态选路。下面讨论动态选路,它用于路由器间的通信。包括 RIP, OSPF, BGP 以及 CIDR。
动态选路协议是用于动态选路的重要组成部分,但是他们只是使用在路由器之间,相邻路由器之间互相通信。系统(路由选择程序)选择比较合适的路由放到核心路由表中,然后系统就可以根据这个核心路由表找到最合适的网路。也就是说,动态选路是在系统核心网络外部进行的,它只是用一些选路的策略影响路由表,而不会影响到最后通过路由表选择路由的那一部分。选路协议有一大类常用的叫做内部网管协议IGP。而在IGP中,RIP就是其中最重要的协议。一种新的IGP协议叫做开放最短路径优先(OSPF)协议,其意在取代RIP。如今,任何支持动态选路的路由器都必须同时支持OSPF和RIP,还可以选择性的支持其他的IGP协议。
BGP是边界网关协议,为外部网关协议。
RIP--选路信息协议
RIP是一种分布式的基于距离矢量的路由选择协议,其最大优点就是实现简单,开销较小。
管理距离120,使用跳数作为度量值来衡量路径的优劣,取值范围0-15, 16跳标识路由不可达。
RIP缺点:
- 其限制了网络的规模,能使用的最大距离为15(16表示不可达)。
- 路由器交换的信息是路由器的完整路由表,因而随着网络规模的扩大,开销也就增加。
- “坏消息传播得慢”,使更新过程的收敛时间过长。因此对于规模较大的网络就应当使用OSPF协议。然而目前在规模较小的网络中,使用RIP协议的仍占多数。
RIP报文包含在UDP数据报中;每个报文最多携带25个路由;RIP常用的UDP端口号是520;RIP不支持子网;同一自治系统(AS)中的路由器每30秒会与相邻的路由器交换子讯息,以动态的建立路由表。
OSPF:开放最短路径优先
与采用距离向量的RIP协议不同的是, OSPF是一个链路状态协议。距离向量的意思是,RIP发送的报文包含一个距离向量(跳数)。每个路由器都根据它所接收到邻站的这些距离向量来更新自己的路由表。
在一个链路状态协议中,路由器【并不与其邻站交换距离信息】。它采用的是每个路由器主动地测试与其邻站相连链路的状态,将这些信息发送给它的其他邻站,而邻站将这些信息在自治系统中传播出去。每个路由器接收这些链路状态信息,并建立起完整的路由表。
ospf分组交换不依赖于tcp与udp协议,只依赖于ip。
rip和ospf的比较
BGP:边界网关协议
BGP是不同自治系统的路由器之间进行通信的外部网关协议。BGP 路由器对之间通过TCP连接来相互通信。
BGP是一个距离向量协议,但是与(通告到目的地址跳数的)RIP不同的是, BGP列举了到每个目的地址的路由(自治系统到达目的地址的序列号)。这样就排除了一些距离向量协议
的问题。采用16 bit 数字表示自治系统标识。
CIDR无类域间路由
无类型域间选路(CIDR)是一个防止Internet路由表膨胀的方法,它也称为超网(supernetting)。“无类型”的意思是现在的选路决策是基于整个 32 bit IP 地址的掩码操作,而不管其IP地址是A类、B类或是C类,都没有什么区别。
思想:适当分配多个合适的IP地址,使得这些地址能够进行聚合,减少这些地址在路由表中的表项数。
如,给某个网络分配16个C类地址,采用适当的方法分配这些地址,使得16个地址能够聚合成一个地址。