Das Transmission Control Protocol (TCP) ist der vorherrschende Kommunikationsstandard für das Internet. Jede gesendete E-Mail und jede geladene Webseite wird in Form von TCP-Datenpaketen vom Server zum Client übertragen und verspricht eine zuverlässige Zustellung. TCP sorgt zwar für Ordnung und Integrität, verursacht aber auch einige Ineffizienzen, insbesondere in Bezug auf Geschwindigkeit und Latenzzeit. Beim täglichen Surfen werden Sie dies vielleicht kaum bemerken, aber die Leistung von Echtzeitanwendungen mit hoher Bandbreite wird dadurch erheblich beeinträchtigt. Probleme wie langsamer Start, Head-of-Line-Blocking und zeitaufwändige Handshakes sind hier zu nennen.
Quick UDP Internet Connections (QUIC) ist ein kommendes Protokoll, das die Leistungsprobleme von TCP behebt, indem es die Effizienz steigert und eine anpassungsfähigere und sicherere Grundlage für die digitale Kommunikation bietet. Es basiert auf dem User Datagram Protocol (UDP), das keine Handshakes erfordert und den Overhead für mehr Effizienz minimiert.
In diesem Artikel wird untersucht, wie QUIC auf dem Erbe von TCP aufbaut und davon abweicht und welche praktischen Auswirkungen dies auf die Internetleistung hat. Wir geben auch Tipps zur Überwachung, um sicherzustellen, dass QUIC im Vergleich zu TCP die erforderliche Leistungsverbesserung bringt.
Da wir von Anfang an in die technischen Details eintauchen, ist es ratsam, die Grundlagen aus Kapitel 1 dieses Leitfadens zu wiederholen, bevor Sie loslegen.
QUIC vs. TCP - Zusammenfassung der wichtigsten Unterschiede
Im Folgenden erläutert dieser Artikel die Unterschiede im Detail.
QUIC vs. TCP Unterschiede in der Protokollimplementierung
QUIC und TCP sind für eine zuverlässige Datenübertragung konzipiert, unterscheiden sich jedoch deutlich in ihrem Design und ihrer Implementierung. Beide gewährleisten eine zuverlässige Datenübermittlung und bewältigen Staus, während sie grundsätzlich eine Datenübertragung über Netze hinweg ermöglichen. Es gibt jedoch einige Stellen, an denen beide Unterschiede aufweisen.
- QUIC ermöglicht 0-RTT (zero round trip time) für einen schnelleren Verbindungsaufbau, während TCP einen dreifachen Handshake erfordert, der die Latenzzeit erhöht.
- QUIC unterstützt mehrere unabhängige Datenströme innerhalb einer einzigen Verbindung und reduziert so die Blockierung durch den Kopf der Leitung, während TCP die Datenströme sequentiell verarbeitet.
- QUIC verwendet eine eindeutige Paketnummerierung für alle übertragenen Pakete, so dass ACKs angeben, welche Pakete empfangen wurden. Die TCP ACK-Implementierung führt zu Unklarheiten, da es unklar sein kann, ob ein ACK für neue oder erneut übertragene Daten gilt.
- QUIC verhindert unnötige Verlangsamungen durch die Unterscheidung zwischen tatsächlicher Überlastung und vorübergehender Netzverzögerung. Herkömmliche Slow-Start-Methoden in TCP können zu einer vorzeitigen Verringerung des Überlastungsfensters führen, weil Überlastungssignale falsch interpretiert werden.
QUIC ist im Allgemeinen besser als TCP, mit den folgenden Ausnahmen.
- QUIC reagiert empfindlich auf eine nicht ordnungsgemäße Zustellung von Paketen, interpretiert ein solches Verhalten als Verlust und schneidet deutlich schlechter ab als TCP.
- Die QUIC-Leistung nimmt auf Mobiltelefonen aufgrund von Ressourcenkonflikten ab, während das im Kernel implementierte TCP die Paketverarbeitung auf Geräten mit eingeschränkten Ressourcen effizienter handhabt.
{{banner-6="/design/banners"}}
Flexibilität
Da es sich um ein Protokoll handelt, das im Kernel-Bereich implementiert ist, erfordern alle wesentlichen Änderungen an TCP Änderungen auf der Kernel-Ebene. Dies kann umfangreiche Entwicklungszyklen nach sich ziehen, einschließlich der Neukompilierung des Kernels, Systemneustarts und umfassender Tests, um die Stabilität in verschiedenen Umgebungen zu gewährleisten.
Die Implementierung von Protokollen im Userspace, wie sie QUIC vornimmt, ermöglicht es Entwicklern, ihre Software zu aktualisieren und zu verbessern, ohne den Kernel des Betriebssystems zu verändern. Änderungen können schneller eingeführt werden, da sie keine Aktualisierungen der Kernelversion oder Systemneustarts erfordern. Es ist weniger wahrscheinlich, dass Fehler oder Sicherheitslücken in einer User-Space-Anwendung das gesamte Betriebssystem gefährden. User-Space-Implementierungen können außerdem Ressourcen wie Speicher und CPU dynamisch zuweisen und verwalten, ohne die Verwaltung kritischer Systemressourcen durch den Kernel zu beeinträchtigen.
Nachfolgend finden Sie ein Beispiel für eine QUIC-Implementierung in Rust unter Verwendung der "quiche"-Bibliothek:
//Configuring connections
let mut config = quiche::Config::new(quiche::PROTOCOL_VERSION)?;
config.set_application_protos(&[b"example-proto"]);
// Client connection.
let conn =
quiche::connect(Some(&server_name), &scid, local, peer, &mut config)?;
// Server connection.
let conn = quiche::accept(&scid, None, local, peer, &mut config)?;
//handling incoming connections
let to = socket.local_addr().unwrap();
loop {
let (read, from) = socket.recv_from(&mut buf).unwrap();
let recv_info = quiche::RecvInfo { from, to };
let read = match conn.recv(&mut buf[..read], recv_info) {
Ok(v) => v,
Err(quiche::Error::Done) => {
// Done reading.
break;
},
Err(e) => {
// An error occurred, handle it.
break;
},
};
}
Der obige Code initiiert die Verbindung zum Server, nimmt eine Verbindung von einem Client an, verarbeitet eingehende Daten über das Verbindungsobjekt und verarbeitet später die Pakete. Ausführlichere Code-Beispiele finden Sie in dieser Dokumentation.
{{banner-9="/design/banners"}}
Wiederverwendung der serverseitigen Konfiguration
Jedes Mal, wenn ein Client eine neue Verbindung über TCP herstellt, muss er einen kompletten Handshake-Prozess durchlaufen. Dies beinhaltet die Überprüfung der Anmeldeinformationen des Clients und die Wiederherstellung der Netzwerkparameter, was zu Verzögerungen führt. TCP hat keinen eingebauten Mechanismus zur Speicherung oder Wiederverwendung serverseitiger Konfigurationen für nachfolgende Verbindungen.
QUIC steigert die Effizienz durch die Wiederverwendung der Konfiguration auf dem Server. Wenn ein Client zum ersten Mal eine Verbindung zu einem Server herstellt, ermöglicht QUIC dem Server, bestimmte Konfigurationsdetails zu speichern, z. B. kryptographische Parameter und Verbindungseinstellungen. Diese gespeicherten Informationen können dann schnell für zukünftige Verbindungen desselben Clients wiederverwendet werden, so dass nicht jedes Mal ein kompletter Handshake erforderlich ist und die Reaktionsfähigkeit der Anwendung verbessert wird.
Die nachstehende Funktion sendet Daten an den Server, bevor die Verbindung bei nachfolgenden Verbindungen vollständig hergestellt ist:
config.set_enable_early_data(true);
Weitere Einzelheiten zu den Parametern der obigen Funktion und dem Rückgabetyp finden Sie in den QUIC-Dokumenten.
Anerkennungsbereiche
TCP verlangt im Allgemeinen, dass die Pakete in der Reihenfolge ihres Empfangs bestätigt werden. Selective Acknowledgement (SACK), spezifiziert in RFC 2018, ist eine optionale Funktion, die es TCP ermöglicht, nicht zusammenhängende Blöcke zu bestätigen. Wenn TCP beispielsweise die Pakete 1, 2, 3 und 4 sendet und das Paket 3 verloren geht oder sich verzögert, kann TCP mit SACK die Pakete 1, 2 und 4 bestätigen, so dass das Paket 3 erneut übertragen werden kann. SACK muss jedoch sowohl vom Absender als auch vom Empfänger unterstützt werden.
QUIC hat eine selektive Quittierung eingebaut. Der Ansatz zur Staukontrolle unterscheidet sich von dem von TCP. Wenn TCP einen Paketverlust feststellt, reduziert es häufig sein Überlastungsfenster (die Datenmenge, die es senden kann, bevor es eine Bestätigung benötigt). Im Gegensatz dazu passt QUIC seine Überlastungssteuerung granularer an, um einen höheren Durchsatz zu gewährleisten.
QUIC speichert außerdem detaillierte Zustandsinformationen für jedes Paket, so dass es sein Überlastungsfenster schrittweise anpassen kann, um starke Verkleinerungen zu vermeiden und eine gleichmäßigere Leistung zu gewährleisten. Es verwendet stets einen hybriden Slow-Start-Algorithmus, der die Fenstergröße auf der Grundlage der Echtzeitüberwachung der Umlaufzeiten dynamisch anpasst. Er verhindert unnötige Verlangsamungen, indem er zwischen tatsächlicher Überlastung und vorübergehender Netzverzögerung unterscheidet. Herkömmliche Slow-Start-Methoden in TCP können zu einer vorzeitigen Verringerung des Überlastungsfensters führen, weil Überlastungssignale falsch interpretiert werden.
{{banner-3="/design/banners"}}
Kryptografische Agilität
QUIC behandelt jeden Datenstrom unabhängig. Um die Sicherheit zu erhöhen, werden für jeden Datenstrom eigene Verschlüsselungsschlüssel verwendet. Für die Verschlüsselung wird TLS 1.3 verwendet, das in das Protokoll integriert ist und keine separate Schicht darstellt. In einem separaten Kapitel erfahren Sie alles über die Vorteile von TLS 1.3 im Vergleich zu älteren Protokollen.
QUIC verwendet auch Quelladress-Tokens, eindeutige kryptografische Tokens, die auf der Grundlage früherer Interaktionen zwischen Client und Server erstellt werden. Wenn ein Client eine neue Verbindungsanforderung stellt, fügt er eines dieser Token hinzu, damit der Server überprüfen kann, ob die Anforderung von einer bekannten und zuvor überprüften Quelle stammt und nicht von böswilligem Datenverkehr. Diese Token bieten eine robuste Möglichkeit zur Verhinderung von Replay-Angriffen, bei denen ein Angreifer eine gültige Datenübertragung kopiert und wiederholt, um unerlaubte Injektionsangriffe durchzuführen, bei denen bösartige Daten in den legitimen Datenverkehr eingefügt werden.
Im Gegensatz dazu bietet TCP selbst keine Verschlüsselung; es ist auf TLS angewiesen, um Verbindungen zu sichern. TLS über TCP erfordert ein komplettes Handshake zum Aufbau der TCP-Verbindung vor einem zweiten Handshake für die TLS-Verschlüsselung, was die anfängliche Aufbauzeit erhöht. Dies ist zwar effektiv für die Verschlüsselung von Daten und die Gewährleistung der Integrität der Kommunikation, verhindert jedoch keine Injektionsangriffe, ohne dass zusätzliche Protokolle integriert werden.
Tipps zur Überwachung
Obwohl sich QUIC und TCP in Design und Implementierung unterscheiden, können Sie beide mit denselben Tools und Methoden überwachen. Netzwerkadministratoren können die Auswirkungen auf die Anwendungsleistung und die Benutzerfreundlichkeit genau einschätzen, indem sie beide Protokolle mit konsistenten Metriken unter ähnlichen Bedingungen messen. Im Folgenden werden einige gängige Metriken aufgeführt.
QUIC vs. TCP-Mehrwegeverfahren
Multipath bedeutet die Fähigkeit, mehrere Netzwerkpfade zu verwenden, um Daten zwischen einer Sammlung von IP-Adressen von einer bestimmten Quelle und einem einzigen Ziel über mehrere Pfade zu übertragen. TCP kann Pakete über verschiedene Routen senden, behandelt aber jeden Pfad als eigene Sitzung. Multipath TCP (MPTCP) kann jedoch mehrere Quelladressen zu einer einzigen Sitzung zusammenfassen und ermöglicht die gleichzeitige Nutzung mehrerer Pfade. Dies bedeutet, dass Datenpakete gleichzeitig über verschiedene Routen gesendet werden können, was die Zuverlässigkeit und Leistung der Verbindung insgesamt erhöht.
Multipath QUIC kann auch verschiedene Netzwerkpfade zwischen demselben Client und Server nutzen. So könnte ein mobiles Gerät beispielsweise Wi-Fi- und Mobilfunknetze nutzen, um eine einzige QUIC-Sitzung aufrechtzuerhalten. Ziel ist es, die bestmögliche Leistung zu erzielen und die Latenzzeit zu minimieren. Die QUIC-Multipath-Fähigkeit erhöht auch die verfügbare Gesamtbandbreite und sorgt für Redundanz, so dass der Ausfall eines Pfads die Verbindung nicht unterbricht.
Bei Googles Einsatz von QUIC für den globalen Lastausgleich beispielsweise optimiert QUIC die Datenströme auf der Grundlage der Echtzeit-Netzwerkbedingungen. Es passt die Verkehrsrouten dynamisch an, um Überlastungen zu vermeiden und die Paketverlustraten zu verringern. In ähnlicher Weise nutzt Facebook QUIC, um die Bereitstellung von Live-Videoinhalten für unterbrechungsfreies Streaming zu verbessern, da es auf den effizientesten verfügbaren Pfad wechseln kann, ohne die Verbindung zu unterbrechen.
TCP ist von Natur aus auf einen einzigen Pfad beschränkt, was seine Fähigkeit einschränkt, dynamisch mit Netzübergängen und Überlastungen umzugehen. Multipath TCP (MPTCP), eine Erweiterung von TCP, ermöglicht jedoch die gleichzeitige Nutzung mehrerer Pfade durch eine einzige TCP-Verbindung, was die Bandbreitennutzung verbessert und Redundanz bietet. MPTCP ist jedoch nicht Teil des Standard-TCP und erfordert zusätzliche Einstellungen und Unterstützung sowohl auf dem Client als auch auf dem Server.
{{banner-23="/design/banners"}}
Tipps zur Überwachung
Erfüllt QUIC Ihre Anforderungen an den Mehrwegebetrieb?
- Überwachen Sie Durchsatz und Latenz auf jedem Pfad anhand der Formel Gesamtdatenübertragung/Gesamtzeit. Anhand dieser Metriken lassen sich die leistungsfähigsten Pfade ermitteln, was eine intelligentere Ressourcenzuweisung und Pfadauswahl ermöglicht.
- Analysieren Sie die Leistung vor und nach Pfadanpassungen zu Spitzenzeiten mit Zeitunterschied. Sie gibt Aufschluss darüber, wie sich Netzanpassungen auf den Echtzeit-Datenfluss auswirken.
- Verfolgen Sie Betriebszeit und Zuverlässigkeit unter verschiedenen Netzbedingungen.
Durch die genaue Überwachung dieser Messwerte können Sie sicherstellen, dass Ihr Netz belastbar und reaktionsfähig bleibt und unter allen Bedingungen eine hohe Leistung erbringt.

Migration von QUIC- und TCP-Verbindungen
Die Verbindungsmigration ermöglicht die nahtlose Fortsetzung einer Netzwerkverbindung, auch wenn sich der zugrunde liegende Pfad ändert. Dies ist entscheidend für die Aufrechterhaltung eines unterbrechungsfreien Dienstes, wenn ein Gerät das Netzwerk wechselt, z. B. von Wi-Fi auf Mobilfunknetz.
Die Verbindungsmigration in QUIC hat einen eindeutigen Bezeichner für eine Konversation, den sowohl der Client als auch der Server erkennen, unabhängig davon, wie die Nachricht übermittelt wird. Beim Aufbau einer QUIC-Verbindung wird eine Reihe von Verbindungs-IDs ausgehandelt, die austauschbar verwendet werden können.
TCP-Verbindungen werden anhand der 5-Tupel Client-IP, Client-Port, Server-IP, Server-Port und Protokoll identifiziert und behandelt. Ändert sich eine dieser Angaben, muss die Verbindung neu aufgebaut werden. QUIC erstellt stattdessen eine Verbindungs-ID, die über verschiedene Verbindungen gesendet werden kann. Sie können die Einstellungen wiederverwenden, ohne eine Verbindung von Grund auf neu aufbauen zu müssen. Der Client und der Server handeln eine Reihe von Verbindungs-IDs aus, wenn die Verbindung initiiert wird.
Einfach ausgedrückt, erspart Ihnen die QUIC-Verbindungsmigration die Mühe, eine zuverlässige und sichere Verbindung einzurichten. Herkömmliches TCP erfordert ein Drei-Wege-Handshake. Das kostet Zeit und führt zu einem langsamen Start. Mit QUIC haben Sie den Vorteil, dass Sie nicht den teuren anfänglichen 3-Wege-TCP-Handshake und dann den noch teureren TLS-Handshake durchführen müssen.

Die Rolle von IP in QUIC
QUIC verwendet immer noch IP darunter. Sie benötigen also eine IP-Adresse, um Nachrichten zu senden und zu empfangen. Wenn Sie bei der Verwendung von QUIC eine Verbindung von einer IP-Adresse (IP-Adresse 1 bei Verwendung von Wi-Fi) initiieren, erwarten Sie, dass die Antworten an dieselbe IP-Adresse zurückgehen. Wenn Sie jedoch zu einem anderen Netz wechseln, z. B. von einem Wi-Fi-Netz zu einem mobilen Datennetz (Wechsel zu IP-Adresse 2), können aufgrund dieses Wechsels zunächst einige Antworten ausbleiben.
QUIC behandelt dieses Szenario mit stabilen Verbindungs-IDs. Selbst wenn sich Ihre IP-Adresse ändert, bleibt die Verbindungs-ID dieselbe. Daher erkennt der Server die bestehende Verbindungs-ID, wenn Sie das nächste Mal eine Nachricht senden, auch wenn Sie eine neue IP-Adresse haben. Er weiß, dass während der Umstellung wahrscheinlich einige Pakete verloren gegangen sind und sendet sie entsprechend erneut.
Da Uber ein mobiles Unternehmen ist, ist die Aufrechterhaltung einer stabilen und kontinuierlichen Verbindung bei Netzübergängen (z. B. beim Wechsel von Wi-Fi zu Mobilfunkdaten) für Fahrer und Fahrgäste von entscheidender Bedeutung. Die QUIC-Fähigkeiten zur Verbindungsmigration waren ein wesentlicher Bestandteil, um diese nahtlose Verbindung zu erreichen. Um mehr zu erfahren, besuchen Sie bitte.
Tipps zur Überwachung
Bewertung der Effektivität der QUIC-Verbindungsmigration anhand spezifischer Metriken, die die Auswirkungen auf die Benutzererfahrung und die Netzwerkstabilität widerspiegeln:
Wann sollte QUIC im Vergleich zu TCP verwendet werden?
QUIC kann für Anwendungen eingesetzt werden, bei denen niedrige Latenzzeiten und eine verbesserte Behandlung von Paketverlusten entscheidend sind, einschließlich Umgebungen mit hoher Round-Trip-Time (RTT) und verlustbehafteten Netzwerken. QUIC verkürzt die Verbindungs- und Wiederverbindungszeiten für Dienste, die eine sichere und sofortige Datenübertragung erfordern, wie z. B. Videokonferenzen und Online-Spiele, erheblich,
Es ist auch ideal für Webanwendungen, die mehrere Ressourcen gleichzeitig laden, wie z. B. medienintensive Websites. Seine Fähigkeit, verschiedene Datenströme unabhängig voneinander zu verarbeiten, trägt dazu bei, dass eine Verzögerung in einem Stream (aufgrund von Paketverlusten) das Laden anderer Ressourcen nicht beeinträchtigt.
QUIC ist von Vorteil, wenn Ihre Verbindung instabil ist, da es die Migration von Verbindungen unterstützt. Das heißt, wenn sich die IP-Adresse eines Benutzers ändert, kann die Verbindung fortgesetzt werden, ohne dass sie neu aufgebaut werden muss.
{{banner-15="/design/banners"}}
TCP-Anwendungsfälle
Obwohl die QUIC-Fähigkeiten von Vorteil sind, wird auch TCP weiterentwickelt. Bemühungen wie TCP Fast Open und Verbesserungen bei den Algorithmen zur Staukontrolle (z. B. BBR) zeigen, dass TCP nach wie vor ein in der Entwicklung befindliches Protokoll ist, das sich an neue Netzanforderungen anpasst und neben QUIC seine Bedeutung behält.
Die bewährte Zuverlässigkeit von TCP ist nach wie vor ein bevorzugtes Protokoll in vielen Anwendungsfällen. Seine breite Verwendung und umfassende Unterstützung auf fast allen Plattformen und Netzen machen es zu einer sicheren und stabilen Wahl.
Die umfassende Prüfung des TCP-Verhaltens unter verschiedenen Netzwerkbedingungen macht es zu einer zuverlässigen Wahl für Szenarien, bei denen das Risikomanagement im Vordergrund steht. TCP eignet sich auch besser für Umgebungen, in denen Hardware-Offloading eingesetzt wird, z. B. TCP Segmentation Offload und Large Receive Offload.
In Szenarien, in denen die CPU-Ressourcen begrenzt sind, weil die QUIC-Benutzerraumverarbeitung mehr CPU-Leistung erfordern kann, vor allem bei hohen Bandbreiten. TCP eignet sich besser für unkomplizierte Massendatenübertragungen über zuverlässige und stabile Netze.
Fazit
Die Wahl des richtigen Protokolls, QUIC oder TCP, kann die Effizienz, Sicherheit und Zuverlässigkeit Ihrer Anwendungen erheblich beeinflussen. QUIC geht über die Möglichkeiten von TCP hinaus und eignet sich hervorragend für Umgebungen, die eine schnelle Datenübertragung, verbesserte Sicherheit und hohe Ausfallsicherheit erfordern. TCP ist nach wie vor die beste Wahl für Szenarien, die eine breite Kompatibilität und weniger komplexe Netzwerkanforderungen erfordern. Wenn Sie diese Unterschiede verstehen und die spezifischen Anforderungen Ihrer Anwendungen bewerten, können Sie das Protokoll wählen, das am besten zu Ihren technischen und betrieblichen Zielen passt.