摘自:《深入理解计算机网络》 王达著 机械工业出版社
相关知识链接
1. IPV4数据报头部格式
2. IPv6数据报头部格式
3. IPv4数据报的封装与解封装
4. IPv4数据报的分段与重组
5. ARP协议报文格式及ARP表
6. ARP地址解析原理
7. ICMP协议及报文格式
8. IPv6协议族的其它协议
路由和路由算法
网络层的主要功能就是将分组从源节点路由到目的节点中,而且在大多数计算机网络中,采用的是数据报分组交换的方式,数据报分组需要经过多跳(Hop,也就是要经过多少个路由器)才能到达目的地。
路由功能其实是一种数据报分组交换路径选择行为,是网络层的一种基本功能。路由功能与我们旅行或者运输货选择最佳路线是一个道理。下图所示的是我们假设要从北京发一封邮件到美国的旧金山朋友那里的示例。
从上图可以看出,发这样一封信可以有多条路线,不同路线又需采用不同的邮寄方式、不同线路长度和邮寄时间,当然运输成本也各不一样,最终选择哪条线路要综合邮寄成本、邮寄时间和途经邮局的可靠性等方面进行考虑。路由选择也是一样的,它要综合考虑许多因素,如线路长度、信道带宽、线路的稳定性、途经端口的开销等等。不同的路由算法所考虑的因素是不一样的。
路由的分类
路由是把信息从源节点通过网络传递到目的节点的行为,简单地讲路由就是指三层设备从一个接口上收到数据包,根绝数据包的目的地址进行定向,并转发到另一个接口的过程。但在这条路由路径上,至少需要一个中间结点,那就是提供路由功能的设备,如路由器和三层交换机。路由与桥接对比的主要区别在于,桥接发生在OSI参考协议的第二层(链接层),连接的是同一网络或同一子网的不同网段,而路由发生在第三层(网络层),连接的是不同网络或不同子网。
路由功能的实现是依靠路由器或三层交换机中的路由表进行的。路由又分为静态路由(Static Routing)和动态路由(Dynamic Routing)两大类。下面将分别介绍这两类路由。
静态路由
静态路由是我们经常需要配置的,特别是小型局域网中,因为它配置和管理都比较简单。总体来说,静态路由具有以下几个方面的特点。
手动配置
静态路由需要管理员根据实际需要一条条自己手动配置,路由器不会自动生成所需的静态路由。静态路由中包括目的节点或目的网络的IP地址,及数据包从当前路由器开始路由的第一个下一跳(通常是网关)所对应的接口或者IP地址。
路由路径固定不变
因为是静态路由,且静态,所以当网络的拓扑结构或链路的状态发生变化时,这些静态路由不能自动修改,需要网络管理员手动去修改路由表中相关信息。
不可通告性
静态路由信息在默认情况下是私有的,不会通告给其它路由器,也就是当在一个路由器上配置了某一条静态路由时,它不会被通告网络中相连的其它路由器。但网络管理员可以通过重新发布静态路由为其它动态路由,使得网络中其它路由器也可获得此静态路由
单向性
静态路由具有单向性,也就是它仅为数据提供沿着下一跳的方向进行路由,不提供方向路由。所以如果你想要使源节点与目的节点或网络进行双向通信,就必须同时配置回程静态路由。在现实应用中经常会遇到这样额问题,就是明明配置了到达某节点的静态路由,可还是Ping不通,其中一个重要的原因就是没有配置回程静态路由。
如下图所示,如果想要使得PC1(PC1已配置了A节点的IP地址10.16.1.2/24作为网关地址)能够Ping同PC2,则必须同时配置一下两条静态路由。
图片来自:你所不了解的静态路由特点及配置
正向路由:在R1路由器上配置了到达PC2的正向静态路由(以PC2 10.16.3.2/24 作为源节点,以C结点IP地址10.16.2.2/24 作为下一跳地址);
回程路由:在R2路由器上配置一条到达PC1的回程静态路由(以PC1 10.16.1.1/24 作为目的节点,以B结点IP地址10.16.2.1/24 作为下一跳地址),以提供Ping过程回程ICMP消息的路由路径。
接力性
如果某条静态路由中间经过的跳数大于1(也就是整条路由经历了三个或以上的路由器结点),则必须在除最后一个路由器外的其它路由上依次配置到达相同目的节点或目的网络的静态路由,这就是静态路由的接力,否则仅在源路由器上配置静态路由还是不可以的。
就像你要从长沙到北京去,假设中间要途经的站点包括:武汉—郑州—石家庄,可人家只告诉你目的地是北京,以及长沙出发的下一站是武汉。对于一个没有多少旅游经验的人来说,你不可能知道到了武汉后又该怎么走,必须有人告诉你到了武汉后再怎么走,到了郑州后又该怎么走,这就是接力性。
下图所示是一个三个路由器串联的简单网络,各个路由器及结点以及PC机的IP地址在图中做了标注,PC1已经配置好指向R1的A结点的地址的网关,现假设要使PC1能Ping通PC2,则需要配置一下四条路由(两条正向,两条反向)。
图片来自:你所不了解的静态路由特点及配置
- 在R1路由器上配置了到达PC2的正向静态路由(以PC2 10.16.4.2/24 作为目的节点,以C结点IP地址 10.16.2.2/24 作为下一跳地址)。
- 在R2路由器上配置了到达PC2的正向静态路由(以PC2 10.16.4.2/24 作为目的节点,以E结点IP地址 10.16.3.2/24 作为下一跳地址)。
- 在R3路由上配置一条到达PC1的回程静态路由(以PC1 10.16.1.1/24 作为目的节点,以D结点IP地址 10.16.3.1/24 作为下一跳地址),以提供Ping过程回程ICMP消息的路由路径。
- 在R2路由器上配置一条到达PC1的回程静态路由(以PC1 10.16.1.1/24 作为目的节点,以B结点IP地址 10.16.2.1/24 作为下一跳地址),以提供Ping过程回程ICMP消息的接力路由路径。
小Tip: 为啥不用配置PC1到B,C到D,E到PC2静态路由?
路由器各端口上所直接连接的各个网络都是直接互通的,因为它们之间默认就有直连路由,无需另外配置其它路由。也即连接在同一路由器上的各网络之间的跳数为0。如图7-3中R1路由器上连接的PC1 (10.16.1.1/24) 和 10.16.1.2/24 网络,R2路由器上连接的 10.16.2.2/24 和 10.16.3.1/24 网络,R3路由器上连接的 10.16.3.2/24 和PC2 (10.16.4.1/24) 网络都是直接互通的。也正因如此,在上图中,PC1要ping通PC2,只需要配置图中所示的正、反向各两条静态路由,而不用配置PC1到B,C到D,E到PC2静态路由(包括正向和回程路由)。
优先级较高
因为静态路明确指出了到达目的网络,后者目的节点的路由路径,所以在所有同目的地址的路由中,静态路由的优先级是除“直接路由”外最高的,也就是如果配置了到达某一网络或者某一结点的静态路由,则优先采用这条静态路由,只有当这条静态路由不可用时才会考虑选择其他的路由。
说明:在这里要特别注意一个方面,那就是默认路由的优先级。如果在一个路由器同时有一条目的地址相同的静态路由,则首先选择的是静态路由。要使对应的默认路由起作用,就必须删除相同目的网络或目的节点的静态路由,否则会冲突,默认路由不起作用。
适用小型网络
静态路由一般适用于比较简单的小型网络环境,因为在这样的环境中,网络管理员易于清楚的了解网络的拓扑结构,便于设置正确的信息。同时小型网络所需配置的静态路由条目不会太多。如果网络规模较大,拓扑结构比价复杂,则不宜太用静态路由,因为这样配置的工作量实在太大。
动态路由
静态路由对于小型化且变化不是很频繁的网络来说还是可行的,如局域网。但是对于较大型的广域网来说,由于拓扑结构较复杂,且网络结构可能经常变动,静态路由就不再适用了,通常采用更加灵活,更具自动特性的动态路由。总体来说,动态路由具有以下几个方面的特点:
自动生成
动态路由的一个最重要的特点就是在网络某条路由所包括的路由器同时启动了某种动态路由协议,通告了各自所直接连接的网络后,则这些路由器间就会自动生成这些路由器直接连接的网络间的路由表项,管理员无须一一手动创建。这对于较大型的网络来说,是最方面、简单的路由选择了。
自动调整
当网路结构发生改变,我们手动的静态配置也往往无法及时跟着改变,但动态路由可以随时根据网络拓扑结构的变化调整路由表项,同事还会自动删除无效的动态路由表项,更加方便路由管理。
自动通告
前面说了,一个路由器上的静态路由表项是一个路由器私有的,但是动态路由可以在相邻路由器上相互通告,以便及时反映拓扑结构的变化,生成新的动态路由表项。
自动生成双向路由
虽然单条动态路由也是单向的,但是路由器在生成某条路径的动态路由时会自动生成回程路由表项,也就是会同时双向路由表项。
仅可生成网络间的路由表项
动态路由仅可生成各路由器所直接连接的各个网络或子网间的路由表项,不能生成到达具体节点或主机的动态路由表项,如果仅需生成到达某个结点或主机的路由,则需要选择静态路由。
不同动态路由不兼容
动态路由根据所采用的路由算法的不同又可分为多种类型,如RIP(Routing Information Protocol 路由信息协议)、OSPF(Open Shortest Path First 开放最短路径优先)、EIGRP(Enhanced Interior Gateway Routing Protocol 增强内部网关协议)、IS-IS(Intermediate System-to-Intermediate System 中间系统到中间系统协议)、BGP(Border Gateway Protocol 边界网关协议)等。不同的动态路由协议主要使用的网络环境不一样,也是不兼容的,但可以进行相互重发布,我们将在后面的博客进行详细的介绍。