客户端使用高端口号
Posted
技术标签:
【中文标题】客户端使用高端口号【英文标题】:Client use high port number 【发布时间】:2011-01-19 01:18:10 【问题描述】:为什么客户端连接不上 使用高端口号(临时端口),而应用程序 监听通常很小的端口号?
谢谢你, 卡提克巴拉古鲁
【问题讨论】:
【参考方案1】:较低的端口号 (Internet Assigned Number Authority 分配给特定服务。客户端建立与侦听这些众所周知的端口的服务器的连接,但根据可用的端口在更高范围内使用动态分配的端口号。
【讨论】:
【参考方案2】:较低的端口号通常保留给常见应用程序。更短 = 更容易记住。
【讨论】:
不是原因 - 只是较旧的服务更常见(非常松散地说),而较旧的服务分配的数量较少。此外, 【参考方案3】:低于 1024 的端口号称为“已注册”,而高于(限制为 65,535)的端口号称为“未注册”。所有这两个术语的意思是1024以下的端口具有与之关联的标准服务。 IE:DNS 为 53,HTTP 为 80,SMTP 为 25 等。请注意它们是相关联的 - 没有什么可以阻止您将应用程序设置为使用端口 53、25 等,但不建议这样做,因为其他服务会尝试连接和/或在这些端口上操作,因此可能会导致问题。
未注册的端口区域由客户端应用程序动态使用。 IE:您在连接到 ***.com 网络服务器的端口 80 时正在阅读此答案,但您的浏览器正在使用未注册的端口来发起该请求。
【讨论】:
实际上 IANA 将端口 1024..49151 称为“已注册”——有关详细信息,请参阅我的答案中的链接。如果您不是 root,还有一些东西会阻止您使用端口 53 或 25。 您不能使用低于 1024 的端口,除非仅在 *nix 系统上作为 root 或代理服务。在 Windows 上不是这种情况。 现在它是 ***.com 网络服务器的 443 端口。 ?【参考方案4】:因为服务器端口通常是众所周知的端口。在 Unix 机器上,您将在 /etc/services
文件中看到它们的分配。另一方面,客户端端口通常由 TCP/IP 堆栈从特定的高范围中挑选。所以服务器知道要监听的端口,客户端知道要连接的端口,没有人关心连接是从哪个端口从建立的。
【讨论】:
【参考方案5】:服务器侦听固定端口号,以便客户端知道连接的位置。客户端不需要使用固定端口号,因为没有人向它们发起连接,事实上,如果同一台机器上可能运行多个客户端(例如 Web 浏览器),它们不能使用固定端口号连接到同一台服务器。 IANA has designated 0..49151 范围内的端口作为特定服务的固定端口号,49152..65535 范围内的端口作为不分配给任何服务的动态(临时)端口,并且可以在固定端口号时使用不是必需的。
端口范围 0..49151 进一步分为 众所周知 范围 0..1023,只有特权进程才能绑定(至少在 Unix/Linux 上),而 em>注册范围1024..49151。 1024..49151 范围内的端口可以被可能作为非特权用户运行的服务器进程使用,如果服务器不使用这些端口,客户端也可以使用该范围内的端口(例如 Linux 上的动态端口)而 Solaris 默认从 32768 开始,而不是 49152)。
【讨论】:
以上是关于客户端使用高端口号的主要内容,如果未能解决你的问题,请参考以下文章
铠侠扩展面向高端客户端应用的PCIe 4.0固态硬盘产品阵容
为什么TCPUDP套接字服务器端需要绑定端口号客户端不需要?