1 Punkte von GN⁺ 2024-06-25 | 1 Kommentare | Auf WhatsApp teilen

Verwende niemals Datagramme.

TCP vs. UDP

  • Bei der Entwicklung von Internetanwendungen muss man sich zwischen TCP und UDP entscheiden.
  • TCP: garantiert eine zuverlässige Datenübertragung.
  • UDP: bietet eine unzuverlässige Datenübertragung.
  • Es gibt nur selten Fälle, in denen eine unzuverlässige Übertragung wirklich nötig ist.

Eigenschaften

  • Software Engineering basiert auf mehreren Schichten von Abstraktion.
  • Jede Schicht stellt bestimmte Eigenschaften bereit, sodass Entwickler nicht alles von Grund auf neu bauen müssen.
  • Entwickler müssen entscheiden, welche Schicht sie verwenden wollen.

„Unzuverlässig“

  • In einem Treffen zur Entwicklung eines Echtzeit-Video-Protokolls wurde die Meinung geäußert, SUBSCRIBE müsse unzuverlässig sein.
  • Tatsächlich wird aber Timeliness benötigt.
  • Bei Echtzeit-Video ist es wichtig, aktuelle Daten bevorzugt zu übertragen.

Datagramme

  • Ein Datagramm (IP-Paket) ist eine Einheit von Daten, die von einer Quelladresse zu einer Zieladresse übertragen wird.
  • Datagramme können verloren gehen oder in falscher Reihenfolge ankommen.
  • Der Grund für den Einsatz von Datagrammen ist, dass es bei Netzwerküberlastung oft besser ist, Pakete zu verwerfen.

Warteschlangen im Internet

  • Wenn das Netzwerk überlastet ist, ist das Verwerfen von Paketen üblich.
  • Pakete in eine Warteschlange zu stellen und später zu übertragen, kann zum Problem des Bufferbloat führen.
  • Bufferbloat bedeutet, dass sich alle Pakete in der Warteschlange stauen und die Timeliness beeinträchtigen.

Du als Anwendungsentwickler

  • Wer UDP direkt verwendet, kann auf viele Probleme stoßen.
  • Wenn man auf UDP ein eigenes Transportprotokoll aufbauen will, muss man Neuübertragungen, Congestion Control usw. selbst implementieren.
  • Die Nutzung einer QUIC-Bibliothek ist die bessere Wahl.

Timeliness

  • Mit QUIC lässt sich Timeliness erreichen.
    1. Puffer leeren: Über Congestion Control werden Warteschlangen erkannt und die Sendegeschwindigkeit reduziert.
    2. Daten in Streams aufteilen: Jeder Stream wird unabhängig übertragen.
    3. Streams priorisieren: Wichtige Streams werden bevorzugt zugestellt.

Verteidigung der Datagramme

  • QUIC und MoQ unterstützen Datagramme.
  • Die Unterstützung von Datagrammen ist wichtig, um Experimente zu ermöglichen.
  • Dennoch kann die Verwendung von Datagrammen eine Falle sein.

Fazit

  • Anwendungen sollten nicht auf Datagrammen aufgebaut werden.
  • Statt ein weiteres Video-Protokoll auf UDP zu entwickeln, ist es besser, sich an Media over QUIC zu beteiligen.

Meinung von GN⁺

  1. Die Bedeutung von Timeliness: In Echtzeitanwendungen ist die rechtzeitige Übertragung von Daten entscheidend. UDP kann geeigneter sein als TCP, erfordert aber zusätzliche Überlegungen wie Congestion Control.
  2. Vorteile von QUIC: QUIC gleicht die Nachteile von UDP aus und bietet zugleich hohe Leistung. Es eignet sich besonders für Echtzeit-Video-Streaming.
  3. Das Bufferbloat-Problem: Bei Netzwerküberlastung können in Warteschlangen gestaute Pakete die Timeliness beeinträchtigen. Um das zu vermeiden, ist Congestion Control notwendig.
  4. Grenzen von Datagrammen: Datagramme eignen sich für Echtzeitübertragung, aber wenn Zuverlässigkeit und Reihenfolge garantiert sein müssen, ist ein Protokoll wie QUIC die bessere Wahl.
  5. Die Bedeutung der richtigen Technologiewahl: Es ist wichtig, ein geeignetes Transportprotokoll passend zu den Anforderungen einer Anwendung auszuwählen. Eine falsche Wahl kann zu Leistungseinbußen und einer schlechteren User Experience führen.

1 Kommentare

 
GN⁺ 2024-06-25
Hacker-News-Kommentare
  • Probleme mit TCP: TCP hat viele Probleme in Umgebungen, die hohe Bandbreite und geringe Latenz erfordern. Auch in Netzwerken mit geringer Bandbreite und hoher Latenz ist es ineffizient.
  • Einsatzfälle für UDP: Für das Streaming hochfrequenter Sensordaten wird UDP verwendet; es gibt auch Fälle, in denen Probleme über QUIC gelöst wurden.
  • Terminologie zu UDP: Es ist passender, UDP nicht als „unzuverlässig“, sondern als „Best Effort“ zu beschreiben.
  • Probleme der Stream-Abstraktion: Die Stream-Abstraktion macht Programme fragiler, und die Wiederherstellung nach Verbindungsabbrüchen ist langsam. Ein Datagramm-basierter Ansatz kann effizienter sein.
  • UDP-Paketverluste: Bei Netzüberlastung werden UDP-Pakete zuerst verworfen. Dabei wird auf Probleme mit Neuübertragungen in QUIC hingewiesen.
  • Clickbait-Titel: Ein Versuch, die Hacker-News-Richtlinie einzuhalten, wonach der Titel eines Artikels aus dem Original übernommen werden soll.
  • Unterschied zwischen TCP und UDP: TCP bietet Zuverlässigkeit, UDP Geschwindigkeit und Effizienz. Man sollte die Eigenschaften beider Protokolle verstehen und entsprechend einsetzen.
  • Datagramm-basierte Einsatzfälle: Für lokale Discovery, Broadcast und Paketkapselung ist der Einsatz von Datagrammen geeignet.
  • Empfehlung für die Nutzung von Datagrammen: Sitzungsbasierte Verbindungen sind zwar üblich, aber auch die Nutzung von Datagrammen ist sinnvoll. Es ist eine gute Gelegenheit, die Low-Level-Aspekte des Networkings kennenzulernen.