1. 两种端口

我们知道TCP/UDP在工作时都需要一个端口来进行收发信息,有两种类型的端口:

  • 临时端口或者叫动态端口,是默认情况下计算机进行出站连接时所有的端口集
  • 已知端口,是特定应用程序或服务的定义端口。 例如,文件服务器服务在端口 445 上,HTTPS 为 443,HTTP 为 80,RPC 为 135。 自定义应用程序还将具有其定义的端口号。

客户端要想连接到应用程序或服务,需要使用计算机中的临时端口去连接服务器的已知端口。如:客户端计算机上的浏览器将使用临时端口连接到端口 https://www.microsoft.com 443。

当浏览器创建与多个网站的大量连接的情况下,其所尝试的任何新连接都将使用临时端口。 一段时间之后,连接将开始失败,并且出现此故障的可能性很高,因为浏览器已使用所有可用端口进行外部连接,并且建立连接的任何新尝试都将失败,因为没有更多的端口可用。 当使用计算机上的所有端口时,我们将它视为端口耗尽。

2. TCP/IP的默认动态端口范围

window上有两种动态端口范围:

  • 起始端口49152,结束端口65535 (新版)
  • 起始端口1025,结束端口5000(旧版)

可使用如下命令查看计算机上动态端口范围:

netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp

也可以手动更改动态端口的范围:

netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range

其中start是起始端口号,num是范围

例如:

netsh int ipv4 set dynamicport tcp start=10000 num=1000
netsh int ipv4 set dynamicport udp start=10000 num=1000
netsh int ipv6 set dynamicport tcp start=10000 num=1000
netsh int ipv6 set dynamicport udp start=10000 num=1000

这些示例命令将动态端口范围设置为从10000开始,分配1000个动态端口,即:10000-19999。可以设置的最小端口范围是255,可以设置的最小起始端口为1025。若要复制 Windows Server 2003 的默认行为,请使用 1025 作为起始端口,然后使用 3976 作为 TCP 和 UDP 的范围。 这导致起始端口为 1025,结束端口为 5000。