在 Windows 11 下启用 BBR v2

BBR 是 Google 开发的 TCP 拥塞控制算法。它改善了传统拥塞控制算法(如 CUBIC)一丢包就降速的缺点,让带宽利用率在高丢包环境下大幅提升。

需要注意,拥塞控制算法控制的是发包速度。如 Google 服务器开启了 BBR,其上传速度将尽可能占满用户带宽;在用户的角度看来,则体验到了更快的下载速度。

如果是 Windows 11 22H2 以上版本,Microsoft 也添加了 BBRv2 的支持。

打开 PowerShell(管理员),先查看一下当前的拥塞控制算法:

NetTCPSetting | Select SettingName, CongestionProvider

然后开启 BBRv2:

netsh int tcp set supplemental template=Internet congestionprovider=BBR2
netsh int tcp set supplemental template=InternetCustom congestionprovider=BBR2
netsh int tcp set supplemental template=Datacenter congestionprovider=BBR2
netsh int tcp set supplemental template=DatacenterCustom congestionprovider=BBR2
netsh int tcp set supplemental template=Compat congestionprovider=BBR2

无需重启系统,可再次查看一下当前的拥塞控制算法,确认是否开启成功。

2024-04

更新:在新版 Windows 11 下,启用 BBR v2 可能会造成本地 TCP 连接无法使用(如导致 adb 卡住无法连接等),此时可以用以下命令还原拥塞控制算法

netsh int tcp set supplemental template=Internet congestionprovider=CUBIC
netsh int tcp set supplemental template=InternetCustom congestionprovider=CUBIC
netsh int tcp set supplemental template=Datacenter congestionprovider=CUBIC
netsh int tcp set supplemental template=DatacenterCustom congestionprovider=CUBIC
netsh int tcp set supplemental template=Compat congestionprovider=NewReno

还原后无需重启,故障应立即消失。可以在下次需要加速上传时再临时开启 BBR。

可能还会有以下问题:

  1. win11(22621.1778)下开启BBRv2会导致hyper-v不能连接。
  2. 开启BBRv2同样会导致使用frp/v2ray-core端口映射的rdp(远程桌面)无法连接。 具体为将内网主机3389映射到服务器,但是开启BBRv2后就一直卡在”加密连接”阶段。
  3. 使用 clash verge ,选择订阅后,无法加载代理节点。

以上问题需要将template=Internet的拥塞控制算法:恢复为CUBIC

netsh int tcp set supplemental template=Internet congestionprovider=CUBIC
Windows 下使用 Nushell 替代 PowerShell

Nushell 是一个现代的命令行工具,它具有易用、高效、灵活和强大的功能。
sharship 是一个快速、现代的 shell 提示工具,它具有易用、高效、灵活和强大的功能。
以上二进制文件我都是下载的便携版,也可以用 winget进行包管理,例如安装 Nushell:

winget install Nushell

Nushell 的默认配置文件目录为 %APPDATA%/nushell,但可通过设置环境变量 XDG_CONFIG_HOME 来改变。 我偏好将配置文件集中到 ~/.config 并通过 Git 管理,所以将 XDG_CONFIG_HOME 设置为 %USERPROFILE%/.config。 Nushell 的配置文件路径可通过 $nu.config-path 确定:

> $nu.config-path
C:\Users\<user>\.config\nushell\config.nu

设置您的 shell 以使用 Starship:

starship init nu | save -f ~/.config/nushell/starship.nu

然后在你的 Nushell 配置文件的最后(使用 $nu.config-path 来获取它的路径),添加以下内容:

use ~/.config/starship/starship.nu

设置下 Starship 的默认配置路径,添加环境变量 STARSHIP_CONFIG,设置为 %USERPROFILE%\.config\starship\starship.toml

如何关闭文件类型发现功能提高文件管理器加载速度

文件管理器加载缓慢的“罪魁祸首”是文件类型自动发现功能
如果某个文件夹下包含大量文件,那么文件类型自动发现会试图分析该文件夹下的内容,判定该文件夹下文件内容类型,例如图片、音乐、文档,然后优化显示文件夹视图。虽然这对某些文件夹很有帮助,但对于文件数量较多的文件夹,它可能会大大降低加载速度。
PowerShell 执行:

Set-ItemProperty 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders\Shell' -Name FolderType -Value NotSpecified -Force
开启系统代理之后,Microsoft Store 等 UWP 应用无法联网

解决方法:

以管理员方式打开 Powershell,输入以下命令

foreach ($n in (get-appxpackage).packagefamilyname) {checknetisolation loopbackexempt -a -n="$n"}

等待执行完毕,具体可参考这个 issues

WIN11系统下让所有程序都默认以管理员身份运行
  1. win + r 运行 secpol.msc 打开[本地安全策略]

  2. 展开本地策略,选择[安全选项],在右边找到[用户帐户控制:以管理员批准模式运行所有管理员],双击它,将本地安全设置更改为已禁用

  3. 重启后生效

替换系统自带的记事本

使用系统管理员身份打开命令提示符执行命令

reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v "Debugger" /t REG_SZ /d "\"C:\Program Files\APPS\Sublime Text\sublime_text.exe\" -notepadStyleCmdline -z" /f

恢复更改

reg delete "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v "Debugger" /f
注意

WSL 不受上述更改影响,执行 notepad.exe 仍打开系统自带记事本

WSL 可添加 shell 脚本,用 sublime_text.exe 打开文本

~/.config/sublime-text.sh
#!/bin/bash

/mnt/c/Program\ Files/APPS/Sublime\ Text/sublime_text.exe "$(wslpath -w "$1")"

然后再 .zshrc 新增一条 alias :

alias sub='~/.config/sublime-text.sh'
WSL2 固定静态IP

基于该 issuecomment 的思路,实现静态IP的方案;

  1. 在 WSL2 Linux中创建一个脚本文件 vim $HOME/.config/static-ip.sh

    static-ip.sh
    #!/bin/bash

    /mnt/c/WINDOWS/system32/netsh.exe interface ip show addresses "vEthernet (WSL)" | /mnt/c/WINDOWS/system32/findstr.exe /C:"172.18.18.1" > /dev/null
    if [ $? == 1 ]; then
    /mnt/c/WINDOWS/system32/netsh.exe interface ip add address "vEthernet (WSL)" address=172.18.18.1/24
    fi

    ip addr show eth0 | grep -s "172.18.18.100/24" > /dev/null
    if [ $? == 1 ]; then
    ip addr add 172.18.18.100/24 broadcast 172.18.18.255 dev eth0 label eth0:1
    fi
    注意

    这段脚本给 Windows 端的 vEthernet (WSL) 添加IPv4 172.18.18.1,给 Linux 端的 eth0 添加IPv4 172.18.18.1;在使用前,请按需调整网络接口的名称和IP地址

  2. 在 WSL2 启动的时候执行该脚本
    vim /etc/profile 添加以下内容:

  3. 使用静态IP

    • Windows 端静态IP 172.18.18.1
    • WSL2 Linux 端静态IP 172.18.18.100
  4. 常见问题
    win11 能够 ping 通 wsl2,但是 wsl2 无法 ping 通 win11;经分析主要是 win11 防火墙的原因;可在 win11 中 执行如下命令(管理员运行 powershell 或 cmd ):

    New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow
释放 WSL 占用的硬盘空间

WSL 使用虚拟硬盘(VHD)存储 linux 下的文件,随着Linux下文件越来越多,占用空间也会不断增长,不过有个最大限制 256G。但是,在 Linux 中减少文件占用,WSL 却没有相应的减少硬盘空间的占用。所以为了避免碰到 256G 的限制,或者硬盘空间告警,在删除掉 linux 下的文件后,我们需要手动释放这部分空间;

  1. 要找到使用的的vhd文件路径
  2. 打开 PowerShell, 执行以下命令:
wsl --shutdown

diskpart

# open window Diskpart
select vdisk file="C:\Users\Administrator\Data\Arch\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
WSL2 Input/output error

解决方案 1: 重启 wsl

wsl --shutdown
wsl

解决方案 2: 重新挂载 C 盘

sudo umount /mnt/c
sudo mount -t drvfs C:\\ /mnt/c
禁止指定程序联网

使用命令行建立防火墙规则,以禁止 STC-ISP 联网为例:

netsh advfirewall firewall add rule name="stc-isp-15xx-v6.86_NewLogo" dir=out program="C:\Users\Administrator\Desktop\stc-isp-15xx-v6.86_NewLogo.exe" action=block 

恢复允许联网:

netsh advfirewall firewall set rule name="stc-isp-15xx-v6.86_NewLogo" new enable=no

回车确定后立即生效;

在控制面板 -> windows 防火墙 -> 高级设置 -> 出站设置 里就出现了这条新增项目

Chrome(CentBrowser)平滑滚动设置

一直以来对 Microsoft EDGE 的平滑滚动的效果很羡慕,而 Chrome 的 Smooth Scrolling 太糟糕,研究了几天,经过摸索终于发现了其实 Chrome(CentBrowser)也有这个设置,只是默认没有开启罢了。在 chrome://flags 中将

  • Impulse-style scroll animations
  • Percent-based Scrolling

这两个设置成 Enable 就行了,比任何插件都要好用,原生支持!

-img

注意

Smooth Scrolling 还是 Default 就行,不需要修改

开启浏览器多线程下载选项

尽管没有 IDM 等专门的下载软件那么专业强大,但在开启多线程下载选项之后,只要服务器支持多线程,那么直接使用浏览器下载文件就能获得比原先更快的速度

地址栏输入并回车:

chrome://flags/#enable-parallel-downloading

然后你就能看到如下图所示,只需将默认的 Default 改成 Enabled 即可!然后点击 Relaunch 重启浏览器,多线程下载的选项就生效了,这时就可以找个文件去试试速度了

地址栏输入并回车:

edge://flags/#enable-parallel-downloading

然后你就能看到如下图所示,只需将默认的 Default 改成 Enabled 即可!然后点击 Relaunch 重启浏览器,多线程下载的选项就生效了,这时就可以找个文件去试试速度了

浏览器开启终极黑暗模式
  • Dark Reader
  • Midnight Lizard
  1. 浏览器地址栏输入 edge://flags or chrome://flags
  2. 使用最上方的搜索关键字 dark,将 Auto Dark Mode for Web Contents 选项设置为 Enabled with selective inversion of non-image elements,也可以尝试其他选项
  3. 重启浏览器,即可。
配置 WSL2 使用代理上网

将宿主机的代理共享给这个局域网下的其他设备,以 Clash 为例,打开 Allow LAN 选项

WSL2 下操作:

## 获取主机 IP
## 主机 IP 保存在 /etc/resolv.conf 中
export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')

## 设置代理
export all_proxy="socks5://${hostip}:7890"

## 验证
curl google.com

简化上述设置,在 ~/.zshrc 中添加的以下配置

export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
alias setss='export ALL_PROXY="socks5://${hostip}:7890"'
alias unsetss='unset ALL_PROXY'

如果wsl连接不到主机(ping不通的话),直接放开 vEthernet (WSL) 这张网卡的防火墙,在 powershell 上执行:

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow