Data Communication Computer Network 简明教程

Network Layer Routing

当设备访问目标时具有多路径时,会优先选择一条路径。这个选择过程称为路由。路由由特殊网络设备(路由器)完成,也可以通过软件流程完成。基于软件的路由器功能有限,适用范围较小。

路由器始终配置一些默认路由。默认路由告诉路由器如果没有找到通往特定目的地的路由,则将数据包转发到何处。如果有多条路径可以到达同一目的地,路由器可以根据以下信息做出决策:

  1. Hop Count

  2. Bandwidth

  3. Metric

  4. Prefix-length

  5. Delay

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

Unicast routing

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

unicast routing

Broadcast routing

默认情况下,广播数据包不会在任何网络上的路由器路由和转发。路由器创建广播域。但是,可以在某些特殊情况下对其进行配置以转发广播。广播消息会发送给网络中的所有设备。

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

  1. 路由器创建数据数据包,然后将其逐个发送到每个主机。在这种情况下,路由器用不同的目标地址创建单个数据包的多个副本。所有数据包都作为单播发送,但由于已发送到所有设备,它模拟路由器广播一样。此方法会消耗大量带宽,并且路由器必须存储每个节点的目标地址。

  2. 其次,当路由器接收到要广播的数据包时,它会简单地将这些数据包泛洪到所有接口。所有路由器都以相同的方式配置。这种方法对路由器的 CPU 压力较小,但可能会导致从对等路由器接收到的数据包重复的问题。反向路径转发是一种路由器可以提前了解其应该从中接收广播的前任的技术。这种技术用于检测和丢弃重复项。

Multicast Routing

多播路由是广播路由的一种特殊情况,具有重要的差异和挑战。在广播路由中,数据包会发送到所有节点,即使它们不需要。但在多播路由中,数据只会发送到希望接收数据包的节点。

multicast routing

路由器必须知道希望接收多播数据包(或流)的节点,然后才能进行转发。多播路由使用生成树协议来避免循环。

多播路由还使用反向路径转发技术来检测和丢弃重复项和循环。

Anycast Routing

Anycast 数据包转发是一种机制,其中多个主机可以具有相同的逻辑地址。当收到发往此逻辑地址的数据包时,它会发送到在路由拓扑中最近的主机。

Anycast routing

Anycast 路由是借助 DNS 服务器完成的。每当收到 Anycast 数据包时,会询问 DNS 将其发送到何处。DNS 提供的是其上配置的最近的 IP 地址。

Unicast Routing Protocols

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

Multicast Routing Protocols

链路状态路由协议链路状态协议是一种比距离矢量更复杂的协议。它考虑了网络中所有路由器中链路的状态。此技术帮助路由构建整个网络的一个通用图。然后,所有路由器都会计算出其用于路由目的的最佳路径,例如最早打开最短路径 (OSPF) 和中间系统到中间系统 (ISIS)。

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

  1. DVMRP - 距离矢量多播路由协议

  2. MOSPF - 多播最早打开最短路径

  3. CBT - 基于核心的树

  4. PIM - 跨协议组播

跨协议组播现在普遍使用。它有两种方式:

  1. PIM Dense Mode 此模式使用基于源的树。在诸如 LAN 这样的稠密环境中使用。

  2. PIM Sparse Mode 此模式使用共享树。在诸如 WAN 这样的稀疏环境中使用。

Routing Algorithms

路由算法如下:

Flooding

泛洪是最简单的分组转发方法。当收到一个数据包时,路由器会将其发送到除收到数据包的接口以外的所有接口。这给网络造成了过大的负担,并且大量重复的数据包在网络中游荡。

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

Shortest Path

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

常见的最短路径算法有:

  1. Dijkstra’s algorithm

  2. Bellman Ford algorithm

  3. Floyd Warshall algorithm