crazyscot: Close-up of a spanner on a dark background (spanner)
Add MemoryShare This Entry
posted by [personal profile] crazyscot at 11:14am on 03/11/2024 under

I'm pleased to announce the first release of qcp.

The QUIC Copier (qcp) is an experimental high-performance remote file copy utility for long-distance internet connections with the following features:

  • đź”§ Drop-in replacement for scp
  • 🛡️ Similar security to scp, using existing, well-known mechanisms
  • 🚀 Better throughput on congested networks

qcp exists because I needed to copy multiple large (3+ GB) files from a server in Europe to my home in New Zealand.

I’ve got nothing against ssh or scp. They’re brilliant. I’ve been using them since the 1990s. However they run on top of TCP, which does not perform very well when the network is congested. With a fast fibre internet connection, a long round-trip time and noticeable packet loss, I was right in the sour spot. TCP did its thing and slowed down, but when the congestion cleared it was very slow to get back up to speed.

If you're interested you can find qcp here:

There are 7 comments on this entry. (Reply.)
fanf: (Default)
posted by [personal profile] fanf at 12:51am on 03/11/2024

Very cool! Do you mind if I share links? This announcement isn’t a public post so I thought I should ask.

I was recently reminded of the very old hpn-ssh patches which increased the ssh buffer sizes to cope with long fat pipes (i.e. gigabit across north america, iirc) but they didn’t do anything to mitigate congestion or packet loss.

crazyscot: Selfie, with C, in front of an alpine lake (Default)
posted by [personal profile] crazyscot at 05:30am on 03/11/2024
Go right ahead! Actually, I'll make this post public; there's nothing secret about it. The repo is public, the crate is public, I've got a post pending on sgo-software-announce, and I'm posting in other places.
fanf: (Default)
posted by [personal profile] fanf at 02:58pm on 03/11/2024

Thanks! It looks very polished, I must say :-)

adaeze: (Default)
posted by [personal profile] adaeze at 07:23am on 03/11/2024
Erm... Congratulations!
ewx: (Default)
posted by [personal profile] ewx at 03:05pm on 03/11/2024
Very nice.

> Both sides generate a TLS key and exchange self-signed certs over the ssh pipe between them
> We use those certs to set up a QUIC session between the two

Is there a reason for the heavyweight handoff to QUIC? (i.e. as opposed to using the SSH session to provide shared keying material directly to both endpoints.)
crazyscot: Selfie, with C, in front of an alpine lake (Default)
posted by [personal profile] crazyscot at 06:59am on 04/11/2024
Speed of development? :-)

Seriously, I was cobbling stuff together to improve my life. I've already had a useful couple of suggestions from randoms I don't know; I am half expecting to overhaul things pretty thoroughly in time.

QUIC implies TLS (unless I've missed something). Do you mean TLS-PSK or something else? Unfortunately, it seems that rustls doesn't support TLS-PSK at present. I'm not readily sure how quinn (the Rust QUIC implementation) would deal with it either.
ewx: (Default)
posted by [personal profile] ewx at 08:52am on 04/11/2024
Yes, exactly. You're in the "the parties already have a mechanism for setting up a shared secret key, and that mechanism could be used to “bootstrap” a key for authenticating a TLS connection" situation in https://en.wikipedia.org/wiki/TLS-PSK.

November

SunMonTueWedThuFriSat
          1
 
2
 
3 4
 
5
 
6
 
7
 
8
 
9
 
10
 
11
 
12
 
13
 
14
 
15
 
16
 
17
 
18
 
19
 
20
 
21
 
22
 
23
 
24
 
25
 
26
 
27
 
28
 
29
 
30