![单个进程可以监听所有端口吗?](https://linux22.com/image/159568/%E5%8D%95%E4%B8%AA%E8%BF%9B%E7%A8%8B%E5%8F%AF%E4%BB%A5%E7%9B%91%E5%90%AC%E6%89%80%E6%9C%89%E7%AB%AF%E5%8F%A3%E5%90%97%EF%BC%9F.png)
根据我的理解,监听端口意味着向操作系统请求分配1-65535范围内的给定编号。前 1024 个端口仅限超级用户进程使用。
据我所知,任何执行 IP 请求的进程都需要侦听端口并指定它期望在请求中得到答案的端口。但是,如果一个进程同时声明所有可能的端口,会发生什么情况?操作系统允许吗?如果是,这是否意味着大多数其他程序将停止工作?
答案1
我认为没有一种方法可以同时声明所有可能的端口,至少不使用套接字 API,但是,程序可以尝试一个接一个地绑定所有可能的端口。如果它没有耗尽资源,它将能够绑定所有可用端口,一旦完成,其他程序将无法在同一侦听地址上绑定任何这些端口。
我不认为最多程序尝试绑定端口,因此大多数其他程序不应停止工作;唯一受影响的程序是那些需要使用已绑定端口的程序,IE任何尝试使用 IP 套接字的程序。
Cloudflare 正在提议一个补丁它允许 BPF 程序侦听任何端口,并且允许 BPF 程序有效地列出所有端口;看补丁和LPC 即将举行的演讲。