在局域网上的本地机器如何收到服务器http响应?

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

在这种情况下,使用地址parsing协议(ARP)和networking地址转换(NAT)。

在HowStuffWorks的NAT

在维基百科的ARP

每个请求都与特定的端口相关联,以便路由器知道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表中都是唯一的。 当然,路由器会透明地修改源地址和目标地址。

HTTP协议运行在TCP协议之上,该协议在IP协议之上运行。 TCP是一个面向连接的协议,这意味着在客户端和服务器可以通信之前,必须创build一个连接。

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

当一个路由器收到任何数据报时,它将被路由到下一个path,返回数据报所属的path。 在你的简单情况下,下一跳就在局域网上。 当它到达局域网时,假设该地址不在路由器的地址caching中,则使用ARP协议来查找要发送到的MAC地址。 无论哪种情况,给定MAC地址,路由器都会将数据报直接发送到LAN上的那个地址。

这不是由港口做的。

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

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