计算机网络--路由表生成算法

路由表

路由表是指路由器或者其他互联网网络设备上存储的一张路由信息表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。

在Linux下可以使用route查看路由表:
这里写图片描述
其中
- Destination是目的网络地址
- Gateway是下一跳地址
- Genmask是子网掩码
- Iface是发送接口
- Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发,因此下一跳地址处记为* 号。
- Iface是发送接口

例:
这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另⼀一个网络接口连到192.168.56.0/24网络。

如果要发送的数据包的目的地址是192.168.56.3,跟他的子网掩码(255.255.255.0)做与运算得到192.168.56.0,与目的网络地址不符,再跟第二行的子网掩码做与运算得到192.168.56.0,正是第⼆行的目的网络地址,因此从eth1接口发送出去,由于192.168.56.0/24正是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发。

如果要发送的数据包的目的地址是202.10.1.2,跟前三行路由表条目都不匹配,那么就要按缺省路由条目,从eth0接口发出去,首先发往192.168.10.1路由器,再让路由器根据它的路由表决定下⼀跳地址。

路由选择算法

  1. 向量-距离算法
    向量-距离路由选择算法
    路由器周期性地向其相邻路由器广播自己知道的路由信息,用以通知相邻路由器自己可以到达的网络以及到达该网络的距离。相邻路由器可以根据收到的路由信息修改和刷新自己的路由表。
    优点是算法简单、易于实现。缺点是慢收敛问题,路由器的路径变化需要像波浪一样从相邻路由器传播出去,过程缓慢。

  2. 链路-状态路由选择算法
    链路-状态算法(link-status,简称L-S),也叫最短路径优先(shortest path first SPF)算法,它的主要做法如下:

    • 首先由路由器向相邻路由器发送查询报文,测试和它相邻路由器的链路状态。如果可以收到相邻路由器发回的响应,则说明该相邻路由器和这个路由器之间可以正常通信;
    • 在收到该路由器和其他相邻路由器的链路状态后,还向系统中所有参加最短路径优先算法的路由器发送链路状态报文;
    • 各路由器收到其他路由器发来的链路状态报文后,根据报文中的数据刷新本路由器所保存的网络拓扑结构图。如果链路发生变化,路由器将启用Dijkstra算法生成新的最短路径优先数,并刷新本地路由表;
  3. LS算法
    采用LS算法时,每个路由器必须遵循以下步骤:

    • 确认在物理上与之相连的路由器并获得它们的IP地址。当一个路由器开始工作后,它首先向整个网络发送一个“HELLO” 分组数据包。每个接收到数据包的路由器都将返回一条消息,其中包含它自身的IP地址。
    • 测量相邻路由器的延时(或者其他重要的网络参数,比如平均流量)。为做到这一点,路由器向整个网络发送响应分组数据包。每个接收到数据包的路由器返回一个应答分组数据包。将路程往返时间除以2,路由器便可以计算出延时。(路程往返时间是网络当前延迟的量度,通过一个分组数据包从远程主机返回的时间来测量。)该时间包括了传输和处理两部分的时间——也就是将分组数据包发送到目的地的时间以及接收方处理分组数据包和应答的时间。
    • 向网络中的其他路由器广播自己的信息,同时也接收其他路由器的信息。
      在这一步中,所有的路由器共享它们的知识并且将自身的信息广播给其他每一个路由器。这样,每一个路由器都能够知道网络的结构以及状态。
    • 使用一个合适的算法,确定网络中两个节点之间的最佳路由。
      在这一步中,路由器选择通往每一个节点的最佳路由。它们使用一个算法来实现这一点,如Dijkstra最短路径算法。
      在这个算法中,一个路由器通过收集到的其他路由器的信息,建立一个网络图。这个图描述网络中的路由器的位置以及它们之间的链接关系。每个链接都有一个数字标注,称为权值或成本。这个数字是延时和平均流量的函数,有时它仅仅表示节点间的跃点数。
      例如,如果一个节点与目的地之间有两条链路,路由器将选择权值最低的链路。
  4. Dijkstra算法
    Dijkstra算法执行下列步骤:

    • 路由器建立一张网络图,并且确定源节点和目的节点,在这个例子里我们设为V1和V2。然后路由器建立一个矩阵,称为“邻接矩阵”。在这个矩阵中,各矩阵元素表示权值。例如,[i, j]是节点Vi与Vj之间的链路权值。如果节点Vi与Vj之间没有链路直接相连,它们的权值设为“无穷大”。
    • 路由器为网路中的每一个节点建立一组状态记录。此记录包括三个字段:
      前序字段——表示当前节点之前的节点。
      长度字段——表示从源节点到当前节点的权值之和。
      标号字段——表示节点的状态。每个节点都处于一个状态模式:“永久”或“暂时”。
    • 路由器初始化(所有节点的)状态记录集参数,将它们的长度设为“无穷大”,标号设为“暂时”。
    • 路由器设置一个T节点。例如,如果设V1是源T节点,路由器将V1的标号更改为“永久”。当一个标号更改为“永久”后,
      它将不再改变。一个T节点仅仅是一个代理而已。
    • 路由器更新与源T节点直接相连的所有暂时性节点的状态记录集。
    • 路由器在所有的暂时性节点中选择距离V1的权值最低的节点。这个节点将是新的T节点。
    • 如果这个节点不是V2(目的节点),路由器则返回到步骤5。
    • 如果节点是V2,路由器则向前回溯,将它的前序节点从状态记录集中提取出来,如此循环,直到提取到V1为止。这个节点列表便是从V1到V2的最佳路由。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值