TCP/IP详解06-网络层:IP选路和动态选路协议

TCP/IP详解06-网络层:IP选路和动态选路协议

  • TCP/IP详解06-网络层:IP选路和动态选路协议
    • IP路由选择基本说明
    • 1.静态IP选路
      • 1.1 选路的原理
        • 1.1.1 简单路由表
        • 1.1.2 其他有关路由表的知识
      • 1.2 ICMP重定向报文
      • 1.3 ICMP路由器发现报文
    • 2. 动态选路协议
      • 2.1 动态选路
        • 2.1.1 Unix选路守护程序
      • 2.2 内部网关协议( IGP:Interior Gateway Protocol)
        • 2.2.1 RIP((Routing Information Protocol)):选路信息协议
        • 2.2.2 RIP2
        • 2.2.3 OSPF(Open Shortest Path First):开放最短路径优先
      • 2.3 外部网关协议( EGP:External Gateway Protocol)
        • 2.3.1 BGP:边界网关协议

如图是 IP 层处理过程的简单流程。需要进行选路的数据报可以由本地主机产生,也可以由其他主机产生。在后一种情况下,主机必须配置成一个路由器,否则通过网络接口接收到的数据报,如果目的地址不是本机就要被丢弃(例如,悄无声息地被丢弃)。

TCP/IP详解06-网络层:IP选路和动态选路协议_第1张图片

上图中包含了将要说明的静态IP选路和动态选路协议。

  • 静态选路:在配置接口时,以默认方式生成路由表项(对于直接连接的接口),并通过route命令增加表项(通常从系统自引导程序文件),或是通过ICMP 重定向生成表项(通常是在默认方式出错的情况下)。
  • 动态选路协议路由守护程序( routing daemon),它运行选路协议,并与其相邻的一些路由器进行通信,从而更新内核中的路由表。

IP路由选择基本说明

路由表中的每一项都包含下面这些信息:

  • 目的IP地址。它既可以是一个完整的主机地址,也可以是一个网络地址,由该表目中的标志字段来指定(如下所述)。主机地址有一个非0的主机号,以指定某一特定的主机,而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网)。
  • 下一站(或下一跳)路由器( next-hop router)的IP地址,或者有直接连接的网络 IP 地址。下一站路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。下 一站路由器不是最终的目的,但是它可以把传送给它的数据报转发到最终目的。
  • 标志。其中一个标志指明目的 IP 地址是网络地址还是主机地址另一个标志指明下一站路由器是否为真正的下一站路由器,还是一个直接相连的接口(我们将在 9.2节中详细介绍这些标志)。
  • 为数据报的传输指定一个网络接口。

IP路由选择是逐跳地(hop-by-hop)进行的。

IP路由选择主要完成以下这些功能:

  • 1) 搜索匹配的主机地址:搜索路由表,寻找能与目的 IP 地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。
  • 2) *搜索匹配的网络地址:搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。
  • 3) 搜索默认表项:搜索路由表,寻找标为“默认( default)”的表目。 如果找到,则把报文发送给该表目指定的下一站路由器。
  • 4) 如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。

完整主机地址匹配在网络号匹配之前执行。只有当它们都失败后才选择默认路由。 默认路由,以及下一站路由器发送的 ICMP 间接报文(如果我们为数据报选择了错误的默认路由),是IP路由选择机制中功能强大的特性。

为一个网络指定一个路由器,而不必为每个主机指定一个路由器,这是 IP 路由选择机制的另一个基本特性。这样做可以极大地缩小路由表的规模。

总结:路由表项的内容很简单,包括: 5 bit标志、目的 IP 地址(主机、网络或默认)、下一站路由器的 IP 地址(间接路由)或者本地接口的 IP 地址(直接路由)及指向本地接口的指针。主机表项比网络表项具有更高的优先级,而网络表项比默认项具有更高的优先级。

1.静态IP选路

这一部分将集中讨论单个系统(自治系统Autonomous System,AS)是如何利用路由表的。

1.1 选路的原理

1.1.1 简单路由表

TCP/IP详解06-网络层:IP选路和动态选路协议_第2张图片

  • 第1行说明,如果目的地是 140.252.13.65,那么网关(路由器)将把分组转发给140.252.13.35。
    • 对于一个给定的路由器,可以打印出五种不同的标志( Flags):
      • U 该路由可以使用。
      • G 该路由是到一个网关(路由器)(间接路由)。如果没有设置该标志,说明目的地是直接相连的(直接路由)。由它区分了间接路由直接路由
        • G说明这是一个网关,如果你要发数据给Destination,IP头应该写Destination的IP地址,而数据链路层的MAC地址就应该是GateWay的Mac地址了;反之,如果没有G标志,那么数据链路层和IP层的地址应该是对应的。
      • H 该路由是到一个主机,也就是说,目的地址是一个完整的主机地址(既有网络号又有主机号,那么在匹配的时候就既要匹配网络号,又要匹配主机号)。如果没有设置该标志,说明该路由是到一个网络,而目的地址是一个网络地址:一个网络号,或者网络号与子网号的组合(在匹配的时候只要匹配一下网络号就可以了。)。
      • D 该路由是由重定向报文创建的。
      • M 该路由已被重定向报文修改。
    • 参考记数Refcnt(Reference count)列给出的是正在使用路由的活动进程个数。
    • use显示的是通过该路由发送的分组数。
    • interface是本地接口的名字。
  • 第2行是环回接口。它的名字始终为 lo0。没有设置G标志。
  • 第3行是默认路由。
  • 最后一行是所在的以太网。 H标志没有设置,说明目的地址( 140.252.13.32)是一个网络地址,其主机地址部分设为 0。

这样,IP选路的方式就可以更加具体化了。如下

  1. 首先用IP地址来匹配那些带H标志的DestinationIP地址。
  2. 如果1失败就匹配那些网络地址。
  3. 如果2失败就发送到Default网关

1.1.2 其他有关路由表的知识

初始化路由表:每当初始化一个接口时(通常是用 ifconfig 命令设置接口地址),就为接口自动创建一个直接路由。到达主机或网络的路由如果不是直接相连的,那么就必须加入路由表。一个常用的方法是在系统引导时显式地在初始化文件中运行 route命令。

没有到达目的地的路由:当一个IP包在某一个路由器的时候发现没有路由可走,那么该路由器就会给源主机发送“主机不可达”或者“网络不可达”的ICMP包来报错。

1.2 ICMP重定向报文

TCP/IP详解06-网络层:IP选路和动态选路协议_第3张图片

如图,主机与R2实际上在同一个局域网下。

  1. 主机有一份数据要发往R2,但是由于主机的路由表中没有R2的信息,所以数据报发给默认网关R1;
  2. R1通过自己的路由表发现R2是该IP数据报的下一站;当R1把数据报发给R2时,发现接收主机数据报使用的端口和发送给R2使用的端口相同(即主机与R2在同一局域网下);
  3. R1向主机发送ICMP重定向报文,修改主机的路由表,以后主机直接把数据报发往R2.

TCP/IP详解06-网络层:IP选路和动态选路协议_第4张图片

ICMP 重定向报文的接收者必须查看三个 IP 地址:

  • (1)导致重定向的 IP 地址(即 ICMP 重定向报文的数据位于IP数据报的首部);
  • (2)发送重定向报文的路由器的IP地址(包含重定向信息的 IP 数据报中的源地址;
  • (3)应该采用的路由器IP地址(在ICMP报文中的4~7字节)。

注意:

  • 重定向报文只能由路由器生成,而不能由主机生成。
  • 重定向报文是为主机而不是为路由器使用的。
  • 关于重定向最后要指出的是,路由器应该发送的只是对主机的重定向(代码 1或3),而不是对网络的重定向。

1.3 ICMP路由器发现报文

在主机引导的时候,一般会发送在网内广播一个路由请求的ICMP报文,而多个路由器则会回应一个路由通告报文。而且,路由其本身不定期的在网络内发布路由通告报文,这样,根据这些报文,每一个主机都会有机会建立自己的路由表而实现网络通信。路由器在一份通告报文中可以通告多个地址,并且给出每一个地址的优先等级,这个优先等级是该IP作为默认路由的等级,至于怎么算的就不深究了。

路由器一般会在450-600秒的时间间隔内发布一次通告,而一个给定的通告报文的寿命是30分钟。而主机在引导的时候会每三秒发送一次请求报文,一旦接受到一个有效的通告报文,就停止发送请求报文。

TCP/IP详解06-网络层:IP选路和动态选路协议_第5张图片

TCP/IP详解06-网络层:IP选路和动态选路协议_第6张图片

2. 动态选路协议

这一部分将讨论路由器之间是如何交换路由信息的。

2.1 动态选路

动态选路协议是用于动态选路的重要组成部分,但是他们只是使用在路由器之间,相邻路由器之间互相通信。系统(路由选择程序)选择比较合适的路有放到核心路由表中,然后系统就可以根据这个核心路有表找到最合适的网路。也就是说,动态选路是在系统核心网络外部进行的,它只是用一些选路的策略影响路由表,而不会影响到最后通过路由表选择路由的那一部分。

动态选路并不改变内核在 IP 层的选路方式。这种选路方式称为选路机制(routing mechanism)。内核搜索路由表,查找主机路由、网络路由以及默认路由的方式并没有改变。仅仅是放置到路由表中的信息改变了 — 当路由随时间变化时,路由是由路由守护程序动态地增加或删除,而不是来自于自引导程序文件中的 route命令。

有两种基本的选路协议,即用于同一自治系统各路由器之间的内部网关协议( IGP)和用于不同自治系统内路由器通信的外部网关协议( EGP)。下文分别说明这两协议:

  • 内部网关协议:选路信息协议 RIP和开放最短路径优先 OSPF(Open Shortest Path First)协议。
  • 外部网关协议:边界网关协议BGP(Border Gateway Protocol)

2.1.1 Unix选路守护程序

Unix系统上面常用的路由守护程序--routed 和 gate。

TCP/IP详解06-网络层:IP选路和动态选路协议_第7张图片

2.2 内部网关协议( IGP:Interior Gateway Protocol)

2.2.1 RIP((Routing Information Protocol)):选路信息协议

路由信息协议RIP是一种分布式的基于距离向量的路由选择协议, 属于内部网关协议(IGP)。RIP协议中的“距离”也称为“跳数”,每经过一个路由器,跳数就加1。协议规定: 同一自治系统(A.S.)中的路由器每30秒会与相邻的路由器交换路由信息,以动态的建立路由表。当传输数据时,RIP将选择一条具有最少路由器的路由。

报文格式

RIP报文包含中在UDP数据报中,

TCP/IP详解06-网络层:IP选路和动态选路协议_第8张图片

  • 命令字段:为1表示请求,2表示应答。3和4舍弃不用的命令。非正式的命令:轮询(5)和轮询表项(6)。
  • 版本字段通常为1,而第2版RIP将此字段设置为2。
  • 紧跟在后面的 20 字节指定地址系列( address family)(对于 IP 地址来说,其值是 2)、IP 地址以及相应的度量。
    • 采用这种 20字节格式的 RIP 报文可以通告多达 25 条路由。上限 25 是用来保证 RIP 报文的总长度为20×25+4 = 504,小于 512 字节。

一般说来routed要承担如下的工作:

  • 初始化:给每一个已知的路由器发送rip请求报文,要求其他路由器给出完整的路由表。这种报文的命令字段为1,地址字段为0,度量地段为16(相当于无穷大)。
  • 接收到请求:如果接收到刚才的那个请求,就把自己的完整的路由表交给请求者。如果没有,就处理IP请求表项,把表项中自己有的部分添上跳数,没有的部分添上16。然后发给请求者。
  • 接受回应:更新自己的路由表。使用hop数小的规则。
  • 定期更新路由表,一般是30s(真频繁)给相邻的路有启发一次自己的路由表。这种形式可以使广播形式的。
  • 触发更新:每当一条路由的度量发生变化时,就对它进行更新。不需要发送完整路由表, 而只需要发送那些发生变化的表项。

度量

TCP/IP详解06-网络层:IP选路和动态选路协议_第9张图片

路由器 R1 通过发送广播到 N1 通告它与 N2 之间的跳数是 1(发送给 N1 的广播中通告它与 N1 之间的路由是无用的)。同时也通过发送广播给 N2 通告它与 N1 之间的跳数为 1。同样,R2 通告它与 N2 的度量为 1,与N3 的度量为1。

如果相邻路由器通告它与其他网络路由的跳数为 1,那么我们与那个网络的度量就是 2,这是因为为了发送报文到该网络,我们必须经过那个路由器。在我们的例子中,R2 到 N1 的度量是 2,与 R1 到 N3 的度量一样。

距离向量算法

对每一个相邻路由器发送过来的 RIP 报文,进行以下步骤:

  • 1)对地址为 X 的相邻路由器发来的 RIP 报文,先修改此报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的"距离"字段的值加1。每个项目都有三个关键数据,即:目的网络 N,距离是 d,下一跳路由器是 X。
  • 2)对修改后的 RIP 报文中的每一个项目,进行如下步骤:
    • 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中;
    • 否则, 若下一跳路由器地址是 X,则把收到的项目替换原路由表中的项(使用最新的路由信息);
    • 否则, 若收到的项目中距离d小于路由表中的距离,则进行更新;
  • 3)若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可到达的路由器,即把距离设置为16。
  • 4)返回

RIP路由协议优缺点

优点是配置简单,非常适用于小规模网络。

RIP协议的缺点包括:

  • 1)大量广播。RIP向所有邻居每隔30秒广播一次完整的路由表,将占用宝贵的带宽资源,在较慢的广域网链路上问题更加明显。
  • 2)没有成本概念。RIP没有网络延迟和链路成本的概念。当采用RIP时,路由/转发的决定只是基于跳数, 这样很容易导致无法选择最佳路由。 例如,一条链路拥有较高的带宽,但是跳数较多,从而不能被选择。
  • 3)支持的网络规模有限。由于RIP路由协议最多只支持16个步跳,当超过该跳数时,网络将认为无法到达。因此,RIP只能适用于规模较少的网络。
  • 4)当网络出现故障时, 会出现慢收敛现象(需要较长时间才能将此信息传送到所有路由器), 俗称”坏消息传的慢”, 使更新过程的收敛时间长;

小结:RIP是应用层协议, 它使用UDP传送数据(端口520). RIP协议选择的路径不一定是最短的, 但一定是具有最少路由器的路径.

2.2.2 RIP2

2.2.3 OSPF(Open Shortest Path First):开放最短路径优先

OSPF 是为克服 RIP 的缺点在1989年开发出来的。

OSPF最主要的特征就是使用分布式的链路状态协议(link state protocol),而不是像RIP那样的距离向量协议。和RIP协议相比,OSPF的四个要点和RIP的都不一样:

  • (1)OSPF向本自治系统中所有路由器发送信息。这里使用的方法是洪泛法(flooding),这就是路由器通过所有输出端口向所有相邻的路由器发送信息。而每一个相邻路由器又再将此信息发往其所有的相邻路由器(但不再发送给刚刚发来信息的那个路由器)。这样,最终整个区域中所有的路由器都得到了这个信息的一个副本。我们应注意,RIP协议是仅仅向自己相邻的几个路由器发送信息。
  • (2)OSPF发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。OSPF将这个“度量”表示为费用、距离、时延、带宽等。这些都由网络管理人员来决定,因此较为灵活。有时为了方便就称这个度量为“代价”(注意:对于RIP协议,发送的信息是:“到所有网络的距离和下一跳路由器”)。
  • (3)OSPF只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息。而不像RIP那样,不管网络拓扑有无发生变化,路由器之间都要定期交换路由表的信息。
  • (4)OSPF是网络层协议, 他不使用UDP/TCP而是直接使用IP数据报传送(其IP数据报首部的协议字段为89).且OSPF数据报较短, 不会导致IP数据报分片, 因此更加高效; 而RIP是应用层协议, 他在传输层使用UDP协议.

除了以上区别之外, OSPF还有以下特点:

  • 1) OSPF对不同的链路可根据IP分组的不同服务类型(TOS)而设置成不同的代价. 因此, OSPF对于不同类型的业务可计算出不同的路由, 因此十分灵活.
  • 2) 如果到同一个目的网络有多条相同代价的路径, 那么OSPF可将通信量分配给这几条路径, 这叫做多路径之间的负载均衡.
  • 3) 所有在OSPF路由器之间交换的分组都具有鉴别功能, 因而保证了仅在可信赖的路由器之间交换链路状态信息.
  • 4) OSPF支持可变长度的子网划分和无分类编址CIDR.
  • 5) 每一个链路状态都带上一个32位的序号, 序号越大状态就越新.

OSPF基本工作原理

由于各路由器之间频繁地交换链路状态信息, 因此所有的路由器最终都能建立一个链路状态数据库. 这个数据库实际上就是全网的拓扑结构图, 他在全网范围内是一致的(这称为链路状态数据库的同步). 然后每个路由器就根据这个全网拓扑结构图, 使用Dijkstra最短路径算法计算从自己到各目的网络的最优路径, 以此构造自己的路由表. 在此之后, 当链路状态发生变化时, 每个路由器重新计算到各目的网络的最优路径, 构造新的路由表.

OSPF的链路状态数据库能较快的进行更新, 使各个路由器能及时更新其路由表. OSPF的更新过程收敛得快是其重要的优点.

{注意: 虽然使用Dijkstra算法能够计算出完整的最优路径, 但是路由表不会存储完整路径, 而只存储”下一跳”(只有到了下一跳路由器, 才能知道再下一跳应当怎么走)}

划分区域

为了使OSPF能够用于规模很大的网络, OSPF将一个自治系统再划分为若干个更小的范围, 叫做区域. 每一个区域都有一个32位的区域标示符(用点分十进制表示). 区域也不能太大, 在一个区域内的路由器最好不要超过200个.

划分区域的好处是: 将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统, 这就减少了整个网络上的通信量. 由于区域内部路由器仅与同区域的路由器交换LSA信息,这样LSA报文数量及链路状态信息库表项都会极大减少,SPF计算速度因此得到提高。

在一个区域内部的路由器只知道本区域的完整网络拓扑, 而不知道其他区域的网络拓扑情况.

这些区域也有层次之分, 处在上层的域叫做主干区域, 负责连通其他下层的区域, 并且还连接其他自治域;

2.3 外部网关协议( EGP:External Gateway Protocol)

2.3.1 BGP:边界网关协议

BGP(Border Gateway Protocol)是一种不同自治系统的路由器之间交换路由信息的协议, 它的基本功能是在自治系统间自动交换无环路的路由信息, 他是一种外部网关协议(EGP), 边界网关协议常常应用于互联网的网关之间. 路由表包含已知路由器的列表, 路由器能够到达的地址以及到达每个路由器的跳数.

由于:

  • 1) 因特网的规模太大, 使得自治系统之间路由选择非常困难;
  • 2) 对于自治系统之间的路由选择, 要寻找最佳路由是很不现实的;
  • 3) 自治系统之间的路由选择必须考虑有关策略;

因此, 边界网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子), 而非要找到一条最佳路由.

BGP采用的是路径向量选择协议, 他与距离向量协议和链路状态协议都有很大的区别. BGP是应用层协议, 他是基于TCP的;

BGP协议工作原理

每一个自治系统管理员要选择至少一个路由器(可以有多个)作为该自治系统的”BGP发言人”. 一个 BGP 发言人与其他自治系统中的BGP发言人要交换路由信息, 就要首先建立 TCP 连接, 然后在此连接上交换BGP报文以建立 BGP 会话, 再利用 BGP 会话交换路由信息. 当所有 BGP 发言人都互相交换网络可达性信息之后, 各 BGP 发言人就可找出到达各个自治系统的比较好的路由.

每个BGP发言人除了必须运行 BGP 协议外, 还必须运行该 AS 所使用的内部网关协议(如 OSPF,RIP 等), BGP 所交换的网络可达性信息就是要到达某个网络(用网络前缀表示)所要经历的一系列 AS;

BGP协议特点:

  • 1) BGP协议交换路由信息的结点数量级是自治系统的数量级, 这要比这些自治系统中的网络数少得多;
  • 2) 每一个自治系统中BGP发言人(或边界路由器)的数目是很少的. 这样就使得自治系统之间的路由选择不致过分复杂;
  • 3) BGP支持CIDR, 因此BGP的路由表也就应当包括目的网络前缀, 下一跳路由器, 以及到达该目的网络所要经过的各个自治系统序列;
  • 4) 在BGP刚运行时, BGP的邻站是交换整个的BGP路由表, 但以后只需要在发生变化时更新有变化的部分. 这样做对节省网络带宽和减少路由器的处理开销方面都有好处;

你可能感兴趣的:(TCP/IP详解)