公众号旧文

为什么大家都管微软的远程桌面叫 RDP,但运行时输入的命令却是 mstsc?

作者:胖子阅读 —

很多人第一次使用 Windows 远程桌面时,都会产生两个疑问:

  1. 明明大家都在说 RDP,为什么 Win + R 运行远程桌面时输入的命令却是 mstsc?
  2. 为什么 Windows 远程桌面这么流畅,而很多远控软件却像看视频一样卡?

这两个问题,背后牵扯的是 Windows 远程桌面的历史,以及远程桌面的实现方式。

今天我们就把它讲清楚。

一、RDP 和 mstsc,其实不是一个东西

很多人以为 RDP 就是那个远程桌面程序,其实不是。

RDP 是协议。

它的全称是:

Remote Desktop Protocol

也就是:远程桌面通信协议

简单理解:

  • RDP = 网络通信规则
  • 规定客户端和服务器如何传输远程桌面数据

而 Windows 里的远程桌面程序,其实叫:

Remote Desktop Connection

这个程序的可执行文件就是:mstsc.exe

RDP 是协议,Remote Desktop Connection 是客户端程序,mstsc 是启动这个程序的命令。

二、mstsc 为什么叫这个名字?

mstsc 是 Microsoft Terminal Services Client 的缩写。

也就是:微软终端服务客户端

那又为什么叫 Terminal Services?

因为在早期 Windows Server 时代,远程桌面服务的名字就叫:

Terminal Services

比如在:

  • Windows Server 2003

系统里,远程桌面服务就叫 Terminal Services。

后来微软在:

  • Windows Server 2008

把它改名成了:

Remote Desktop Services(RDS)

但问题来了:

程序名 mstsc.exe 已经存在很多年了。

微软一贯的策略是:程序名一旦广泛使用,就尽量不改。

于是就出现了一个有趣的现象:

名称 含义
RDP 远程桌面协议
RDS 远程桌面服务
mstsc 远程桌面客户端

所以现在大家说:用 RDP 连一下服务器。

真正做的是:用 mstsc 客户端,通过 RDP 协议,连接 RDS 服务。

三、为什么 Windows 远程桌面这么流畅?

很多人会发现:

  • Windows 远程桌面非常顺滑
  • 延迟低
  • 带宽占用也不大

而一些远控软件却像在看视频。

原因在于:

远程桌面的传输方式不一样。

四、普通远控软件:传输的是视频

很多远控软件的逻辑其实很简单:

  1. 把屏幕截成一帧
  2. 压缩
  3. 当成视频发送

流程类似:

屏幕 → 截图 → H264压缩 → 网络传输 → 解码显示

这其实就是屏幕直播。

所以会出现:

  • 带宽占用大
  • 延迟高
  • 画面拖影

五、RDP 的核心是传输绘图指令

RDP 的设计思路完全不同。

它并不是传输画面,而是传输绘图命令。

举个例子。

如果远程电脑要显示一个按钮:

普通远控软件会发送:

一张按钮图片

而 RDP 会发送:

在 x=100,y=50 画一个按钮

客户端自己绘制。

再比如滚动网页。

普通远控:

发送很多张新截图

RDP:

把这块区域向上移动20像素

所以 RDP 的带宽需求极小。

六、RDP 还能调用客户端 GPU

RDP 还有一个非常高级的优化:

客户端渲染。

也就是说:

  • 字体
  • 窗口
  • UI
  • 动画

很多都是:在本地 GPU 渲染

服务器只发送:

UI结构

+
 绘图指令

这和网页浏览很像:

  • 服务器发 HTML
  • 浏览器自己渲染

而不是发整张截图。

七、只有视频内容才会走视频流

当然,如果远程电脑播放视频:

比如:

  • 看电影
  • 看 YouTube
  • 播放视频

这时候 RDP 会自动切换策略:

视频区域 → H264编码 → 视频流传输

所以你会发现:

远程桌面:

  • 操作系统界面极其流畅
  • 视频稍微没那么流畅

这是设计上的取舍。

八、为什么服务器行业都用 RDP

原因很简单:

  • 带宽需求小
  • 延迟低
  • 画面清晰
  • CPU 占用低

所以很多运维工程师甚至会说 RDP 好像比本地操作还流畅。

尤其是在网络好的情况下。

九、一句话总结

很多人以为 RDP 就是远程桌面程序。

但真正的关系是:

mstsc
  (客户端程序)
   ↓
RDP   (通信协议)
   ↓
RDS   (远程桌面服务)

而 RDP 之所以这么流畅,本质原因只有一句话:

它传输的不是屏幕,而是绘图指令。

这也是为什么,几十年前设计的协议,今天依然非常先进。