HTTP ma luna o UDP - hoʻohana maikaʻi i ka protocol QUIC

HTTP ma luna o UDP - hoʻohana maikaʻi i ka protocol QUIC

ʻO QUIC (Quick UDP Internet Connections) kahi protocol ma luna o ka UDP e kākoʻo ana i nā hiʻohiʻona āpau o TCP, TLS a me HTTP/2 a hoʻoponopono i ka hapa nui o ko lākou mau pilikia. Ua kapa pinepine ʻia he protocol hou a i ʻole "hoʻokolohua", akā ua lōʻihi ka lōʻihi o ka pae hoʻokolohua: ua hoʻomau ʻia ka hoʻomohala ʻana ma mua o 7 mau makahiki. I kēia manawa, ʻaʻole i lilo ka protocol i mea maʻamau, akā ua hoʻolaha nui ʻia. No ka laʻana, hoʻohana ʻia ʻo QUIC e nā kanaka nunui e like me Google a me Facebook e wikiwiki i ka holo a hoʻemi i nā lohi i nā pūnaewele kelepona, a ua haʻi ka IETF i kāna kumu o ka protocol ke kumu no ka maʻamau HTTP/3 (ʻoiai ʻo HTTP/2 hoʻohana. 44.8% wale nō paena).

Kuhi

Ua hoʻomohala ʻia ʻo QUIC ma ke ʻano he pani no ka TCP hoʻoilina, i hoʻolālā mua ʻia no nā pūnaewele uea haʻahaʻa. Hāʻawi ʻo TCP i nā ʻeke ma ke ʻano, no laila inā nalowale hoʻokahi ʻeke, ua pau ka pila holoʻokoʻa (pale poʻo-o-laina), e hoʻopilikia i ka maikaʻi a me ka paʻa o ka pilina. No ka pale ʻana i nā poho nui, hoʻohana ʻia nā ʻoihana pūnaewele i ka hoʻohana ʻana i nā buffers nui, a laila e alakaʻi i ka redundancy a me ka pane hewa hewa ʻole o ka protocol (hoʻopaʻapaʻa). Eia hou, hoʻohana ka TCP i ka manawa nui no ka hoʻokumu ʻana i kahi pilina: SYN/ACK a me TLS noi i hoʻokaʻawale ʻia, e koi ana i ʻekolu mau huakaʻi ma kahi o hoʻokahi, e like me kā QUIC.

HTTP ma luna o UDP - hoʻohana maikaʻi i ka protocol QUIC

No ka hoʻohui ʻana o QUIC i kahi pani TCP a me ka hoʻokō ʻana o TLS 1.3, hoʻopili mau ʻia nā pilina a pau, a ʻaʻole maʻalahi ka hoʻokaʻawale ʻana i ia mau kaʻa ma mua o ka hele ʻana ma luna o HTTPS. Eia hou, ua hoʻokō ʻia ʻo QUIC ma ka pae noi, no ka mea e lawe ʻia kahi pani piha o ka waihona TCP ke ao pau ole.

ʻOiai ke kākoʻo ʻana i ka multiplexing ma HTTP/2, ua mau ka pilikia o ka pale ʻana i ke poʻo o ka laina ma muli o ka pono e hāʻawi i nā ʻeke ma ke ʻano. Hoʻokomo ʻia ʻo QUIC ma luna o ka UDP, no laila ʻaʻohe mea pale i ke kumu, a no ka pale ʻana i nā ʻeke mai ka nalowale mau loa, ua helu ʻia lākou a hiki ke loaʻa i nā ʻāpana o "nā hoalauna," e hāʻawi ana i ka redundancy. Eia hou, ua hoʻokaʻawale ʻo QUIC i ka queue monolithic i nā ʻāpana he nui no nā ʻano noi like ʻole i loko o kahi pilina. No laila, inā nalowale kahi ʻeke, hiki ke kū mai nā pilikia no hoʻokahi queue (no ka laʻana, no ka hoʻoili ʻana i kahi faila):

HTTP ma luna o UDP - hoʻohana maikaʻi i ka protocol QUIC

E hoʻohana

I ka hoʻomaka ʻana, ua hoʻomohala ʻia ʻo QUIC i loko o Google a ua hana nui ʻia no ka hoʻohana ʻana i loko o ka hui. I ka makahiki 2013, ua hoʻoili ʻia i ka IETF no ka hoʻohālikelike ʻana (e hoʻomau ʻia ana), a i kēia manawa hiki i nā mea a pau ke komo i ka hoʻomohala ʻana i ka protocol ma ke noi ʻana i nā mea i nalowale. Hoʻonohonoho ka hui hana IETF i nā hālāwai makahiki kahi e ʻae ʻia ai kahi maʻamau hou a kūkākūkā ʻia nā mea hou. ʻO kēia hoʻokō o QUIC i manaʻo ʻia ʻo ia ka mea nui a ma muli o ke kumu i hōʻoia ʻia ai ka maʻamau HTTP/3.

I kēia manawa, ʻaʻohe kamaʻilio e pili ana i ka hoʻokomo ʻana iā HTTP/3 i ka protocol nui, no ka mea ʻaʻole i pau a ʻaneʻane ʻaʻole kākoʻo ʻia:

HTTP ma luna o UDP - hoʻohana maikaʻi i ka protocol QUIC

Akā hiki ke hoʻokō ʻia ʻo QUIC ma ke ʻano he kaʻa ma waena o ka noi a me ke kikowaena, i hana maikaʻi ʻia ma Uber:

ʻO ka ʻōlelo a Uber no ka hoʻokomo ʻana o QUIC

No ka hoʻokomo pono ʻana i ka QUIC a me ka hoʻomaikaʻi ʻana i ka hana noiʻi ma nā wahi pili pono ʻole, ua hoʻololi mākou i ka waihona kahiko (HTTP/2 ma luna o TLS/TCP) me ka protocol QUIC. Ua hoʻohana mākou i ka waihona pūnaewele Cronet mai Nā papahana Chromium, aia i loko o ka mana Google o ka protocol - gQUIC. Ke hoʻomaikaʻi mau ʻia nei kēia hoʻokō e hahai i nā kikoʻī IETF hou loa.

Ua hoʻohui mua mākou iā Cronet i kā mākou mau polokalamu Android e hoʻohui i ke kākoʻo no QUIC. Ua hana ʻia ka hoʻohui ʻana ma ke ʻano e hōʻemi ai i nā kumukūʻai neʻe e like me ka hiki. Ma kahi o ka hoʻololi piha ʻana i ka waihona pūnaewele kahiko i hoʻohana i ka waihona OkHttp, ua hoʻohui mākou i ka Cronet MALALO o ka OkHttp API framework. Ma ka hana ʻana i ka hoʻohui ʻana i kēia ala, ua pale mākou i nā loli i kā mākou kelepona pūnaewele (i hoʻohana ʻia e ʻO Retrofit) ma ka pae API.

E like me ka hoʻokokoke ʻana no nā polokalamu Android, ua hoʻokomo mākou iā Cronet i nā polokalamu Uber ma iOS, e ʻae ana i ka hele ʻana o HTTP mai ka pūnaewele. APIhoʻohana ʻana NSURLProtocol. ʻO kēia abstraction, i hoʻolako ʻia e ka iOS Foundation, e mālama i ka ʻikepili URL kikoʻī protocol a hōʻoia e hiki iā mākou ke hoʻohui iā Cronet i kā mākou mau noi iOS me ka ʻole o nā kumukūʻai neʻe nui.

lawe ʻia mai keia unuhi ʻatikala Uber

Ma ka ʻaoʻao hope ua hopu lākou i nā pilina QUIC ma o Google Cloud lb, ʻo ia kākoʻo protocol mai ka waena o 2018.

ʻAʻole ia he mea kupanaha ka hana nui ʻana o Google Cloud me ka protocol i kūkulu ʻia e Google, akā he aha nā mea ʻē aʻe?

Nginx

ʻAʻole i hala aku nei ʻo CloudFlare Ua ho'āʻo wau e hele i keʻa nginx (ʻaʻole i kākoʻo i ka HTTP/3 ma ka paʻamau) me kāna mea hana Quiche. Loaʻa ka hoʻokō ʻana ma ke ʻano he faila .patch hoʻokahi, e hele mai me kahi aʻoaʻo hoʻonohonoho:

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

Maanei hiki iā ʻoe ke hoʻohui i kāu mau modula inā pono

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

ʻO nā mea i koe e hiki ai ke kākoʻo 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';
    }
}

ʻAʻole hiki ke hoʻohui ʻia ma o HTTP/3 i nā mākaʻikaʻi maʻamau, akā hiki iā ʻoe ke hoʻohana Kanaka Chrome a holo me ka hae --enable-quic, e hele i kāu kikowaena a i ʻole, no ka laʻana, ka pūnaewele quic.rocks a nānā i ke ʻano pili i nā Mea Hoʻomohala:
HTTP ma luna o UDP - hoʻohana maikaʻi i ka protocol QUIC
Ma kahi o HTTP/3 ua kākau ʻia http2+quic/99, akā, ʻo ia ka mea like.

Nā ʻenehana ʻē aʻe

  • Kākoʻo pū ʻo QUIC LiteSpeed (ʻo ia ka mea i pili iā Facebook ma HTTP/3 me ka hauʻoli nui) a me ka holomua Caddy. ʻAʻole hiki iā Apache ke hana i kēia manawa, akā ke holo nei ka hana holo piha.
  • Ua hōʻano hou ʻia ʻo Ianuali 21 kiʻi maʻamau no WebRTC
  • I kekahi lā aʻe ua wehe ʻo Microsoft code hoʻokō msquic, kahi i loaʻa ʻole ai nā hana a pau mai ka maʻamau IETF, akā he holomua nui kēia.

hopena

HTTP ma luna o UDP - hoʻohana maikaʻi i ka protocol QUIC

ʻAʻole paʻa ka hoihoi i ka QUIC, akā ke ulu nei, a ke hoʻomaka nei ka hana e hoʻohālikelike ai. Hōʻike ʻia nā hana hou o ka protocol i kēlā me kēia mahina, a i kēlā me kēia makahiki, ʻoi aku ka nui o nā mea hoʻomohala i manaʻoʻiʻo ʻo QUIC ka wā e hiki mai ana. Hiki paha ke hoʻokomo i ka protocol i nā mana e hiki mai ana o ka TCP stack, ʻo ia hoʻi e neʻe koke ka Pūnaewele holoʻokoʻa i nā pilina paʻa a wikiwiki hoʻi.

I kēia manawa hiki iā ʻoe ke hoʻonohonoho i ka pilina QUIC no kāu ʻenehana a i ʻole hāʻawi ʻia i nā polokalamu kele - ke hoʻolālā nei lākou a pau e hoʻohui i ke kākoʻo no ka protocol, a ʻoi aku ka hauʻoli o nā helu kaumaha me caniuse.

HTTP ma luna o UDP - hoʻohana maikaʻi i ka protocol QUIC

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka