Firma Microsoft o otwarciu kodu biblioteki z realizacją protokołu sieciowego . Kod napisano w języku C i na licencji MIT. Biblioteka jest wieloplatformowa i może być używana nie tylko w systemie Windows, ale również w systemie Linux z wykorzystaniem lub OpenSSL dla TLS 1.3. W przyszłości planowane jest wsparcie dla innych platform.
Biblioteka oparta jest na kodzie sterownika msquic.sys, dostarczanego w jądrze Windows 10 (Insider Preview) w celu zapewnienia obsługi protokołów HTTP i na QUIC. W tym kod używany jest do implementacji HTTP/3 w wewnętrznym stosie Windows i w .NET Core. Rozwój biblioteki MsQuic będzie całkowicie prowadzony na GitHubie z wykorzystaniem publicznego przeglądu, pull-requestów i GitHub Issues. Przygotowana została infrastruktura, która sprawdza każdy commit i pull-request w zestawie ponad 4000 testów. Po stabilizacji środowiska do rozwoju planowane jest przyjmowanie zmian od zewnętrznych programistów.
MsQuic już można wykorzystać do tworzenia serwerów i klientów, ale nie wszystkie funkcjonalności określone w specyfikacji IETF są obecnie dostępne. Na przykład, obecnie brak wsparcia dla 0-RTT, migracji klientów, odkrywania Path MTU oraz zarządzania wyborem adresów dla serwera (Server Preferred Address). Wśród zaimplementowanych funkcji zauważono optymalizację w celu osiągnięcia maksymalnej przepustowości i minimalnych opóźnień, wsparcie dla asynchronicznego wejścia/wyjścia, RSS (Receive Side Scaling), a także możliwość łączenia przychodzących i wychodzących strumieni UDP. Implementacja MsQuic została przetestowana pod kątem zgodności z eksperymentalnymi gałęziami przeglądarek Chrome i Edge.
Przypomnijmy, że HTTP/3 standaryzuje użycie protokołu QUIC jako transportu dla HTTP/2. Protokół (Quick UDP Internet Connections) od 2013 roku jest rozwijany przez firmę Google jako alternatywa dla połączeń TCP+TLS w sieci, rozwiązując problemy z długim czasem ustanawiania i uzgadniania połączeń w TCP oraz eliminując opóźnienia przy utracie pakietów w trakcie przesyłania danych. QUIC jest nadbudową nad protokołem UDP, wspierającą mnożenie połączeń i zapewniającą metody szyfrowania porównywalne z TLS/SSL.
Podstawowe QUIC:
- Wysokie bezpieczeństwo, podobne do TLS (w zasadzie QUIC umożliwia używanie TLS 1.3 na UDP);
- Kontrola integralności strumienia, zapobiegająca utracie pakietów;
- Możliwość natychmiastowego ustanowienia połączenia (0-RTT, w około 75% przypadków dane można przesyłać natychmiast po wysłaniu pakietu ustanowienia połączenia) oraz zapewnienie minimalnych opóźnień między wysłaniem żądania a otrzymaniem odpowiedzi (RTT, Round Trip Time);
- Nie używanie tego samego numeru sekwencji podczas ponownej transmisji pakietu, co pozwala uniknąć dwuznaczności przy określaniu odebranych pakietów i wyeliminować opóźnienia;
- Utrata pakietu wpływa na dostarczanie tylko powiązanego z nim strumienia i nie zatrzymuje dostarczania danych w równolegle przesyłanych strumieniach przez bieżące połączenie;
- Środki korekcji błędów, minimalizujące opóźnienia spowodowane ponowną transmisją zagubionych pakietów. Wykorzystanie specjalnych kodów korekcji błędów na poziomie pakietów w celu zmniejszenia liczby sytuacji wymagających ponownej transmisji danych zagubionego pakietu.
- Granice bloków kryptograficznych są wyrównane z granicami pakietów QUIC, co zmniejsza wpływ utraty pakietów na dekodowanie zawartości następnych pakietów;
- Brak problemów z blokowaniem kolejek TCP;
- Wsparcie dla identyfikatora połączenia, co pozwala skrócić czas na ponowne nawiązanie połączenia dla klientów mobilnych;
- Możliwość podłączenia rozszerzonych mechanizmów kontroli przeciążenia połączenia;
- Wykorzystanie techniki prognozowania przepustowości w każdym kierunku, aby zapewnić optymalną intensywność wysyłania pakietów, zapobiegając wpadnięciu w stan przeciążenia, w którym występuje utrata pakietów;
- Wyraźny wydajności i przepustowości w porównaniu z TCP. Dla serwisów wideo, takich jak YouTube, zastosowanie QUIC wykazało zmniejszenie operacji ponownego buforowania podczas oglądania wideo o 30%.
Źródło: opennet.ru
