logo NodeSeekbeta

【TCP优化之macOS篇】从200M到600M,提升你美西VPS的TCP单线程速度

0.前提

  1. 拥有一台美西地区(常见洛杉矶、圣何塞)的VPS机器
  2. 本篇不探讨VPS端的TCP调参,瓦工 / 大妈 / Kirino(咸鱼/白丝/Moe/AKKO) / V.PS / VMISS 的默认TCP参数已足够优秀
  3. 本篇仅从理论上讨论macOS端的测速,实际情况受到所在省份和运营商的限制
  4. 据称电信--洛杉矶之间CN2单线程极限就是200M,圣何塞不受影响

1. 美西单线程的理论极限

1.1 物理世界限制--时延

  • 洛杉矶 → 上海 约 10,400 km
  • 圣何塞 → 上海 约 9,900–10,000 km
  • 洛杉矶 → 北京 约 10,000 km
  • 洛杉矶 → 广州 约 11,600 km

物理距离:但海底光缆不可能完全走直线,还要绕行登陆站、路由节点、海缆路径。因此实际光纤路径通常要乘以一个系数:约1.2~1.6,所以美西到中国大陆的实际单向光纤路径大概可能是:12,000~17,000km。

光缆速度:真空光速约为300,000 km/s。但光在光纤中的速度约为真空光速的 2/3,也就是约200,000 km/s。假设实际光纤路径为 12,000–17,000 km:需要60~85ms,RTT 是往返,所以约120~170ms。这还只是纯传播延迟,没有算路由器、交换机、光电转换、排队、运营商绕路等。

结论:洛杉矶/圣何塞到中国大陆,RTT 很难低于 120 ms。现实中能看到的比较优秀 RTT 通常是:140~180 ms。如果是普通绕路、拥塞、跨运营商互联,可能是:180~250+ ms。下节以160ms为默认值进行计算

1.2 设备端限制--TCP窗口

macOS端kern.ipc.maxsockbuf优先级高于net.inet.tcp.autorcvbufmaxnet.inet.tcp.autosndbufmax。而kern.ipc.maxsockbuf默认设置为4MB,其最大参数可以设置为16MB。超过16MB会触发macOS的系统保护,导致设置失败。考虑到美西到中国大陆的精品线路延迟为160ms左右(排除上海等沿海地区)。
设备端的默认速度为: 4MB/160ms=4MB/0.16s=25MB/s=200Mbps
设备端的极限速度为: 16MB/160ms=16MB/0.16s=100MB/s=800Mbps

1.3 运营商限制--千兆及以上不受限制

理所当然的,要达到800Mbps,至少需要本地宽带为800M。

2. 调节本地TCP参数

经过我的测试,12MB的窗口为较均衡的设置(兼顾TCP重传和速度),单线程理论速度为600Mbps

sudo sysctl -w kern.ipc.maxsockbuf=12582912
sudo sysctl -w net.inet.tcp.autorcvbufmax=12582912
sudo sysctl -w net.inet.tcp.autosndbufmax=8388608
sudo sysctl -w net.inet.tcp.sendspace=131072
sudo sysctl -w net.inet.tcp.recvspace=131072
sudo sysctl -w net.inet.tcp.win_scale_factor=3

如果是千兆以上的朋友,可以采用16MB窗口,单线程理论速度为800Mbps

sudo sysctl -w kern.ipc.maxsockbuf=16777216
sudo sysctl -w net.inet.tcp.autorcvbufmax=16777216
sudo sysctl -w net.inet.tcp.autosndbufmax=16777216
sudo sysctl -w net.inet.tcp.sendspace=131072
sudo sysctl -w net.inet.tcp.recvspace=131072
sudo sysctl -w net.inet.tcp.win_scale_factor=3

结论

以上设置均为临时设置,重启后会自动恢复。同时较高的TCP窗口意味着更容易触发TCP重传,表现为网页打开较慢。实际使用中8MB/12MB已经完全够用了。至于如何持久化设置,只需询问你的AI即可。

附:白丝4837在12MB窗口下的晚高峰表现

image

xhj028 xhj028 xhj028

  • 经过我的研究在南方怎么都没用,其他地方不调都能上五百

  • 千兆限制也是200,无法突破了吧 xhj017

  • @胖达任 #2

    1. 洛杉矶机房的电信限制200M
    2. 部分地区运营商限制200
    3. 本地tcp没调的话限制200

    排除以上因素后才有可能超过200

  • @mxjia #1

    要看地区,重庆/四川/湖北一般上500没问题,其他地区需要当地老哥自行测试了

  • @k2think #3 嗯嗯 之前试过 我这边突破不了了

  • 是不是大妈的机器就不用调了

  • 本地也需要调 大妈vps端不用

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有62478位seeker

🎉欢迎新用户🎉