网络基础------------路由

啥为路由

路由的工作在TCP/IP四层协议栈的网络层,通过转发分组实现网络互连,并连接两个子网IP。是指从源端到目的端时路径的进程。在我们国家,路由器一般支持TCP/IP协议。路由器根据网络层的地址和路由器内部维护的路由表决定下一跳地地址,分组到达路由时,更改链路层MAC帧的报头继续转发。
路由器主要实现的功能是
1)路由器知道应该走一跳
2)路由器虽然自己不知道下一跳,但是路由器知道谁知道
3)路由器与我们所要找的网络是同一个网络

路由的过程就是这样一跳一跳(Hop By Hop)“问路的过程”。所谓的一跳就是数据链路层中的一个区间,具体在以太网中指的是从源MAC地址到目的MAC地址之间的帧传输区间。

网络基础------------路由

IP数据包的过程也和问路的过程是一样

  • 当IP数据包到达路由器的时候,路由器会先查看目的IP。
  • 路由器决定这个数据包是直接发送给目标主机还是发送给下一个路由器
  • 上面的过程依次反复,直到到达目标IP地址

那么我们是如何判断当前的数据包是发送到哪里去?这个就是依靠的是每个节点内部维护的一个路由表。
网络基础------------路由

  • 路由表可以使用route命令进行查看
  • 如果目的IP命中了路由表,就直接进行转发即可(说明要找的路问对了)
  • 路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中的其他地址行都不匹配的时候,就按缺省路由条目规定的接口发送下一跳地址(我不知道这个路,但是我知道谁知道路)
    我们举个例子来说:
    网络基础------------路由

我们可以看到的是这台主机主要是有两个网络接口,一个网络接口连到了192.168.10.0/24网络,另一个网络接口连到了192.168.56.0/24网络。
Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳的地址,ifface是发送接口,Flags中的U标志表示的是此条目有效(可以禁用某些条目),G标志表示此条目的下一跳的地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经过路由器进行转发。

转发的过程例1:如果你要发送的数据包的目的地址是192.168.56.3

跟第一行的子网掩码做与运算得到是192.168.56.0,与第一行的目的网络识不符合的
再跟第二行的子网掩码做与运算的到的192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去。
由于192.168.56.0/24正是与eth1接口相连的网络,因此可以直接发到目的主机,不需要经路由器转发。

转发过程例2:如果要发送的数据包的目的地址是202.10.1.2

依次和路由表前几项进行对比,发现都不匹配
按缺省路由条目,从eth0接口发出去,发往192.168.10.1路由器(按默认的网关发送出去)
由192.168.10.1路由器根据它的路由表决定下一跳的地址

路由算法的区分要素

静态

严格意义上来说,静态算法并不能称之为算法。
是网络在开始运行前由网关建立的映射关系,在网关不更改的情况下,这种静态算法基本不会变,且设计也相对简单。但因为无法变化的原因,静态算法不能对网络关系的变化做出改变。所以在大型网络中并不适用。
  

动态

动态路由是在静态路由上发展出现的,当使用场景变大,网络服务存在变化,必须在某些用户不使用路由发送数据时,断开他的连接,给所需用户。且在最终不可分组路由时可以进行静态算法的补充。
  

路径算法

一些复杂的协议支持源端到目的端的多条路径,例如:源端A经路由B、路由C可以到达目的端E,A亦可以经路由D到达目的端E。此时,源端A到目的端E有两条路径可走,经过路径算法,将会选择一条最短、最高效、最快的路径。
本例中,若没有其他情况的话,路径算法将会选择A–D–E路径,但若是A–D路径发生拥塞,那么根据路径算法将会选择A–B–C–E路径。
  

平坦与分层

平坦路由工作在平坦的环境中,指的是每个路由之间的地位是平等的;在分层的路由系统中,各个路由网络犹如一个多叉树一般,存在主干路由,非主干路由上的数据由非主干路由流向主干路由,再由主干路由流向目的端所在的非主干路由。
例如:A是一个双亲节点,B和C是A的孩子节点,这里面,A、B、C都是路由,不同的是,A是主干路由,B、C是非主干路由,B的数据要往C发,路径为:B–A–C。

主机与路由器

一些路由算法中,因为源端路由功能的强大性,所以在源端发送数据时已经计算好源端数据的所有转发分组的路由路径。源端路由在探索过所有可以到达目的端的路径之后,根据算法,得到一个最佳路径。
主机智能系统通常能选择更佳的路径,因为在发送数据前,已经计算所有的路径而得到了一条最佳路径。
路由器智能则是每个路由均认为主机路由对路径一无所知,每个路由根据自己的算法将分组转发到下一个路由中。

路由算法的衡量标准

  因为路由算法多种多样,在何种情况下使用何种路由算法,则成了网络路由布置的重中之重,所以,路由的衡量标准必须最科学,最准确。
  1、可靠性
  路由算法计算得到的路径,在一段时间后可能失效,或者自身计算得到路径是一条不存在的路径,导致分组在网络中成为“流浪儿”。
  2、路径长度
  即分组在路由过程中转发的次数。
  3、路由延迟
  数据从源端发送,到目的端接收数据的所花时间。
  4、负载
  网络中路由器的繁忙程度。
  5、通信代价
  即通信花费的运作费,维护费等资金费用。

路径算法的代表算法

LS算法

 
在连接初,源端路由回向全网络中的各个路由发送一个分组数据包,每个路由则会回复给他一个分组数据包,其中包 含自己的IP地址。
  
  源端路由向全网络发送一个响应数据包,每个接收到的路由则会回复一个应答数组包,收到应答数据包后,将往返时间除以2,得到路由时间以及延时时间的总和。
  
  向网络中公布自己的信息,同时接收其他路由发来的信息。,这样,每个路由都会及时更新自己的路由表等其他信息,维持自己的路由信息时最新的。
  
  选择一个合适的算法,得到两个端的最佳路径。
  
  由此看来,LS算法貌似是一个站在大局上对待网络上所有路由的架构的建立,而不针对的那个路由之间的转发分组。

Dijkstra算法(迪杰斯特拉算法)

路由器先建立一张网络图,确定源端、目的端,然后建立一个邻接矩阵,每两个路由节点之间都有自己的链路权值,例如a,b节点的链路权值就是[i,j],i和j分别是a路由和b路由的权值。
  
路由器为每个节点维护一个状态记录,包含三个字段:
 1、前序字段–当前节点的前一节点;
 2、长度字段–从源端到当前路由的权值之和;
 3、标号字段–表示节点的状态–永久或暂时
  
 然后路由器初始化所有节点的状态纪录,长度设置为无穷大,标号为暂时。

 路由器将源端路由的标号设为“永久”,记为T节点,随即检查与标号为“永久”节点直接相连的理由节点,选择路径最近节点将其标号设为“永久”,此节点为最新的T节点。
  
 检查当前T节点是否为目的端节点,如果不是,则继续上述操作,如果是,则根据回溯法记录经过的每一个节点,则为源端到目的端的路径。

链路算法

链路状态算法以图论作为理论基础,用图来表示网络拓扑结构,并利用图论中的最短路径算法来计算网络间的最佳路由,因此链路状态算法又被称作最短路径优先算法SPF。

Bellman-Ford算法

Bellman - ford算法是求含负权图的单源最短路径的一种算法,效率较低,代码难度较小。其原理为连续进行松弛,在每次松弛时把每条边都更新一下,若在n-1次松弛后还能更新,则说明图中有负环,因此无法得出结果,否则就完成。

距离向量算法

距离矢量路由协议(distance vector routing protocol)是为小型网络环境设计的。在大型网络环境下,这类协议在学习路由及保持路由将产生较大的流量,占用过多的带宽。如果在9 0秒内没有收到相邻站点发送的路由选择表更新,它才认为相邻站点不可达。

每隔30秒,距离向量路由协议就要向相邻站点发送整个路由选择表,使相邻站点的路由选择表得到更新。这样,它就能从别的站点(直接相连的或其他方式连接的)收集一个网络的列表,以便进行路由选择。距离向量路由协议使用跳数作为度量值,来计算到达目的地要经过的路由器数。
例如,R I P使用B e l l m a n - F o r d算法确定最短路径,即只要经过最小的跳数就可到达目的地的线路。最大允许的跳数通常定为1 5。那些必须经过1 5个以上的路由器的终端被认为是不可到达的。
距离向量路由协议有如下几种: IP RIP、IPX RIP、A p p l e Talk RT M P和I G R P。