我在读一篇Linux文章时突然看到“临时端口”这个词,但作者没有提到它是什么。
UNIX 中的临时端口是什么?
答案1
本质上是一个临时端口是一个随机高端口,用于与已知服务器端口进行通信。例如,如果我从我的机器 ssh 到服务器,连接将如下所示:
192.168.1.102:37852 ---> 192.168.1.105:22
22 是我在远程计算机上连接的标准 SSH 端口; 37852 是我本地计算机上使用的临时端口
答案2
今天,一般来说:
带数字的端口
0-1023
称为系统或知名港口;带数字的端口1024-49151
称为用户或挂号的端口,带有数字的端口49152-65535
称为动态端口、私有端口或短暂的端口。
注册端口号目前由...IANA...分配,并由...ICANN...在 2001 年 3 月 21 日之前分配,并由...USC/ISI...在 1998 年之前分配。
来源:https://en.wikipedia.org/wiki/Registered_port[修改的]
...众所周知的端口或系统端口。它们由提供广泛使用的网络服务类型的系统进程使用。在类 Unix 操作系统上,进程必须以超级用户权限执行,才能使用众所周知的端口之一将网络套接字绑定到 IP 地址。
来源:https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
正如众所周知的和已注册的端口号用于服务器进程一样,临时端口号仅用于客户端进程。
来源:https://books.google.si/books?id=Pm4RgYV2w4YC&pg=PA705
如果没有分配此类临时/临时端口,可能会出现 Internet 协议 (IP)/网络通信冲突或停机。例如,有两个 Web 服务器,并且都侦听端口 80。这两个服务器将如何通信?您会half-duplex
在单个 80 端口上实现某种“ ”通信(侦听、传输、侦听、传输...)吗?这样的话,通讯速度至少会慢一些。更不用说其他客户端必须等待服务器对其他客户端的响应,因为其 80 端口暂时不可用(用于向客户端发送响应)
这里出现了临时端口,在这种情况下,服务器可以继续侦听端口 80 并同时在其他端口上进行通信(某种“ full-duplex
”),例如,我们假设这些是 TCP/IP 端口:
在使用 TCP/IP 或 UDP 的客户端-服务器进程中,客户端通过许多众所周知的端口之一发起与服务器的通信。但是,由于服务器不初始化通信,因此它不应使用众所周知的端口向客户端发送回复,以防服务器类型的应用程序在该客户端设备上运行。相反,客户端的服务器使用客户端提供的新的临时分配端口作为源端口。
通信终止后,该端口即可在另一个会话中使用。然而,它通常只有在整个端口范围用完之后才会被重新使用。
不同的...操作系统...对临时端口使用不同的端口范围。默认情况下,许多 Linux 版本使用端口范围 32768-61000,而 Windows 版本(XP 之前)使用 1025-5000。更高版本的 Windows 版本,包括 Vista、Windows 7 和 Server 2008,使用...IANA...建议的范围 49152-65535。
来源:https://www.techopedia.com/definition/19157/ephemeral-port
值得一提的是配置错误时的 TCP 自连接问题。
while true do telnet 127.0.0.1 50000 done
...
尝试 127.0.0.1...
telnet:连接到地址 127.0.0.1:连接被拒绝
尝试 127.0.0.1...
已连接到 127.0.0.1。
...
发生了什么?简而言之,客户端连接到自身...有趣的是,Linux 按顺序选择临时端口,而不是随机...
本文中描述的自连接场景非常具体,需要特定的先决条件。首先,显然,您需要(ab)使用临时端口来侦听服务器,以便您的客户端尝试连接到临时端口。
来源:http://sgros.blogspot.com/2013/08/tcp-client-self-connect.html
有关的:
-https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/default-dynamic-port-range-tcpip-chang(自 Windows Vista 和 Windows 以来,TCP/IP 的默认动态端口范围已发生变化...)
-https://en.wikipedia.org/wiki/Duplex_(电信)
-https://jazzy.id.au/2012/08/23/why_does_chrome_consider_some_ports_unsafe.html
-https://chromium.googlesource.com/chromium/src.git/+/refs/heads/master/net/base/port_util.cc(被阻止端口的一般列表...)
答案3
端口 49152-65535 称为ephemeral ports
.它的另一个名字是private ports
。之所以这么称呼,是因为该范围的端口无法注册互联网号码分配机构。当客户端需要与服务器通信时,客户端会被分配一个临时端口,而服务器会侦听注册端口,范围从 1024 到 49151。
答案4
引用自维基百科:
临时端口是用于 Internet 协议 (IP) 通信的短期传输协议端口,由 TCP/IP 软件从预定义范围自动分配。它由传输控制协议 (TCP)、用户数据报协议 (UDP) 或流控制传输协议 (SCTP) 用作客户端与服务器通信的客户端到服务器上已知端口的端口分配。
我所知道的最好的例子是 FTP。而且它不是一个受 Unix 限制的概念。