Windows 中的 excludedportrange 和 dynamicport
你在使用 Windows 时是否会遇到这样的问题:某个端口在 netstat -ano
中并没有显示被占用,但是即使使用管理员权限仍然无权绑定该端口?这是因为 Windows 有一些端口是被保留的,即 excludedportrange
,而该问题可以通过调整 dynamicport
解决。
excludedportrange
在 PowerShell 中运行命令 netsh int ipv4 show excludedportrange protocol=tcp
,你会得到类似这样的输出:
1 |
|
ipv4
可以替换为ipv6
,tcp
可以替换为udp
。
这列出了 Windows 中被保留的端口,这些端口是不能被用户绑定的,如果尝试绑定这些端口,会得到类似这样的错误:
1 |
|
被保留的端口可能来自不同的来源,最常见的是 Hyper-V。
dynamicport
使用命令 netsh int ipv4 show dynamicport tcp
可以查看当前的 dynamicport
设置:
1 |
|
ipv4
可以替换为ipv6
,tcp
可以替换为udp
。
Hyper-V 在保留端口时只会选择 dynamicport
范围内的端口,所以我们可以通过调整 dynamicport
来解决端口被保留的问题。你可以在管理员权限下运行命令 netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range
来调整 dynamicport
,例如 netsh int ipv4 set dynamic tcp start=50000 num=10000
需要注意的是:
- 如果出现问题的程序可以通过配置来修改端口,那么你应该优先使用配置来修改端口,而不是调整
dynamicport
。 - Hyper-V 不保留不代表其他程序不保留,其他程序可能并不尊重
dynamicport
,大多数情况下问题能够被解决。 dynamicport
的范围不能太小。该端口范围用于在程序需要对外发起连接时分配临时端口,如果范围太小,可能会导致程序无法发起连接(即端口耗尽问题),且该问题通常很难被意识到。
参考资料
- StackOverflow - What is Administered port exclusions in windows 10?
- Microsoft Documentation - The default dynamic port range for TCP/IP has changed since Windows Vista and in Windows Server 2008
- Microsoft Documentation - Troubleshoot port exhaustion issues
- Microsoft Blog Archive - Port Exhaustion and You (or, why the Netstat tool is your friend)
Windows 中的 excludedportrange 和 dynamicport
https://blog.caomingjun.com/excludedportrange-and-dynamicport-in-windows/