Routing

本文目的:

  • 描述IP转发以及它是如何工作的
  • 分辨距离向量路由和链路状态路由
  • 讨论核心,内部和外部路由的角色
  • 描述公共内部路由RIP以及OSPF协议

Routing in TCP/IP

在最基本的性质中,一个路由器(router)是通过逻辑地址(logical address)转发流量的一个设备。一个经典的路由器使用
Internet layer头部的IP地址信息工作在Internet layer(对应于OSI模型中的网络层(Network layer))。
因为OSI中网络层也称为第三层,因此有时候又称一个路由器为第三层设备。还有更高层的路由器(位于OSI模型中的4-7层)。

路由器是任何大型TCP/IP网络必需的部分。当路由器从一个网络传递数据到下一个网络时,路由器替换网络层(Network
Access layer)头部信息,所以路由器能够连接不相似的网络类型。许多路由器维护着基于距离,带宽以及时间考虑的最佳路径
的详细信息。

What Is a Router

在最简单的形式(或至少在最基本形式中),一个路由器看起来就像是一台有两个网络适配器的计算机。早期的路由器确实是有两
个或更多网络适配器的计算机(称之为多重连接计算机)。理解路由的第一步是要记住IP地址是属于适配器而不是计算机。事实
上,两个适配器是有可能处在对应于完全不同物理网络的完全不同的IP子网上。

e7dc4d3cf4c249b8.svg

复杂网络上的路由:

7be3ab7d8e30478d.svg

The Routing process

路由器职责的大致的描述:

  1. 路由器从它连接的网络之一接收数据。
  2. 路由器往协议栈向上传递数据到Internet layer。换句话说,路由器丢弃Network Access 层的头部信息并且重组(如果有必要)数据报。
  3. 路由器检查IP头部中的目的地址。
  4. 如果数据是要发往不同的网络,路由器查询路由表来决定往哪个地方发送数据。
  5. 在路由器决定它的哪个适配器将接收数据之后,它将会向下传递数据通过适合的Network Access层软件通过适配器进行传输。

事实上,路由表以及建立路由表的协议是路由器的明显特征。

路由过程图示:

a188425ba8714eed.svg

根据获取路由表信息来源,两种主要类型路由的命名:

  • 静态路由:需要网络管理员手动输入路由信息
  • 动态路由:使用路由协议基于获取的路由信息动态建立路由表。

静态路由局限性:

  1. 不能很好地适配具有成百上千个路由的大型网络
  2. 除了最简单的网络之外的所有网络,静态路由需要网络管理员不成比例的时间投入,网络管理员不仅仅是创建而且不断的更新路由表信息。
  3. 静态路由不能很快地适应网络,例如,一个宕机的路由器。

预配置路由

预配置静态路由有时候用于网络问题排障。在其他情况下,管理员可能提供静态路径来充分利用快速的网络连接或平衡网络流量。

Routing Table Concepts

路由表的职责以及其他Internet layer的路由元素是为了传输数据到适当的本地网络。

一张极其基本的路由表内容:

dba2c75bdb7e4654.svg

路由表本质上是将目的网络IDs映射到下一跳的IP地址——数据报在去往目的网络的下一站。路由表在网络直接连接路由器本身和网
络通过其他路由器间接链接是有区别的。下一跳可能是目的网络(如果是直接连接)或前往目的网络的下一个下游路由器。
The Router Port与通过哪个路由器转发数据的路由器端口相关。路由表中的下一跳条目是理解动态路由的关键。复杂网路中,
可能存在多条到达目的网络的路径,路由器必须决定下一跳跟着这些路径中的一条。动态路由基于通过路由协议获取的信息做出决
策。

A Look at IP Forwarding

主机和路由器都有路由表,主机的路由表比路由器的路由表更简单,主机经常利用默认路由器或默认网关。默认网关是接收不能在
本地网络上进行传输的数据报的路由器。对于单台计算机,路由表可能只含有两行:一行本地网络的条目和用于不能在本地网络段进行传输的数据包的默认路由。如果网络IP地址不在本地网络段上,主机发送数据包给一个路由器。

IP forwarding过程实际上不是将路由器的地址放到IP header中。而是,主机向下传递数据报和路由器的IP地址到
Network Access层,Network Access层的协议软件使用一个分开的单独查询过程将数据报包装在一个帧中用于本地传输到路
由器。换句话说,一个转发的数据报的IP地址跟最终收到的数据的主机有关。转运数据报到本地网络上的路由器的帧的物理地址是
路由器本地适配器的物理地址。

简要描述该过程:

  1. 一台主机网要发送数据报。主机检查它的路由表。
  2. 如果数据报不能在本地网络上被传输,主机从路由表中提取与目标地址相关联的路由器的IP地址。(万一主机在本地网络段上,这个路由器的IP地址很大可能是默认网关的地址。)然后使用ARP将路由器的IP地址解析为物理地址。
  3. 发往远程主机的数据报与收到数据报的路由器的物理地址被传递给网络接入层(Network Access layer)。
  4. 路由器的网络适配器收到帧,因为帧的目的物理地址与路由器的物理地址匹配。
  5. 路由器拆开数据帧并且往上传到Internet layer。
  6. 路由器检查数据包的IP地址。如果IP地址匹配路由器自己的IP地址,则数据的目的地址就是路由器本身,否则,路由器通过检
    查自己的路由表来找到与数据帧目的地址相关联的路由,然后尝试转发数据帧。
  7. 如果数据报不能被任何和路由器相连的网络段传输,路由器发送数据报到另外一个路由器,然后重复(回到步骤 1),直到最
    后的路由器能够直接将数据报传输给目的主机。

e092c3a432134421.svg

上述描述的步骤6是一个路由器的一个重要特征。一个设备想要像一个路由器一样工作,除了有两个网卡,还得这个设备有支持IP
转发的必需软件,否则数据不会从一个接口传递到另外一个接口。当一台计算机未被配置为IP路由时,它收到的数据报是发往不同
的计算机,数据报被简单地忽略掉。

Direct Versus Indirect Routing

如果一个路由器仅仅是连接两个子网,那这个路由器的路由表可能会很简单。该路由器将不会碰上IP地址不会和它的端口相关联的
情况,并且路由器是直接连接在所有的子网上。

037834ce7d2943e8.svg

稍微更复杂的网络:

ac4b3279001f4b27.svg

有两种方式知道间接路由:从系统管理员或其他路由器。这两个选项各自与静态路由和动态路由相关。系统管理员直接输入网络路
由到路由表中,这是静态路由,或Router B告诉Router A相关的网段,这是动态路由。

动态路由优点:

  • 不要人工干预
  • 响应网络中的变化,假设一个新的网段连接到Router B,Router B通知Router A这个网络变化。

路由器使用静态和动态路由组合。系统管理员可能配置几条静态路径并且让其他被分配为动态的。静态路由有时候用于强制流量走
特定的路径。例如,系统管理员可能想配置路由,让流量走高带宽的连接。

Dynamic Routing Algorithms

路由器的行为完全依赖于路由表。很多路由协议围绕距离向量路由以及链路状态路由两种方法进行设计。后面,将进一步看到一对
使用这些方法设计的路由协议:路由信息协议(RIP,距离向量路由协议)以及开放最短路径优先(OSPF,链路状态路由协议)。

Distance-Vector Routing

距离向量路由,又称Bellman-Ford routing是一个被许多路由协议使用的高效并且简单的路由方法。距离向量路由被设计用于
最小化路由器之间需要的通信和必须驻留在路由表中的数据量。距离向量路由的底层原理是,路由器没必要知道通往每个网络段的完整路径——它只需要知道在哪个方向发送一个数据报到下一个网络段(术语向量)。网络段之间的距离通过测量一个数据从一个网段到另外一个网段必须经过的路由器数量。路由器使用距离向量算法通过最小化数据报经过路由器的数量来优化路径。这个距离参数被称为hop count

距离向量路由工作步骤:

  1. 当路由器A初始化时,它感知本身直接连接的网络段并且那些网段放置到它的路由表中。每一个直接连接的网段的hop count为0,因为数据报没必要通过任何路由器从这个路由器路由到这个网段。
  2. 在周期性的间隔时间,路由器从每个邻居路由器收到一份报告。报告里面列出邻居路由器知道的任何网段以及到达那些网段hop count。
  3. 当路由器A收到来自邻居路由器的报告,它将这些新的路由信息集成到它自己的路由表中:
  • 如果路由器B知道的一个网络段当前不在路由器A的路由表中,路由器A添加这个网络段到它自己的路由表中。新网段的路由是路
    由器B,意味着如果路由器A收到一个发往新网段的数据报,则转发那个数据报到路由器B。不管路由器B列出来的hop count是什么,新网段的hop count在原来的基础上加1。
  • 如果路由器B列出的一个网段已经存在路由器A的路由表中,路由器A给从路由器B收到的hop count加1并且比较修改后的hopcount和存储在自己路由表上的值。如果通过B的路径比路由器A知道的路径更高效(更少的hops),路由器A修改它的路由表以将路由器B列为寻址到该段的数据报的路由。
  • 如果修订的通过路由器B(从B收到的hop count加1)到达该网段的路径的hop count大于路由器A中路由表当前的hop
    count,则不使用通过B的路由。路由器A继续使用原来路由表中的路由。

关于路由的信息缓慢地通过网络进行散播。假设网络没有发生变化,路由器最终将知道到达每个网段的最高效的路径。

距离向量路由更新例子图示:

118546cf06904ea8.svg

如果路径效率和数据报必须经过的路由器数量一致,距离向量路由是一个值得的方式。距离向量路由的缺点:相同的路由跳数
(hop count),路由通过低速连接的时间长于通过高速连接的时间。对于大型路由分组,不具有很好的伸缩性能。路由器维护的
路由表中的路由条目不仅仅是向量和hop-count(跳数)值。更重要的是,完整的距离以及路由跳数值必须通过路由器间进行传
输,即使大部分的信息不是必需的。相比于距离向量路由,链路状态路由现在是主要的选择。

链路状态路由的原理是每个路由器尝试建立自己内部的网络拓扑图。每个路由器周期性地给网络发送状态信息。状态信息列出
这个路由器直接连接的其他路由器以及连接(连接当前是否可用)状态。路由器使用从其他路由器收到的状态信息建立一个网络拓
扑图。

链路状态协议的缺点:需要更多的处理时间。优点:由于不需要散播整张路由表,降低了带宽的消耗。也更容易通过网络跟踪问题,因为从一个路由器发送来的状态信息通过网络传输是不变的。(而距离向量的方法中,每次路由信息经过不同的路由器,路由跳数会增加)。

Routing on Complex Networks

在引领互联网的ARPAnet系统中,一小部分的核心路由器用于作为互联网络的中心主干,连接配置好的以及自动管理的个别网络。核心路由其知道每个网络,尽管它们不知道每个子网。只要数据报能够找到到达核心路由的一条路径,它就能到达系统中的任意点。

由独立管理的网络组成的互联网称为自制系统。大多数路由器的都处在下面的大致的类别。尽管一个路由器可能有多个职责,但是硬件,和也许更重要的是路由器使用的协议都会被调整为网络的职责。

  • 外部路由器:外部路由器在自治网络之间交流路由信息。它们维护关于它们自己以及邻居自治网络的路由信息。外部路由器传统意义上使用一种称之为外部网关(EGP(Exterior Gateway Protocol))的协议。实际的EGP协议现在是过时了,现在作为外部路由器,使用更新的EGPs路由协议代替过时的EGP。Border Gateway Protocol(BGP)是现在更受欢迎使用的EGP。一个外部路由器经常也在它的资质系统中充当内部路由路由器。
  • 内部路由器:在自治区域内共享路由信息的路由器,称之为内部网关。这些路由器使用一类称为内部网管协议(IGPs)的路由协议。内部网关协议中包含有RIP以及OSPF。

有外部路由器在内部组路由器之间传递路由信息的情况下,一个大型的自治系统可能由多个组的内部路由组成。

Examining Interior Routers

一个内部路由器应该完整的知道在它组内连接的任意网段的其他路由器,但是不需要完全知道在自治系统之外的网络。网络管理员
必须为网络的状况选择和网络硬件兼容的内部路由协议。如今的大多数路由器都支持多路由协议。

Routing Information Protocol

RIP 是一个距离向量协议,它通过路由跳数(hop count)来决定到达目的地的最佳路由,查看距离向量路由
RIP II的出现清除了一些和RIP I相关联的问题。为IPv6网络开发的RIP II扩展称为RIPng。UNIX 以及 Linux上的RIP通过Routed守护程序来实现。
在RIP中,如果两条到相同的目的地的路径有同样的路由跳数,则重新获取已经在路由表中的路由。为了阻止发生过多的路由摆,
无论路由跳数什么时候相等,路由器不断改变路由表条目。

RIP路由路由器每30秒广播更新消息,也可以请求立即更新。当网络比较平衡的时候,RIP的工作状态最佳。如果路由器的数量变
得非常庞大,由于路由表缓慢更新,将产生问题。因此RIP限制了从第一个路由器到目的地的路由跳数的最大值为15。这个阈值限
制了一个路由组的大小,但是如果路由器被层级式的布置,是有可能在15跳之内围绕成一个大的路由器组。虽然距离向量方法并会
特别提供连接速度以及物理网络类型的说明,但是RIP让网络管理员为无效的路径手动输入大的路由跳数来影响路由选择。思科网
络硬件厂商开发了私有的IGRP和EIGRP路由协议来作为RIP用于距离向量路由场景的第二种选择。

Open Shortest Path First

OSPF是一个逐渐替代许多网络上RIP的更新的内部路由协议。OSPF是一个链路状态路由协议。每一个在OSPF路由器组中的路
由器被分配一个路由器ID。路由器ID是和路由器相关联的最高的数字IP地址。如果路由器使用的是一个loopbak接口,路由器ID
是最高的loopback地址。什么是loopback 地址

链路状态的路由器建立一张网络拓扑的内部图。其他路由器使用路由器ID识别拓扑图中的一个路由器。每个路由器组织网络成自己
是根结点的树状格式。这个网络树又称为最短路径树(SPT)。通过网络的路径与通过SPT的分支路径相关。路由器计算每个路由的
损耗。损耗测量包含路由跳数以及其他因素,比如连接的速度以及可靠性。

Exterior Routers: BGP

今天的互联网上用于外部路由器的最常见的协议是边界网关协议(BGP)。BGP已经度过了几个版本,当前的版本成为BGP 4,
可以在RFC中看到相关的描述。

事实上,通用的BGP也被用于内部路由器协议,在自治系统内帮助划分网络成更小的区域。在自治系统的边界使用BGP版本传递消息
给称为外部边界网关协议(eBGP)的其他自治系统。

BGP极其健壮并且可扩展。如今的互联网不能够脱离BGP而存在,最近几年BPG呈现出指数级的增长并写现在有超过600,000条路由
表条目。

IANA给每个自治系统分派一个唯一的称之为ASN的号。BGP使用这些ASNs来建立互联网以及通过自治系统将CIDR-based,无类IP
地址和路由关联起来的拓扑图。ASN提供了一种用于识别一个网络是独立于一个特定的IP地址或地址范围的方式。这种方式提供冗
余的路径给一个自治系统(与通过IP地址空间的单一路径相反)。ASN是不分层级的,BGP路由器必须知道或者有能力知道网络上
所有的其他BGP路由器。在自治系统内部使用的BGP被成为内部边界网关协议(iBGP)。

Public and Private ASNs

当iBGP在自治系统内被内部用来路由流量时,不需要由IANA分配的公共的ASNs。一个内部BGP路由器而是使用不会被转发超出自治系统的私有ASNs。

BGP路由器通过可靠的TCP-based连接通信,通过网络传递关于地址范围以及建立描述路径的ASNs链的信息。BGP协议含有各种用于路径发现的功能,还有在多个路径选项之间选择最高效的路径的技术。

Classless Routing

The Internet Layer以及Subnetting-and-CIDR得知,TCP/IP路由系统围绕一个刚开始依赖地址分类的网络ID的概念来设计的。地址类系统的局限性以及分配块地址给单一供应商时的
低效性。CIDR为地址分配以及路由决策提供了第二种方法。
如果路由协议支持,CIDR系统提供更高效路由。CIDR让路由器对待多个分类网络成单一的实体,从而减少了路由器之间必须传输
的必要信息。最近的协议,比如OSPF和BGP4支持无类地址。初始的RIP协议不支持CIDR,由后来的RIP II更新支持了。

Higher in the Stack

几年前,硬件厂商开始注意到在协议栈的更高层级转发以及过滤流量的好处。从前面的六篇文章概括出来得知,协议栈的每一层提
供不同的服务以及在其头部编码不同的信息。能够访问协议栈中更高层协议的路由器有做出决策基础的额外信息。例如,基于源
以及目的端口,运行在传输层的路由器能够形成数据性质的推断。运行在应用层的路由器能够更完整知道发送数据的应用以及其所
使用的协议。

能访问协议栈高层的协议的路由器有几个优点。更好的了解连接以及源应用程序能够提高的安全性。另一个重要的原因是
服务质量(QoS)。运行在应用层的路由器能够基于服务条件质量优先考虑某些数据包。IPv6协议系统提供其他用于处理QoS的方
法。

Lower in the Stack

管理在OSI二层(从下往上数),即数据链路层的流量的设备在传统意义上称为交换机,而不是路由器。

小小的总结

  • 描述IP转发
  • 距离向量路由
  • 链路状态路由
  • 一小部分的核心路由器具用于作为互联网络的中心主干,连接配置好的以及自动管理的个别网络。
  • 内部路由器用于在自治系统内共享路由信息。
  • 外部路由器用于交流自治系统之间的路由信息,维护自己以及邻居自治系统的路由信息。
  • RIP是一个用于内部路由器的距离向量路由协议,通过采用路由跳数来决定到达目的地址的最佳路由,采用RIP的路由器每30秒广播更新消息,也可以请求立即更新。。
  • OSPF是一个用于内部路由器的链路状态路由协议,在OSPF路由组中的路由器获得一个和路由器相关联的最高的数字IP地址。
  • 边界网关协议]是一个用于外部路由器的路由协议,但也可以用于自治系统内帮助划分网络成更小的区域。BGP使用ASNs来建立互联网以及通过自治系统将CIDR-based,无类IP地址和路由关联起来的拓扑图。
  • IANA给每个自治系统分派一个唯一的称之为ASN的号。
  • OSPF可以使用几个参数来衡量路由的效率,比如路由跳数,连接速度以及可靠性,而RIP只能使用路由跳数。