I have a Windows 8.1 remote PC, to which I am connecting using RDP from Windows 7 and Linux clients. I noticed that the performance e.g. when scrolling is much better on Windows than on any Linux distribution. I am using rdesktop, Remmina, GNOME-RDP, everywhere the screen refresh is slow and choppy, like VNC. But RDP does not work like VNC, or does it? Why is it so and what is the fastest RDP client for Linux? Maybe Remote Desktop Connection Client under Wine?
There are multiple versions of RDP protocol:
- original 4.0, which is a clone of ITU-T T.128 protocol
- 5.0 - which is still used by rdesktop (and not even fully)
- 5.1, 5.2, 6.0, 6.1, 7.0, 8.1 and 8.1
As you can imagine, each new version of RDP is better, not only by introducing new features, but also by further improving performance and overall user experience.
As I wrote above, rdesktop still implements only a subset of RDP 5.0 protocol (version used on Windows 2000). This version is less optimized than at least 6.0 (released with Windows Vista), which was a huge performance improvement.
Additionally, the whole X11 window system used on Linux is a group of userland applications, while Microsoft Windows processes graphic events (like screen scrolling) directly in its kernel.
Screen (and application windows) scrolling is an operation requiring copying much memory contents from one place to another. This operation is much faster in the system kernel, than in userland applications.
And this also affects the performance of each RDP implementations.
As you can see from gwilli's answer RDP is not RDP because there are many different versions of the protocol with many extensions and client and server are negotiating for a protocol version they both understand.
It is in the nature of things that two Windows versions likely agree on a newer and better performing version of the protocol.
I can't say anything qualified regarding the performance of Linux RDP client, because I don't know of any benchmarks regarding open source RDP implementations. In case you want to compare clients, you should look at which underlying libraries the clients use and not just the client. This would make your search more efficient.