当多个设备可以共享相同的 IP 地址时,服务器如何识别请求页面的设备?

网络工程 路由器 ip MAC地址 奥西
2021-07-17 18:01:33

你有一个路由器,许多设备可以连接到它来访问互联网。从我读过的内容来看,路由器会为连接的设备分配私有的内部 IP 地址,因此它知道如何引导流量。但是,ISP 为路由器分配了一个 IP 地址。世界从来自该路由器的任何请求中看到的,无论是来自台式机还是平板电脑,都是路由器的一个 IP 地址。那么服务器如何知道该 IP 地址的另一端有多少用户呢?我知道设备有它们唯一的 mac 地址,但我读到该信息不会发送到服务器。

一个更具体的场景是像 youtube 这样的视频托管网站。它如何知道有多少用户在使用相同的 IP?(用于查看次数)此外,在您预计会有许多用户使用相同“wifi”的地方,例如星巴克、汉堡王或某些大学,网络上的设备连接如何区分?

2个回答

您应该搜索 OSI 模型:

在此处输入图片说明

OSI 模型的完整解释过于宽泛,无法在此给出,但浏览器和 Web 服务器等应用程序使用传输层相互通信,而不是使用 IP 地址所在的网络层。

您缺少的是 HTTP 使用 TCP 作为传输协议。默认情况下,HTTP 服务器侦听 TCP 端口 80。使用浏览器的主机将使用随机的、临时的 TCP 端口作为其源端口。NAT 会为每台主机执行类似的操作,并为其转换 IP 地址,并跟踪流量流中将哪个端口分配给哪个主机。它最终是用作唯一标识符的第 3 层地址(例如 IP 地址)、传输协议(例如 TCP)和第 4 层地址(例如 TCP 端口)的组合。

同时发生的多个请求由 TCP 端口号区分。这允许服务器跟踪单独的请求。即使客户端机器本地使用的端口相同,NAT 也会确保服务器看到的用于同时 TCP 连接的 TCP 端口号是不同的。

然而,TCP 连接对于确定两个请求是否来自同一台机器没有多大帮助。显然,如果两个请求使用相同的 TCP 连接,它们来自同一台机器,但来自同一台机器的请求使用许多不同的 TCP 连接是正常的。

网络上的用户会话通常使用 http cookie 进行跟踪。请注意,这些是每个浏览器而不是每台机器。网站没有可靠的方法来区分运行在同一台客户端机器上的两个不同浏览器与同一 NAT 后面的两个不同客户端机器之间的区别。