index.rst revision eea99896
1LSQUIC Documentation
2====================
3
4This is the documentation for LSQUIC_ |release|, last updated |today|.
5
6LiteSpeed QUIC (LSQUIC) Library is an open-source implementation of QUIC
7and HTTP/3 functionality for servers and clients.  LSQUIC is:
8
9- fast;
10
11- flexible; and
12
13- production-ready.
14
15Most of the code in this distribution has been  used in our own products
16-- `LiteSpeed Web Server`_, `LiteSpeed Web ADC`_, and OpenLiteSpeed_ --
17since 2017.
18
19Currently supported QUIC versions are v1 (disabled by default until the
20QUIC RFC is released); Internet-Draft versions 34, 29, and 27;
21and the older "Google" QUIC versions Q043, Q046, an Q050.
22
23LSQUIC is licensed under the `MIT License`_; see LICENSE in the source
24distribution for details.
25
26Features
27--------
28
29LSQUIC supports nearly all QUIC and HTTP/3 features, including
30
31- DPLPMTUD
32- ECN
33- Spin bits (allowing network observer to calculate a connection's RTT)
34- Path migration
35- NAT rebinding
36- Push promises
37- TLS Key updates
38- Extensions:
39
40 - :ref:`extensible-http-priorities`
41 - :ref:`apiref-datagrams`
42 - Loss bits extension (allowing network observer to locate source of packet loss)
43 - Timestamps extension (allowing for one-way delay calculation, improving performance of some congestion controllers)
44 - Delayed ACKs (this reduces number of ACK frames sent and processed, improving throughput)
45 - QUIC grease bit to reduce ossification opportunities
46
47Architecture
48------------
49
50The LSQUIC library does not use sockets to receive and send packets; that is handled by the user-supplied callbacks.  The library also does not mandate the use of any particular event loop.  Instead, it has functions to help the user schedule events.  (Thus, using an event loop is not even strictly necessary.)  The various callbacks and settings are supplied to the engine constructor.
51LSQUIC keeps QUIC connections in several data structures in order to process them efficiently.  Connections that need processing are kept in two priority queues: one holds connections that are ready to be processed (or "ticked") and the other orders connections by their next timer value.  As a result, no connection is processed needlessly.
52
53.. _LSQUIC: https://github.com/litespeedtech/lsquic
54.. _`MIT License`: http://www.opensource.org/licenses/mit-license.php
55.. _`LiteSpeed Web Server`: https://www.litespeedtech.com/products/litespeed-web-server/
56.. _`LiteSpeed Web ADC`: https://www.litespeedtech.com/products/litespeed-web-adc/
57.. _OpenLiteSpeed: https://openlitespeed.org/
58
59Contents
60--------
61
62.. toctree::
63   :maxdepth: 2
64
65   gettingstarted
66   tutorial
67   apiref
68   devel
69   internals
70   faq
71
72Indices and tables
73==================
74
75* :ref:`genindex`
76* :ref:`search`
77