Passa al contenuto principale

RFC 9298 - Proxying di UDP in HTTP

Internet Engineering Task Force (IETF) D. Schinazi Request for Comments: 9298 Google LLC Category: Standards Track August 2022 ISSN: 2070-1721

                      Proxying di UDP in HTTP

Astratto

Questo documento descrive come eseguire il proxying di UDP in HTTP, in modo simile a come il metodo HTTP CONNECT consente il proxying di TCP in HTTP. Più specificamente, questo documento definisce un protocollo che consente a un client HTTP di creare un tunnel per le comunicazioni UDP attraverso un server HTTP che agisce come proxy.

Stato di questo memorandum

Questo è un documento Internet Standards Track.

Questo documento è un prodotto della Internet Engineering Task Force (IETF). Rappresenta il consenso della comunità IETF. Ha ricevuto una revisione pubblica ed è stato approvato per la pubblicazione dall'Internet Engineering Steering Group (IESG). Ulteriori informazioni sugli standard Internet sono disponibili nella Sezione 2 della RFC 7841.

Informazioni sullo stato attuale di questo documento, eventuali errata e come fornire feedback su di esso possono essere ottenute all'indirizzo https://www.rfc-editor.org/info/rfc9298.

Avviso di copyright

Copyright (c) 2022 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.

Sommario

  1. Introduzione 1.1. Convenzioni e definizioni

  2. Configurazione del client

  3. Tunneling UDP su HTTP 3.1. Gestione del proxy UDP 3.2. Richiesta HTTP/1.1 3.3. Risposta HTTP/1.1 3.4. Richieste HTTP/2 e HTTP/3 3.5. Risposte HTTP/2 e HTTP/3

  4. Identificatori di contesto

  5. Formato del payload del datagramma HTTP

  6. Considerazioni sulle prestazioni 6.1. Considerazioni sull'MTU 6.2. Tunneling dei contrassegni ECN

  7. Considerazioni sulla sicurezza

  8. Considerazioni IANA 8.1. Token di aggiornamento HTTP 8.2. URI ben noto

  9. Riferimenti 9.1. Riferimenti normativi 9.2. Riferimenti informativi Ringraziamenti Indirizzo dell'autore

  10. Introduzione

Mentre HTTP fornisce il metodo CONNECT (vedere la Sezione 9.3.6 di [HTTP]) per creare un tunnel TCP [TCP] verso un proxy, mancava un metodo per farlo per il traffico UDP [UDP] prima di questa specifica.

Questo documento descrive un protocollo per il tunneling di UDP verso un server che agisce come proxy specifico per UDP su HTTP. I tunnel UDP sono comunemente usati per creare una connessione virtuale end-to-end, che può quindi essere protetta utilizzando QUIC [QUIC] o un altro protocollo in esecuzione su UDP. A differenza del metodo HTTP CONNECT, il proxy UDP stesso è identificato con un URL assoluto contenente la destinazione del traffico. I client generano tali URL utilizzando un modello URI [TEMPLATE], come descritto nella Sezione 2.

Questo protocollo supporta tutte le versioni esistenti di HTTP utilizzando i datagrammi HTTP [HTTP-DGRAM]. Quando si utilizza HTTP/2 [HTTP/2] o HTTP/3 [HTTP/3], utilizza HTTP Extended CONNECT come descritto in [EXT-CONNECT2] e [EXT-CONNECT3]. Quando si utilizza HTTP/1.x [HTTP/1.1], utilizza HTTP Upgrade come definito nella Sezione 7.8 di [HTTP].

1.1. Convenzioni e definizioni

Le parole chiave "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY" e "OPTIONAL" in questo documento devono essere interpretate come descritto in BCP 14 [RFC2119] [RFC8174] quando, e solo quando, appaiono in maiuscolo, come mostrato qui.

In questo documento, utilizziamo il termine "proxy UDP" per fare riferimento al server HTTP che agisce sulla richiesta di tunneling UDP del client per aprire un socket UDP verso un server di destinazione e che genera la risposta a questa richiesta. Se ci sono intermediari HTTP (come definito nella Sezione 3.7 di [HTTP]) tra il client e il proxy UDP, questi sono indicati come "intermediari" in questo documento.

Si noti che, quando la versione HTTP in uso non supporta il multiplexing dei flussi (come HTTP/1.1), qualsiasi riferimento a "flusso" in questo documento rappresenta l'intera connessione.