Skip to content

Feature: Add HTTP/3 (also called QUIC) to VpnHood #1

@bizzbyster

Description

@bizzbyster

Overview
.NET 6 includes a preview version of HTTP/3 in both HttpClient and gRPC. The current VpnHood client and server use .NET TcpClient for the tunnel between client and server and the owners of the upstream repo (see vpnhood#94) plan to wait to let HTTP/3 mature a bit before considering adding this capability, which is understandable. HTTP/3 has promising performance properties -- especially for high latency networks -- that we would like to be able to start testing and so we would like to see this feature added early.

Steps

  1. Get VpnHood client and server (on Linux) compiling with .NET 6 and libmsquic. See https://devblogs.microsoft.com/dotnet/http-3-support-in-dotnet-6/.
  2. Establish an Http/3 hello world that sends data from VpnHood client to server using HTTP/3 and QUIC either using HttpClient or gRPC .NET APIs. It doesn't really matter which you use.
  3. Implement a new class that implements the IDatagramChannel interface. This class will replace TcpDatagramChannel when configured to use Http3 instead of Tcp and instead of TcpClientStream, which TcpDatagramChannel relies on, it will have a class called Http3ClientStream which will use either the HttpClient or the gRPC .NET API to communicate between VpnHood client and server.
  4. Run a speedtest using VpnHood client and server with enableHttp3 (a configuration parameter to be added to the settings.json file in VpnHood client) set to true and set to false and report the difference in performance.

Definition of Done
The project is done when the speedtest completes successfully using Http3 implementation of the IDatagramChannel interface independent of the speedtest results compared to when TcpDatagramChannel is used.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions