IP路由表的标志前言查看IP路由表路由表搜索步骤IP

前言

本文主要整理了下IP路由表的几个标志的意思,至于IP选路机制及详细过程,如有需要建议查阅相关资料。

查看IP路由表

  • windows系统

        netstat -r或者route PRINT,route PRINT命令后也可指定匹配信息,具体可看帮助信息(route --help)

  • linux系统

        netstat -r或者route.

    其实两个系统的命令都差不多。本文以ubuntu示例说明。

路由表搜索步骤

        发送本机数据报(或者转发分组),需要搜索路由表确定从哪个网络接口发送到下一跳路由或目的地。下面是搜索步骤,按序(参考自《TCP/IP详解 卷一》:

  1. 搜索匹配的主机地址;

  2. 搜索匹配的网络地址;

  3. 搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为0)

       下面提供个示例说明:

       我自己的笔记本上,装了个虚拟机Ubuntu系统,路由表如下(使用了-n参数,不看网络名):

  1. 0.0.0.0是默认路由项,如果不加-n参数,就是default
  2. 39.156.66.18(百度的IP)是主机路由表项,打开百度,从路由先搜索到这个匹配的主机地址,就从接口eth0发送了;
  3. 如果目的IP是192.56.76.8,主机路由表项没有匹配的,就会搜索网络路由表项,匹配到192.56.76.0,从接口eth0发送出去(就这一个网卡,凑合理解吧,反正只能从这个网卡走)
  4. 如果目的IP是172.88.88.88,主机路由表项不匹配,网络路由表项不匹配,就走默认路由了(0.0.0.0),好吧还是从接口eth0出去了。

IP路由表包含的标志

        上面截图Flags那一列的标志字段。

        p.s. 下面的标志,只是其中的大部分,还有个别及不确定的未包含。

  • U:路由可用。看上面的示例截图,除了感叹号那个,其它是都有这个标志。
  • H:目标是一个主机。主机路由:该路由是到一个主机,目的地址是一个完整的主机地址。如果主机匹配,直接走这个路由。反之,如果不存在这个标志,如截图中的网络路由,说明目的地址是一个网络号或者网络号与子网号的组合。
  • G:该路由是路由到一个网关(如路由器)。该项存在,说明是间接路由,下一跳到一个网关,多次路由后可能到达目标主机,与之相反的是直接路由(不存在G标志)。直接路由与间接路由的区别是:直接路由的目的IP地址和目的mac地址都指向最终目的地,而间接路由的话,目的IP地址指向最终目的地的IP,但是目的mac地址是网关的地址。个人认为其实还是因为链路层数据帧传输不关心IP 。
  • R:恢复动态路由的路由
  • D:由选路守护进程或重定向报文创建的路由,比如重定向报文是不允许主机发送(只能是路由器),在同一局域网下,主机A发送一个报文到了路由器A,路由查找路由后发给了路由器B,这个报文主机是可以直接发送给路由器B的,路由器A就是发送一个重定向的ICMP报文给主机,主机在路由表中新增一条到路由器B的路由项
  • M:被重定向报文或选路守护进程修改的路由项
  • !:这个上面截图有,强制路由失败的,打个比方,有个主机(或网络)如果在路由表中匹配不到,最终走默认路由,但是如果指定了!这个操作(拒绝),其实在路由表中找到了,不会走默认路由,但作为路由失败处理(强制路由失败操作)。