如果主机从服务器接收数据包,这些数据包具有主机的目标 IP 地址,并且首先由主机网络中的网关接收。现在网关检查 ARP,使用主机的 IP 地址进行索引以查找主机的 MAC 地址,现在它将链路层(4 层互联网模型)目标地址(MAC 地址)更改为主机 MAC 地址从 ARP 表中找到的地址。然后它将帧转发到第 2 层交换机。但我的问题是,它如何将帧转发到第 2 层交换机,因为该帧具有主机的目标 MAC 地址,而不是交换机的 MAC 地址。显然网关不能将数据包直接转发到主机,因为它们没有连接,所有数据包都必须通过交换机才能到达目标主机。那么我错过了什么?我理解错了吗?
数据包(从服务器接收)如何从网关(存在于主机网络中)发送到主机?
假设路由器和主机之间的链路层确实是基于MAC的链路层,并且通过交换机进行二层交换,那么,是的,您对路由器如何查找IP地址是正确的,看到这个子网是直接连接到它的一个接口,因此它查找 ARP 表并将 MAC 地址设置为主机的 MAC 地址。但请注意,IP 地址查找是第 3 层逻辑,而路由器将其传递给连接到子网的接口的网络接口卡,第 2 层逻辑是为主机找到正确 MAC 地址的逻辑。
我认为您的困惑是因为您认为路由器需要通过将 MAC 地址设置为交换机的 MAC 地址来将 MAC 帧发送到交换机。不,路由器只需要知道发送MAC帧的接口,以及主机的MAC地址。当时没有额外的“路由”需要交换机的 MAC 地址才能使其成为“目的地”。第 2 层目标是主机,而主机 MAC 地址是正确使用的。
然后路由器在该接口上吐出第 2 层帧,交换机将接收它并查看 MAC 地址。交换机还维护一个 ARP 表,将已知 MAC 地址映射到端口,然后可以将帧从主机的正确端口传出。
附言。您可能想知道,交换机本身的 MAC 地址的用途是什么?这适用于交换机本身是端点的情况,例如,交换机支持通过 http 接口进行配置。但这与交换机只是通过第 2 层帧从其一个端口传递到预期目的地的情况不同
路由器不会更改 MAC 地址。它路由数据包。在接收时,它从数据包中剥离 MAC 帧,它已经完成了它的工作(从前一跳传输数据包)。然后路由器查询其路由表,确定下一跳地址(和接口),并将数据包传递给它。
在基于 MAC 的链路层上“传递数据包”需要一个 MAC 帧来封装数据包。除其他细节外,MAC 帧需要目标 MAC,它是下一跳的 MAC,由 IPv4 的 ARP 或 IPv6 的 NDP 确定。下一跳可以是通向目的地的网关,如果是本地的,也可以是目的地本身。
位于路由器和目标/下一跳之间的任何交换机对链路层都是完全透明的。交换机使用目标 MAC 将帧转发到其本地目标。框架本身没有改变。
并非所有网络都是基于 MAC 的。无处不在的以太网或 Wi-Fi 是,但例如串行链路不是。点对点连接通常不需要这样的寻址。
从服务器收到的数据包 .. 服务器会将数据包发送到在服务器网络适配器属性上配置的网关 IP 地址 .. 数据包将到达网关
例如,如果在路由器上配置了网关。数据包将从路由器数据包到达路由器,如果目的地是直接连接的网络,则会进行路由表验证,然后验证 ARP 表。
ARP table maps ip address ==>mac address table
进一步的数据包将从路由器到达 L2 交换机。在 L2 交换机中验证 MAC 地址表。
Mac address table maps mac address ==> switch ports
如果目标IP地址不是直接连接网络。然后它将验证路由表并根据路由表将数据包转发到下一跳。