系列TCP/IP协议-静态IP选路(007)

1、引言

选路是IP层最重要的功能之一。该选路规则核心一点是每个主机都维护了一张路由表。IP层进行的选路其实是一种选路机制,它搜索路由表并决定向哪一个网络接口发送分组。微信

2、原理

在路由表中,是有必定的搜索规则来肯定数据包发送网络端口的:网络

  • 先搜索搜索匹配的主机地址;
  • 没有找到,搜索匹配的网络地址;
  • 再没有找到,搜索默认表项(默认表项通常在路由表中被指定为一个网络表项,其网络号为 0)。

能够使用netstat -rn列出当前主机的路由表: this

图1. 当前主机的路由表项
说明,每一行表示一个路由表项,第一行中的第一列为0.0.0.0,这是一个默认路由表表项。每一个主机都有一个或多个默认路由。

  • 第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):该路由表项属于哪一个网络接口(一台主机能够有多个网络接口)

3、路由表的建立

历来没有说过这些路由表是如何被建立的,这里介绍如何建立路由表。一般有三种方式来建立路由表-route(主动添加)、ICMP重定向差错数据包(被动修改)、ICMP路由发现请求/应答数据包(主动询问)。code

1. 路由表能够是在系统初始化的时候经过route命令来添加默认路由。

图2. route添加路由命令
这是一种手动添加方式。

2. 经过ICMP重定向差错数据包

当IP数据包应该被发送到另外一个路由器时,收到数据包的路由器就要发送ICMP重定向差错报文给ICMP数据包的发送端。ICMP重定向数据包只能有路由器生成,主机接收使用。 cdn

图3.ICMP差错重定向数据包产生过程

  • 主机想发送一份IP数据包给R2,但经过查找路由表只找到R1的表项。主机将IP数据包发送给R1
  • R1经过网络端口A接收到该IP数据包;
  • R1查找本身路由表到R2的表项,发现转发端口也是A。这时候发送一份ICMP差错重定向数据包给IP数据包的源(主机)。
  • R1将IP数据包转发给R2。
  • 主机收到R1发过来的ICMP差错重定向数据包后,根据数据包修改本身的相应的路由表项。这时候从主机发送IP数据包给R2就能直接发送过去了。

重定向通常用来让具备不多选路信息的主机逐渐创建更完善的路由表。主机启动时路由表中能够只有一个默认表项。一旦默认路由发生差错,默认路由器将通知它进行重定向,并容许主机对路由表做相应的改动。blog

ICMP差错重定向数据包格式以下: 接口

图4. ICMP差错重定向数据包结构

ICMP重定向数据包的接收者必须查看三个IP地址:( 1 )致使重定向的IP地址(原IP数据包的目标地址); ( 2 )发送重定向报文的路由器的IP地址(主机路由表该表项中的下一跳地址);( 3 )应该采用的路由器IP地址(要修改的IP地址)。图片

3. ICMP路由发现请求/应答数据包

主机在引导之后要广播或多播传送一份ICMP路由器请求报文。一台或更多台路由器响应一份路由器应答报文。另外,路由器按期地广播或多播传送它们的路由器应答报文,容许每一个正在监听的主机相应地更新它们的路由表。 ip

图片5. ICMP路由器请求数据包
图6. ICMP路由器应答数据包

IP地址必须是发送路由器的某个地址。优先级是一个有符号的 32 bit整数,指出该IP地址做为默认路由器地址的优先等级,这是与子网上的其余路由器相比较而言的。值越大说明优先级越高。优先级为 0 x 8 0 0 0 0 0 0 0说明对应的地址不能做为默认路由器地址使用,尽管它也包含中通告报文中。优先级的默认值通常为 0。路由

都看到这里了,要不要扫二维码关注一下微信公众号林湾村龙猫

微信公众号rudy_tan_home
相关文章
相关标签/搜索