4

为什么连接的客户端使用高端口号(临时端口)而应用程序通常侦听小端口号?

Thx in advans, Karthik Balaguru

4

5 回答 5

15

服务器侦听一个固定的端口号,以便客户端知道在哪里连接。客户端不需要使用固定端口号,因为没有人向它们发起连接,事实上,如果同一台机器上可能运行多个客户端(例如 Web 浏览器),它们不能使用固定端口号连接到同一台服务器。 IANA 已将0..49151 范围内的端口指定为特定服务的固定端口号,并将 49152..65535 范围内的端口指定为不分配给任何服务的动态(临时)端口,并且可以在固定端口号时使用不需要。

端口范围 0..49151 进一步分为众所周知的范围 0..1023,只有特权进程才能绑定(至少在 Unix/Linux 上)和注册范围 1024..49151。1024..49151 范围内的端口可以被可能作为非特权用户运行的服务器进程使用,如果服务器不使用这些端口,客户端也可以使用该范围内的端口(例如 Linux 上的动态端口) Solaris 默认从 32768 开始,而不是 49152)。

于 2010-02-20T17:57:24.667 回答
6

低于 1024 的端口号称为“已注册”,而高于(限制为 65,535)的端口号称为“未注册”。所有这两个术语的意思是1024以下的端口具有与之关联的标准服务。IE:DNS 为 53,HTTP 为 80,SMTP 为 25 等。请注意它们是相关联的 - 没有什么可以阻止您将应用程序设置为使用端口 53、25 等,但不建议这样做,因为其他服务会尝试连接和/或在这些端口上操作,因此可能会导致问题。

未注册的端口区域由客户端应用程序动态使用。IE:您在连接到 StackOverflow.com 网络服务器的端口 80 时正在阅读此答案,但您的浏览器正在使用未注册的端口来发起该请求。

于 2010-02-20T04:51:10.793 回答
1

因为服务器端口通常是众所周知的端口。在 Unix 机器上,您将在/etc/services文件中看到它们的分配。另一方面,客户端端口通常由 TCP/IP 堆栈从特定的高范围中挑选。所以服务器知道要监听的端口,客户端知道要连接的端口,没有人关心连接是哪个端口建立的。

于 2010-02-20T04:51:41.293 回答
0

较低的端口号 (< 1024) 保留给特权进程。此外,其中许多端口由Internet 编号分配机构分配给特定服务。客户端建立与侦听这些众所周知的端口的服务器的连接,但根据可用的端口在更高范围内使用动态分配的端口号。

于 2010-02-20T04:49:44.760 回答
-2

较低的端口号通常保留给常见应用程序。更短=更容易记住。

于 2010-02-20T04:50:48.880 回答