请输入您要查询的百科知识:

 

词条 QUIC
释义

  1. Details

     TCP  QUIC  Google QUIC (gQUIC) 

  2. Adoption

     Client (browser) support  Server support 

  3. Source code

  4. See also

  5. References

  6. External links

{{IPstack}}

QUIC (pronounced 'quick') is an experimental transport layer[1] network protocol initially designed by Jim Roskind at Google[2], implemented, and deployed in 2012,[3], announced publicly in 2013 as experimentation broadened[4][6], and described to the IETF[7].

Although its name was initially proposed as the acronym for "Quick UDP Internet Connections"[2][7], IETF's use of the word QUIC is not an acronym; it is simply the name of the protocol.[1]

QUIC's main goal is to improve perceived performance of connection-oriented web applications that are currently using TCP.[1][2] It does this by establishing a number of multiplexed connections between two endpoints over User Datagram Protocol (UDP). This works hand-in-hand with HTTP/2's multiplexed connections, allowing multiple streams of data to reach all the endpoints independently, and hence independent of packet losses involving other streams. In contrast, HTTP/2 hosted on Transmission Control Protocol (TCP) can suffer head-of-line-blocking delays of all multiplexed streams if any of the TCP packets are delayed or lost.

QUIC's secondary goals include reduced connection and transport latency, and bandwidth estimation in each direction to avoid congestion. It also moves control of the congestion avoidance algorithms into the user space at both endpoints, rather than the kernel space, which it is claimed will allow these algorithms to improve more rapidly. Additionally, the protocol can be extended with forward error correction (FEC) to further improve performance when errors are expected, and this is seen as the next step in the protocol's evolution.

In June 2015, an Internet Draft of a specification for QUIC was submitted to the IETF for standardization.[3][4] A QUIC working group was established in 2016.[5] In October 2018, the IETF's HTTP and QUIC Working Groups jointly decided to call the HTTP mapping over QUIC "HTTP/3" in advance of making it a worldwide standard.[6]

Details

TCP

Transmission Control Protocol, or TCP, aims to provide an interface for sending streams of data between two endpoints. Data is handed to the TCP system, which ensures the data makes it to the other end in the exact same form, or the connection will indicate that an error condition exists.[7]

To do this, TCP breaks up the data into network packets and adds small amounts of data to each packet. This additional data includes a sequence number that is used to detect packets that are lost or transmitted out of order, and a checksum that allows the errors within packet data to be detected. When either problem occurs, TCP uses automatic repeat request (ARQ) to tell the sender to re-send the lost or damaged packet.[7]

In most implementations, TCP will see any error on a connection as a blocking operation, stopping further transfers until the error is resolved or the connection is considered failed. If a single connection is being used to send multiple streams of data, as is the case in the HTTP/2 protocol, all of these streams are blocked although only one of them might have a problem. For instance, if a single error occurs while downloading a GIF image used for a favicon, the entire rest of the page will wait while that problem is resolved.[7]

As the TCP system is designed to look like a "data pipe", or stream, it deliberately contains little understanding of the data it transmits. If that data has additional requirements, like encryption using TLS, this must be set up by systems running on top of TCP, using TCP to communicate with similar software on the other end of the connection. Each of these sorts of setup tasks requires its own handshake process. This often requires several round-trips of requests and responses until the connection is established. Due to the inherent latency of long-distance communications, this can add significant overhead to the overall transmission.[7]

QUIC

QUIC aims to be nearly equivalent to a TCP connection but with much-reduced latency. It does this primarily through two changes that rely on the understanding of the behaviour of HTTP traffic.[7]

The first change is to greatly reduce overhead during connection setup. As most HTTP connections will demand TLS, QUIC makes the exchange of setup keys and supported protocols part of the initial handshake process. When a client opens a connection, the response packet includes the data needed for future packets to use encryption. This eliminates the need to set up the TCP connection and then negotiate the security protocol via additional packets. Other protocols can be serviced in the same way, combining together multiple steps into a single request-response. This data can then be used both for following requests in the initial setup, as well as future requests that would otherwise be negotiated as separate connections.[7]

QUIC uses UDP as its basis, which does not include loss recovery. Instead, each QUIC stream is separately flow controlled and lost data retransmitted at the level of QUIC, not UDP. This means that if an error occurs in one stream, like the favicon example above, the protocol stack can continue servicing other streams independently. This can be very useful in improving performance on error-prone links, as in most cases considerable additional data may be received before TCP notices a packet is missing or broken, and all of this data is blocked or even flushed while the error is corrected. In QUIC, this data is free to be processed while the single multiplexed stream is repaired.[8]

QUIC includes a number of other more mundane changes that also improve overall latency and throughput. For instance, the packets are encrypted individually, so that they do not result in the encrypted data waiting for partial packets. This is not generally possible under TCP, where the encryption records are in a bytestream and the protocol stack is unaware of higher-layer boundaries within this stream. These can be negotiated by the layers running on top, but QUIC aims to do all of this in a single handshake process.[7]

Another goal of the QUIC system was to improve performance during network-switch events, like what happens when a user of a mobile device moves from a local WiFi hotspot to a mobile network. When this occurs on TCP, a lengthy process starts where every existing connection times out one-by-one and is then re-established on demand. To solve this problem, QUIC includes a connection identifier which uniquely identifies the connection to the server regardless of source. This allows the connection to be re-established simply by sending a packet, which always contains this ID, as the original connection ID will still be valid even if the user's IP address changes.[25]

QUIC can be implemented in the application-space, as opposed to being in the operating system kernel. This generally invokes additional overhead due to context switches as data is moved between applications. However, in the case of QUIC, the protocol stack is intended to be used by a single application, with each application using QUIC having its own connections hosted on UDP. Ultimately the difference could be very small because much of the overall HTTP/2 stack is already in the applications (or their libraries, more commonly). Placing the remaining parts in those libraries, essentially the error correction, has little effect on the HTTP/2 stack's size or overall complexity.[7]

This organization allows future changes to be made more easily as it does not require changes to the kernel for updates. One of QUIC's longer-term goals is to add new systems for forward error correction (FEC) and improved congestion control.[9]

One concern about the move from TCP to UDP is that TCP is widely adopted and many of the "middle-boxes" in the internet infrastructure are tuned for TCP and rate-limit or even block UDP. Google carried out a number of exploratory experiments to characterize this and found that only a small number of connections were blocked in this manner.[2] This led to the use of a rapid fallback-to-TCP system; Chromium's network stack opens both a QUIC and traditional TCP connection at the same time, which allows it to fallback with zero latency.[10]

Google QUIC (gQUIC)

The protocol that was created by Google and taken to the IETF under the name QUIC is quite different from the QUIC that has subsequently been created within the IETF (in spite of their identical name). The original Google QUIC, also referred to as gQUIC, was strictly a protocol for sending HTTP/2 frames over encrypted UDP, while the IETF protocol QUIC is a general purpose transport protocol. It is important to note and remember the difference. The QUIC version Google has used in Chrome and their services since 2012 up until the time of this writing (February 2019) is Google QUIC, though this is evolving to resemble IETF QUIC over time.

Adoption

Client (browser) support

The QUIC code was experimentally developed in Google Chrome starting in 2012,[3] and was announced as part of Chromium version 29 (released on August 20, 2013) of Chrome.[6] It is currently enabled by default in Chromium. In the Chrome browser, experimental QUIC support can be enabled in chrome://flags. There is also a [https://chrome.google.com/webstore/detail/spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en browser extension] to indicate which pages are served by QUIC.

Similarly, it has been introduced in Opera 16, it can be turned on at opera://flags/#enable-quic and opera://flags/#enable-quic-https, and active sessions can be seen at opera://net-internals/#quic.

Firefox does not yet support QUIC (as of 2019-02).[11]

Server support

As of 2017 there are three actively maintained implementations. Google servers support QUIC and Google has published a [https://code.google.com/p/chromium/codesearch#chromium/src/net/tools/quic/quic_server.cc prototype server]. A Go implementation called [https://github.com/lucas-clemente/quic-go quic-go] is also available, and powers experimental QUIC support in the Caddy server.[12] On July 11, 2017, LiteSpeed Technologies officially began supporting QUIC in their [https://www.litespeedtech.com/products/litespeed-web-adc load balancer (WebADC)] and LiteSpeed Web Server products.[13] As of December 2017, 97.5% of websites using QUIC are running LiteSpeed Web Server.[14] Although at first only Google servers supported HTTP-over-QUIC connections, Facebook also launched the technology in 2018.[6]

In addition, there are several stale community projects: [https://github.com/devsisters/libquic libquic] was created by extracting the Chromium implementation of QUIC and modifying it to minimize dependency requirements, and [https://github.com/devsisters/goquic goquic] provides Go bindings of libquic. Finally, [https://hub.docker.com/r/devsisters/quic-reverse-proxy/ quic-reverse-proxy] is a Docker image that acts as a reverse proxy server, translating QUIC requests into plain HTTP that can be understood by the origin server.

Source code

The following implementations of QUIC or gQUIC are available in source form:

  • [https://www.chromium.org/developers/how-tos/get-the-code Chromium]. Language: C++. This is the source code of the Chrome web browser and the reference gQUIC implementation. It contains a standalone gQUIC client and server programs that can be used for testing. [https://chromium.googlesource.com/chromium/src/net/+/master/quic Browsable source code]
  • [https://github.com/h2o/quicly quicly]. Language: C. This library is the QUIC implementation for the [https://h2o.examp1e.net/ H2O web server].
  • [https://github.com/lucas-clemente/quic-go quic-go]. Language: Go. This library provides QUIC support in Caddy web server. Client functionality is also available.
  • [https://github.com/litespeedtech/lsquic-client LSQUIC Client Library]. Language: C. This is the QUIC implementation used in LiteSpeed Web Server, minus server-specific bits.
  • [https://github.com/djc/quinn Quinn]. Language: Rust.
  • [https://github.com/cloudflare/quiche Quiche]. Language: Rust. Socket-agnostic and exposes a C API for use in C/C++ applications.

See also

  • Structured Stream Transport
  • Constrained Application Protocol (CoAP) - a UDP-based protocol utilizing REST model
  • HTTP/3
  • SPDY
  • Datagram Transport Layer Security (DTLS)
  • Datagram Congestion Control Protocol (DCCP)
  • Reliable User Datagram Protocol (RUDP)
  • Real-Time Media Flow Protocol (RTMFP)
  • Micro Transport Protocol (µTP)
  • Multipurpose Transaction Protocol (MTP/IP) – an alternative to QUIC from Data Expedition, Inc.
  • Stream Control Transmission Protocol (SCTP UDP Encapsulation; RFC 6951)
  • UDP-based Data Transfer Protocol (UDT) – a UDP-based transport protocol
  • Fast and Secure Protocol

References

1. ^{{Cite web|url=https://tools.ietf.org/html/draft-ietf-quic-transport-18#section-1.2|title=QUIC: A UDP-Based Multiplexed and Secure Transport}}
2. ^{{Cite web|url=https://techcrunch.com/2015/04/18/google-wants-to-speed-up-the-web-with-its-quic-protocol/|title=Google Wants To Speed Up The Web With Its QUIC Protocol|last=Lardinois|first=Frederic|website=TechCrunch|access-date=2016-10-25}}
3. ^{{Cite web|url=https://www.infoq.com/news/2015/04/google-quic-ietf-standard|title=Google Will Propose QUIC As IETF Standard|website=InfoQ|access-date=2016-10-25}}
4. ^{{cite mailing list|url=https://www.ietf.org/mail-archive/web/i-d-announce/current/msg66052.html |title=I-D Action: draft-tsvwg-quic-protocol-00.txt |date=17 Jun 2015|mailing-list=i-d-announce}}
5. ^{{Cite web|url=https://datatracker.ietf.org/wg/quic/documents/|title=QUIC - IETF Working Group|last=|first=|date=|website=datatracker.ietf.org|publisher=|access-date=2016-10-25}}
6. ^{{cite news |url=https://www.zdnet.com/article/http-over-quic-to-be-renamed-http3/ |title=HTTP-over-QUIC to be renamed HTTP/3 |website=ZDNet |date=12 November 2018 |first=Catalin |last=Cimpanu}}
7. ^{{cite web |title= The next version of HTTP won’t be using TCP |first=Peter |last=Bright |url=https://arstechnica.com/gadgets/2018/11/the-next-version-of-http-wont-be-using-tcp/ |website=Arstechnica |date=12 November 2018}}
8. ^{{cite web |last1=Behr |first1=Michael |last2=Swett |first2=Ian |title=Introducing QUIC support for HTTPS load balancing |url=https://cloudplatform.googleblog.com/2018/06/Introducing-QUIC-support-for-HTTPS-load-balancing.html |website=Google Cloud Platform Blog |publisher=Google |accessdate=16 June 2018}}
9. ^{{cite web |url=https://docs.google.com/document/d/1gY9-YNDNAB1eip-RTPbqphgySwSNSDHLq9D5Bty4FSU/edit |title=QUIC at 10,000 feet |website=Chromium}}
10. ^{{cite web |url=https://quicwg.org/ops-drafts/draft-ietf-quic-applicability.html |title=Applicability of the QUIC Transport Protocol |date=22 October 2018 |website=IETF Network Working Group}}
11. ^{{Cite web|url=https://bugzilla.mozilla.org/show_bug.cgi?id=1158011|title=Bug 1158011 – QUIC (Quick UDP Internet Connections) support|last=|first=|date=|website=bugzilla.mozilla.org|language=en|archive-url=|archive-date=|dead-url=|access-date=2019-02-10}}
12. ^[https://github.com/mholt/caddy/wiki/QUIC QUIC support in Caddy], Retrieved 13 July 2016.
13. ^[https://blog.litespeedtech.com/2017/07/11/litespeed-announces-quic-support/ LiteSpeed Technologies QUIC Blog Post], Retrieved July 11, 2017.
14. ^{{Cite web|url=https://w3techs.com/technologies/segmentation/ce-quic/web_server|title=Distribution of web servers among websites that use QUIC|last=|first=|date=|website=|archive-url=|archive-date=|dead-url=|access-date=}}
15. ^{{cite web | url = https://docs.google.com/document/d/1RNHkx_VvKWyWg6Lr8SZ-saqsQx7rFV-ev2jRFUoVD34/edit | title = QUIC: Design Document and Specification Rationale | publisher = Jim Roskind, Chromium Contributor }}
16. ^{{cite web | url = https://chromiumcodereview.appspot.com/11125002 | title = First Chromium Code Landing: CL 11125002: Add QuicFramer and friends. | accessdate = 2012-10-16 }}
17. ^{{cite web | url = https://blog.chromium.org/2013/06/experimenting-with-quic.html | title = Experimenting with QUIC | publisher = Chromium Official Blog | accessdate = 2013-07-16 }}
18. ^{{cite web | url = https://www.youtube.com/watch?v=hQZ-0mXFmk8 | title = QUIC: next generation multiplexed transport over UDP | publisher = YouTube | accessdate = 2014-04-04 }}
19. ^{{cite web | url = https://lwn.net/Articles/558826/ | title = Connecting on the QUIC | author = Nathan Willis | publisher = Linux Weekly News | accessdate = 2013-07-16 }}
20. ^{{cite web | url = http://www.ietf.org/proceedings/88/slides/slides-88-tsvarea-10.pdf | title = QUIC: IETF-88 TSV Area Presentation | publisher = Jim Roskind, Google | accessdate = 2013-11-07 }}
[15][16][17][18][19][20]
}}

External links

  • Chromium: [https://www.chromium.org/quic QUIC, a multiplexed stream transport over UDP]
  • [https://docs.google.com/document/d/1RNHkx_VvKWyWg6Lr8SZ-saqsQx7rFV-ev2jRFUoVD34/edit QUIC: Design Document and Specification Rationale], Jim Roskind's original document (2012/2013)
  • Daniel Stenberg: [https://http3-explained.haxx.se/en/ HTTP/3 explained]
  • Linux Weekly News: [https://lwn.net/Articles/558826/ Connecting on the QUIC] (2013)
  • [https://www.ietf.org/proceedings/88/slides/slides-88-tsvarea-10.pdf QUIC:], IETF-88 TSV Area Presentation (2013-11-07)
  • Chromium Blog: [https://blog.chromium.org/2013/06/experimenting-with-quic.html Experimenting with QUIC] (2013)
  • [https://www.youtube.com/watch?v=hQZ-0mXFmk8 QUIC: next generation multiplexed transport over UDP] (Google Developers, 2014)
  • HTTP over UDP: an Experimental Investigation of QUIC
  • Multipath QUIC (extension to QUIC)
  • [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7867726 Innovating Transport with QUIC: Design Approaches and Research Challenges] (2017)

3 : Transport layer protocols|Internet protocols|Computer networking

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/11/13 9:38:48