我有一台路由器,两台本地机器 A 和 B 分别有 ip 192.168.1.2 和 192.168.1.3,它们都与这台路由器相连。当 A 向某个服务器发出 http 请求,路由器收到相应的响应时,该响应如何传播到 A(而不是 B)?每个请求是否都与特定端口相关联,以便路由器知道它是发给 A 而不是 B?在这种情况下,A 和 B 不能共享端口吗?
答案1
答案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 响应时,将遵循以下过程:
- 通过向每个人发送 ARP whois 来查找路由器的 MAC。
- 只有路由器回复其 MAC 地址
- 路由器向服务器发送 HTTP 请求并接收 HTTP 响应
- 如果路由器的缓存中有 A 的 MAC 地址,它会立即转发响应。否则,
- 路由器向所有人发送 ARP whois
- 只有 A 回复其 MAC
- 路由器将 HTTP 响应转发给 A