网络层协议(3):静态选路

选路是IP最重要的功能之一,下图是IP层处理过程的简单流程:

这里写图片描述

需要进行选路的数据报可以由本地主机产生,也可以由其他主机产生。在后一种情况下,主机必须配置成一个路由器,否则通过网络接口收到的数据报,如果目的地不是本机就要被丢弃。

在Unix系统中,大多数普通的守护进程都是路由程序和网关程序(术语daemon指的是运行在后台的进程,它代表整个系统执行某些操作。daemon一般在系统引导时启动,在系统运行期间一直存在)。如上图所示的路由表经常被IP访问(在一个繁忙的主机上,一秒钟可能要访问几百次),但是它被路由器守护程序更新的频度却要低好多(可能大约30秒钟一次)。当接收到ICMP重定向报文时,路由表也要更新。我们还可以用netstat命令来显示路由表。

选路的基本原理
开始讨论IP选路之前,首先要理解内核是如何维护路由表的。路由表中包含的信息决定了IP层所做的所有决策:
1.搜索匹配的主机地址
2.搜索匹配的网络地址
3.搜索默认表项(默认表项一般在路由表中被指定一个网络表现,其网络号为0)。匹配主机地址步骤始终发生在匹配网络地址步骤之前。IP层进行的选路实际上一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。

简单路由表
这是一个小的网络结构:

这里写图片描述

我们在主机srv上执行netstat命令,先来看看一张简单的主机路由表:

Destination    Gateway       Flags  Refcnt  Use   Interface
140.252.13.65  140.252.13.35 UGH    0       0     emd0
127.0.0.1      127.0.0.1     UH     1       0     lo0
default        140.252.13.33 UG     0       0     emd0
140.252.13.32  140.252.13.34 U      4       25043 emd0  

第一行说明,如果目的地址是140.252.13.65(slip主机),那么网关(路由器)将把分组发给140.252.13.65(bsdi)。这正是我们所期望的,因为主机slip通过SLIP链路与bsdi相连接,而bsdi和svr4在同一个以太网上。

我们先得来看看路由的定义,这个词描述的是一种行为:路由是把信息从源穿过网络传递到目的的行为,在路上,至少遇到一个中间节点。对于一个给定的路由器,可以打印出五种不同的标志(flags):
U 该路由可以使用;
G 该路由是到一个网关(路由器)。如果没有设置该标志,说明目的地址是直接相连的。
H 该路由是到一个主机,也就是说,目的地址是一个完整的主机地址。如果没有设置标志,说明该路由是到一个网络,而目的地址是一个网络地址:一个网络号,或者网络号与子网号的组合。

标志G是非常重要的,因为它区分了直接路由和间接路由:
直接路由(有G标志):发往直接路由的分组不但具有指明目的端的IP地址,还需指明去链路层地址。
间接路由(无G标志):采用这一项的路由分组其IP地址是目的地址(140.252.13.65),但是其链路层地址必须对应于路由器140.252.13.35;

在这里,我们还需要理解H和G之间的区别,G标志区分了直接路由和间接路由,但是H标志表明,目的地址是一个完整的主机地址,没有设置H标志说明目的地址是一个网络地址(主机号部分为0)。输出中的目的地址140.252.13.32是指所在以太网地址。H标志没有设置,说明目的地址(140.252.13.32)是一个网络地址,其主机地址部分设为0。事实上,是它的低5位设为0。由于这是一个直接路由,网关列出的IP地址是外出接口的地址,就是接口自己本身的地址

输出的第三行是默认路由。每个主机都有一个或者多个默认路由。这一项表明,如果在表中没有找到特定的路由,就把分组发送到路由器140.252.13.33(sun主机)。这说明当前主机srv4利用这一个路由表项就可以通过Internet经路由器sun(及其SLIP链路)访问其他的系统。

现在,我们根据上述IP操作的步骤使用这个路由表为主机svr4上的一些分组例子选择路由:
1.假定目的地址是主机sun,140.252.13.33。首先进行主机地址的匹配。路由表中的两个主机地址表项(slip和localhost)均不匹配,借着进行网络地址的匹配。这一次匹配成功,找到表项140.252.13.52,(网络号与子网号都相同), 因此使用emd0接口。这是一个直接路由,因此链路层将是目的端的地址。
2.假定目的地址是主机slip,140.252.13.65。首先在路由表搜索主机地址,并找到一个匹配地址。这是一个间接路由,因此目的端的IP地址仍然是140.252.13.65,但是链路层必须是网关140.252.13.65的链路层地址,其接口名为emd0。

ICMP主机与网络不可达差错
现在我们来假设一种情况,那就是如果路由表中没有默认项,而有没有找到匹配项。其结果取决于该IP数据报是由主机产生的还是被转发的。如果数据报是由本地主机产生的,那么就给发送该数据报的应用程序返回一个差错,或者是”主机不可达差错”或者是“网络不可达差错”。如果是被转发的数据报,那么就给原始发送端发送一份ICMP主机不可达的差错报文。

ICMP重新定向报文
我们来看看下面的例子:
1.我们假定在一个以太网内,主机发送一个IP数据报给R1。这种选路决策经常发生,因为R1是该主机的默认路由;
2.R1收到数据报并且检查它的路由表,发现R2是发送该数据报的下一站。当它把数据报发送给R2时,R1检测到它正在发送的接口与数据报到达的接口是相同的(即主机和两个路由器所在的LAN)。这样就给路由器发送重新定向报文提供了线索;
3.R1发送一份ICMP重定向报文给主机,所诉它以后可以把数据报发送给R2而不是R1
这就是一个重新定向的例子,重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表,其通过接收重定向报文来逐步学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值