我已经阅读过一个与此非常相似的帖子,但我仍然不明白。
有人能解释一下知名端口、注册端口和动态端口之间的区别吗?
我目前所知道的情况:
众所周知的端口用于监听,并通过端口转发将流量发送到特定的 IP
动态端口是客户端端口,仅用于活动会话。一旦端口过期,端口将再次可用。这些端口仅用于将流量返回到正确的用户。
注册了——完全不明白
答案1
著名港口
- 0 到 1023 范围内的端口号是众所周知的端口或系统端口。它们由提供广泛使用的网络服务的系统进程使用。在类 Unix 操作系统上,进程必须以超级用户权限执行,才能使用其中一个众所周知的端口将网络套接字绑定到 IP 地址
动态端口
- 范围 49152–65535(2 15 +2 14至 2 16 −1)包含无法向 IANA 注册的动态或私有端口。此范围用于私有或自定义服务或临时用途以及自动分配临时端口。
注册端口
答案2
就 TCP 和 UDP 协议而言,端口都是相同的。它们中的任何一个都可以用于服务/守护进程进行监听,它们中的任何一个都可以在 NAT(又称 NAPT、PAT)网关中进行端口转发,它们中的任何一个都可以用于客户端发起连接。
从历史上看,许多众所周知的协议(例如 HTTP (80))都分配了低于 1024 的默认端口,因此许多操作系统(包括大多数 Unix 和类 Unix 操作系统)都不允许您在这些端口上打开侦听器,除非您拥有管理员/root 凭据。这是基于您的 Unix 机器实际上是一个多用户系统这一假设,并且 J. Random User 不应该能够在机器上运行 HTTP 服务器,并通过在端口 80 上运行 HTTP 服务器,使该用户的 HTTP 服务器看起来像是该机器的官方 HTTP 服务器。SSH (22)、Telnet (23)、SMTP (25)、FTP (21) 等也是如此。
1024 到 49152 之间有很多端口,这些端口被指定为许多不太知名的协议(尤其是企业/专有协议)的默认端口。操作系统的最佳做法是尽量不使用这些端口。
当客户端或服务器进程请求侦听某个端口,或请求启动传出 TCP 连接或 UDP 流,但未指定特定端口时,内核中的 TCP 和 UDP 网络代码(“网络堆栈”)会任意为它们分配一个当前未使用的端口。为了不妨碍以后可能想要使用专有“注册”端口的服务,网络堆栈通常会尝试避免为此使用知名或注册端口,而是将其限制在 49152 和 65535 之间的临时/动态端口上。
答案3
它们只是数字。你不需要把它们想得更复杂。
例如,TCP 端口 80 被广泛认为是 HTTP 端口。由于该服务被认为很重要,因此在IANA 的端口列表。(如果您想查看整个列表(不按端口号细分),请单击该页面上的“XML”超链接。)
但是,如果您想将不同的服务(如 SSH 服务器)放置在非默认端口(如 TCP 端口 80)上,这种方法是可行的。通常,这意味着服务器和客户端都需要指定非默认设置,并且可能存在其他副作用(例如“netstat -a”显示“www”,尽管它是 SSH 连接),但它可以正常工作。
因此,这意味着“知名”端口、“注册”端口或“动态”/“临时”端口之间实际上没有技术差异。在许多情况下,端口的行为完全相同,如果根据端口所属的数字范围对其进行不同的处理,这通常只是一些可以覆盖的默认行为。
1023 及以下端口被归入“知名”类别,只是因为端口号为 1023 或更小。事实上,IANA 页面甚至为这些类别提供了不同的名称:“系统”端口(0-1023)、用户端口(1024-49151)和私有端口(49152-65535)。因此,甚至类别的名称也可能不同。总之,除非您正在准备考试,否则您通常不需要太担心端口号属于哪个类别。
答案4
在某些方面,您对动态端口的定义比任何答案都更清晰。
你写
动态端口是客户端端口,仅用于活动会话。一旦端口过期,端口将再次可用。这些端口仅用于将流量返回到正确的用户”。
我只想将最后一个词修改为“客户”。
用户不重要,一切都与计算机有关。用户只是促进计算机之间的交流!
服务器可以使用 IP 将其发送到正确的计算机(客户端计算机)。它收到一个数据包,它查看收到的数据包的源 IP,并且可以在发送数据包时将其写入为目标 IP。
Toomgo 在他的评论中指出,一个过程可以启动许多“对话”。
客户端端口将识别该数据包属于哪个对话的一部分。
你写
众所周知的端口用于监听,并通过端口转发将流量发送到特定的 IP
我认为众所周知的端口是用于监听的。所以,如你所知,它们是服务器端的。具有监听端口的计算机是服务器(无论如何,根据服务器的主要定义)
如果 NAT 路由器正在执行端口转发,则会将端口转发给它们。但是,如果执行了端口转发,则在“NAT 路由器”上执行,但您可以从 LAN 中的一台计算机连接到 LAN 中的另一台计算机。没有端口转发。因此,它不属于使用知名端口的任何定义的一部分。
注册了——完全不明白
我也不确定我是否知道。
看起来它们可能与知名端口相同,但不那么知名。也就是说,人们可以称它们为不太知名的端口。所谓的知名端口小于 1024,而所谓的注册端口则超过 1023。
从技术上讲,IANA 规定端口的用途其实并不重要。人们可以在任何他们想要的端口上运行服务器,只要他们知道或找出端口上运行的内容,这样他们就知道他们要连接到什么/要连接到哪个端口。当然,如果你正在与那些希望在特定端口上运行某些东西的人打交道,或者软件希望在特定端口上运行某些东西,那么你可能想要使用该端口。比如用于网页的端口 80.. 而有些人使用端口 8080 进行内部网络。或者作为记忆辅助,你可能想要遵循惯例。作为一层安全措施,人们有时会在高端口上运行服务器,这样黑客就猜不到了。
如果 NAT 路由器进行端口转发,也会将端口转发给它们。
所以你做出的区分是最好的。动态客户端端口和服务器端端口。是的,如果任何 NAT 路由器正在执行端口转发,它们都会对服务器端端口进行转发。IANA 似乎有一个列表,其中列出了服务器端端口号以及常规端口号,并且它们对列表进行了分类,将端口 < 1024 的约定称为“众所周知的”,将端口 > 1023 的约定称为“已注册的”,我猜这不太为人所知。但从技术上讲,我想除此之外没有什么区别。