计算机网络 - 路由

  • 简述

    当一个设备有多个路径可以到达一个目的地时,它总是通过优先选择一条路径而不是其他路径。这个选择过程称为路由。路由由称为路由器的特殊网络设备完成,也可以通过软件进程完成。基于软件的路由器功能有限,范围有限。
    路由器总是配置有一些默认路由。如果没有找到特定目的地的路由,默认路由会告诉路由器将数据包转发到哪里。如果存在多条到达同一目的地的路径,路由器可以根据以下信息做出决策:
    • 跳数
    • 带宽
    • 公制
    • 前缀长度
    • 延迟
    路由可以静态配置或动态学习。可以将一条路线配置为优先于其他路线。
  • 单播路由

    Internet 和 Intranet 上的大多数流量(称为单播数据或单播流量)都是通过指定的目的地发送的。在 Internet 上路由单播数据称为单播路由。这是最简单的路由形式,因为目的地是已知的。因此,路由器只需查找路由表并将数据包转发到下一跳。
    单播路由
  • 广播路由

    缺省情况下,广播报文不被任何网络中的路由器路由转发。路由器创建广播域。但它可以配置为在某些特殊情况下转发广播。广播消息发往所有网络设备。
    广播路由可以通过两种方式(算法)完成:
    • 路由器创建一个数据包,然后将其一一发送给每个主机。在这种情况下,路由器会创建具有不同目标地址的单个数据包的多个副本。所有数据包都作为单播发送,但因为它们发送给所有数据包,所以它模拟路由器正在广播。
      这种方法消耗大量带宽,并且路由器必须每个节点的目标地址。
    • 其次,当路由器接收到要广播的数据包时,它只是将这些数据包从所有接口中溢出。所有路由器都以相同的方式配置。
      广播路由
      这种方法在路由器的 CPU 上很容易,但可能会导致从对等路由器接收到重复数据包的问题。
      反向路径转发是一种技术,在该技术中路由器预先知道它的前身应该从哪里接收广播。该技术用于检测和丢弃重复项。
  • 组播路由

    组播路由是广播路由的特例,具有显着性差异和挑战。在广播路由中,数据包被发送到所有节点,即使它们不想要它。但是在多播路由中,数据只发送到想要接收数据包的节点。
    组播路由
    路由器必须知道有节点希望接收多播数据包(或流),然后只有它应该转发。组播路由使用生成树协议来避免循环。
    组播路由还使用反向路径转发技术,以检测和丢弃重复和循环。
  • 任播路由

    Anycast 数据包转发是一种机制,其中多个主机可以具有相同的逻辑地址。当接收到发往该逻辑地址的数据包时,将其发送到路由拓扑中最近的主机。
    任播路由
    任播路由是在 DNS 服务器的帮助下完成的。每当接收到任播数据包时,都会通过 DNS 询问将其发送到何处。DNS 提供的 IP 地址是其上配置的最近 IP。
  • 单播路由协议

    有两种路由协议可用于路由单播数据包:
    • 距离矢量路由协议

      距离向量是一个简单的路由协议,它根据源和目标之间的跳数进行路由决策。跳数较少的路由被认为是最佳路由。每个路由器都将其设置的最佳路由通告给其他路由器。最终,所有路由器都根据其对等路由器的通告建立自己的网络拓扑,
      例如路由信息协议 (RIP)。
    • 链路状态路由协议

      链路状态协议是比距离向量稍微复杂的协议。它考虑了网络中所有路由器的链路状态。这种技术有助于路由构建整个网络的通用图。所有路由器然后为路由目的计算它们的最佳路径。例如,开放最短路径优先 (OSPF) 和中间系统到中间系统 (ISIS)。
  • 组播路由协议

    单播路由协议使用图,而多播路由协议使用树,即生成树来避免循环。最优树称为最短路径生成树。
    • DVMRP  - 距离矢量组播路由协议
    • MOSPF  - 组播开放最短路径优先
    • CBT  - 基于核心的树
    • PIM  - 独立于协议的组播
    协议无关组播现在很常用。它有两种口味:
    • PIM Dense Mode
      此模式使用基于源的树。用于局域网等密集环境。
    • PIM Sparse Mode
      此模式使用共享树。用于广域网等稀疏环境。
  • 路由算法

    路由算法如下:

    洪水

    泛洪是最简单的方法包转发。收到数据包后,路由器会将其发送到除接收数据包的接口之外的所有接口。这给网络造成了太大的负担,并且大量重复的数据包在网络中徘徊。
    生存时间 (TTL) 可用于避免数据包的无限循环。存在另一种泛洪方法,称为选择性泛洪,以减少网络上的开销。在这种方法中,路由器不会在所有接口上泛洪,而是在选择性的接口上泛洪。

    最短路径

    网络中的路由决策,大多是基于源和目的地之间的成本。跳数在这里起着重要作用。最短路径是一种使用各种算法来确定跳数最少的路径的技术。
    常见的最短路径算法有:
    • Dijkstra 算法
    • Bellman Ford 算法
    • Floyd Warshall 算法