为什么连接的客户端使用高端口号(临时端口),而应用程序监听通常较小的端口号?
Thx in advans,Karthik Balaguru
发布于 2010-02-20 12:51:11
低于1024的端口号称为已注册端口号,大于1024的端口号称为未注册端口号(限制为65535)。所有这两个术语都意味着1024以下的端口具有与其关联的标准服务。例如: 53用于DNS,80用于HTTP,25用于SMTP等。请注意,它们是关联的-没有什么可以阻止您将应用程序设置为使用端口53、25等,但不建议这样做,因为其他服务将尝试连接和/或操作这些端口,因此可能会导致问题。
未注册的端口区域由客户端应用程序动态使用。IE:您在连接到StackOverflow.com are服务器的80端口时正在阅读此答案,但您的浏览器正在使用未注册的端口来发起该请求。
发布于 2010-02-21 01:57:25
服务器监听固定的端口号,以便客户端知道连接的位置。客户端不需要使用固定的端口号,因为没有人发起到它们的连接,并且实际上,如果在同一台机器(例如,web浏览器)上运行的多个客户端连接到相同的服务器,则它们不能使用固定的端口号。范围为0..49151的IANA has designated端口为特定服务的固定端口号,范围为49152至65535的端口为动态(临时)端口,未分配给任何服务,可在不需要固定端口号时使用。
端口范围0..1023进一步划分为众所周知的范围0..1023和注册范围1024..1023,只有特权进程才能绑定到该范围(至少在Unix/Linux上)。1024..49151范围内的端口可由可能以未授权用户身份运行的服务器进程使用,如果服务器未使用此范围内的端口,客户端也可以使用这些端口(例如,Linux和Solaris上的动态端口默认从32768开始,而不是49152)。
发布于 2010-02-20 12:51:41
因为服务器端口通常是众所周知的端口。在Unix机器上,您将在/etc/services文件中看到它们的分配。另一方面,客户端端口通常由TCP/IP堆栈从特定的高范围中挑选。因此,服务器知道要侦听哪些端口,客户端知道要连接到哪个端口,并且没有人关心连接是从哪个端口发起的。
https://stackoverflow.com/questions/2301075
复制相似问题