解決 Windows 上常用 port 被大量佔用的問題
在 Windows 上開發時,可能會遇到某些常用 port 無法使用,但是用 netstat 又查不到被什麼程式佔用:
netstat -ano | findstr :1455
從這篇文章看到應該是這個 port 被保留了,之前遇到相同問題是使用另一篇文章的方法,把自己要用的 port 從排除範圍刪掉,再重啟 WinNAT 釋放 port:
netsh interface ipv4 delete excludedportrange protocol=tcp startport=3000 numberofports=1
net stop winnat
net start winnat
查看動態 port 範圍
這次先用 netsh interface ipv4 show excludedportrange protocol=tcp 查看有哪些 port 被排除:
通訊協定 tcp 連接埠排除範圍
開始連接埠 結束連接埠
---------- ----------
1046 1145
1146 1245
1246 1345
1346 1445
1446 1545
1546 1645
1647 1746
1752 1851
1921 2020
2869 2869
3000 3000 *
4500 4500 *
5357 5357
50000 50059 *
* - 管理的連接埠排除。
接著用 netsh int ipv4 show dynamicport tcp 查看實際被劃定的範圍:
通訊協定 tcp 動態連接埠範圍
---------------------------------
開始連接埠 : 1024
連接埠數目 : 13977
發現這些動態 port 範圍很低,很容易讓常用的 port 被佔用。
原因
根據這篇文章所說,安裝了 Hyper-V 之後,它會為 Host Networking Service (HNS) 隨機保留一些 port 使用。
但現在的 Windows 系統預設會保留 49152 ~ 65535 這段 port,即使一部分被隨機佔用也不會有太大的影響。
然後又因為某些原因導致起始 port 被重置成 1024(是不是 Windows 更新造成的沒有找到準確來源)。
修改動態 port 範圍
要修改動態 port 的範圍,需要以系統管理員身分開啟 PowerShell 執行以下指令:
netsh int ipv4 set dynamicport tcp start=49152 num=16384
接著重新開機即可,也可以透過重啟 WinNAT 先暫時釋放 port:
net stop winnat
net start winnat
參考連結
評論
