Adjusting SendSocketBuffer for newer Windows versions
Hello,
Microsoft has changed with windows vista larger changes in the tcp stack!
Since Vista Windows use some algorithms to optimice the bandwidth on higher latency.
This algorithms optimize automatically the SendSocketBuffer.
https://en.wikipedia.org/wiki/TCP_congestion_control
https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-send
https://learn.microsoft.com/en-us/windows/win32/api/winsock/nf-winsock-getsockopt
I have the case, that I have 2 servers with 1Gbps dedicated internet line.
Between the servers are 8 hops with 16ms latency, this is not bad for a synchronization between 2 different locations.
If I would use WinSCP, the file transfer will be on 70Mbit/s, this is not bad, but it should be better.
Because if I use SMB to copy the same files, I have about 400Mbit/s.
The same case if I use the windows cmd ftp client with parameter ftp -x:262144
This will set the SendSocketBuffer to 262144 Bytes.
We have checked this with Wireshark and with a test tool NTttcpr from Microsoft.
This is an application problem, which are affected also many other ftp / ssh clients.
For example cURL, Filezilla are also affected.
Because the most ftp / ssh clients have fix values, are older as Windows Vista and have fix SendSocketBuffer values.
This was good for older Windows versions, because they had a very small value, but not for current windows versions.
Kind Regards,
Stefan Scheiffele
Microsoft has changed with windows vista larger changes in the tcp stack!
Since Vista Windows use some algorithms to optimice the bandwidth on higher latency.
This algorithms optimize automatically the SendSocketBuffer.
https://en.wikipedia.org/wiki/TCP_congestion_control
https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-send
https://learn.microsoft.com/en-us/windows/win32/api/winsock/nf-winsock-getsockopt
I have the case, that I have 2 servers with 1Gbps dedicated internet line.
Between the servers are 8 hops with 16ms latency, this is not bad for a synchronization between 2 different locations.
If I would use WinSCP, the file transfer will be on 70Mbit/s, this is not bad, but it should be better.
Because if I use SMB to copy the same files, I have about 400Mbit/s.
The same case if I use the windows cmd ftp client with parameter ftp -x:262144
This will set the SendSocketBuffer to 262144 Bytes.
We have checked this with Wireshark and with a test tool NTttcpr from Microsoft.
This is an application problem, which are affected also many other ftp / ssh clients.
For example cURL, Filezilla are also affected.
Because the most ftp / ssh clients have fix values, are older as Windows Vista and have fix SendSocketBuffer values.
This was good for older Windows versions, because they had a very small value, but not for current windows versions.
Kind Regards,
Stefan Scheiffele