3种端口类型有什么区别?


3

我已经阅读了一个非常类似于这个的线程,但我仍然不理解它。

任何人都可以解释众所周知,注册和动态端口之间的区别。

到目前为止我所知道的:

众所周知的端口用于监听,并且端口转发以将流量发送到特定的ip

动态端口是客户端,仅用于活动会话。一旦它到期,端口再次可用。这些仅用于使流量回到正确的用户。

注册 - 完全不懂


Simon,如果您对任何帖子有任何疑问,请对已发布的答案进行评论,他们可以澄清。这可以使答案和你对它们的理解更好。
barlop 2015年

Answers:


6

就TCP和UDP协议而言,端口都是相同的。它们中的任何一个都可以用于服务/守护进程监听,其中任何一个都可以在NAT(也称为NAPT,PAT)网关中进行端口转发,并且其中任何一个都可以用于客户端发起连接。

从历史上看,许多众所周知的协议(如HTTP(80))已被分配到1024以下的默认端口,因此许多操作系统(包括大多数Unix和类Unix操作系统)不允许您在这些端口上打开侦听器,除非你有管理员/ root凭据。这是假设您的Unix机箱实际上是一个多用户系统,并且J.随机用户不应该能够在盒子上运行HTTP服务器并使其看起来像用户的HTTP服务器是官方HTTP服务器通过在端口80上运行该框。与SSH(22),Telnet(23),SMTP(25),FTP(21)等相同。

在1024和49152之间是一堆端口,已被指定为许多不太知名的默认端口,尤其是公司/专有协议。操作系统尝试不使用这些端口被认为是最佳做法。

当客户端或服务器进程要求侦听端口,或者要求启动传出TCP连接或UDP流,并且未指定特定端口时,内核中的TCP和UDP网络代码(“网络堆栈”)任意分配一个当前未使用的端口。为了不妨碍以后可能使用专有“注册”端口的服务,网络堆栈通常会尽量避免使用已知或注册的端口,而是将其自身限制为短暂/ 49152和65535之间的动态端口。


6

知名港口

  • 0到1023范围内的端口号是众所周知的端口或系统端口。它们由提供广泛使用的网络服务类型的系统进程使用。在类Unix操作系统上,进程必须以超级用户权限执行才能使用其中一个众所周知的端口将网络套接字绑定到IP地址

动态端口

  • 范围49152-65535(2 15 +2 14到2 16 -1)包含无法在IANA注册的动态或专用端口。此范围用于私有或定制服务或临时目的以及用于短暂端口的自动分配。

注册港口

  • 1024到49151之间的端口号范围是已注册的端口。在请求实体提出申请后,IANA会将其分配给特定服务。[1] 在大多数系统上,普通用户可以使用注册端口。以下是众所周知的端口,这里是注册端口

这里有一个很好的解释,端口是什么,jcrawford的补充


2

他们只是数字。您不需要将它们视为比这更复杂。

例如,TCP端口80被广泛认为是HTTP端口。由于该服务被认为是重要的,因此IANA的端口列表中的数量相对较少。(如果要查看整个列表,请单击该页面上的“XML”超链接,而不是按端口号分解。)

但是,如果您想在非默认端口(如TCP端口80)上放置不同的服务(如SSH服务器),这将起作用。通常这意味着服务器和客户端都需要指定非默认设置,并且可能存在一些其他副作用(例如“netstat -a”显示“www”,即使它是SSH连接),但它会工作。

那么这意味着“众所周知”的端口,或“注册端口”,或“动态”/“短暂”端口之间真的没有技术差异。在许多情况下,端口的行为完全相同,如果端口根据它们所属的数字范围进行不同的处理,那通常只是一些可以覆盖的默认行为。

端口1023和下端被集中到“众所周知的”类别中仅仅是因为数量是1023或更少。实际上,IANA的页面甚至为这些类别提供了不同的名称:“系统”端口(用于0-1023),用户端口(用于1024-49151)和专用端口(用于49152-65535)。因此,即使是类别的名称也可能有所不同。总之,除非您准备考试,否则通常不必过多担心端口号属于哪个类别。


1

您对动态端口的定义在某些方面比任何答案都更清晰。

你写

动态端口是客户端,仅用于活动会话。一旦它到期,端口再次可用。这些仅用于使流量回到正确的用户“。

我只是将最后一句话改为“客户”。

用户不相关,这完全与计算机有关。用户只需简化计算机的通讯!

服务器可以使用IP将其发送到正确的计算机(客户端计算机)。它得到了一个数据包,它看到了它获得的数据包的源IP,它可以在发送数据包时将其写入目标IP。

Toomgo在他的评论中指出,一个过程可以启动许多“对话”。

客户端端口将识别该数据包所属的对话。

你写

众所周知的端口用于监听,并且端口转发以将流量发送到特定的ip

我会说众所周知的端口是用来听的。所以,如你所知,他们是服务器端。具有侦听端口的计算机是服务器(根据服务器的主要定义)

NAT路由器,如果他们正在进行端口转发,将转发给他们。但端口转发是完成的,在“NAT路由器”上完成,但您可以从LAN中的一台计算机连接到LAN中的另一台计算机。没有端口转发。因此,当您使用众所周知的端口时,它不是任何定义的一部分。

注册 - 完全不懂

我不确定我是否也这样做。

看起来它们可能与众所周知的端口相同但不是众所周知的......也就是说可以称之为不太知名的端口。所谓的众所周知的端口<1024,所谓的注册端口超过1023。

从技术上讲,IANA说港口的用途并不重要。人们可以在他们想要的任何端口上运行服务器,只要他们知道或找出端口上运行的是什么,这样他们就知道他们连接到什么端口/连接什么端口。当然,如果您正在与期望某个特定端口或软件期望某些东西的人打交道,那么您可能想要使用该端口。像端口80用于网页..有些使用端口8080用于内部网络。或者作为记忆辅助工具,您可能希望坚持惯例。由于一层安全人员有时会在高端口上运行服务器,因此黑客无法猜测它。

如果进行端口转发,NAT路由器也将转发到它们。

所以你所做的区别是最好的。动态客户端端口和服务器端端口。是的,如果任何NAT路由器正在进行端口转发,他们就会对服务器端端口进行端口转发。并且IANA似乎有一个列表,将服务器端端口号命名为传统上将在那里,并且他们对列表进行分类,端口<1024的约定为“众所周知”,端口约定> 1023为“已注册”我想这就像不太知名。但从技术上讲,我猜除此之外没有什么区别。


我同意100%知名的端口和注册端口是一种模糊混合。我所知道的唯一主要区别是,在Unix环境中,您需要sudo权限才能绑定众所周知的端口。我发现两者之间有一些有趣的解释
DrZoo 2015年

@barlop尽管你的“我会说”和“我不确定”和“我猜”,你说得对。需要注意的是,TCP端口号用于区分对话,而不是用户或计算机。例如,您可以创建到同一服务器的多个HTTP或FTP连接,并一次下载多个文件。TCP端口号(与IP /网络地址相结合)可以帮助跟踪哪些传入数据用于哪个文件传输通信/对话,即使正在使用同一个用户@同一台计算机。
TOOGAM 2015年

@TOOGAM是的......确实,比计算机更具体..我注意到虽然在UDP端口的情况下,它可能是一个独白,而不是连接/“对话”。我认为它甚至可能是UDP的对话(尽管技术上UDP被称为无连接)。我想这些端口可以帮助操作系统识别数据包的进程,以及帮助处理(如你所说)确定数据包是/是其中一部分的“对话”。
barlop 2015年

1
如果我向同一DNS服务器发送两个DNS查询(使用UDP),则正确的响应应与查询匹配。所以UDP确实支持多个会话的概念(因此端口号的有用性)和回复,即使它没有做TCP的花哨的“三次握手”方法来启动TCP称之为“连接”的东西。
TOOGAM 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.