一般来说,客户端在与服务器建立连接时使用临时端口。
例如:
- 服务器监听 80 端口
- 客户端(浏览器、FTP 客户端、bittorent 客户端)向服务器发送请求,其中包括操作系统分配的临时端口
- 服务器使用提供的临时端口作为目标端口进行响应
现在的问题是:
我编写了一个服务器应用程序,每次启动时都希望它在随机空闲端口上启动(为了保持这个问题的连贯性,我不会解释为什么我希望这种行为)。现在我的问题是,如果我使用一个临时端口让服务器监听,会产生什么影响。这样做有什么缺点吗(在安全方面也是如此)?
您是否知道任何在实践中也使用临时端口的服务器示例?
我担心的问题之一也是TCP/IP 指南:全面、图解的互联网协议参考(第 705 页):
正如众所周知和注册的端口号用于服务器进程一样,临时端口号仅用于客户端进程。
答案1
如果你监听临时端口,你可能会面临TCP 自连接。
答案2
作为帮助,维基百科页面临时端口提供有关操作系统实际使用的端口号的更多信息。
由此可以立即看到,有许多可用的端口通常不被服务器(进程)使用,也不在短暂范围内。
因此,显而易见的解决方案是从其他端口中随机选择。这样就无需假设操作系统如何从临时范围进行分配:它是检查实际使用情况还是仅检查其分配以避免新分配发生冲突?
这个问题可能看起来微不足道,但对于客户端端口,进程通常不直接使用端口号(它是在进程打开连接时分配的,只有通过查看套接字的属性,进程才能找到端口号:通常这是完全没有必要的)。但是,要接受传入的连接,套接字必须绑定到特定端口,因此服务器进程负责获取端口号。