![路由器如何将入站流量映射到 LAN 节点?](https://linux22.com/image/1425322/%E8%B7%AF%E7%94%B1%E5%99%A8%E5%A6%82%E4%BD%95%E5%B0%86%E5%85%A5%E7%AB%99%E6%B5%81%E9%87%8F%E6%98%A0%E5%B0%84%E5%88%B0%20LAN%20%E8%8A%82%E7%82%B9%EF%BC%9F.png)
想象一下,一个由多台计算机组成的家庭网络通过路由器连接到 ISP。
计算机 A 想要从远程网站 10.234.12.8 请求网页。该地址不在其 ARP 缓存中,因此它查阅其路由表并找到默认网关(路由器)形式的匹配项。它将数据包连同路由器的 MAC 一起发送到路由器。我知道当路由器收到传出的请求时,它必须进行一些封装和地址重写,但我不知道细节。
当响应从 10.234.12.8 返回路由器时,路由器如何知道应将入站数据包转发到计算机 A?换句话说,路由器在对 10.234.12.8 的请求中放入了什么,10.234.12.8 会在其响应中包含什么,以便路由器可以确定响应应该发给 A?是 A 的 MAC 地址吗?还是 A 的子网 IP?我猜是后者(A 的子网 IP)。入站数据包中是否包含 A 的 LAN 地址?我猜(希望)路由器另一侧的任何人都看不到 A 的 MAC 地址。
我知道路由器一直在接收入站 Web 响应并将它们分发到正确的本地节点。它是使用封装的 MAC 或封装的 LAN IP 还是其他技术来实现这一点?
答案1
它的工作原理与终端系统完全相同。当您的浏览器与 Web 服务器建立两个连接时,目标 IP 地址和目标端口是相同的。系统(无论是执行 NAT 的路由器还是终端节点)都会为每个连接分配一个不同的本地源端口地址。回复通过回复中的目标端口地址来区分,该地址对应于出站数据包中的源端口地址。