网络层路由

当设备通过多条路径到达目的地时,它总是选择一条路径而不是其他路径。 这个选择过程称为路由。 路由由称为路由器的特殊网络设备完成,也可以通过软件进程完成。基于软件的路由器功能有限,范围有限。

路由器总是配置有一些默认路由。 如果没有找到特定目的地的路由,默认路由会告诉路由器将数据包转发到哪里。 如果存在多条到达同一目的地的路径,路由器可以根据以下信息做出决策:

  • 跳数

  • 带宽

  • 指标

  • 前缀长度

  • 延迟

路由可以静态配置或动态学习。 可以将一条路线配置为优先于其他路线。


单播路由

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

单播路由

广播路由

默认情况下,广播数据包不会被任何网络上的路由器路由和转发。 路由器创建广播域。 但它可以配置为在某些特殊情况下转发广播。 广播消息发往所有网络设备。

广播路由可以通过两种方式完成(算法):

  • 路由器创建一个数据包,然后将其一一发送给每个主机。 在这种情况下,路由器会创建具有不同目标地址的单个数据包的多个副本。 所有数据包都作为单播发送,但因为它们是发送给所有的,所以它模拟路由器正在广播。

    这种方法会占用大量带宽,路由器必须是每个节点的目的地址。

  • 其次,当路由器接收到一个要广播的数据包时,它只是将这些数据包从所有接口中溢出。 所有路由器都以相同的方式配置。

    广播路由

    这种方法在路由器的CPU上很容易,但可能会导致从对等路由器收到重复数据包的问题。

    反向路径转发是一种技术,在这种技术中,路由器预先知道它的前身应该从哪里接收广播。 此技术用于检测和丢弃重复项。


组播路由

组播路由是广播路由的特例,具有显着性差异和挑战。 在广播路由中,数据包被发送到所有节点,即使它们不想要它。 但是在组播路由中,数据只发送到想要接收数据包的节点。

组播路由

路由器必须知道有节点希望接收多播数据包(或流),然后只有它应该转发。 组播路由采用生成树协议避免循环。

组播路由也使用反向路径转发技术,来检测和丢弃重复和循环。


任播路由

任播数据包转发是一种机制,其中多个主机可以具有相同的逻辑地址。 当接收到发往该逻辑地址的数据包时,将其发送到路由拓扑中距离最近的主机。

任播路由

任播路由是在 DNS 服务器的帮助下完成的。 每当接收到任播数据包时,都会通过 DNS 询问将其发送到何处。 DNS 提供的 IP 地址是其上配置的最近 IP。


单播路由协议

有两种路由协议可用于路由单播数据包:

  • 距离矢量路由协议

    Distance Vector 是一种简单的路由协议,它根据源和目标之间的跳数进行路由决策。 跳数较少的路由被认为是最佳路由。 每个路由器都将其设置的最佳路由通告给其他路由器。 最终,所有路由器都会根据对等路由器的通告建立自己的网络拓扑,

    例如路由信息协议 (RIP)。

  • 链路状态路由协议

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


多播路由协议

单播路由协议使用图,而多播路由协议使用树,即生成树以避免循环。 最优的树称为最短路径生成树。

  • DVMRP  - 距离矢量组播路由协议

  • MOSPF  - 组播开放最短路径优先

  • CBT  - 基于核心的树

  • PIM  - 独立于协议的组播

协议无关组播现在普遍使用。 它有两种:

  • PIM 密集模式

    此模式使用基于源的树。 用于局域网等密集环境。

  • PIM 稀疏模式

    此模式使用共享树。 用于广域网等稀疏环境。


路由算法

路由算法如下:

Flooding

Flooding 是最简单的数据包转发方法。 收到数据包后,路由器会将其发送到除接收数据包的接口之外的所有接口。 这给网络造成了太大的负担,并且大量重复的数据包在网络中徘徊。

生存时间 (TTL) 可用于避免数据包的无限循环。 存在另一种泛洪方法,称为选择性泛洪,以减少网络上的开销。 在这种方法中,路由器不会在所有接口上泛滥,而是在选择性的接口上泛滥。

最短路径

网络中的路由决策主要基于源和目的地之间的成本。 跳数在这里起着重要作用。 最短路径是一种使用各种算法来确定跳数最少的路径的技术。

常见的最短路径算法有:

  • Dijkstra 算法

  • 贝尔曼福特算法

  • 弗洛伊德沃歇尔算法