我认为首先网络做 STP 算法,找到最好的树在 LAN 之间发送数据包。
生成树不是路由协议,而是避免网络环路的协议。因此,每当网络拓扑发生变化(链路启动/关闭)时,生成树都会收集有关网络和所有相关交换机之间的链路的信息。然后它会确定一个根网桥(= 根交换机),并从该根网桥开始定义哪些链路将用于将数据从一个点分发到下一个点。生成树完成后,每个可能的连接都将使用一个链接,而其他链接将被阻止(禁用)。但是,这是在网络第 2 层上运行的协议,与 IP 或路由无关。
其次,A中的路由进展如何?他如何知道将数据包发送给 B 的“最佳”路径是什么?
在大多数情况下,通信发生在工作站和服务器之间,它们不参与任何路由协议,也不了解网络拓扑结构。
大多数房东只知道两件事:
- 他们自己的 IP 地址和子网掩码。通常本地 IPv4 地址例如看起来像 192.168.0.42 和 255.255.255.0 子网 - 所以主机会知道它可以使用 192.168.0.x IP 地址直接与所有其他主机通信。
- 默认网关要么通过 DHCP 获得,要么手动配置,负责本地网络之外的所有通信。例如,如果我们的主机 A 使用 192.168.0.42 想与主机 B 通信,使用 192.168.17.23,主机 A 将确定目标在他自己的网络之外,并将所有流量定向到它的默认网关。主机 A 不关心他的网关如何将流量发送到主机 B - 他只是将其发送到网关并完成。
默认网关,某种路由器,然后会查看他的本地路由表,并根据目标 IP 地址将数据包转发到下一个路由器。它不关心路由器如何将流量传送到主机 B,它只知道“这是通往目标网络的下一跳”。在某个时候,数据包将到达与主机 B 直接连接到同一网络的路由器。然后,该路由器会将数据包发送到主机 B。
该过程中的每个参与者仅决定数据包的下一跳在哪里,并将数据包发送到该站点。他们不会知道或考虑数据包必须采取的完整路线——只有下一步。
转发与此有何不同?
转发是指参与分发既不是源也不是目的地的数据包的任何站点所执行的操作的术语。主机 A 是源或发送者,主机 B 是目的地或接收者。它们之间的所有路由器只会转发数据包,因为它们既不是该通信的源也不是目标,而只是中继。
我必须在这一点上纠正自己。转发,在网络术语中,通常是指“在第 2 层中继您收到的其他人的数据”。交换机转发他们收到的帧,通过确定他们的转发表/CAM 表 (Cisco) 是否知道目标 MAC 地址在哪个端口上,然后将其发送到那里,或者如果他们不知道目的地在哪里,则将其泛洪到所有端口MAC 地址已定位。
路由器路由。(哈!)它们的作用与交换机相同,但在第 3 层 (IP) 上。他们查看他们的路由表,以确定在到达目标 IP 的过程中将特定数据包发送到哪里。
通常,转发和路由是混淆的(就像我一样),但在网络术语中,转发是第 2 层,路由是第 3 层。
我了解了解决路由器问题的距离向量和链路状态,但是,如果 A 知道到 B 的路径,为什么路由器需要运行这个算法,而不仅仅是按照 A 告诉他们的方式发送数据包?
您将路由协议与实际路由混淆了。一些路由协议实际上知道整个网络的拓扑结构,而另一些则只知道其邻居的路由表。所有这些协议共享它们用于填充路由器的路由表,因此它可以决定哪个是数据包到给定目的地的最佳路径。
为了做出这个决定,一些路由协议实际上收集了所有的网络拓扑信息,以便他们可能真正知道或至少猜测一个数据包可能采用的完整路由——但这不是他们的决定。每个路由器都会在数据包到达的那一刻决定以哪种方式转发数据包,具体取决于它的目的地。
最后,如果有人详细说明 ECMP 以及这与我上面提出的问题之间的联系,我会很高兴,因为我很难弄清楚。
等价多路径路由只是一种将具有相同源和目标的流量分配到多个链路上的方法,这些链路都具有相同的“成本”。
想象它是这样的:
你要从洛杉矶到纽约(开车)。查看谷歌地图,您会发现有两条可能的路线,一条经过丹佛,另一条经过阿尔伯克基。两条路线全长 2800 英里,时间完全相同。作为一名司机,您现在必须以同等成本的路线来选择一条路线。
但是,作为一个网络数据包,您不会做出这些决定,而是由路由器做出决定。洛杉矶的路由器现在可以选择通过丹佛发送第一个数据包,通过阿尔伯克基发送第二个数据包,通过丹佛发送第三个数据包,依此类推。这将导致两条链路/路线均等使用,而一条路线上没有交通拥堵,另一条路线上没有交通。简而言之 - 这只是一种将流量分配到相等链路以避免拥塞的方法。