我不明白网络寻址如何适用于多处理器系统。
检查一下:普通 TCP/IP 网络使用目标 IP 来指定整个主机/系统,并使用 L4 (TCP/UDP) 目标端口来指定目标应用程序。
我可以(大概)将系统设置为具有一个 IP 地址,并让在不同 CPU 上运行的应用程序使用不同的 L4 端口号。然后,对于每个传入数据包,L4 端口可用于决定将其发送到哪个 CPU。但是 - 系统如何确保一个 CPU 上的应用程序不会重复使用另一个 CPU 上正在使用的 L4 端口号?
如果以上内容相同,则似乎意味着我无法真正为一个应用程序使用两个(或更多)CPU。例如,如果我正在运行一个 Web 服务器,则所有发往该服务器的数据包的 TCP 端口值为 80,那么系统将如何决定将哪些数据包发送到哪个 CPU?
- 当然,可以为每个 CPU 提供自己的 IP 地址 - 但话又说回来,我将无法运行多 CPU 应用程序。
我缺少什么?这是如何运作的?
答案1
多处理器系统和网络是相互独立的。
您可以在单处理器系统上拥有许多网络命名空间,其中每个命名空间将具有不同的地址,但相同的处理器将执行代码。
您可以为多处理器系统使用单个网络地址,其中所有网络请求都将由恰好可用于执行当前线程的任何处理器处理。
如果您想以某种方式将某些处理器与某些网络地址(甚至应用程序的端口号)关联起来,您必须在操作系统上进行设置,使用cgroups
等。
“为每个 CPU 提供自己的 IP 地址”这一概念并不存在。 “让操作系统进行某种分区,并为每个分区分配一个 IP 地址和一个处理器”是可行的。与任何其他组合一样,即“3 个 IP 地址和 2 个专用处理器”。或者“为正在侦听端口 80 的专用应用程序使用专用处理器”。