Persistent HTTP(S) connections in opkg
Hauke Mehrtens
hauke at hauke-m.de
Thu Dec 31 14:40:26 EST 2020
On 12/30/20 7:14 PM, Baptiste Jonglez wrote:
> Following the discussion in http://lists.openwrt.org/pipermail/openwrt-devel/2020-November/032297.html
>
> There are basically two options to implement persistent connections in opkg:
>
> 1) keep calling "wget", but pass the list of all packages to download at
> once. On the host, wget already implements persistent connections.
> For devices, we would need to implement persistent connections in
> uclient-fetch (which is what "wget" actually points to).
>
> 2) switch to using a HTTP library (libuclient or libcurl), so that we can
> keep some TCP/TLS/HTTP context between downloads.
>
> The first solution has a major drawback on devices: all packages would
> need to be downloaded to /tmp, which will consume memory. Currently, opkg
> processes packages individually, so only one package at a time is stored
> in /tmp.
>
> The second solution adds a new library dependency, and we need to make
> sure that it works both on the host and on targets. Currently, we don't
> make libuclient available to the host build system. We would need to
> build it for the host and link opkg statically against it (like it's done
> for libubox).
>
> Overall, I think the second solution makes more sense and is easier to integrate.
> I would go with libuclient because we already have it available on
> devices.
>
> Any thoughts?
>
> Thanks,
> Baptiste
Hi,
I looked into performance problems of LuCI when using https some time ago.
The slow part was the handshake, the normal stream cipher is relatively
fast, even very slow devices should be able to do multiple MB/s.
On the server side the ECC handshake was much faster, I think I measured
values like 1 second (RSA) vs. 0.3 seconds (ECC) for the handshake on a
Lantiq MIPS 24Kec CPU with mbedtls, the RSA handshake was much faster
(0.5 seconds) with openssl.
We should activate support for ECC certificates on
https://downloads.openwrt.org, I think it is possible to use both RSA
and ECC on the server and then decide based on what the client supports
and wants. In OpenWrt we could use then ECC to authenticate the server.
The crypto parts should already be there as we need ECDH for SAE in hostapd.
We could use TLS Session Resumption, the SSL libraries should support
it, this way we can easily reuse the same session for the next download.
Browsers do this to only do one SSL handshake and then have multiple TCP
connections to the server to download the material in parallel.
Hauke
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.openwrt.org/pipermail/openwrt-devel/attachments/20201231/60d38dfe/attachment-0001.sig>
More information about the openwrt-devel
mailing list