HTTP melalui UDP - menggunakan protokol QUIC dengan baik

HTTP melalui UDP - menggunakan protokol QUIC dengan baik

QUIC (Sambungan Internet UDP Pantas) ialah protokol di atas UDP yang menyokong semua ciri TCP, TLS dan HTTP/2 dan menyelesaikan kebanyakan masalah mereka. Ia sering dipanggil protokol baru atau "percubaan", tetapi ia telah lama mengatasi peringkat percubaan: pembangunan telah berjalan selama lebih daripada 7 tahun. Pada masa ini, protokol tidak berjaya menjadi standard, tetapi masih menjadi meluas. Sebagai contoh, QUIC digunakan oleh gergasi seperti Google dan Facebook untuk mempercepatkan trafik dan mengurangkan kelewatan dalam rangkaian mudah alih, dan IETF mengisytiharkan garpu protokolnya sebagai asas untuk standard HTTP/3 (walaupun HTTP/2 menggunakan hanya 44.8% tapak).

Konsep

QUIC telah dibangunkan sebagai pengganti TCP warisan, yang pada asalnya direka untuk rangkaian berwayar kerugian rendah. TCP menghantar paket mengikut urutan, jadi jika satu paket hilang, keseluruhan baris gilir dihentikan (penyekatan kepala baris), yang menjejaskan kualiti dan kestabilan sambungan secara negatif. Untuk mengelakkan kerugian besar, rangkaian selular menggunakan penampan besar, yang seterusnya membawa kepada redundansi dan tindak balas negatif palsu terhadap protokol (bufferbloat). Di samping itu, TCP menghabiskan banyak masa untuk mewujudkan sambungan: Permintaan SYN/ACK dan TLS pergi secara berasingan, memerlukan tiga perjalanan pergi balik dan bukannya satu, seperti yang dilakukan oleh QUIC.

HTTP melalui UDP - menggunakan protokol QUIC dengan baik

Memandangkan QUIC menggabungkan penggantian TCP dan pelaksanaan TLS 1.3, semua sambungan sentiasa disulitkan dan menyahsulit trafik sedemikian tidak lebih mudah berbanding jika ia melalui HTTPS. Selain itu, QUIC dilaksanakan pada peringkat aplikasi, kerana penggantian lengkap timbunan TCP akan diambil keabadian.

Walaupun sokongan untuk pemultipleksan dalam HTTP/2, masalah penyekatan kepala baris kekal di sana kerana keperluan untuk menghantar paket mengikut susunan. QUIC dilaksanakan di atas UDP, jadi ia tidak mempunyai sekatan pada dasarnya, dan untuk mengelakkan paket daripada hilang selama-lamanya, ia dinomborkan dan boleh mengandungi bahagian "jiran", memberikan lebihan. Selain itu, QUIC membahagikan baris gilir monolitik kepada berbilang urutan untuk jenis permintaan yang berbeza dalam satu sambungan. Oleh itu, jika paket hilang, masalah mungkin timbul hanya untuk satu baris gilir (contohnya, untuk memindahkan fail tertentu):

HTTP melalui UDP - menggunakan protokol QUIC dengan baik

Gunakan

Pada mulanya, QUIC dibangunkan dalam Google dan sebahagian besarnya disesuaikan untuk digunakan dalam syarikat. Pada tahun 2013, ia telah dipindahkan ke IETF untuk penyeragaman (yang masih berterusan), dan kini semua orang boleh mengambil bahagian dalam pembangunan protokol dengan mencadangkan apa yang mereka tiada. Kumpulan kerja IETF menganjurkan mesyuarat tahunan di mana standard baharu diluluskan dan inovasi dibincangkan. Pelaksanaan QUIC ini dianggap sebagai yang utama dan berdasarkannya standard HTTP/3 diperakui.

Setakat ini, tidak ada perbincangan tentang memasukkan HTTP/3 sebagai protokol utama, kerana ia belum selesai dan hampir tidak disokong:

HTTP melalui UDP - menggunakan protokol QUIC dengan baik

Tetapi QUIC boleh dilaksanakan sebagai pengangkutan antara aplikasi dan pelayan, yang berjaya dilakukan di Uber:

Komen Uber tentang pengenalan QUIC

Untuk berjaya membenamkan QUIC dan meningkatkan prestasi aplikasi dalam persekitaran sambungan yang lemah, kami menggantikan tindanan lama (HTTP/2 berbanding TLS/TCP) dengan protokol QUIC. Kami menggunakan perpustakaan rangkaian Cronet daripada Projek Chromium, yang mengandungi protokol asal, versi Google - gQUIC. Pelaksanaan ini juga sentiasa ditambah baik untuk mengikuti spesifikasi IETF terkini.

Kami mula-mula menyepadukan Cronet ke dalam apl Android kami untuk menambah sokongan untuk QUIC. Integrasi dilakukan dengan cara yang dapat mengurangkan kos migrasi sebanyak mungkin. Daripada menggantikan sepenuhnya susunan rangkaian lama yang menggunakan perpustakaan OkHttp, kami telah menyepadukan Cronet DI BAWAH rangka kerja API OkHttp. Dengan melakukan penyepaduan dengan cara ini, kami mengelakkan perubahan pada panggilan rangkaian kami (yang digunakan oleh retrofit) pada peringkat API.

Sama seperti pendekatan untuk peranti Android, kami melaksanakan Cronet ke dalam apl Uber pada iOS, memintas trafik HTTP daripada rangkaian APImenggunakan NSURLProtocol. Abstraksi ini, yang disediakan oleh Yayasan iOS, mengendalikan data URL khusus protokol dan memastikan bahawa kami boleh menyepadukan Cronet ke dalam aplikasi iOS kami tanpa kos penghijrahan yang ketara.

diambil daripada terjemahan ini Artikel Uber

Pada bahagian belakang mereka menangkap sambungan QUIC melalui Google Cloud lb, yang menyokong protokol sejak pertengahan 2018.

Tidak menghairankan bahawa Google Cloud berfungsi hebat dengan protokol yang dibangunkan Google, tetapi apakah alternatifnya?

Nginx

Tidak lama dahulu CloudFlare Saya cuba menyeberang nginx (yang tidak menyokong HTTP/3 secara lalai) dengan alat Quichenya. Pelaksanaan tersedia sebagai fail .patch tunggal, yang disertakan dengan tutorial pemasangan:

curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
tar xvzf nginx-1.16.1.tar.gz
git clone --recursive https://github.com/cloudflare/quiche
cd nginx-1.16.1
patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch

Di sini anda boleh menyambungkan modul anda jika perlu

./configure                          	
   	--prefix=$PWD                       	
   	--with-http_ssl_module              	
   	--with-http_v2_module               	
   	--with-http_v3_module               	
   	--with-openssl=../quiche/deps/boringssl 
   	--with-quiche=../quiche
 make

Yang tinggal hanyalah untuk mendayakan sokongan HTTP/3

events {
    worker_connections  1024;
}

http {
    server {
        # Enable QUIC and HTTP/3.
        listen 443 quic reuseport;

        # Enable HTTP/2 (optional).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # Enable all TLS versions (TLSv1.3 is required for QUIC).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        # Request buffering in not currently supported for HTTP/3.
        proxy_request_buffering off;

        # Add Alt-Svc header to negotiate HTTP/3.
        add_header alt-svc 'h3-27=":443"; ma=86400';
    }
}

Anda masih belum dapat menyambung melalui HTTP/3 dalam penyemak imbas biasa, tetapi anda boleh menggunakannya Chrome Canary dan jalankannya dengan bendera --enable-quic, pergi ke pelayan anda atau, sebagai contoh, tapak quic.rocks dan lihat jenis sambungan dalam Alat Pembangun:
HTTP melalui UDP - menggunakan protokol QUIC dengan baik
Daripada HTTP/3 ia ditulis http2+quic/99, tetapi pada asasnya ia adalah perkara yang sama.

Teknologi lain

  • QUIC juga menyokong LiteSpeed (yang disambungkan ke Facebook melalui HTTP/3 dengan sambutan hebat) dan progresif Kedi. Apache masih belum boleh melakukannya, tetapi kerja sedang dijalankan penuh semangat.
  • 21 Januari dikemas kini draf standard untuk WebRTC
  • Baru sehari Microsoft dibuka kod pelaksanaan msquic, di mana tidak semua fungsi daripada piawaian IETF masih tersedia, tetapi ini sudah menjadi satu kejayaan besar.

Kesimpulan

HTTP melalui UDP - menggunakan protokol QUIC dengan baik

Minat terhadap QUIC tidak stabil, tetapi berkembang, dan usaha sedang dijalankan untuk menyeragamkannya. Pelaksanaan baharu protokol muncul hampir setiap bulan, dan setiap tahun semakin ramai pembangun yakin bahawa QUIC adalah masa hadapan. Malah mungkin untuk memasukkan protokol dalam versi masa hadapan bagi timbunan TCP, yang bermaksud bahawa lambat laun seluruh Internet akan beralih kepada sambungan yang lebih stabil dan lebih pantas.

Kini anda boleh mengkonfigurasi interaksi QUIC untuk infrastruktur anda atau memberikannya kepada penyemak imbas - mereka semua merancang untuk menambah sokongan untuk protokol, dan statistik menyedihkan dengan caniuse akan menjadi lebih ceria.

HTTP melalui UDP - menggunakan protokol QUIC dengan baik

Sumber: www.habr.com

Tambah komen