TCP 请求如何从虚拟机路由到外部资源并再返回?

TCP 请求如何从虚拟机路由到外部资源并再返回?

场景:计算机 A 的本地 IP 为 192.168.1.100,其中运行着一个虚拟机。虚拟机现在向外部 IP 地址 (74.125.225.98) 发出 tcp 请求。

有人可以解释一下请求是如何路由到远程 IP 然后再路由回 VM 的吗?

据我了解,虚拟机将此请求包装在带有目标 IP 的 IP 数据包中,然后再次包装在具有其自己唯一的(可能是假的)MAC 地址的以太网帧中。然后路由器将虚拟机的 IP 和 MAC 替换为其自己的,并将目标 MAC 设置为 ISP 的路由器。

我主要困惑的是,当创建 tcp 响应并将其发送回 VM 时......由于 VM 在计算机 A 内部运行,路由器如何运行 ARP 请求来获取 VM 的 MAC 地址?

谢谢您的帮助 :)

编辑:

找到以下有助于解释 NAT 的视频:https://www.youtube.com/watch?v=01ajHxPLxAw

答案1

如果您正在寻找简短的答案,它(路由器/防火墙)已经从会话表和路由表中了解了 TCP“响应”所需的一切。

一个通用的例子如下:

在此处输入图片描述

如果需要,路由器可以运行 ARP 请求,就像它需要进行 MAC 地址查找时一样。但它通常用于本地设备,这意味着根据子网,它可能最终只是将数据包路由到第 3 层,而不是另一台设备。

更复杂的答案将涉及了解虚拟机在网络上的运行方式(桥接/NAT/等)以及网络的复杂性等,这将是书本答案说实话,是从消防水龙带里喝水。

答案2

当不使用 NAT 时,有两种方法可用于处理 ARP 流量。

  • 可以桥接流量,并且虚拟机将自行接收并响应 ARP 请求。
  • 可以路由流量,并且 VM 的主机使用 ProxyARP 响应进行响应。

我们也经常对虚拟机进行 NAT。在这种情况下,当数据包由虚拟机的主机路由到外部世界时,源地址(可能还有端口)会发生变化。响应会将目的地更改为原始目的地。

相关内容