【问题标题】:TCP - possible for same client-side port to be used for different connections by different applications simlutaneously?TCP - 相同的客户端端口可能同时被不同的应用程序用于不同的连接吗?
【发布时间】:2017-01-22 08:21:22
【问题描述】:

在 TCP 中,不共享相同可执行映像的不同进程(例如,没有fork())是否可以在 Windows、Linux 或 OSX 上使用相同的客户端端口?这与使用setsockopt() 设置的套接字选项SO_REUSEADDRSO_REUSEPORT 我相信特别相关。

据我所知,我相信同一个进程/映像可以做到这一点,但我还没有找到有关多个进程/映像的信息。我想这在理论上是可能的,因为每个套接字都是由 5 值元组 [IP_PROTO, src_ip:src_port, dst_ip:dst_port] 定义的。所以我会假设,只要共享一个客户端端口的多个 TCP 连接不是对同一个 dst_ip:dst_port 进行的,这在理论上是可能的。

【问题讨论】:

    标签: sockets tcp ports


    【解决方案1】:

    UDP 不是面向连接的,客户端和服务器之间没有真正的区别,所以对于 UDP,这个问题没有多大意义。

    对于 TCP,您可以使用 SO_REUSEADDR 将多个客户端绑定到同一个端口,但您为什么要这样做呢?通常,您在建立连接之前让客户端未绑定,并让内核为您选择一个未使用的端口。

    【讨论】:

    • 我不想这样做,但我需要知道其他应用程序是否可以这样做,因为我取决于这种行为是否可能。
    • 所以我明白这对于不同的应用程序确实是可能的?
    • 可能吗?是的,如果同一端口上的所有套接字都使用SO_REUSEADDR/SO_REUSEPORT可能吗?没有。
    猜你喜欢
    • 2019-07-12
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多