![d69e64060d8388599723ce3c99706881.png](https://i-blog.csdnimg.cn/blog_migrate/4426263e5a736b8a80fae472e225a558.jpeg)
![900694f2c51f587f83b2c9387c658ea7.png](https://i-blog.csdnimg.cn/blog_migrate/78b7a18311bc7172d19bad1cb1a2cd06.jpeg)
序言
在上一章,我们学习了IP地址的相关基础知识。有了IP地址以后,我们就能将分组数据分组数据发送到最终目标地址。一个数据包之所以能够成功地到达最终的目标地址,全靠路由控制。
发送数据包时所使用的地址是网络层的地址,即IP地址。然而仅仅有IP地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表(RoutingTable)。实现IP通信的主机和路由器都必须持有一张这样的表。它们也正是在这个表格的基础上才得以进行数据包发送的。
路由表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫静态路由控制,而后者叫做动态路由控制。
为了让动态路由及时刷新路由表,在网络上互连的路由器之间必须设置好路由协议,保证正常读取路由控制信息。IP协议始终认为路由表是正确的。然而,IP本身并没有定义制作路由控制表的协议。即IP没有制作路由控制表的机制。该表是由一个叫做“路由协议”的协议制作而成。
路由控制
IP地址的网络地址部分用于进行路由控制。如下图:
![cb9e55ef28ba5b3367cbddb84231c8fb.png](https://i-blog.csdnimg.cn/blog_migrate/fb21f00b609f22344483a76ff0f3c6cb.jpeg)
路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。所谓最为吻合是指相同位数最多的意思。
- 路由表
路由表中的每一项都包含下面这些信息:
- 目的IP地址。它既可以是一个完整的主机地址,也可以是一个网络地址,由该表目中的标志字段来指定。主机地址有一个非 0的主机号,以指定某一特定的主机,而网络地址中的主机号为0,以指定网络中的所有主机。
- 下一跳路由器的IP地址,或者有直接连接的网络 IP 地址。下一跳路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。下一跳路由器不是最终的目的,但是它可以把传送给它的数据报转发到最终目的。
- 标志。其中一个标志指明目的 I P 地址是网络地址还是主机地址,另一个标志指明下一跳路由器是否为真正的下一跳路由器,还是一个直接相连的接口。
- 默认路由
默认路由是指路由表中任何一个地址都能与之匹配的记录。默认路由一般标记为0.0.0.0/0或default。这里的0.0.0.0/0并不是指IP地址是0.0.0.0。由于后面是“/0”,所以并没有标识IP地址。它只是为了避免人们误以为0.0.0.0是IP地址。有时默认路由也被标记为default,但是在计算机内部和路由协议的发送过程中还是以0.0.0.0/0进行处理。
目的地不在路由器的路由表里的所有数据包都会使用默认路由。这条路由一般会连去另一个路由器,而这个路由器也同样处理数据包: 如果知道应该怎么路由这个数据包,则数据包会被转发到已知的路由;否则,数据包会被转发到默认路由,从而到达另一个路由器。每次转发,路由都增加了一跳的距离。
- 路由表聚合
路由表越大,管理它所需要的内存和CPU也就越多。并且查找路由表的时间也会越长,导致转发IP数据包的性能下降。如果想要构建大规模、高性能网络,则需要尽可能削减路由表的大小。
![eaadac2e3dde782be7ab6438dd9157f9.png](https://i-blog.csdnimg.cn/blog_migrate/d48ba1453573d20d53052a5e4906205d.jpeg)