zoukankan      html  css  js  c++  java
  • TCP/IP 7 路由协议

    第7章 路由协议

    在互联网世界中,夹杂着复杂的LAN和广域网。然而,再复杂的网络结构中,也需要通过合理的路由将数据发送到目标主机。而决定这个路由的,正是路由控制模块。

    7.1 路由控制的定义

    7.1.1 IP地址与路由控制

    互联网是路由器连接的网络组合而成的。为了能让数据包正确地到达目标主机,路由器必须在途中进行正确地转发。这种“正确的方向”转发数据所进行的处理就叫做路由控制或路由。

    路由器根据路由控制表(routing table)转发数据包。它根据所收到的数据包中目标主机的IP地址与路由控制表的比较得出下一个应该接收的路由器。因此,这个过程中路由控制表的记录一定要正确无误。出现错误数据包就有可能无法到达目标主机。

    7.1.2 静态路由与动态路由

    路由控制分静态和动态两种类型。

    静态路由是指事先设置好路由器和主机中并将路由信息固定的一种方法。而动态路由是指让路由协议在运行过程中自动地设置路由控制信息的一种方法

    静态路由的设置通常是由使用者手工操作完成的。当需要增加一个新的网络时,需要将这个新被追加的网络信息设置在所有的路由器上。给管理者带来很大的负担。且在发生故障时,还需要手工改动。

    使用动态路由的情况下,管理员必须设置好路由协议,其设定过程的复杂程度与具体要设置路由协议的类型有直接关系。如果有一个新的网络被追加到原有的网络中时,只要在新增加网络的路由器上进行一个动态路由的设置即可。而不需要像静态路由那样,在其它所有路由器上进行修改。对于路由器个数较多的网络,采用动态路由显然是一个能够减轻管理员负担的方法。

    况且,网络上一旦发生故障,只要有一个可绕的其他路径,那么数据包就会自动选择这个路径,路由器的设置也会自动重置。路由器为了能够像这样定期相互交换必要的路由控制信息,会与相邻的路由器之间互发消息。这些互换的消息会给网络带来一定程度的负荷。

    静态路由与动态路由可组合使用。

    7.1.3 动态路由的基础

    路由器会给相邻路由器发送自己已知的网络连接信息,而这些信息又像接力一样依次传递给其它路由器,直至整个网络都了解时,路由控制表也就制作完成了。而此时也就可以正确转发IP数据包了。

    7.2 路由控制范围

    随着IP网络的发展,想要对所有网络统一管理是不可能的事。因此,人们根据路由控制的范围常使用 IGP(Interior gateway protocol)、EGP(exterior gateway protocol)两种类型的路由协议。

    内部网关协议(域内路由协议)、外部网关协议(域间路由协议)。

    7.2.1 接入互联网的各种组织机构

    7.2.2 自治系统与路由协议

    制定自己的路由策略,并以此为准在一个或多个网络群体中采用的小型单位叫做自治系统AS(Autonomous System)或路由选择域(Routing Domain)。

     自治系统(路由选择域)内部动态路由采用的协议是域内路由协议,即IGP。而自治系统之间的路由控制采用的是域间路由协议,即EGP。

    7.2.3  IGP与EGP

    路由协议大致分为两类。一类是外部网关协议EGP,另一类是内部网关协议IGP。

    IP地址分为网络和主机部分,它们有各自的分工。EGP与IGP的关系与IP地址网络部分和主机部分的关系有相似之处。就像根据IP地址中的网络部份在网络之间进行路由选择、根据主机部分在链路内部进行主机识别一样,可以根据EGP在区域网络之间(或ISP之间)进行路由选择,也可以根据IGP在区域网络内部(或ISP内部)进行主机识别。

    IGP中还可以使用RIP(routing information protocol,路由信息协议)、RIP2、OSPF(open shortest path first,开发式最短路径优先)等众多协议。与之相对,EGP使用的是BGP(border gateway protocol,边界网关协议)协议。

    7.3 路由算法:生成路由距离表

    路由控制有各种各样的算法,其中最具代表性的有两种,是距离向量算法(distance-vector)和链路状态算法(link-state)。

    链路状态算法LS:

    也称全局选路算法,用完整的、全局性的网络信息来计算从源到目的地之间的最低费用路径。由于具有全局状态信息,所以这种算法也称链路状态算法。它记录当前路由通往所有节点的最短路径信息。

      dijkstra算法:最短路径优先

      初始化时该路由到本地节点路径为0,到其它节点路径无限大;

      动态规划所有节点数目的次数,第n次计算本路由节点通过n条路经可以到达其它节点的最短路径。

      即从本地路由节点开始进行广度优先,每次更新通过n步可以到达的路由节点的最短路径。

    距离向量算法DV:

    距离向量算法DV是指根据距离(代价)和方向决定目标网络或目标主机位置的一种方法。

    以迭代的、分布式的方式计算出最低费用路径。和全局选路算法的区别在于,没有节点拥有关于所有网络链路费用的完整信息,每个节点仅有与直接相连链路的费用信息。

      分布式:每个节点从一个或多个直接相连的邻居接收某些信息,执行计算,然后将计算结果发回邻居。

      迭代:上述过程持续到邻居之间没有更多的信息要交换为止。

      异步:不要求所有节点相互之间步伐一致。

    DV使用公式:dx(y) = minv{ c(x,v) + dv(y) }更新x到y的距离。dx(y)是从x到y的最低费用路径,minv是指取遍x的所有邻居。

     好消息传的快,坏消息传的慢:

    • 好消息传的快
      • t0时:y检测到距x的费用由4变为1,更新其距离向量,并通知邻居
      • t1时:z收到来自y的更新报文并更新了其距离向量,计算出到x的新最低费用(5减为2)
      • t2时:y收到来自z的更新并更新其距离表,y的最低费用未改变,不发送报文,算法终止
    • 坏消息传的慢
      • t0时:y检测到距x的费用由4变为60,y更新其到x的距离为6(途经z,因为z的距离表中记录到x的距离为5),这是分布式的角度,从全局角度看,这个距离是错的,但分布式中节点的状态信息有效。开始出现选路环路,即为到达x,y通过z选路,z又通过y选路,不停来回反复
      • t1时:y将到达x的新费用告知z
      • t2时:z收到y的消息,z计算出从z到x是50,从y到x是7,所以更新到x的最低费用为7,并通知y这个改变
      • 上述过程会一直反复,直到z最终算出它经由y的路径费用大于50为止(此时到x不途经y),y将经由z到x(如果费用增加到10000甚至更多,开销可想而知)

    距离向量算法容易产生环路。

    7.3.3 主要路由协议

    RIP---UDP--距离向量---域内--不可以循环检测

    OSPF--IP--链路状态--域内--可以循环检测

    BGP--TCP--路径向量--对外连接--可以循环检测

    7.4 RIP

    RIP路由信息协议,是距离向量型的一种路由协议,广泛用于LAN。

    7.4.1 广播路由控制信息

    RIP将路由控制信息定期(30秒一次)向全网广播。如果没有收到路由控制信息,连接就会被断开。不过,这有可能是由于丢包导致的,因此RIP规定等待5次。如果6次(180秒)仍未收到路由信息,才会真正关闭连接。

    7.4.2 根据距离向量确定路由

    RIP基于距离向量算法决定路径。距离的单位为“跳数”。跳数是指所经过的路由器的个数。RIP希望尽可能少通过路由器将数据包转发到目标IP地址。根据距离向量生成距离向量表再抽出较小的路由生成最终的路由控制表。

    7.4.3 使用子网掩码时的RIP处理

    RIP虽然不交换子网掩码信息,但可以用于使用子网掩码的网络环境。不过在这种情况下需要注意以下几点:

      1)从接口的IP地址对应分类得出网络地址后,与根据路由控制信息流过此路由器的包中的IP地址对应的分类得出的网络地址进行比较。如果两者的网络地址相同,那么就以接口的网络地址长度为准。(IPv4地址分类按8的倍数的掩码)

      2)如果两者的网络地址不同,那么以IP地址的分类所确定的网络地址长度为准。

    例如,路由器的接口地址为192.168.1.33/27。这是一个C类地址,按照IP地址分类它的网络地址为192.168.1.33/24。与192.168.1.33/24相符合的IP地址,其网络地址长度被视为27位。除此之外的地址,则采用每个地址的分类所确定的网络地址长度。

    因此,采用RIP进行路由控制的范围内必须注意两点:一是,因IP地址的分类而产生不同的网络地址时;二是,构造网络地址长度不同的网络环境时。

    7.4.4 RIP中路由变更时的处理

    RIP的基本行为可归纳为如下两点:

      1)将自己所知道的路由信息定期进行广播。

      2)一旦认为网络被断开,数据将无法流过路由器,其它路由器也就可以得知网络已被断开。

    为了解决距离向量法中的无限循环问题:1)设置最长距离。或从时间上进行控制。2)规定路由器不再把所收到的路有消息原路返还给发送端。这也被称作水平分割。

    然而这些方法对有些网络来说是无法解决问题的。在网络本身就有环路的情况下反向的回路会成为迂回的通道,路由信息会不断地被循环往复地转发。当环路内部某一处发生通信故障时,通常可以设置一个正确的迂回通道。

    为了解决网络本身回路造成的问题,提出了“毒性逆转”和“触发更新”两种方法。

    毒性逆转是指当网络中发生链路被断开的时候,不是不再发送这个消息,而是将这个无法通信的消息传播出去。即发送一个距离为16地消息。触发更新是指当路由信息发生变化时,不等待30秒而是立刻发送出去的一种方法。有了这两种方法,在链路不通时,可以迅速传送消息以使路由信息尽快收敛。

    7.4.5 RIP2

    RIP2是RIP第二版。

    使用多播:RIP使用广播,RIP2改用了多播。

    支持子网掩码:与OSPF类似,RIP2支持在其交换的路由信息中加入子网掩码信息。

    路由选择域:与OSPF区域类似,在同一个网络中可以使用逻辑上独立的多个RIP。

    外部路由标志:通常用于把BGP等获得的路由控制信息通过RIP传递给AS内。

    身份验证密钥:与OSPF一样,RIP包中携带密码。只有在自己能够识别这个密码时才接收数据,否则忽略这个RIP包。

    7.5 OSPF

    开发最短路径优先。是一种链路状态算法。由于采用链路状态类型,所以即使网络中有环路,也能够进行稳定的路由控制。

    OSPF支持子网掩码。由此,曾经在RIP中无法实现的可变长度子网构造的网络路由控制成为现实。

    甚至为了减少网络流量,OSPF还引入了“区域”这一概念。区域是将一个自治网络划分为若干个更小的范围。由此,可以减少路由协议之间不必要的交换。

    7.5.1 OSPF是链路状态型路由器。路由器之间交换链路状态生成网络拓朴信息,然后再根据这个拓朴信息生成路由控制表。

    RIP地路由选择,要求途中所经过的路由器个数越少越好。与之相比,OSPF可以给每条链路赋予一个权重(也可以叫做代价),并始终选择一个权重最小的路径作为最终路由。也就是说OSPF以每个链路上的代价为度量标准,始终选择一个总的代价最小的一条路径。

    7.5.2 OSPF基础知识

    在OSPF中,把连接到同一个链路的路由器称作相邻路由器。在一个相对简单的网络结构中,例如每个路由器仅跟一个路由器相互连接时,相邻路由器之间可以交换路由信息。但是在一个比较复杂的网络中,就不需要在所有相邻地路由器之间都进行控制信息的交换,而是确定一个指定路由器,并以它为中心交换路由信息即可。

    RIP中包地类型只有一种。它利用路由控制信息,一边确认是否连接了网络,一边传送网络信息。但是这种方式,有一个严重的缺点,那就是网络的个数越多,每次所要交换的路由控制信息就越大。而且网络平稳时还要定期交换相同的路由控制信息。

    而在OSPF中,根据作用不同可以分为5种类型的包:

      1)问候:确认相邻路由器、确定指定路由器。确认是否连接。

      2)数据库描述:链路状态数据库的摘要信息

      3)链路状态请求:请求从数据库中获取链路状态信息

      4)链路状态更新:更新链路状态数据库中的链路状态信息

      5)链路状态确认应答:链路状态信息的确认应答

    7.5.3 OSPF工作原理概述

    OSPF中进行连接确认的协议叫做HELLO协议。

    LAN中每10秒发送一个HELLO包。如果没有HELLO包到达,则进行连接是否断开的判断。允许空等3次,直到第4次(40秒后)仍无任何反馈就认为连接已经断开。之后在进行连接断开或恢复连接操作时,由于链路状态发生了变化,路由器会发送一个链路状态更新包通知其它路由器网络状态的变化。

    链路状态更新包所要传达的消息大致分为两类:一是网络LSA,另一个是路由器LSA。

    网络LS是以网络为中心生成的信息,表示这个网络都与哪些路由器相连接。而路由器LSA是以路由器为中心生成的信息,表示这个路由器与哪些网络相连接。

    如果这两种信息主要采用OSPF发送,每个路由器就都可以生成一个可以表示网络结构的链路状态数据库。可以根据这个数据库、采用dijkstra(最短路径优先算法)算法生成相应的路由控制表。

    7.5.4 将区域分层化进行细分管理

    链路状态型路由协议的潜在问题在于,当网络规模越来越大时,表示链路状态的拓朴数据库就变得越来越大,路由控制信息的计算也就越困难。OSPF为了减少负荷,引入了区域的概念。

    区域是指将连接在一起的网络和主机划分为小组,使一个自治系统AS内可以拥有多个区域。不过具有多个区域的自治系统必须要有一个主干区域,并且所有其他区域必须都与这个主干区域相连接

    连接区域与主干区域的路由器称作边界路由器;而区域内部的路由器叫做内部路由器;只有主干区域内连接的路由器叫做主干路由器;与外部相连接的路由器就是AS边界路由器。

    每个区域内的路由器都持有本区域网络拓朴的数据库。然而,关于区域之外的路径信息,只能从区域边界路由器那里获知它们的距离。区域边界路由器也不会将区域内的链路状态信息全部发送给其它区域,只会发送自己到达这些路由器的距离信息,内部路由器所持有的网络拓朴数据库就会明显变小。

    换句话,就是指内部路由器只了解区域内部的链路状态信息,并在该信息的基础上计算出路由控制表。这种机制不仅可以有效地减少路由控制信息,还能减轻处理的负担。

    此外,作为区域出口的区域边界路由器若只有一个的话叫做末端区域。末端区域内不需要发送区域外的路由信息。它的区域边界路由器将成为默认路径传送路由信息即可。

    7.6 BGP

    BGP,边界网关协议是连接不同组织机构(或者说连接不同自治系统)的一种协议。因此,它属于外部网关协议EGP。具体划分,它主要用于ISP之间相连接的部分。

    只有BGP、RIP和OSPF共同进行路由控制,才能够进行整个互联网的路由控制。

    7.6.1 BGP与AS好

    在RIP和OSPF中利用IP的网络地址部分进行着路由控制,然而BGP则需要放眼整个互联网进行路由控制。BGP的最终路由控制表由网络地址和下一站的路由器来表示,不过它会根据所要经过的AS个数进行路由控制。

    ISP、区域网络等会将每个网络域编配成一个个自治系统AS进行管理。它们为每个自治系统分配一个16比特的AS编号。BGP就是根据这个编号进行相应的路由控制。

    7.6.2 BGP是路径向量协议

    根据BGP交换路由控制信息的路由器叫做BG[扬声器。BGP扬声器为AS之间交换BGP信息,必须与所有AS建立对等的BGP连接。同一个自治系统内部有多个BGP扬声器,为了使AS内部也可以交换BGP信息,就需要建立BGP连接。

    BGP中数据包送达目标网络时,会生成一个中途经过所有AS的编号列表。这个表格也叫做AS路径信息访问列表。如果针对同一个目标地址出现多条路径时,BGP会从AS路径信息访问列表中选择一个较短的路由。

    在做路由选择时使用的度量,RIP中表示为路由器个数,OSPF中表示为每个子网的成本,而BGP则用AS进行度量标准。RIP和OSPF本着提高转发效率为目的,考虑到了网络的跳数和网络的带宽。BGP则基于AS之间的合约进行数据包的转发。BGP一般选择AS数量较少的路径,不过仍然要遵循各个AS之间签约的细节进行更细粒度的路由选择。

    在AS路径信息访问列表中不仅包含转发方向和距离,还涵盖了途径所有AS的编号。因此他不是一个距离向量型协议。此外,对网络构造仅用一元化表示,因此也不属于链路状态型协议。像BGP这种根据所要经过的路径信息访问列表进行路由控制的协议属于路径向量(path vector)型协议。作为距离向量型的RIP协议,因为无法检测出环路,所以可能发生无线计数的问题。而路径向量型由于能够检测出环路,避免了无限计数的问题,所以令网络更容易进入一个稳定的状态。同时,他还有支持策略路由的优势。

    7.7 MPLS

    路由技术基于IP地址中最长匹配原则进行转发,而标记交换则对每个IP包都设定一个叫做“标记”的值,然后根据这个“标记”再进行转发。标记交换技术中最具代表性的当属多协议标记交换技术MPLS。

  • 相关阅读:
    双 MySQL 启动、停止脚本
    Mysql 备份与恢复
    Mysql Replication 主从同步
    SYN Flood 防范
    HTTP 1.0 & 1.1
    Memcache 内存对象缓存系统
    Redis 非关系型数据库 ( Nosql )
    Keepalived 角色选举
    Keepalived 资源监控
    keepalived
  • 原文地址:https://www.cnblogs.com/cjj-ggboy/p/12503010.html
Copyright © 2011-2022 走看看