Upto: Table of Contents of full book "Network Programming with Java, Go, Python, Rust, Javascript and Julia"

QUIC

General

Introduction

Since the internet was created, there has been continual change in the type of traffic carried. In 2018 Statista estimated the Distribution of global downstream internet traffic as of October 2018, by category . About 58% was video, about half of that due to Netflix, and next is Web traffic at 17%. Netflix is reported ( Measurement Study of Netflix, Hulu, and a Tale of Three CDNs) as using DASH (Dynamic Streaming over HTTP). So a majority of internet traffic goes over HTTP.

HTTP uses TCP. HTTP has evolved in its use of TCP, from one TCP connection per HTTP request, to multiple requests per connection, and now with HTTP/1.2 using a binary rather than a text format.

To make it even more efficient, attention has now turned to TCP itself. TCP is not designed for the current versions of HTTP. Carrying multiple streams over one connection is a particular issue: if one stream blocks for whatever reason, it blocks all streams. Also, TCP has a "slow start" mechanism to avoid congestion.

You can't fix TCP. Possible replacements such as SCTP are not going to find their way onto the billions of uncontrolled network connected devices. For any new protocol to find widespread acceptance, it either has to built on top of TCP or on top of UDP. So UDP is the choice.

QUIC is layered on top of UDP. Originally called "Quick UDP Internet Connections," it is now just QUIC with no meaning. The original version developed by Google is now being replaced by the IETF, managed by the IETF QUIC Working Group .

A key factor for QUIC is that it can be implemented in user space. That is, it does not need modifications or extensions to the Operating System. Applications can be built to use QUIC and can be installed, modified, etc, without needing special user privileges other than normal isntallation rights. This will allow QUIC applications to be installed without having to rebuild or modify existing systems.

Resources

Java

Resources

Go

Resources

Python

[an error occurred while processing this directive]

Javascript

[an error occurred while processing this directive]

Rust

[an error occurred while processing this directive]

Julia

[an error occurred while processing this directive]
help

      

Copyright © Jan Newmarch, jan@newmarch.name
Creative Commons License
" Network Programming using Java, Go, Python, Rust, JavaScript and Julia" by Jan Newmarch is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License .
Based on a work at https://jan.newmarch.name/NetworkProgramming/ .

If you like this book, please contribute using PayPal