Http 服务器如何区分路由器后面的计算机

Http 服务器如何区分路由器后面的计算机

HTTP 服务器通常在端口 80 上运行。然而,如今大多数 NAT 路由器都会为传出请求分配端口,这样它们就会知道请求返回时应该由哪台计算机连接。它们这样做是因为它们只能使用一个公共 IP,即使路由器后面的所有计算机都被赋予了公共 IP 地址,但它们都是本地 IP 地址。这意味着它们只为该路由器后面的所有人工作。

那么服务器如何处理这个问题呢?它只在端口 80 上工作,路由器根据可用的端口和编程方式在它希望执行的任何端口上发送消息。

我的理解:

  1. 计算机 A 到路由器。22.22.22.22.22:80

  2. 路由器到世界:12.68.191.1.102:1-ISP 给出的 IP 地址:端口,以区分连接到它的计算机。

怎么办

或者端口和源端口之间可能存在差异。

答案1

您混淆了源端口和目标端口。当请求发送到 HTTP 服务器时,目标端口为 80,因为 Web 服务器通常监听该端口。NAT 路由器可以选择它们想要的任何源端口。当它们收到回复时,它们会使用目标端口(和其他信息)(该信息应与它们为出站数据包选择的源端口相匹配)来了解数据包与哪个连接相关联。

您的计算机也必须做同样的事情。假设您启动两个不同的浏览器,并将每个浏览器指向superuser.com。您认为您的计算机如何判断传入数据包属于哪个 TCP 连接?

答案2

服务器始终在端口 80 上接收数据 - 路由器不会重写端口,只重写源地址 - 至少在“典型”情况下。

事实是,服务器并不知道 NAT 路由器后面的哪台机器最初请求流量,但它可以做一些事情来找出答案 -

  1. 它可以查看浏览器作为请求的一部分发送给服务器的信息,并使用 REFERER(引荐来源)字段之类的内容来查看浏览器访问的最后一个页面和浏览器标识字符串。(毫无疑问还有其他方法,如果您迫切需要,可以合理而独特地“指纹识别”客户端)

  2. 浏览器首次访问网站(或登录或其他操作)时,服务器可以(并且通常会)使用 cookie 来跟踪浏览器在网站上的移动。这些 cookie 可用于区分机器/会话。

答案3

这里与端口无关。如果具有公共地址(qwer)的主机向 abcd 上的服务器(通常在端口 80 或其他端口)请求页面,则服务器将打开与请求主机的连接并发送回复。该请求在到达服务器之前可能已经遍历了 +100 个路由器。

相关内容