A few days ago I changed my ISP (to T-mobile, because it's currently the only possibility). The stable speeds are: 150Mb/s download, ~34Mb/s upload.
I tried to upload a single 2GB file to my VPS (using SFTP) and I noticed a strange problem with upload speed drops after few seconds. It means: for around 20MB it's uploading with the full speed, and after that only ~5Mb/s.
As first I thought it's an issue with the current VPS, but then I tested uploading to other servers with the same effect. However, uploading to services like: YouTube, GoogleDrive, OneDrive, etc. always goes with the full speed (34Mb/s) without any problems.
I was testing this problem more, using php upload scripts(instead of SFTP), VPNs and it always resulted in upload speed drops (after a very short while). I thought this ISP limits upload speed to "unknown" addresses, but then I ordered an Arubacloud server and the upload speed by SFTP was just fine.
After that I set up OpenVPN on that VPS, and connected to it from my laptop. Upload speeds to this Aruba server were still fine, but not to others. Whenever I tried to upload file to my other VPS it resulted in upload speed at max. 5Mb/s. I was very confused and double checked if the VPN is actually used.
I didn't find any logical explanation why it happens, and I started testing it on Virtual Machines with "NAT Network Adapter" configured (so my host IP address was shared). I was surprised to see that file upload to all VPS which I tested before goes with the full speed, without any speed drops, without using any VPN...
I thought it's a problem with some software/service running on my laptop. I booted Windows 10 in safe-mode with Network. Same issues. I installed a clean Windows 10 copy on another HDD - same upload speed problems... Of course the same problem is present when I use a wired connection (Ethernet). I also tested connecting to 2 different routers (my main router and the LTE router from Huawei).
When I changed a Windows XP Virtual Machine to use a "Bridged" connection (instead of NAT) - the same issues were happening, so it most likely isn't a Windows 10 problem.
I'm very confused and I don't know how to detect what causes those issues. I would be very grateful for any tips and test recommendations.
Update 27.05.2018 17:10
Just to give more details. I made more tests: I used the SIM card from the LTE router in my smartphone, and shared Internet connection by the "mobile hotspot". The same problem occurs.
I also tested on my mum's laptop. The same problem persists.
It doesn't only affect Filezilla (SFTP) transfers, but normal file uploads by HTTP/HTTPS, sending files by Riot Messenger (Matrix client), etc. I also tested with a VPN configured to use port 443.
So this is actually the ISP problem, but something must trigger it. Just to remind: When I use a Virtual Machine with "NAT" Network adapter - I can upload files with full speed, without decrease.
Of course I tested the wired (Ethernet) connection more than 1 time. It actually shouldn't matter, because I get ~600Mb/s upload speeds from my NAS by Wi-Fi AC.
Update 28.05.2018 00:15
I detected something interesting:
netsh int tcp show global: Receive Window Auto-Tuning Level : normal
When I disable Window Auto-Tuning by "netsh int tcp set global autotuninglevel=disabled" - upload speeds are low all time time (without full speed boost at start). Setting it to "experimental" has the same effects as default "normal", this is: around 10-40MiB are uploaded with the full speed, and then it drastically decreases to 2-5Mb/s.
Does anybody know what it could mean?
Update 28.05.2018 23:55
Yesterday I installed Windows 8.1 on another HDD. Seems like the upload speed isn't decreasing on it. Autotuning works fine.
I tested all possible Windows 10 versions (installed on the same laptop), and I've got the following test results:
The last version where autotuning works fine is: 1511 (10586).
The version where problems started is: 1607 (Anniversary Update).
On 1511 it works fine with default Wi-Fi/Ethernet drivers, and also with the newest possible drivers.
I tried to set the same TCP settings on the newest Win10 version using software called "TCP Optimizer". Unfortunately it doesn't help.
Here are TCP Optimizer settings for specified Windows versions:
Unfortunately, setting the same options (manually, not by the "import" feature) doesn't help. Maybe somebody knows what changed in the Anniversary Update that could cause those issues?
Update 31.05.2018 16:05
The only work-around for this problem which I found is using a Linux Virtual machine which uses the "NAT" Network Adapter (shares host IP) + Kitty on Windows. There are my notes, hope it will be understandable enough:
Virtual Machine Local IP: 192.168.32.132 apt-get install sshpass autossh screen nano /etc/ssh/sshd_config: Port 777 service ssh restart Kitty settings: Name - > LinuxVM-Tunnel-SpeedFix (port 777 if 22 doesn't work) Connection -> keepalives -> 30 Connection -> Data -> Autologin username/password SSH -> Tunnels: - Source port: 7771 Destination: localhost:8881 | Server1 - Source port: 7772 Destination: localhost:8882 | Server2 - Source port: 7773 Destination: localhost:8883 | Unused - Source port: 7774 Destination: localhost:8884 | Unused Connection -> Data login/pass Connection -> Data -> Command: screen -X -S VMTunnel1 quit; screen -X -S VMTunnel2 quit; screen -X -S VMTunnel3 quit; screen -X -S VMTunnel4 quit; screen -S VMTunnel1 -dm sshpass -p 'MyPassword' autossh -oStrictHostKeyChecking=no -L 8881:127.0.0.1:22 email@example.com; screen -S VMTunnel2 -dm sshpass -p 'MyPassword' autossh -oStrictHostKeyChecking=no -L 8882:127.0.0.1:22 firstname.lastname@example.org; Filezilla: Profile: LinuxVM-server1.example.com | 127.0.0.1 | 7771 Profile: LinuxVM-server2.example.com | 127.0.0.1 | 7772
So basically, when a Virtual Machine running on my laptop tunnels traffic between my laptop and selected servers I get full upload speeds (34Mb/s). It stops working when I change the Virtual Machine Network Adapter to "Bridge", so it must be on "NAT".