【问题标题】:How and why do servers use random port numbers?服务器如何以及为什么使用随机端口号?
【发布时间】:2021-02-28 02:31:08
【问题描述】:

知名服务通常在服务器端使用预定义的端口号。

但是,我意识到情况并非总是如此。例如,某些服务和游戏似乎会从预定义的范围中选择一个随机端口。

当你连接到一个预定义的端口号时,你先发送一个请求,所以客户端的端口是可以确定的,但是如果服务的端口不是预定的,那么客户端怎么知道向哪个端口发送请求呢?另外,为什么总是使用不同的端口?这是怎么发生的?

【问题讨论】:

    标签: tcp udp port


    【解决方案1】:

    客户端如何知道将请求发送到哪个端口?

    这取决于具体的协议。例如,对于 SIP、H.323 或 FTP 等协议,信令通道有预定义的端口号。实际的数据传输是由动态端口上的新连接完成的。这些端口在信令通道中通告。

    在其他情况下,预定义端口号上没有这样的信令通道。这通常适用于没有 IANA 分配端口号的服务器。当服务器的多个实例(具有不同配置)应该在同一个系统上运行并且这些实例根本不能使用相同的端口号时,也会发生这种情况。在这种情况下,相关的 IP 和端口可能会通过 DNS SRV 记录进行通告。当然也可能有其他方式,比如在某个网站或类似网站上发布信息。

    另外,为什么总是使用不同的端口...

    同样,这取决于特定的协议。例如,对于 SIP、H.323 或 FTP,数据连接是特定于客户端的,它会简单地使用系统上可用的端口。并且可以同时有来自相同或不同客户端的多个连接,这些客户端都使用不同的端口。对端口范围的任何限制通常只是为了更好地与防火墙配合使用,这样就不需要打开很大的端口范围,但可以允许更小的端口范围,从而降低攻击面。

    ...这是怎么发生的?

    只是让系统选择一个随机端口,而不是给出一个特定的值。或者,如果应该使用某个范围内的端口,那么它会通过尝试绑定到该端口来简单地确定哪个端口可用,如果绑定失败则继续下一个。

    【讨论】:

      【解决方案2】:

      如果服务的端口没有预先确定,客户端如何知道向哪个端口发送请求?

      端口必须提前知道,由用户输入,或者在客户可以找到的地方公布。

      为什么总是使用不同的端口

      很多原因:安全、网络/防火墙限制等

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-23
        • 1970-01-01
        • 1970-01-01
        • 2011-04-16
        • 1970-01-01
        • 1970-01-01
        • 2019-12-08
        相关资源
        最近更新 更多