场景:计算机A的本地IP为192.168.1.100,其中运行着一个虚拟机。 VM现在向外部IP地址(74.125.225.98)发出一个tcp请求。
有人可以解释如何将请求路由到远程IP,然后回到VM?
根据我的理解,虚拟机将这个请求包装在一个IP包中,包含目标IP地址,然后用自己唯一(可能是假的)MAC地址重新包装在一个以太网帧中。 然后,路由器用自己的IPreplace虚拟机的IP和MAC,并将目标MAC设置到ISP的路由器。
我的主要困惑是,当tcp响应被创build并被发回到VM …由于VM在计算机A内部运行,路由器如何运行ARP请求来获取VM的MAC地址?
谢谢您的帮助 :)
编辑:
find了以下帮助解释NAT的video: https : //www.youtube.com/watch?v = 01ajHxPLxAw
如果你正在寻找简短的答案,它(路由器/防火墙)已经知道从会话表和路由表的TCP“响应”所需的所有信息。
一个通用的例子看起来像:

如果需要的话,路由器可以运行一个ARP请求,就像它需要做MAC地址查找一样。 但是它通常是针对本地设备的,也就是说,基于子网的结果可能仅仅是将数据包层3路由到另一个设备。
一个更复杂的答案将涉及知道虚拟机如何在networking上(桥接/ NAT /等),以及networking的复杂性等,这将是一个书的答案 ,从firehose喝,说实话。
当不使用NAT时,有两种方法可以用来处理ARPstream量。
对于一个虚拟机来说,我们也很常见。 在这种情况下,当VM的主机将数据包路由到外部世界时,源地址(可能是端口)将发生改变。 响应将目标更改为原始目标。