TCP blockiert den Head-of-Queue, da es eine vollständige und ordnungsgemäße Zustellung garantiert. Wenn ein Paket während der Übertragung verloren geht, muss es auf eine erneute Übertragung des fehlenden Pakets warten, während UDP Pakete an die Anwendung übermittelt, sobald sie ankommen , einschließlich Duplikate und ohne jegliche Garantie, dass ein Paket überhaupt ankommt oder in welcher Reihenfolge es ankommt (es handelt sich im Wesentlichen um IP mit Portnummern und einer (optionalen) hinzugefügten Nutzlastprüfsumme), aber das ist zum Beispiel für Telefonie in Ordnung, wo es normalerweise ist Es spielt einfach keine Rolle, wenn ein paar Millisekunden Audio fehlen, aber die Verzögerung ist sehr ärgerlich, sodass Sie sich nicht um erneute Übertragungen kümmern, sondern nur Duplikate ablegen und neu angeordnete Pakete für einige hundert Millisekunden Jitterpuffer in der richtigen Reihenfolge sortieren und wenn Pakete nicht rechtzeitig oder überhaupt nicht angezeigt werden, werden sie einfach übersprungen.möglich interpoliert, wo vom Codec unterstützt.
Ein wesentlicher Teil von TCP ist auch die Flusskontrolle, um sicherzustellen, dass Sie so viel Durchsatz wie möglich erhalten, ohne jedoch das Netzwerk zu überlasten (was irgendwie redundant ist, da ein überlastetes Netzwerk Ihre Pakete verwirft, was bedeutet, dass Sie dies tun müssen Neuübertragungen, was den Durchsatz beeinträchtigt), UDP hat nichts davon - was für Anwendungen wie Telefonie sinnvoll ist, da Telefonie mit einem bestimmten Codec eine bestimmte Bandbreite benötigt, Sie sie nicht "verlangsamen" können und auch zusätzliche Bandbreite macht den Anruf nicht schneller.
Zusätzlich zu Echtzeitanwendungen / Anwendungen mit geringer Latenz ist UDP für sehr kleine Transaktionen wie DNS-Lookups sinnvoll, da es weder hinsichtlich der Latenz noch hinsichtlich der Bandbreitennutzung über den Aufbau und den Abbau von TCP-Verbindungen verfügt. Wenn Ihre Anfrage kleiner als eine typische MTU ist und die Antwort wahrscheinlich auch ist, können Sie in einem Roundtrip durchgeführt werden, ohne dass ein Status auf dem Server beibehalten werden muss, und die Flusskontrolle als Bestellung und all das ist wahrscheinlich nicht besonders nützlich für solche Zwecke entweder.
Und dann können Sie natürlich UDP verwenden, um Ihre eigenen TCP-Ersetzungen zu erstellen, aber ohne ein tiefes Verständnis der Netzwerkdynamik ist dies wahrscheinlich keine gute Idee. Moderne TCP-Algorithmen sind ziemlich ausgefeilt.
Ich denke auch, dass erwähnt werden sollte, dass es mehr als UDP und TCP gibt, wie SCTP und DCCP. Das einzige Problem besteht derzeit darin, dass das (IPv4-) Internet voll von NAT-Gateways ist, die es unmöglich machen, andere Protokolle als UDP und TCP in Endbenutzeranwendungen zu verwenden.