Macbook - Macmini 远程连接的各种技术方案对比
Remote Control is Facinating!
经验总结:
如果不需要图形化界面 -> 使用 mosh(而非ssh)
需要图形化界面 -> 使用 “屏幕共享” (而非“远程管理”)
在远程terminal中,为什么用 mosh 而不用 ssh?
mosh 相比 ssh 在 Terminal 的体验上流畅非常多。
原理:
shh 采用的是服务端回显机制,即你敲击的每一个字符都必须经历一个完整的网络往返才会在本地显示,而且当出现丢包时,由于 SSH 采用 TCP 协议,在网络恢复时会将丢的包排队一个个重传,导致强烈卡顿。
而 mosh 采用“预测性本地回显”技术,即在远程服务器返回状态前,就在本地渲染出你打的字,体验感就和在本地terminal上打字没区别了。而且 mosh 采用 UDP 协议,丢包就丢了,把最新的包发过来就行,所以 mosh 在网络恢复的那一刻就能获得最新的屏幕快照。
使用屏幕共享的细节
如果 Macmini 和 Macbook 在同一个局域网(比如校园网)下,使用 Macmini 在校园网下的 ip 地址,并且使用高性能模式(而非标准模式),可以达到约 40 帧的帧率,非常可用。

如果 Macmini 和 Macbook 不在同一个局域网下,需使用 tailscale 实现内网穿透(此时往往是转发而非直连),此时使用标准模式的体验比使用高性能模式要好,大约有 25 帧的帧率,勉强可用。
另外,关闭“限制IP地址跟踪”选项,可以减少很多延迟。
不过,使用 Mac 原生屏幕共享往往会遇到一个尴尬的情况:网络好时丝滑流畅,一旦出现微小波动便会严重卡顿。
这是因为屏幕共享所使用的 VNC 协议是建立在 TCP 之上的。其本质上就是将屏幕上的像素点一个个转发,会在遇到丢包时强制重传,所以哪怕是瞬间的网络抖动,也会引发“队头阻塞“,即后续所有画面都得等前面丢包画面的重传,这在用户体验上就是连环卡顿。
解决方案自然又是换底层协议,这次我尝试了nomachine(基于NX协议),但是由于 nomachine 不支持 Apple 的 Retina,结果是延迟极低,但是帧率和分辨率也极低。