【问题标题】:why cannot we use process id insted of taking the port we are binding为什么我们不能使用进程 ID 而不是使用我们正在绑定的端口
【发布时间】:2011-05-14 14:06:48
【问题描述】:

为什么我们不能使用进程 ID 来获取我们在套接字编程中绑定的端口。 在套接字编程中,我们创建套接字并获取套接字描述符,然后绑定到特定端口。对于多个连接,为什么我们不使用进程 ID,因为所有连接也是返回进程 ID 的进程?

【问题讨论】:

  • 我猜你喜欢问很多问题,但不想选择答案?

标签: sockets networking network-programming tcp


【解决方案1】:

这是一个有趣的想法,但我认为它会引发一些问题:

  • 您如何知道要连接到哪个进程 ID?
  • 如果您想在同一个进程内监听多个“端口”怎么办?您只有一个进程 ID。
  • IPv4 和 IPV6 为端口 ID 分配 16 位,但进程 ID 通常是 32 位(或更大)值,因此不适合
  • 有许多程序没有网络方面,并且不想要一个。自动实例化到它们的网络通信路径会是一个潜在的安全问题吗?
  • 您可以做的一个技巧(尤其是使用 UDP 多播或广播)是让多个程序在同一个端口上侦听(通过 SO_REUSEPORT),这样当任何人向该端口发送 UDP 数据包时,所有程序都会收到它。如果程序必须使用它们的(唯一的)进程 ID 号作为端口号,那么这个技巧将是困难的或不可能的。

【讨论】:

    【解决方案2】:

    首先,每个进程可以存在多个连接。其次,socket API不依赖于任何OS进程API。

    【讨论】:

      【解决方案3】:

      因为 TCP 在规范中有端口号,但没有进程 ID。

      当您可以控制端口号时,为什么还要使用您无法控制的 processID?一个进程如何监听多个端口?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-21
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 2019-11-17
        • 2018-03-19
        相关资源
        最近更新 更多