[German]Microsoft has made a few mistakes in the TCP implementation of Windows 10 and Windows 11 that severely limit the possible performance of TCP/IP connections. A blog reader brought this to my attention and immediately pointed out ways to possibly optimize something like this. I'm going to present it in a blog post for interested administrators in enterprise environments.
Advertising
Hintergrund TCP
The abbreviation TCP stands for Transmission Control Protocol, a network protocol that defines how data is exchanged between network components. Almost all current operating systems of modern computers are capable of TCP and use it for data exchange with other computers.
The protocol is a reliable, connection-oriented, packet-switched transport protocol in computer networks. It is part of the Internet protocol family, the foundation of the Internet. However, when implementing it, developers can specify numerous parameters to control the flow of TCP transmissions.
A discussion about RDP in Windows Server 2022
German blog reader Alexander Fuchs (appears online under the alias MysticFox) emailed me a few days ago about this topic and pointed me to the relevant sources where he gathered the information – thanks for that.
On German site administrator.de there is a thread Remote Desktop Services unter 2022 – Erfahrungen? from January 2023 in which an administrator talks about the performance of RDP connections under Windows Server 2022 and asked others for their opinion. According to his research, the RDP performance is supposed to be terrible.
The blog reader suffered from jerks and performance problems with remote desktop connections under Windows Server 2022 and then looked at both the documentation from Microsoft and the settings under Windows. In the course of the discussion, MysticFoxDE addresses the question of why RDP connection performance is so poor in this German comment.
Advertising
Through the discussion, the topic then also comes up that RDP on Windows 10/11 clients, even with performant hardware, runs much more sluggishly than under Windows Server 2012 R2. MysticFox then points out in this comment that the TCP network connections in the Windows 10/11 clients are artificially slowed down by Microsoft's implementation.
TCP implementation mess
Alex then investigated the whole thing more closely and came across quite an implementation mishap with the Transmission Control Protocol under Windows 10 and Windows 11.
TCP profile Internet
- In Windows 10/11, all outgoing TCP connections are handled using the Internet TCP profile (see the figure above, which can be output using the PowerShell command Get-NetTCPConnection). Using the Internet profile artificially slows down TCP connections to the network (via the latency of ACK packets, among other things). Dan Cuomo from Microsoft confirmed this in this article.
- The settings of the TCP profiles Internet and Datacenter of the current Windows versions, were defined at the time of Server 2012, adjusted to the Internet connection properties at that time.
In other words: It seems in 2023, that Microsoft is using two huge handbrakes in the Windows 10 and Windows 11 clients, by routing all TCP connections through the "Internet" profile, and by having the "optimization parameters" for this profile still tuned to Internet connection properties that were common well over 10 years ago.
Alex writes in his German summary Wie man das Windows 10 und 11 TCP-Handling wieder desuboptimieren kann (I've translated the summary): And instead of that Microsofts uses for today's Internet and or LAN speeds the more suitable "Datacenter TCP profile" as Default TCP profile, they decided to use the opposite and using within the current Windows versions (10 & 11), the slower Internet profile (even for internal networks). A normal user cannot change anything in these defaults …
Approach to TCP optimization
AAlexander F. has now gone and developed a Powershell script that solves the above handbrakes in Windows 10 and Windows 11 and optimizes the TCP parameters to reduce latencies and improve performance. As of the weekend (as of January 27, 2023), he has released the current version. Alex F. provides the current version of the PowerShell script W10ANDW11-NETWORK-TCP-DESUBOPTIMIZATION.ps1 on GitHub. Alexander writes about this:
Please run the script as administrator, otherwise it won't work and will only bring more errors.
Yes, even when run as administrator it will still spit out errors, but these are completely irrelevant and also not harmful. I just haven't had time to refine the error handling yet, hence V0.9.
!! Furthermore, this script is only meant for optimizing Windows 10 &11, please do not run it on a server operating system. !!
After running the computer must be restarted, so that all settings are cleanly adopted. And after that, you should already feel a significant performance improvement, especially in local applications, but also a performance improvement when accessing data on the Internet (eg faster surfing), as I said, is far from impossible. A deterioration, on the other hand, has not yet been seen at a single workstation that I have adjusted accordingly so far.
So it's not a point & click solution for end users or administrators that are not aware of the risks. But it could bee a good point to fine tune the TCP settings in Windows 10/11 clients.
Alexander has published some performance measurements on German site administrator.de in this thread, and there is also feedback from other administrators. Perhaps for one or the other administrator or power user of interest.
At this point, of course, the note that everyone is responsible for the use of the PowerShell script itself. It is recommended to make a backup before using it to be able to go back to the previous state if necessary.
This is the first article of a series about how to lift the performance brakes for TCP networking in Windows 10 / 11.
Article series:
Microsoft's TCP mess, how to optimize in Windows 10/11
Windows 10/11: Poor network transfer performance, high Windows 11 CPU load – Part 1
Windows 11: Optimize network transfer performance and CPU load – part 2
Advertising
what about using SG TCP Optimizer on Win10/Win11 to optimize TCP connections:
https://www.speedguide.net/downloads.php
or is that W10ANDW11-NETWORK-TCP-DESUBOPTIMIZATION.ps1 file still needed after running the TCP Optimizer app
Have had this question within my German blog. Aleaander Fuchs has ansered this question within this German comment. Possible to use, but has some caveats. Alexander says: Possible to use, but the script does only what necessary – and the code is open visible, what isn't the case with TCP Optimizer. So it's up to the reader.
W10ANDW11-NETWORK-TCP-DESUBOPTIMIZATION.ps1 did wonders for my internet connection speed, doubled my outputs on torrenting; browsing is now lightning fast… blows tcp optimizer out of the water.
I was just wondering how do I input this script into Powershell ? So I have to save it to my laptop first ? I'm running an Acer laptop Windows 11
Thanks
You should have a full backup – just in case. Then copy & paste the script code to a .ps1 file and execute this file within the PowerShell console. But be warned: You are at your own, if you ask "how do I input this script into Powershell?", you are probably not the right person for such an experimente … just to mention.
I am having the same issue at my store while running my master work station with Windows 10 Pro and 2 auxiliary POS stations with Windows 11 Pro. Would this super slow "in house network" speed up if I upgrade to Windows 11 Pro on the current master that is running Win 10 Pro?
This super slowness has gotten out of control with some customers walking away as my employees are waiting for the transaction to finalize.
Each CPU is less than two years old with 16 gig of ram each.
Respectfully,
Edgar Harris
Dear Edgar,
this "slowness" can be due to a number of things. To diagnose the problem, a skilled admin would need to know your network topology in all detail, your OS and application setup, have hands-on access – check out the negotiated link rates and Ethernet error counters on your network elements and PC's, maybe run a Wireshark session to look at what sort of traffic pattern your apps are generating, maybe log some system stats using perfmon… and then maybe you'd get a plausible diagnosis and a fix. It is indeed not out of question that this TCP "suboptimization" could be a part of your problem. I've also seen a "not so well written" database app be slow on machines that had CPU C-states enabled – just too many double digit millisecond latencies serialized amounted to dozens of seconds of user-level GUI lags… I've also seen awry Ethernet links (such as mis-negotiated full vs. half duplex) and dying disk drives, and security software packages, resulting in visually similar misbehavior.