服务器如何以及为什么使用随机端口号



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

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

当您连接到预定义的端口号时,您首先发送一个请求,因此可以确定客户端的端口,但如果服务的端口不是预先确定的,客户端如何知道将请求发送到哪个端口?此外,总是使用不同端口的原因是什么?这是如何发生的?

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

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

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

此外,总是使用不同端口的原因是什么。。。

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

。。。这是怎么发生的?

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

如果服务的端口不是预先确定的,客户端如何知道将请求发送到哪个端口?

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

总是使用不同端口的原因是什么

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

最新更新