index.rst revision 99a1ad0f
10bd32030SDmitri TikhonovLSQUIC Documentation
20bd32030SDmitri Tikhonov====================
30bd32030SDmitri Tikhonov
40bd32030SDmitri TikhonovThis is the documentation for LSQUIC_ |release|, last updated |today|.
50bd32030SDmitri Tikhonov
60bd32030SDmitri TikhonovLiteSpeed QUIC (LSQUIC) Library is an open-source implementation of QUIC
70bd32030SDmitri Tikhonovand HTTP/3 functionality for servers and clients.  LSQUIC is:
80bd32030SDmitri Tikhonov
90bd32030SDmitri Tikhonov- fast;
100bd32030SDmitri Tikhonov
110bd32030SDmitri Tikhonov- flexible; and
120bd32030SDmitri Tikhonov
130bd32030SDmitri Tikhonov- production-ready.
140bd32030SDmitri Tikhonov
150bd32030SDmitri TikhonovMost of the code in this distribution has been  used in our own products
160bd32030SDmitri Tikhonov-- `LiteSpeed Web Server`_, `LiteSpeed Web ADC`_, and OpenLiteSpeed_ --
170bd32030SDmitri Tikhonovsince 2017.
180bd32030SDmitri Tikhonov
1926e8f082SDmitri TikhonovCurrently supported QUIC versions are v1 (disabled by default until the
2026e8f082SDmitri TikhonovQUIC RFC is released); Internet-Draft versions 34, 29, and 27;
2126e8f082SDmitri Tikhonovand the older "Google" QUIC versions Q043, Q046, an Q050.
220bd32030SDmitri Tikhonov
230bd32030SDmitri TikhonovLSQUIC is licensed under the `MIT License`_; see LICENSE in the source
240bd32030SDmitri Tikhonovdistribution for details.
250bd32030SDmitri Tikhonov
2636fcb9aaSDmitri TikhonovFeatures
2736fcb9aaSDmitri Tikhonov--------
2836fcb9aaSDmitri Tikhonov
2936fcb9aaSDmitri TikhonovLSQUIC supports nearly all QUIC and HTTP/3 features, including
3036fcb9aaSDmitri Tikhonov
3136fcb9aaSDmitri Tikhonov- DPLPMTUD
3236fcb9aaSDmitri Tikhonov- ECN
3336fcb9aaSDmitri Tikhonov- Spin bits (allowing network observer to calculate a connection's RTT)
3436fcb9aaSDmitri Tikhonov- Path migration
3536fcb9aaSDmitri Tikhonov- NAT rebinding
3636fcb9aaSDmitri Tikhonov- Push promises
3736fcb9aaSDmitri Tikhonov- TLS Key updates
3836fcb9aaSDmitri Tikhonov- Extensions:
3936fcb9aaSDmitri Tikhonov
40fbc6cc04SDmitri Tikhonov - :ref:`extensible-http-priorities`
41b1a7c3f9SDmitri Tikhonov - :ref:`apiref-datagrams`
4236fcb9aaSDmitri Tikhonov - Loss bits extension (allowing network observer to locate source of packet loss)
4336fcb9aaSDmitri Tikhonov - Timestamps extension (allowing for one-way delay calculation, improving performance of some congestion controllers)
4436fcb9aaSDmitri Tikhonov - Delayed ACKs (this reduces number of ACK frames sent and processed, improving throughput)
4536fcb9aaSDmitri Tikhonov - QUIC grease bit to reduce ossification opportunities
4636fcb9aaSDmitri Tikhonov
4736fcb9aaSDmitri TikhonovArchitecture
4836fcb9aaSDmitri Tikhonov------------
4936fcb9aaSDmitri Tikhonov
5036fcb9aaSDmitri TikhonovThe 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.
5136fcb9aaSDmitri TikhonovLSQUIC 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.
5236fcb9aaSDmitri Tikhonov
530bd32030SDmitri Tikhonov.. _LSQUIC: https://github.com/litespeedtech/lsquic
540bd32030SDmitri Tikhonov.. _`MIT License`: http://www.opensource.org/licenses/mit-license.php
550bd32030SDmitri Tikhonov.. _`LiteSpeed Web Server`: https://www.litespeedtech.com/products/litespeed-web-server/
560bd32030SDmitri Tikhonov.. _`LiteSpeed Web ADC`: https://www.litespeedtech.com/products/litespeed-web-adc/
570bd32030SDmitri Tikhonov.. _OpenLiteSpeed: https://openlitespeed.org/
580bd32030SDmitri Tikhonov
590bd32030SDmitri TikhonovContents
600bd32030SDmitri Tikhonov--------
610bd32030SDmitri Tikhonov
620bd32030SDmitri Tikhonov.. toctree::
630bd32030SDmitri Tikhonov   :maxdepth: 2
640bd32030SDmitri Tikhonov
650bd32030SDmitri Tikhonov   gettingstarted
66afe3d363SDmitri Tikhonov   tutorial
670bd32030SDmitri Tikhonov   apiref
68afe3d363SDmitri Tikhonov   internals
6999a1ad0fSDmitri Tikhonov   devel
70f3d781aaSDmitri Tikhonov   faq
710bd32030SDmitri Tikhonov
720bd32030SDmitri TikhonovIndices and tables
730bd32030SDmitri Tikhonov==================
740bd32030SDmitri Tikhonov
750bd32030SDmitri Tikhonov* :ref:`genindex`
760bd32030SDmitri Tikhonov* :ref:`search`
77