IP路由

之前的博客已经初步介绍了IP路由的步骤,《TCP/IP详解卷一》中花费了一章讲解,这一章提到了一些新的知识点,所以在此做一个总结。

主机也可以被配置成路由器(操作系统中有相应的配置参数),否则,主机在接收到不属于自己的报文时会丢弃该报文,路由表的每隔30s更新一次,接收到ICMP重定向报文后会立刻更新,IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。这区别于选路策略,它只是决定把哪些路由放入路由表的规则。

在windows下,输入netstat -rn,可以看到路由表,下面来看看Linux下的路由表:


Destination:路由的终点。

Gateway:负责转发的路由器。

Genmask:子网掩码。

Flags:各字段意义如下:

U:路由可用。

G:这条路由到达的是路由器,若没有这个字段,表示直接相连。

H:这条路由到达的是主机,若没有设置,表示到达的是一个网络。

D:路由来自重定向。

M:路由被重定向修改。

G字段非常重要,该字段可以区分无向路由和有向路由,有向路由不会设置G字段,两者的区别如下:

无向路由:报文上的目的IP地址为目的地的IP地址,MAC地址为下一跳路由器的地址。

有向路由:报文上的目的IP地址和MAC地址均为目的地的地址(即直接相连)。

Ref:指定该路由有多少使用者(例如TCP在该路由上建立了连接)。

use iface:指定发送接口的名称。

Metric:路由算法用来确定到达目的地的最佳路径的计量标准

路由表的初始化

当一个接口在配置时,有向路由会被直接配置,对于点到点链接和环回接口,目的地址为主机,对于直连到某个网络的接口,目的地址为网络地址。

添加路由的方式

1、使用route指令,在windows命令行下输入route,可以看到相关用法。

2、通过路由协议(只有路由器可以使用,相关知识请查看路由协议)。

3、路由发现协议。(运用ICMP路由发现报文)

若没有默认路由和匹配路由导致无法转发或是发送报文怎么办?有如下两种情况

1、发送源主机没找到路由,则会返回错误信息给应用程序。

2、无法转发,则会返回ICMP主机不可达错误给发送源。

ICMP主机和路由不可达错误

当路由器接收到不可转发(不是TTL区域为1或0,而是路由表中没有对应的路由)的报文时会返回ICMP主机不可达错误

ICMP重定向错误

当IP数据报应该被发送到另一个路由器时,收到报文的路由器就要发送ICMP重定向错误报文给发送源,只有当主机可以选择路由器发送分组的情况下,我们才可能看到ICMP重定向报文。

并不是说报文被发错,而是说发送源的路由不是最佳路由,打个比方,去A地有b、c两条路径,b比c短,而我们的主机却选择了路径c

下面举个例子,例子来源于《TCP/IP详解卷一》


假设主机与R2在同一个网络上,主机的默认路由为R1,主机要发送报文给R2。

1、主机将报文发送给默认路由R1。

2、R1选择路由转发报文,但此时R1发现用于转发的接口和接收报文的接口一致,说明下一跳的路由器和发送源在同一个网络上。

3、R1返回ICMP重定向错误报文给发送源,修改发送源的路由表的对应路由。

何时发送ICMP重定向报文呢?

1、路由器用于转发报文的发送接口与接收到报文的接口必须一致。
2、数据包的源IP地址和该包应走的下一跳IP地址属于同一个网段。
3、数据报非源路由的(由于源路由是我们希望IP报文走的路线)。
4、系统开启重定向功能

ICMP重定向报文结构:


代码数值的含义:


服务类型指的是IP头部的TOS。

ICMP重定向报文由路由器产生,不是主机,只能被主机利用,不能被路由器使用,路由器中的路由改变和路由协议有关。

ICMP路由发现报文

该报文用于设置默认路由

在引导后,主机广播或是组播路由器请求报文,报文结构如下:


路由器接收到该报文后,发送ICMP路由器通告报文给发送源,报文结构如下:


地址数:路由器地址的个数。

地址项长度:一项的字节长度(图中的路由器地址和优先级即为一项),计算公式为地址项长度*32.

生存时间:通告的地址有效的时间,单位为s。作用下面会讲。

路由器地址:发送通告报文的路由器拥有的诸多IP地址中的一个。

优先级:作为默认路由的优先级,越大表示优先级越高,默认为0, 优先级为0x80000000的路由器地址不会作为默认路由。



路由器操作

当路由器启动时,它定期在所有广播或多播传送接口上发送通告报文。准确地说,这些通告报文不是定期发送的,而是随机传送的,以减小与子网上其他路由器发生冲突的概率。一般每两次通告间隔450秒和600秒。一份给定的通告报文默认生命周期是30分钟。

生存时间的作用:当路由器上的某个接口被关闭时。路由器可以在该接口上发送最后一份通告报文,并把生存时间设为0.

除了定期发送主动提供的通告报文以外,路由器还要监听来自主机的请求报文,并发送路由器通告报文以响应这些请求报文。如果子网上有多台路由器,由系统管理员为每个路由器设置优先等级。例如,主默认路由器就要比备份路由器具有更高的优先级。

主机操作

主机在引导期间一般发送三份路由器请求报文,每三秒钟发送一次。一旦接收到一个有效的通告报文,就停止发送请求报文。主机也监听来自相邻路由器的请求报文。这些通告报文可以改变主机的默认路由器。另外,如果没有接收到来自当前默认路由器的通告报文,那么默认路由器会超时。只要有一般的默认路由器,该路由器就会每隔10分钟发送通告报文,报文的生命周期是30分钟。这说明主机的默认表项是不会超时的,即使错过一份或两份通告报文。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值