首页 > 试题广场 >

关于 Linux 系统上同一个程序的多个进程实例共享一个 T

[单选题]
关于 Linux 系统上同一个程序的多个进程实例共享一个 TCP 监听端口的说法, 哪个不正确?
  • 每个进程都使用 SO_REUSEPORT 选项,然后绑定同一个地址和端口
  • 每个进程分别绑定不同的网卡地址的同一端口
  • 第一个进程先绑定到监听地址端口, 然后 fork 子进程共享使用
  • 每个进程分别绑定一次, 但只有最后一个调用的进程才能收到数据
D是竞争调度的结果,而不是最后调用的进程收到数据。
A使用SO_REUSEPORT,绑定统一地址和端口。
B分别绑定 不同的网卡地址的同一端口,TCP的四元组并不冲突。
C使用fork创建子进程共享,也没有问题。
发表于 2016-08-19 17:28:21 回复(0)
在没有SO_REUSEPORT 之前都是使用fork来让多个进程监听同一端口。AC对。
D,确实只有一个进程收到数据,但是是多个进程竞争连接请求。
B正确
发表于 2016-08-19 09:51:49 回复(4)
Linux kernel 3.9带来了SO_REUSEPORT特性。
SO_REUSEPORT支持多个进程或者线程绑定到同一端口,提高服务器程序的性能,解决的问题:
  • 允许多个套接字 bind()/listen() 同一个TCP/UDP端口
    • 每一个线程拥有自己的服务器套接字
    • 在服务器套接字上没有了锁的竞争
  • 内核层面实现负载均衡
  • 安全层面,监听同一个端口的套接字只能位于同一个用户下面
以前通过fork形式创建多个子进程,现在有了SO_REUSEPORT,可以不用通过fork的形式,让多进程监听同一个端口,各个进程中accept socket fd不一样,有新连接建立时,内核只会唤醒一个进程来accept,并且保证唤醒的均衡性。
发表于 2016-10-08 23:27:50 回复(0)
D是竞争调度的结果,而不是最后调用的进程收到数据
发表于 2017-06-13 22:31:00 回复(0)
reuse port重用端口
发表于 2017-08-25 10:22:07 回复(0)
在 Linux 系统上,多个进程实例可以共享一个 TCP 监听端口,但是每个进程都需要绑定同一个地址和端口。选项 SO_REUSEPORT 可以用于允许多个进程绑定同一个地址和端口,这样每个进程都能接收到数据。
发表于 2023-09-11 20:23:23 回复(0)
D是竞争调度的结果,而不是最后调用的进程收到数据。
发表于 2021-11-04 16:33:14 回复(0)
我想问一下这属于哪门课的内容?本科计网和操作系统好像都涉及不到?
发表于 2019-04-13 01:15:50 回复(0)
D 不正确。在 Linux 系统上,每个进程可以绑定同一个 TCP 监听端口,并且所有进程都能够接收到通过该端口发送的数据。每个进程分别绑定一次并不会导致只有最后一个调用的进程才能收到数据。因为多个进程可以同时绑定到同一个地址和端口,操作系统会将到达该端口的数据复制给所有绑定的进程,而不仅仅是最后一个调用绑定的进程。因此,选项 D 是不正确的。
发表于 2023-05-30 10:25:02 回复(0)
D是竞争调度的结果,而不是最后调用的进程收到数据。
A使用SO_REUSEPORT,绑定统一地址和端口。
B分别绑定 不同的网卡地址的同一端口,TCP的四元组并不冲突。
C使用fork创建子进程共享,也没有问题。
发表于 2022-02-17 08:42:21 回复(0)
竞争调用
发表于 2021-04-06 21:58:38 回复(0)
在没有SO_REUSEPORT 之前都是使用fork来让多个进程监听同一端口。AC对。 D,确实只有一个进程收到数据,但是是多个进程竞争连接请求。
发表于 2019-03-06 12:44:16 回复(0)
在没有 SO_REUSEPORT 之前都是使用fork来让多个进程监听同一端口
发表于 2016-09-22 09:45:42 回复(0)