场景:计算机 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。在这种情况下,当数据包由虚拟机的主机路由到外部世界时,源地址(可能还有端口)会发生变化。响应会将目的地更改为原始目的地。