QUICに向けおHTTP / 3を支えるもの

むンタヌネットの歎史における新しいマむルストヌンは、たさに目の前から始たりたす。HTTP/ 3がすでに発衚されおいるず想定できたす。 10月末に、IETFのマヌクノッティンガムは、2015幎以降IETFが構築しおきた新しいプロトコルの名前を既に決定するこずを提案したした 。 そのため、QUICのような名前の代わりに、隒々しいHTTP / 3が登堎したした。 欧米の出版物はすでにこのこずに぀いお 䜕床も 曞いおいたす。 QUICの歎史は2012幎にGood Corporationの腞で始たりたした。それ以来、GoogleのサヌバヌのみがHTTP-over-QUIC接続をサポヌトしおいたしたが、時間が経ち、Facebookはすでにこのテクノロゞヌの実装を開始したした11月7日、 FacebookずLiteSpeedはHTTP / 3 ; 珟圚、QUICをサポヌトしおいるサむトの割合は1.2です。 最埌に、WebRTCワヌキンググルヌプもQUIC およびQUIC APIを参照に目を向けおいるため、近い将来、リアルタむムのビデオ/オヌディオはRTP / RTCPではなくQUICを経由するようになりたす。 したがっお、IETF QUICの詳现を明らかにするこずは玠晎らしいこずであるず刀断したした。特にHabrに぀いおは、ロングドッティングiの翻蚳を準備したした。 お楜しみください







QUICQuick UDP Internet Connectionsは、暗号化された新しいデフォルトのトランスポヌトレむダヌプロトコルであり、倚くのHTTP拡匵機胜を備えおいたす。トラフィックを高速化し、セキュリティを匷化したす。 QUICには長期的な目暙もありたす。最終的にはTCPずTLSを眮き換えるこずです。 この蚘事では、䞻芁なQUICチップず、Webがそれらの恩恵を受ける理由の䞡方ず、この完党に新しいプロトコルをサポヌトする問題に぀いお説明したす。



実際、同じ名前の2぀のプロトコルがありたす。GoogleQUICgQUICは、数幎前にGoogleの゚ンゞニアが開発したオリゞナルのプロトコルで、䞀連の実隓の埌、暙準化のためにInternet Engineering Task ForceIETFによっお採甚されたした。



IETF QUIC以降、単にQUICは、gQUICずの間に非垞に倧きな違いがあるため、別個のプロトコルず芋なすこずができたす。 パッケヌゞ圢匏からハンドシェむクおよびHTTPマッピングに至るたで、QUICは、むンタヌネットの高速化ず安党性の向䞊ずいう共通の目暙を持぀倚くの組織や開発者ず協力しお、元のgQUICアヌキテクチャを改善したした。



それでは、QUICはどのような改善を提䟛したすか



統合セキュリティおよびパフォヌマンス



QUICず由緒あるTCPの最も泚目に倀する違いの1぀はデフォルトで安党である茞送プロトコルであるずいう最初に述べられた目暙です 。 QUICは、認蚌ず暗号化を䜿甚しおこれを行いたす。これは通垞、トランスポヌトプロトコル自䜓ではなく、より高いレベルTLSなどで行われたす。



元のQUICハンドシェむクは、TCPを介した通垞の3者間通信ずTLS 1.3ハンドシェむクを組み合わせ、参加者の認蚌ず暗号化パラメヌタヌの調敎を提䟛したす。 TLSに粟通しおいる堎合QUICはTLS蚘録レベルを独自のフレヌム圢匏に眮き換えたすが、同時にTLSハンドシェむクを䜿甚したす。



これにより、接続が垞に暗号化および認蚌されるだけでなく、初期接続をより高速に行うこずができたす。通垞のQUICハンドシェむクは、1回のパスでクラむアントずサヌバヌ間の亀換を行い、TCP + TLS 1.3は2回のパスを行いたす。













ただし、QUICはさらに進んで、サヌドパヌティによっお簡単に䟵害される可胜性がある接続メタデヌタも暗号化したす。 たずえば、攻撃者はパケット番号を䜿甚しお、接続移行が䜿甚されおいるずきに耇数のネットワヌクパスにナヌザヌを誘導できたす以䞋を参照。 QUICはパケット番号を暗号化するため、接続の実際の参加者以倖は修正できたせん。



暗号化は、「停滞」に察しおも効果的です。これは、実装の誀った仮定のためにプロトコルの柔軟性を実際に䜿甚できない珟象です骚化-TLS 1.3が長い間レむアりトされた理由です。新しいTLSリビゞョンの䞍芁なブロックを防ぎたす。



キュヌの先頭をブロックする行頭ブロッキング



HTTP / 2によっおもたらされた䞻な改善点の1぀は、1぀のTCP接続で異なるHTTP芁求を結合できるこずです。 これにより、HTTP / 2アプリケヌションはリク゚ストを䞊行しお凊理し、ネットワヌクチャネルをより有効に掻甚できたす。



もちろん、これは倧きな前進でした。 以前のアプリケヌションは、耇数のHTTP芁求を同時に凊理する堎合たずえば、ブラりザヌがペヌゞをレンダリングするためにCSSずJavaScriptの䞡方を受信する必芁がある堎合、倚くのTCP + TLS接続を開始する必芁があったためです。 新しい接続を䜜成するには、オヌバヌロヌドりィンドりを初期化するだけでなく、耇数のハンドシェむクが必芁です。぀たり、ペヌゞのレンダリングが遅くなりたす。 組み合わせたHTTPリク゚ストはこれを回避したす。











ただし、欠点がありたす。耇数の芁求/応答が同じTCP接続を介しお送信されるため、倱われたデヌタが1぀の芁求のみに関係する堎合でも、それらはすべおパケット損倱に等しく䟝存したす。 これは「キュヌの先頭をブロックする」ず呌ばれたす。



QUICはさらに深くなり、芁求を結合するためのファヌストクラスのサポヌトを提䟛したす。たずえば、異なるHTTP芁求は異なるトランスポヌトQUIC芁求ず芋なすこずができたすが、同時に同じQUIC接続を䜿甚したす-぀たり、远加のハンドシェむクは䞍芁です。茻茳ステヌタス、QUIC芁求は独立しお配信されたす。その結果、ほずんどの堎合、パケット損倱は1぀の芁求のみに圱響したす。



したがっお、たずえば、パケット損倱が倧きい過負荷のネットワヌクの堎合は特に、WebペヌゞCSS、JavaScript、画像、およびその他のリ゜ヌスの完党なレンダリングの時間を倧幅に短瞮できたす。



ずおも簡単ですね



その玄束を果たすために、QUICプロトコルは、倚くのネットワヌクアプリケヌションが圓たり前ず考えおいたいく぀かの前提を克服する必芁がありたす。 これにより、QUICの実装ず実装が耇雑になる堎合がありたす。



QUICは、開発を促進し、䞍明なプロトコルのパケットをドロップするネットワヌクデバむスの問題を回避するために、UDPデヌタグラムを介しお配信されるように蚭蚈されおいたすほずんどのデバむスがUDPをサポヌトしおいるため。 たた、QUICをナヌザヌ空間に配眮できるため、たずえば、ブラりザヌはOSの曎新を埅たずに、新しいプロトコル機胜を実装しお゚ンドナヌザヌに䌝えるこずができたす。



ただし、ネットワヌクの問題を枛らすずいう目暙は、パケットを保護しお適切にルヌティングするこずをより困難にしたす。



1぀のNATですべおを集めお、1぀の黒い意志で団結したす



通垞、NATルヌタヌは、4぀の倀のタプル送信元IPずポヌトに加えおIPず宛先ポヌトを䜿甚するTCP接続ず、ネットワヌクを介しお送信されるTCP SYN、ACK、およびFINパケットを監芖したす。 ルヌタヌは、新しい接続がい぀確立され、い぀終了したかを刀断できたす。 したがっお、NATバむンディング内郚および倖郚IPずポヌト間の接続の正確な管理が可胜です。



QUICの堎合、これはただ䞍可胜です。 珟代のNATルヌタヌはQUICをただ認識しおいないため、通垞はデフォルトのダりングレヌドで粟床の䜎いUDP凊理にダりングレヌドしたす。これは、長期間の接続に圱響する可胜性がある任意の堎合によっおは短い期間のタむムアりトを意味したす



再バむンドが発生するずタむムアりトなど、NAT境界の倖偎のデバむスは別の゜ヌスからパケットの受信を開始し、4぀の倀のタプルのみを䜿甚しお接続を維持できなくなりたす。









そしお、それは単なるNATではありたせん QUIC機胜の1぀は接続移行ず呌ばれ、デバむスが自由に接続を他のIPアドレス/パスに転送できるようにしたす。 たずえば、モバむルクラむアントは、QUIC接続をモバむルネットワヌクから既知のWiFiネットワヌクに転送できたすナヌザヌはお気に入りのコヌヒヌショップなどにアクセスしたした。



QUICは、接続IDの抂念を䜿甚しおこの問題を解決しようずしたす。接続IDは、QUICパケットで送信され、接続を識別できる任意の長さの情報です。 ゚ンドポむントデバむスはこのIDを䜿甚しお、タプルず調敎せずに接続を远跡できたす。 実際には、たずえば、接続の移行時に異なるパスが接続されるのを避けるために、同じ接続を指す倚くのIDが必芁です。これは、プロセス党䜓がミドルボックスではなく゚ンドデバむスによっおのみ制埡されるためです。



ただし、1぀のIPで数癟たたは数千のサヌバヌを識別できる可胜性がある、゚ニヌキャストずECMPルヌティングを䜿甚する通信事業者には問題がある可胜性がありたす。 これらのネットワヌクの境界ルヌタヌはただQUICトラフィックの凊理方法を知らないため、同じQUIC接続からのUDPパケットが異なるタプルで異なるサヌバヌに送信されるこずがありたす。これは切断を意味したす。











これを回避するために、オペレヌタヌはよりスマヌトなレベルバランサヌを実装する必芁がありたす。 これは、境界ルヌタヌ自䜓に圱響を䞎えるこずなく、プログラムで実珟できたすたずえば、FacebookのKatranプロゞェクトを参照。



Qpack



HTTP / 2のもう1぀の䟿利な機胜は、 ヘッダヌ圧瞮HPACKでした 。これにより、゚ンドポむントデバむスは、䞍芁な芁求ず応答を砎棄するこずにより、送信されるデヌタのサむズを削枛できたす。



特に、他の手法の䞭でも特に、HPACKは、以前のHTTP芁求/応答から既に送受信されたヘッダヌを持぀動的テヌブルを䜿甚したす。これにより、デバむスは、新しい芁求/応答で以前に遭遇したヘッダヌを参照するこずができたすそれらを再床送信するのではなく 。



HPACKテヌブルは、゚ンコヌダヌ芁求/応答を送信する偎ずデコヌダヌ受信偎の間で同期する必芁がありたす。そうしないず、デコヌダヌは受信したものを単にデコヌドできたせん。



TCP䞊のHTTP / 2の堎合、トランスポヌト局TCPは送信されたのず同じ順序で芁求/応答を配信するため、この同期は透過的です。 ぀たり、単玔な芁求/応答でテヌブルを曎新するためのデコヌダヌ呜什を送信できたす。 しかし、QUICを䜿甚するず、事態ははるかに耇雑になりたす。



QUICは耇数のHTTPリク゚スト/レスポンスを異なる方向に同時に配信できたす。぀たり、QUICは1方向の配信順序を保蚌したすが、耇数の方向の堎合はそのような保蚌はありたせん。



たずえば、クラむアントがQUICストリヌムAでHTTPリク゚ストAを送信し、ストリヌムBでリク゚ストBを送信した堎合、パケットの䞊べ替えたたはネットワヌク損倱のため、サヌバヌはリク゚ストAの前にリク゚ストBを受信したす。リク゚ストAのヘッダヌに瀺されおいた堎合、サヌバヌはリク゚ストBをただデコヌドできないため、リク゚ストAをただ芋おいたせん。



gQUICプロトコルは、単䞀のgQUICストリヌム内でHTTPリク゚スト/レスポンスのすべおのヘッダヌボディではなくを連続させるこずでこの問題を解決したした。 これにより、䜕が起こっおも、すべおのヘッダヌが正しい順序で䞊べられたす。 これは非垞に単玔なスキヌムであり、既存の゜リュヌションを䜿甚するず、HTTP / 2のコヌドを匕き続き䜿甚できたす。 䞀方、これにより、キュヌの先頭がブロックされる可胜性が高くなりたす。QUICはこれを削枛するように蚭蚈されおいたす。 そのため、IETF QUICワヌキンググルヌプは、HTTPずQUICの間の新しいマッピングHTTP / QUICず、新しいヘッダヌ圧瞮原理であるQPACKを開発したした。



HTTP / QUICおよびQPACK仕様の最終ドラフトでは、各HTTP芁求/応答亀換は独自の双方向QUICフロヌを䜿甚するため、キュヌの開始のブロックは発生したせん。 たた、QPACKをサポヌトするために、各参加者は2぀の远加の単方向QUICストリヌムを䜜成したす。1぀はテヌブルの曎新を送信し、もう1぀は受信を確認したす。 したがっお、QPACK゚ンコヌダヌは、デコヌダヌが受信を確認した埌にのみ動的テヌブルぞのリンクを䜿甚できたす。



屈折反射



UDPベヌスのプロトコルの䞀般的な問題は、攻撃者がサヌバヌに倧量のデヌタを被害者に送信するように匷制する堎合の、リフレクション攻撃に察する脆匱性です。 攻撃者は自分のIPを停装しお、サヌバヌがデヌタ芁求が被害者のアドレスから来たず刀断するようにしたす。









この皮の攻撃は、サヌバヌの応答が芁求よりもかなり倧きい堎合に非垞に効果的です。 この堎合、圌らは「利埗」に぀いお話したす。



TCPは通垞、このような攻撃には䜿甚されたせん。元のハンドシェむクSYN、SYN + ACKなどのパケットは同じ長さであるため、「増幅」の可胜性がないためです。



䞀方、QUICハンドシェむクは非垞に非察称ですTLSの堎合、最初にQUICサヌバヌは蚌明曞チェヌンを送信したすが、クラむアントは数バむトのみを送信する必芁があるにもかかわらず、ClientHello TLSクラむアントからのメッセヌゞはQUICパッケヌゞに組み蟌たれたす このため、パッケヌゞの内容がはるかに小さい堎合でも、元のQUICパッケヌゞを特定の最小長に増やす必芁がありたす。 通垞、サヌバヌの応答には耇数のパケットが含たれおいるため、この方法はあたり効果的ではありたせん。したがっお、クラむアントパッケヌゞの増加以䞊の可胜性がありたす。



QUICプロトコルは、明瀺的な゜ヌス怜蚌メカニズムも定矩したす。サヌバヌは、倧きな応答を提䟛する代わりに、䞀意のトヌクンを持぀再詊行パケットのみを送信し、クラむアントはそれを新しいパケットでサヌバヌに送信したす。 したがっお、サヌバヌには、クラむアントに代替IPアドレスがないずいう自信があり、ハンドシェむクを終了できたす。 決定のマむナス-ハンドシェむクの時間が増加したす。1パスではなく、2パスが既に必芁です。



別の解決策は、サヌバヌの応答を、リフレクション攻撃の効果が䜎䞋するサむズに枛らすこずです。たずえば、 ECDSA蚌明曞を䜿甚したす 通垞はRSAよりもはるかに小さい。 たた、zlibやbrotliなどの既補の圧瞮アルゎリズムを䜿甚したTLS蚌明曞圧瞮メカニズムを詊したした。 これはgQUICで最初に登堎した機胜ですが、珟圚TLSではサポヌトされおいたせん。



UDPパフォヌマンス



QUICの䞍倉の問題の1぀は、QUICで動䜜できない既存のハヌドりェアず゜フトりェアです。 QUICがルヌタヌのようなネットワヌクミドルボックスをどのように扱うかを既に怜蚎したしたが、別の朜圚的に問題のある領域は、UDPを介したQUICデバむス間でのデヌタの送受信のパフォヌマンスです。 長幎にわたり、゜フトりェアオペレヌティングシステムなどおよびハヌドりェアネットワヌクむンタヌフェむスに組み蟌たれたオフロヌド機胜など、TCP実装を可胜な限り最適化する努力がなされおきたしたが、これはUDPに関係したせん。



ただし、QUIC実装がこれらの改善ず利点を䞊回るのは時間の問題です。 LinuxでUDPオフロヌドを実装する最近の取り組みを芋おください。これにより、アプリケヌションは、ナヌザヌ空間ずカヌネル空間のネットワヌクスタック間で耇数のUDPセグメントを玄1セグメントのコストで結合および送信できたす。 もう1぀の䟋は、Linux䞊の゜ケットのれロコピヌサポヌトです。これにより、アプリケヌションは、ナヌザヌスペヌスメモリをカヌネルスペヌスにコピヌするコストを回避できたす。



おわりに



HTTP / 2やTLS 1.3ず同様に、QUICプロトコルには、Webサむトずむンタヌネットむンフラストラクチャの他の参加者の䞡方のパフォヌマンスずセキュリティを向䞊させる倚数の新機胜が必芁です。 IETFワヌキンググルヌプは、今幎の終わりたでにQUIC仕様の最初のバヌゞョンを展開する予定です。そのため、QUICの利点を最倧限に掻甚する方法に぀いお考えたす。



All Articles