QUIC
ATS Summit Spring 2017
Masakazu Kitajo maskit@apache.org
Masaori Koshiba masaori@apache.org
Goal
Getting ready to start QUIC implementation
First implementation Draft will be out soon!
Agenda
• Presentation
• IETF QUIC
• Prototype
• Discussion
• How we implement QUIC
IETF QUIC
• It was mostly HTTP/2 over UDP + α
• It is something else over UDP + α
• Totally new protocol to ATS
≈ Improved TCP + TLS + Improved HTTP/2
HTTP over QUIC
UDP
TLS 1.3
QUIC
TCP-like congestion control, loss detection
4 specifications & 2 layers
1.Core Transport Protocol
2.Loss Detection and Congestion Control
3.TLS Mapping
4.HTTP Mapping
4 specifications & 2 layers
1.Core Transport Protocol
HTTP over QUIC (4)
UDP
TLS 1.3
QUIC (1,2,3)
TCP-like congestion control, loss detection
• Implements improved TCP with
modern technologies on UDP, in
userland
• Existing hardware should be
able to transfer QUIC traffic
without any change
• Protocol version is negotiable
4 specifications & 2 layers
2.Loss Detection and Congestion Control
HTTP over QUIC (4)
UDP
TLS 1.3
QUIC (1,2,3)
TCP-like congestion control, loss detection
• Ensure reliable transfer
• Difference from TCP is “HOW”
• Modern algorithms
4 specifications & 2 layers
3.TLS Mapping
HTTP over QUIC (4)
UDP
TLS 1.3
QUIC (1,2,3)
TCP-like congestion control, loss detection
• Current draft uses TLS 1.3
• Key exchange will be done at
the beginning of session on a
dedicated QUIC stream
• Need to implement it with low
level APIs in crypto libraries
4 specifications & 2 layers
4.HTTP Mapping
HTTP over QUIC (4)
UDP
TLS 1.3
QUIC (1,2,3)
TCP-like congestion control, loss detection
• Some parts are the same as
HTTP/2
• Many parts of HTTP/2 will be
moved down to QUIC transport
layer
• Frame structure will be changed
• HPACK will be replaced
Prototype (1st try)
QUICClientSession
QUICNetVConnection
QUICNetProcessor
UDPNetProcessor
QUICPacketHandler
(NetAccept)
Map
ConnectionID : VConnectionLookup
QUIC Packet
Create
UDP Packet
Needed bug fixes
Can’t accept on this layer
Main
Create
Need to manage streams
QUICClientTransaction
QUIC Frame
Can’t reuse HTTP/2 stuff
Not a byte stream
Can’t use ParentClientSession
Issues
• TCP (stream) vs UDP (datagram)
• Code for UDP is not maintained
• Multiplexing is on transport layer
• HTTP over QUIC looks like HTTP/3 (totally different)
Current design (2nd try)
Too many things to talk here…
• No QUICNetAccept
• No changes for VIO itself
• ProxyClientSession isn’t
used for now
• Most parts will be into
iocore/quic/
Milestones
• 2017 May — Prepare for development
• 2017 Jul — Implement first implementation draft
• ATS Summit 2017 Fall — Report result of interop
• 2018 May — Add experimental support (ATS 8.0)
Discussion
Goal (again)
Getting ready to start QUIC implementation
Not figuring out the technical issues!
We can do that later.
HTTP/2 Nightmare
• Too many flags
• Too many regressions
• Too many missing parts
We should learn from HTTP/2
Proposals
• Design docs
• ToDo Management
• QUIC branch
• TDD
Why HTTP/2 Nightmare happened?
EOP

QUIC

  • 1.
    QUIC ATS Summit Spring2017 Masakazu Kitajo maskit@apache.org Masaori Koshiba masaori@apache.org
  • 2.
    Goal Getting ready tostart QUIC implementation First implementation Draft will be out soon!
  • 3.
    Agenda • Presentation • IETFQUIC • Prototype • Discussion • How we implement QUIC
  • 4.
    IETF QUIC • Itwas mostly HTTP/2 over UDP + α • It is something else over UDP + α • Totally new protocol to ATS ≈ Improved TCP + TLS + Improved HTTP/2 HTTP over QUIC UDP TLS 1.3 QUIC TCP-like congestion control, loss detection
  • 5.
    4 specifications &2 layers 1.Core Transport Protocol 2.Loss Detection and Congestion Control 3.TLS Mapping 4.HTTP Mapping
  • 6.
    4 specifications &2 layers 1.Core Transport Protocol HTTP over QUIC (4) UDP TLS 1.3 QUIC (1,2,3) TCP-like congestion control, loss detection • Implements improved TCP with modern technologies on UDP, in userland • Existing hardware should be able to transfer QUIC traffic without any change • Protocol version is negotiable
  • 7.
    4 specifications &2 layers 2.Loss Detection and Congestion Control HTTP over QUIC (4) UDP TLS 1.3 QUIC (1,2,3) TCP-like congestion control, loss detection • Ensure reliable transfer • Difference from TCP is “HOW” • Modern algorithms
  • 8.
    4 specifications &2 layers 3.TLS Mapping HTTP over QUIC (4) UDP TLS 1.3 QUIC (1,2,3) TCP-like congestion control, loss detection • Current draft uses TLS 1.3 • Key exchange will be done at the beginning of session on a dedicated QUIC stream • Need to implement it with low level APIs in crypto libraries
  • 9.
    4 specifications &2 layers 4.HTTP Mapping HTTP over QUIC (4) UDP TLS 1.3 QUIC (1,2,3) TCP-like congestion control, loss detection • Some parts are the same as HTTP/2 • Many parts of HTTP/2 will be moved down to QUIC transport layer • Frame structure will be changed • HPACK will be replaced
  • 10.
    Prototype (1st try) QUICClientSession QUICNetVConnection QUICNetProcessor UDPNetProcessor QUICPacketHandler (NetAccept) Map ConnectionID: VConnectionLookup QUIC Packet Create UDP Packet Needed bug fixes Can’t accept on this layer Main Create Need to manage streams QUICClientTransaction QUIC Frame Can’t reuse HTTP/2 stuff Not a byte stream Can’t use ParentClientSession
  • 11.
    Issues • TCP (stream)vs UDP (datagram) • Code for UDP is not maintained • Multiplexing is on transport layer • HTTP over QUIC looks like HTTP/3 (totally different)
  • 12.
    Current design (2ndtry) Too many things to talk here… • No QUICNetAccept • No changes for VIO itself • ProxyClientSession isn’t used for now • Most parts will be into iocore/quic/
  • 13.
    Milestones • 2017 May— Prepare for development • 2017 Jul — Implement first implementation draft • ATS Summit 2017 Fall — Report result of interop • 2018 May — Add experimental support (ATS 8.0)
  • 14.
  • 15.
    Goal (again) Getting readyto start QUIC implementation Not figuring out the technical issues! We can do that later.
  • 16.
    HTTP/2 Nightmare • Toomany flags • Too many regressions • Too many missing parts We should learn from HTTP/2
  • 17.
    Proposals • Design docs •ToDo Management • QUIC branch • TDD
  • 18.
  • 19.