内容提要
Windows 10和Windows 11具有Windows NAT服务,该服务会随机保留一些端口用于NAT服务,可能导致端口冲突和无法访问服务。一种解决方法是为用户模式程序保留端口,以防止内核驱动程序和服务使用。通过以管理员身份打开命令提示符并运行命令“netsh int ipv4 add excludedportrange protocol=tcp startport=1080 numberofports=10”来保留端口。重新启动WinNAT服务以应用更改。通常不需要保留UDP端口。
延伸解读
为何动态端口范围调整并非万能
文章指出,重新设置TCP动态端口范围是常见建议,但这种方法并不总是有效。因为用户无法预知未来会临时使用哪些端口,如果范围设置过小,可能导致可用端口不足,反而影响正常上网。相比之下,手动保留特定端口更具针对性,能确保关键端口不被WinNAT随机占用。
用户保留端口的特殊机制
Windows允许用户自行保留端口供用户态程序使用,这类端口不会被内核驱动程序和服务占用。例如保留1080端口后,Clash等普通程序可以正常申请,而IIS、WinNAT等内核级服务则会被拒绝。这一特性为解决端口冲突提供了新思路,尤其适合开发环境。
操作中的关键注意事项
执行保留操作前,必须先停止WinNAT服务以释放被占用的端口。如果添加保留时提示端口被占用,需要先关闭所有使用该范围的程序。此外,查看动态端口范围时,带星号的条目是用户自行保留的端口,其他则是WinNAT随机保留的,且每次重启都会变化。
UDP与IPv6通常无需处理
文章明确,WinNAT不会占用UDP端口,因此一般不需要为UDP设置保留。同样,Windows不支持IPv6 NAT,不存在IPv6端口被NAT占用的问题,所以IPv6端口保留通常也无需设置。用户只需关注TCP端口的保留即可。
Q&A
Windows NAT服务会导致什么问题?
Windows NAT服务会随机保留一些端口,可能导致端口冲突和无法访问服务的问题。
如何手动保留端口以避免被WinNAT占用?
可以通过命令提示符运行命令:netsh int ipv4 add excludedportrange protocol=tcp startport=1080 numberofports=10来保留端口。
为什么重新设置TCP动态端口范围的方法不总是有效?
因为重新设置TCP动态端口范围无法预知未来可能使用的端口,可能导致可用端口不足的问题。
在Windows中,如何查看当前的TCP动态端口范围?
可以使用命令:netsh int ipv4 show dynamicport tcp来查看当前的TCP动态端口范围。
为什么UDP端口通常不需要保留?
因为WinNAT不会占用UDP端口,因此一般不需要为UDP端口进行保留。
如何停止WinNAT服务以释放端口?
可以通过命令:net stop winnat来停止WinNAT服务,从而释放被占用的端口。