win10 hyper-v 保留端口占用问题


提示

? Java后台用idea启动项目时,会发现有部分端口有时候会被莫名其妙的占用,在cmd控制台查看端口情况又发现该端口并没有被占用,不知道原因。

? 但是,使用指令:netsh winsock reset 然后重启电脑,端口又被释放了,就很奇怪,老是重启电脑就不是个事,治标不治本。

? 后续通过搜索引擎,查阅解决了该问题,现分享出来,供大家参考。(关键就是电脑启动了--》hyper-v,导致的问题)

一丶查看系统默认端口占用访问

powershell / cmd
指令:netsh int ipv4 show dynamicport tcp 

# 协议 tcp 动态端口范围
Protocol tcp Dynamic Port Range
---------------------------------
Start Port      : 1024
Number of Ports : 13977

二丶查看hyper-v启动后的保留端口范围

powershell / cmd
指令:netsh interface ipv4 show excludedportrange protocol=tcp

#协议 tcp 端口排除范围

#开始端口    结束端口
Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
  1026        1125
  1226        1325
  1326        1425
  1426        1525
  1526        1625
  2180        2279   *

* - Administered port exclusions.

通过这个可以查看被占用的项目端口是否在这个范围内

三丶解决办法

由于直接进行第二步配置,会遇到程序占用(hyper-v占用)

所以需要先关闭hyper-v

关闭方式一:可以win+s 快捷键搜索 “windows功能” ,关闭hyper-v。

关闭方式二:或者使用下列命令(dism.exe /Online /Disable-Feature:Microsoft-Hyper-V),然后重启

1.配置ipv4动态端口 (1和2方法任取其一均可解决问题)

powershell / cmd 管理员权限
# start 起始端口  num 表示可用端口数 根据自己的需求来 默认是 1024 13977
指令:netsh int ipv4 set dynamicport tcp start=30000 num=16383

2.配置需要的端口不被占用(1和2方法任取其一均可解决问题)

powershell / cmd 管理员权限
# 排除ipv4动态端口占用 startport 起始端口 numberofports 端口数
指令:netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1
# 重启hyper-v
指令:dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All