局域网中的本地机器如何接收服务器的http响应?

局域网中的本地机器如何接收服务器的http响应?

我有一台路由器,两台本地机器 A 和 B 分别有 ip 192.168.1.2 和 192.168.1.3,它们都与这台路由器相连。当 A 向某个服务器发出 http 请求,路由器收到相应的响应时,该响应如何传播到 A(而不是 B)?每个请求是否都与特定端口相关联,以便路由器知道它是发给 A 而不是 B?在这种情况下,A 和 B 不能共享端口吗?

答案1

在这种情况下,使用地址解析协议 (ARP) 和网络地址转换 (NAT)。

HowStuffWorks 上的 NAT

维基百科上的 ARP

答案2

每个请求是否与特定端口相关联,以便路由器知道它是用于 A 而不是用于 B?在这种情况下,端口不能在 A 和 B 上共享吗?

是的,端口是游戏的一部分。

但您的问题是重复的。看看这个问题:
两台计算机如何通过 NAT 连接到同一个外部地址?

看看如何NAT防止地址冲突。

例子:

    HOST A addr         HOST B addr
    10.1.0.2:4040       10.1.0.3:4040
-----------------------------------------
NAT 200.50.50.28:4040   200.50.50.28:4041 (what external host sees)

200.50.50.28 是路由器的全局(互联网)IP。

每个端口号在 NAT 表中都是唯一的。当然,路由器会执行所有肮脏的透明地修改源地址和目标地址的工作。

答案3

HTTP 协议运行在 TCP 协议之上,而 TCP 协议运行在 IP 协议之上。TCP 是一种面向连接的协议,这意味着必须先创建连接,客户端和服务器才能进行通信。

TCP 连接由 [源 IP、源端口、目标 IP、目标端口] 组成。这意味着当消息发送到服务器时,服务器已经拥有应回复的 IP 地址和端口。任何回复都以 IP 数据报的形式发送到该地址和端口。

当路由器收到任何数据报时,它会沿着返回数据报所属位置的路径路由到下一跳。在您的简单情况下,下一跳就在 LAN 上。当它到达 LAN 时,ARP 协议用于查找要发送到的 MAC 地址,假设该地址尚未在路由器的地址缓存中。在任一情况下,给定 MAC 地址,路由器都会将数据报直接发送到 LAN 上的该地址。

答案4

这当然不是由港口完成的。

在 LAN 上,这是通过 MAC 地址完成的。基本上,每台机器都有一个唯一的 MAC 地址。因此,当用户希望 A 从某个服务器(给定 IP)获取 HTTP 响应时,将遵循以下过程:

  1. 通过向每个人发送 ARP whois 来查找路由器的 MAC。
  2. 只有路由器回复其 MAC 地址
  3. 路由器向服务器发送 HTTP 请求并接收 HTTP 响应
  4. 如果路由器的缓存中有 A 的 MAC 地址,它会立即转发响应。否则,
  5. 路由器向所有人发送 ARP whois
  6. 只有 A 回复其 MAC
  7. 路由器将 HTTP 响应转发给 A

相关内容