问题描述
开发或者启动服务时,经常遇到端口被无端占用情况,时好时坏,查询占用进程无果。 通过网络搜索找到解决 Windows 10 端口被 Hyper-V 随机保留(占用)的问题
原因1:Windos TCP 动态端口范围
处在这个范围内的端口,有时候会被一些服务占用。在 Windows Vista(或 Windows Server 2008)之前,动态端口范围是 1025 到 5000;在 Windows Vista(或 Windows Server 2008)之后,新的默认起始端口为 49152,新的默认结束端口为 65535。
- 查看动态端口
netsh int ipv4 show dynamicport tcp- 输出
C:\Users\GoblinCwl>netsh int ipv4 show dynamicport tcp
协议 tcp 动态端口范围
---------------------------------
启动端口 : 1024
端口数 : 13977
原因2:Hyper-V 随机保留端口
如果安装了 Hyper-V,那么 Hyper-V 会为容器宿主网络服务(Windows Container Host Networking Service)随机保留一些端口号使用。
- 查看占用端口:
netsh int ipv4 show excludedportrange protocol=tcp- 输出
C:\Users\GoblinCwl>netsh int ipv4 show excludedportrange protocol=tcp
协议 tcp 端口排除范围
开始端口 结束端口
---------- --------
27339 27339
50000 50059 *
51097 51196
54408 54507
54986 55085
55086 55185
55186 55285
55286 55385
55386 55485
55486 55585
55586 55685
55686 55785当时没复制,这是我解决后的输出了,仅供参考
正常情况下,Hyper-V 虽然会在「TCP 动态端口范围」中随机挑一些端口号保留(占用),不过保留的端口号普遍比较大,就算保留几百、几千个也影响不大。但是,Windows 自动更新有时会出错,导致这个范围的起始端口被重置为 1024……这可就麻烦了,一些常用端口动不动就因为被保留而无法使用了。
解决方案
重新设置「TCP 动态端口范围」
netsh int ipv4 set dynamic tcp start=49152 num=16384
设置后重启计算机
- 重新查看输出
C:\Users\GoblinCwl>netsh int ipv4 show dynamicport tcp
协议 tcp 动态端口范围
---------------------------------
启动端口 : 49152
端口数 : 16384
补充
可以设置排除特定的端口
netsh int ipv4 add excludedportrange protocol=tcp startport=要排除的端口 numberofports=范围