我想知道操作系统如何确保客户端不会获得与网络中任何其他客户端相同的“随机”(通过将端口设置为 0 来绑定套接字)端口,因为我想使用 UDP 协议在我的服务器和许多使用相同本地 IP 的机器之间进行通信,如果客户端彼此获取数据包,那将非常困难。
答案1
操作系统有一个当前正在使用的端口列表,它通常只选择下一个可用的端口。也就是说,它会尽量避免使用较低的数字。
端口在网络中不必唯一,每个连接都一样。连接由以下部分组成:
- 源 IP
- 源端口
- 目标 IP
- 目的港
如果其中任何一个不同,则为不同的连接。这意味着一台服务器可以有多个连接从不同的 IP 进入同一端口,或者从同一 IP 的不同端口进入。
答案2
操作系统如何确保客户端不会获得与网络中任何其他客户端相同的“随机”(通过将端口设置为 0 来绑定套接字)端口
不会。它确保本地应用程序获取唯一端口在当前主机中. 与客户或网络无关。
如果客户端收到彼此的数据包,那将会非常困难。
除非它们位于同一主机中并且故意共享同一端口,否则它们不会这样做,但您必须对它们进行编程以故意这样做(即在两个套接字上设置 SO_REUSEPORT)。