0x5c2aad80
Quicnet es una implementación .NET del protocolo Quic que se menciona a continuación. La implementación se mantiene en línea con la versión 32 del borrador de transport de Quic, y aún no ofrece la implementación de los siguientes borradores relacionados:
Ejemplos de trabajo mínimos
using System ;
using System . Text ;
using QuicNet ;
using QuicNet . Streams ;
using QuicNet . Connections ;
namespace QuickNet . Tests . ConsoleServer
{
class Program
{
// Fired when a client is connected
static void ClientConnected ( QuicConnection connection )
{
connection . OnStreamOpened += StreamOpened ;
}
// Fired when a new stream has been opened (It does not carry data with it)
static void StreamOpened ( QuicStream stream )
{
stream . OnStreamDataReceived += StreamDataReceived ;
}
// Fired when a stream received full batch of data
static void StreamDataReceived ( QuicStream stream , byte [ ] data )
{
string decoded = Encoding . UTF8 . GetString ( data ) ;
// Send back data to the client on the same stream
stream . Send ( Encoding . UTF8 . GetBytes ( "Ping back from server." ) ) ;
}
static void Main ( string [ ] args )
{
QuicListener listener = new QuicListener ( 11000 ) ;
listener . OnClientConnected += ClientConnected ;
listener . Start ( ) ;
Console . ReadKey ( ) ;
}
}
} using System ;
using System . Text ;
using QuicNet . Connections ;
using QuicNet . Streams ;
namespace QuicNet . Tests . ConsoleClient
{
class Program
{
static void Main ( string [ ] args )
{
QuicClient client = new QuicClient ( ) ;
// Connect to peer (Server)
QuicConnection connection = client . Connect ( "127.0.0.1" , 11000 ) ;
// Create a data stream
QuicStream stream = connection . CreateStream ( QuickNet . Utilities . StreamType . ClientBidirectional ) ;
// Send Data
stream . Send ( Encoding . UTF8 . GetBytes ( "Hello from Client!" ) ) ;
// Wait reponse back from the server (Blocks)
byte [ ] data = stream . Receive ( ) ;
Console . WriteLine ( Encoding . UTF8 . GetString ( data ) ) ;
// Create a new data stream
stream = connection . CreateStream ( QuickNet . Utilities . StreamType . ClientBidirectional ) ;
// Send Data
stream . Send ( Encoding . UTF8 . GetBytes ( "Hello from Client2!" ) ) ;
// Wait reponse back from the server (Blocks)
data = stream . Receive ( ) ;
Console . WriteLine ( Encoding . UTF8 . GetString ( data ) ) ;
Console . ReadKey ( ) ;
}
}
}Quic es un protocolo de capa de transporte estandarizado que se ajusta con RFC 9000 diseñado por Google, con el objetivo de acelerar la transferencia de datos de aplicaciones web orientadas a la conexión. Este protocolo de nivel de aplicación tiene como objetivo cambiar de TCP a UDP mediante el uso de varias técnicas para parecerse a la transferencia de TCP mientras reduce los apretones de manos de la conexión, así como para proporcionar técnicas de multiplexación sensata de manera que diferentes entidades de datos se pueden entrelazar durante la transferencia.
Las conexiones son los canales lógicos de primer nivel que representan una comunicación entre dos puntos finales. Cuando se establece una conexión, se negocia una identificación de conexión entre los dos puntos finales. La ID de conexión se utiliza para identificar la conexión incluso si se producen cambios en las capas de protocolo inferior, como un teléfono que cambia Wi-Fi o cambia de Wi-Fi a datos móviles. Este mecanismo se llama migración de conexión, lo que evita reiniciar el flujo de negociación y la reiniciación de los datos.
Las transmisiones son canales lógicos de segundo nivel que representan flujos de datos. Una sola conexión puede tener un número negociado de transmisiones (8 máximo, por ejemplo) que sirven como entidades de multiplexación. Cada flujo tiene su propia ID de transmisión generada, utilizada para identificar los diferentes objetos de datos que se transfieren. Las transmisiones se cierran cuando se leen todos los datos o se alcanza la transferencia de datos máxima negociada.
Los paquetes son las unidades de transferencia de datos. El encabezado del paquete contiene información sobre la conexión a la que se está enviando este paquete e información criptográfica. Después de eliminar la información de transferencia adicional, lo que queda son los marcos de datos (un paquete puede tener múltiples marcos).
Los marcos son la unidad más pequeña que contiene datos que deben ser transferidos al punto final o los paquetes de protocolo necesarios para acciones como la negociación del apretón de manos, el manejo de errores y el otro.
Siguiendo la bifurcación y tirar del flujo de trabajo de GitHub:
Para más información, lea el contribuyente
Se puede encontrar el Draft Quic-Transport, como se mencionó anteriormente en Quic-Transport.
Para probar el QUIC y encontrar información adicional, puede visitar jugando con Quic.
El código fuente oficial de C ++ se puede encontrar en Proto-Quic.