![路由器如何知道向哪个节点发送响应?](https://linux22.com/image/758099/%E8%B7%AF%E7%94%B1%E5%99%A8%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E5%90%91%E5%93%AA%E4%B8%AA%E8%8A%82%E7%82%B9%E5%8F%91%E9%80%81%E5%93%8D%E5%BA%94%EF%BC%9F.png)
我是一名软件工程师,想要了解 OSI 模型的网络层。
假设我正在向 serverfault.com 发送请求。带有服务器 IP 的数据包从我的 PC 发送到我的家用路由器,然后路由器将其进一步发送到目的地。然后主机回复并将响应发送到我的路由器的 IP 地址。现在路由器需要将其重定向到我的 PC,而不是我的手机。
我不相信请求作者的 mac 地址会包含在请求中。因此,我想知道路由器如何将 http 响应转发到适当的节点。
非常感谢。
答案1
您的路由器有 WAN 和 LAN 接口。为了将数据包从 LAN 发送到 WAN 路由,请使用 PAT(IP + 端口对)。它创建映射表 ip + 端口。假设您的家用电脑有 192.168.1.1,手机有 192.168.1.1,当使用向 serverfault.com 发送请求时。请求将 192.168.1.1:(某物) 发送到 serverfault.com.:80/443(端口),路由器将记住这一点并创建映射表。 https://www.ciscozine.com/nat-and-pat-a-complete-explanation/
答案2
如果您的用户代理具有唯一的全局可路由 IP 地址,那么就很简单了。组成响应的数据包从 Stack Exchange 的后端出发,通过其边缘路由器,通过中转 ISP 的网络,到达您的 ISP、路由器,最后到达您的 PC。整个过程中,目标 IP 地址都会保留下来,在互联网上与您的 PC 一样唯一。现在 IPv4 地址空间已经耗尽,这种简单的端到端方案只可能在 IPv6 网络上实现。
IPv4 客户端网络可能位于 NAT 后面。路径类似,但目标标头是 NAT 设备。NAT 的工作包括将传入数据包转换为内部网络上的目标 IP。为此,它必须根据端口号和其他第 4 层协议提示记住连接状态。
目的地的第 2 层 MAC 地址与穿越互联网的 IP 数据包无关。另一端可能不是以太网,连接截然不同的网络才是 IP 的全部意义所在。
一旦您的 PC 的路由器识别出链接上的 IP 地址,它就会通过第 2 层发送数据。也许包装在以太网帧中发送到 WiFi 控制器。