Networking 客户端使用高端口号

Networking 客户端使用高端口号,networking,sockets,network-programming,client-server,ports,Networking,Sockets,Network Programming,Client Server,Ports,为什么客户端会终止连接 使用高端口号(临时端口),而应用程序 监听典型的小端口号 Thx在advans, Karthik Balaguru较低的端口号(

为什么客户端会终止连接 使用高端口号(临时端口),而应用程序 监听典型的小端口号

Thx在advans,
Karthik Balaguru

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

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

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


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

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

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


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

实际上IANA将端口1024..49151称为“已注册”--有关详细信息,请参见我答案中的链接。此外,如果您不是root用户,也会有一些问题阻止您使用端口53或25。您不能使用1024以下的端口,除非仅在*nix系统上作为root或代理服务。Windows上的情况并非如此,原因并非如此——只是较旧的服务更常见(非常笼统地说),而较旧的服务分配的数量较低。也,