一、引言
选路是IP层最重要的功能之一。该选路规则核心一点是每一个主机都维护了一张路由表。IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。
二、原理
在路由表中,是有一定的搜索规则来确定数据包发送网络端口的:
- 先搜索搜索匹配的主机地址;
- 没有找到,搜索匹配的网络地址;
- 再没有找到,搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为 0)。
可以使用
netstat -rn
列出当前主机的路由表:
- 第1列(Destination):指明目的地,搜索该列。
- 第2列(Gateway):该网络/主机的网关地址。
- 第3列(Genmask):该主机/网络的子网掩码。
-
第4列(Flags):标志位,有5种不同的标志位
- U:有该值表示当前路由表项可用,没有表示不可用;
- G:有该值表示当前路由是到一个网关(路由器),没有表示目的地与该主机是直接相连的;
- H:有该值表示当前表项的目的地是一个主机(中间可能跳转多次,不一定直接相连),没有该值表示当前路由表项的目的地是一个网络。
- D:有该值表示该表项由路由重定向报文创建,没有不是;
- M:有该值表示该表项由路由重定向报文修改,没有不是。
- 第5列(MSS):Default maximum segment size for TCP connections over this route.
- 第6列(Window):Default window size for TCP connections over this route.
- 第7列(irtt):Initial RTT (Round Trip Time). The kernel uses this to guess about the best TCP protocol parameters without waiting on (possibly slow) answers.
- 第8列(Ifac):该路由表项属于哪个网络接口(一台主机可以有多个网络接口)
三、路由表的创建
从来没有说过这些路由表是如何被创建的,这里介绍如何创建路由表。通常有三种方式来创建路由表-route(主动添加)、ICMP重定向差错数据包(被动修改)、ICMP路由发现请求/应答数据包(主动询问)。