{"id":12206,"date":"2021-02-18T17:16:56","date_gmt":"2021-02-18T16:16:56","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=12206"},"modified":"2023-06-18T18:08:18","modified_gmt":"2023-06-18T16:08:18","slug":"quic-die-zukunft","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/","title":{"rendered":"QUIC &#8211; Die Zukunft?"},"content":{"rendered":"\n<p>QUIC soll als neuer Standard das weit verbreitete TCP-Protokoll abl\u00f6sen. Welche Neuerungen QUIC mitbringt, wo seine St\u00e4rken liegen und warum \u00fcberhaupt eine Weiterentwicklung von TCP ben\u00f6tigt wird, versuche ich in diesem Artikel zu beantworten.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h3 class=\"wp-block-heading\">QUIC allgemein<\/h3>\n\n\n\n<p>Um zu verstehen, was QUIC ist und was es verbessern m\u00f6chte, muss man zuerst einen Blick auf die heute verwendeten Protokolle werfen.<br>In den meisten F\u00e4llen stellt man heute eine Anfrage \u00fcber das HTTP\/2 Protokoll, das auf dem Transportprotokoll TCP basiert. Dieses wird als Basis verwendet, da es sich um ein robustes und zuverl\u00e4ssiges Protokoll handelt. Wenn ein TCP-Paket seinen Empf\u00e4nger nicht erreicht, wird das verloren gegangene Paket erneut angefordert. Dar\u00fcber hinaus garantiert TCP, dass die empfangenen Pakete in der selben Reihenfolge verarbeitet werden, in der sie versendet wurden.<br>HTTP\/2 und TCP sind Protokolle, die keine Verschl\u00fcsselung implementiert haben. Damit trotzdem verschl\u00fcsselt \u00fcbertragen werden kann, wird im Fall von HTTPS zus\u00e4tzlich TLS zur Verschl\u00fcsselung eingesetzt. [4]<\/p>\n\n\n\n<p>QUIC ist dahingegen ein Protokoll, dass nicht mehr auf TCP sondern auf UDP aufbaut. UDP ist im Vergleich zu TCP nicht robust und zuverl\u00e4ssig. Der Ansatz von UDP entspricht eher dem &#8220;&#8216;Fire and Forget&#8221;&#8216; Ansatz. [1] Geht ein UDP Paket beispielsweise auf dem Weg zum Empf\u00e4nger verloren, wird dieses nicht erneut angefordert. Auch die Reihenfolge der empfangenen Pakete ist irrelevant.<br>UDP hat sich vor allem im Bereich des Streamings durchgesetzt. Wenn innerhalb eines Frames f\u00fcr einen einzelnen Pixel nicht alle Informationen empfangen wurden, ist dies nicht schlimm, da das menschliche Auge diesen Fehler mit recht hoher Wahrscheinlichkeit gar nicht erst wahr nimmt.<br>Dar\u00fcber hinaus besitzt UDP keinen Verbindungs-Handshake, wie das bei TCP der Fall ist (3-Way-Handshake).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/ISO-OSI_Spaces.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"429\" data-attachment-id=\"12236\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/iso-osi_spaces\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/ISO-OSI_Spaces.png\" data-orig-size=\"1835,768\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"ISO-OSI_Spaces\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/ISO-OSI_Spaces-1024x429.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/ISO-OSI_Spaces-1024x429.png\" alt=\"\" class=\"wp-image-12236\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/ISO-OSI_Spaces-1024x429.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/ISO-OSI_Spaces-300x126.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/ISO-OSI_Spaces-768x321.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/ISO-OSI_Spaces-1536x643.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/ISO-OSI_Spaces.png 1835w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Vereinfachtes ISO\/OSI Schichtenmodell<\/figcaption><\/figure>\n\n\n\n<p>Da QUIC der Nachfolger von TCP werden soll, kann man sich an dieser Stelle berechtigterweise die Frage stellen, warum UDP als Basis verwendet wird. Es w\u00e4re auf den ersten Blick sicherlich logischer das TCP Protokoll weiterzuentwickeln. Dies f\u00fchrt aber zu einem entscheidenden Nachteil.<br>TCP liegt genauso, wie UDP und alle darunterliegenden Protokolle, wie beispielsweise IP, im sogenannten Kernel-Space. Dieser ist ein Teil des Betriebssystems. Beim \u00c4ndern der im Kernel-Space implementierten Protokolle muss daher der Kernel und damit das gesamte Betriebssystem, aktualisiert werden. Bei Millionen an Middle-Boxes, die unsere Anfragen durch das Internet routen, w\u00fcrde es Jahre dauern die teilweise heute schon stark veralteten Middle-Boxes zu aktualisieren. [1][2]<\/p>\n\n\n\n<p>QUIC ist im sogenannten User-Space implementiert. Das bedeutet, dass QUIC auf Anwendungsebene, wie beispielsweise in einem Browser, implementiert ist. Bei \u00c4nderungen des Protokolls muss daher auch nicht der Kernel-Space angepasst werden.<br>Einerseits hat dies den Vorteil, dass nicht erst alle Middle-Boxes aktualisiert werden m\u00fcsse. UDP ist bereits ein weitverbreitetes Protokoll und wird fl\u00e4chendeckend unterst\u00fctzt. Auf der anderen Seite k\u00f6nnen \u00c4nderungen deutlich schneller ausgespielt werden, wenn daf\u00fcr zum Beispiel nur die Aktualisierung des Browsers notwendig ist. Tests werden hierdurch auch vereinfacht. [1][2]<\/p>\n\n\n\n<p>Damit QUIC dieselbe Robustheit und Zuverl\u00e4ssigkeit wie TCP erreicht, m\u00fcssen die entsprechende Algorithmen in QUIC implementiert werden. Aus diesem Grund kann auch das unzuverl\u00e4ssigere aber flexiblere Protokoll UDP als Basis verwendet werden.<br>Zusammenfassend kann man sagen, dass QUIC die Schnelligkeit von UDP mit der Robustheit und der Zuverl\u00e4ssigkeit von TCP vereinen m\u00f6chte. [2]<\/p>\n\n\n\n<p>Eine weiter \u00c4nderung, die sich durch die Verwendung von QUIC und damit auch bei der Verwendung von HTTP\/3 ergibt, ist die standardm\u00e4\u00dfige Verschl\u00fcsselung. Bei den vorherigen HTTP-Versionen (HTTP 1.0, HTTP 1.1 und HTTP\/2) musste TLS als zus\u00e4tzliches Protokoll zur Verschl\u00fcsselung eingebunden werden.<br>Da QUIC selbst schon Algorithmen beinhaltet, die Multiplexing (Zusammenfassen) von Verbindungen erlaubt, muss eine neue HTTP Version (HTTP\/3) entwickelt werden. Diese hat einen geringeren Funktionsumfang als HTTP\/2, da neben dem Multiplexing von Verbindungen auch bereits Funktionalit\u00e4t zum Verbindungsmanagement in QUIC implementiert ist. [2]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Initialer Verbindungsaufbau<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http2_handshake.png\"><img loading=\"lazy\" decoding=\"async\" width=\"968\" height=\"994\" data-attachment-id=\"12237\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/http2_handshake\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http2_handshake.png\" data-orig-size=\"968,994\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"http2_handshake\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http2_handshake.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http2_handshake.png\" alt=\"\" class=\"wp-image-12237\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http2_handshake.png 968w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http2_handshake-292x300.png 292w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http2_handshake-768x789.png 768w\" sizes=\"auto, (max-width: 968px) 100vw, 968px\" \/><\/a><figcaption>HTTP\/2 Handshake [4]<\/figcaption><\/figure>\n\n\n\n<p>Wenn man mit HTTP\/2 eine Webseite aufrufen m\u00f6chte, muss zun\u00e4chst die TCP-Verbindung aufgebaut werden. Dabei wird der sogenannte 3-Way-Handshake des TCP-Protokolls ausgef\u00fchrt. Im ersten Schritt sendet der Client eine Anfrage (SYN) an den Server. Wenn dieser die Verbindung annimmt, antwortet er dem Client (SYN+ACK), dass er bereit ist Daten zu empfangen. Der Client muss daraufhin dem Server best\u00e4tigen, dass er dessen Antwort erhalten hat. Wenn diese Nachricht beim Server ankommt, ist der 3-Way-Handshake abgeschlossen und Nachrichten k\u00f6nnen \u00fcber TCP ausgetauscht werden.<br>Nach dem Aufbauen der TCP Verbindung muss zwischen dem Client und dem Server noch die Verschl\u00fcsselung mit TLS aufgebaut werden. Der Aufbau ben\u00f6tigt genauso, wie der Verbindungsaufbau von TCP, drei Nachrichten. [3][4]<\/p>\n\n\n\n<p>An dieser Stelle befindet sich bereits ein Problem. Das eigentliche Anliegen, also die HTTP-Anfrage an den Server wird erst nach diesem initialen Verbindungsaufbau an den Server gesendet. Umso mehr Pakete beim initialen Verbindungsaufbau \u00fcbertragen werden m\u00fcssen, desto l\u00e4nger dauert es, bis die eigentliche Anfrage beantwortet wird.<br>Dies f\u00fchrt vor allem dann zu Problemen, wenn ein Server sehr weit von einem Client entfernt ist. Durch die gro\u00dfe Entfernung kann die Latenz der Verbindung sehr hoch sein, was zu langen \u00dcbertragungszeiten f\u00fchrt. Verbunden mit der gro\u00dfen Anzahl an Paketen, die f\u00fcr den initialen Verbindungsaufbau ben\u00f6tigt werden, k\u00f6nnen Anfragen sehr lange dauern. Mit weniger Paketen, die \u00fcbertragen werden m\u00fcssen, k\u00f6nnte die Anfrage schneller beantwortet werden. [1]<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http3_handshake.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"734\" data-attachment-id=\"12238\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/http3_handshake\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http3_handshake.png\" data-orig-size=\"1038,744\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"http3_handshake\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http3_handshake-1024x734.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http3_handshake-1024x734.png\" alt=\"\" class=\"wp-image-12238\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http3_handshake-1024x734.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http3_handshake-300x215.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http3_handshake-768x550.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/http3_handshake.png 1038w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>HTTP\/3 Handshake [4]<\/figcaption><\/figure>\n\n\n\n<p>An diesem Problem setzt QUIC an.<br>Initial besitzt UDP keinen Verbindungsaufbau. Um QUIC jedoch zuverl\u00e4ssiger zu machen, gibt es an dieser Stelle auch eine Art 3-Way-Handshake. Die Besonderheit an dieser Stelle ist jedoch, dass im Rahmen dieses Handshakes auch die Verschl\u00fcsselung aufgebaut wird. Nach dem Verbindungsaufbau kann dann die eigentliche HTTP-Anfrage \u00fcbertragen werden.<br>Unter HTTP\/2 wird im Vergleich dazu die TLS-Verschl\u00fcsselung erst nach dem Einrichten der Verbindung aufgebaut. [4]<br>Insgesamt bedeutet die Umstellung auf QUIC eine Halbierung der Paket, die f\u00fcr den initialen Verbindungsaufbau notwendig sind. Damit verbunden dauert der Handshake in der Theorie auch nur halb so lange.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">HTTP<\/h3>\n\n\n\n<p>Ein weiterer Grund f\u00fcr die Einf\u00fchrung von QUIC ist das sogenannte Head-of-Line Blocking. Dieses ist am Besten zu verstehen, wenn man die Entwicklung des HTTP Protokolls n\u00e4her betrachtet.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">HTTP 1.0<\/h4>\n\n\n\n<p>Bei der Verwendung von HTTP 1.0 muss f\u00fcr jeden Request eine neue eigene Verbindung aufgebaut werden. Das bedeutet, dass zwei Anfragen an den selben Server jeweils ihre eigene HTTP-Verbindung aufbauen m\u00fcssen. Dies beinhaltet pro Verbindung einen eigenen TCP- und TLS-Handshake. [4]<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">HTTP 1.1<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP11.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"188\" data-attachment-id=\"12240\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/http11\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP11.jpg\" data-orig-size=\"960,188\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"HTTP11\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP11.jpg\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP11.jpg\" alt=\"\" class=\"wp-image-12240\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP11.jpg 960w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP11-300x59.jpg 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP11-768x150.jpg 768w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><figcaption>Anfagen mehrerer Ressourcen unter HTTP 1.1 [4]<\/figcaption><\/figure>\n\n\n\n<p>Da ein HTTP-Verbindungsaufbau durch seine Dauer ein recht &#8220;&#8216;teures&#8221;&#8216; Vorhaben ist, wurde mit HTTP 1.1 die Idee verfolgt, Verbindungen wiederzuverwenden. Bei der Verwendung von HTTP 1.1 werden daher alle Anfragen an den selben Server \u00fcber eine TCP-Verbindung gesendet. Dabei werden die Anfragen sequenziell an den Server gesendet.<br>Dies bedeutet jedoch, dass man Ressourcen nur nacheinander anfragen kann, was in einem Performancenachteil resultiert. Beim Aufrufen einer Website werden oftmals mehrere Ressourcen ben\u00f6tigt und angefragt. Tests haben ergeben, dass das parallele Anfragen dieser, trotz des mehrfachen Verbindungsaufbaus schneller ist, als das sequenzielle Anfragen der Daten \u00fcber eine TCP-Verbindung. Aus diesem Grund wird das Feature kaum eingesetzt. [4]<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">HTTP\/2<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP2.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"188\" data-attachment-id=\"12242\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/http2\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP2.jpg\" data-orig-size=\"960,188\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"HTTP2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP2.jpg\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP2.jpg\" alt=\"\" class=\"wp-image-12242\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP2.jpg 960w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP2-300x59.jpg 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/HTTP2-768x150.jpg 768w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><figcaption>Multiplexung unter HTTP\/2 [4]<\/figcaption><\/figure>\n\n\n\n<p>Mit HTTP\/2 wurde dann Multiplexing eingef\u00fchrt. Multiplexing ist das Zusammenfassen mehrerer Verbindungen zu einer Verbindung. Der Unterschied zu den mit HTTP 1.1 eingef\u00fchrten \u00c4nderungen ist, dass nun parallele Anfragen \u00fcber eine Verbindung m\u00f6glich sind. Die Ressourcen m\u00fcssen nicht mehr sequenziell angefragt werden. Das hei\u00dft, dass nur noch eine Verbindung aufgebaut werden muss, \u00fcber welche Anfragen gestellt werden k\u00f6nnen. Die Besonderheit an dieser Stelle ist, dass nicht mehr auf Ergebnisse vorheriger Anfragen gewartet werden muss. <br>Durch das Multiplexing ergibt sich jedoch nun ein neues Problem: Head-of-Line Blocking. [4]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Head-of-Line Blocking<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"263\" data-attachment-id=\"12244\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/head_of_line_blocking_1\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_1.png\" data-orig-size=\"1662,427\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"head_of_line_blocking_1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_1-1024x263.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_1-1024x263.png\" alt=\"\" class=\"wp-image-12244\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_1-1024x263.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_1-300x77.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_1-768x197.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_1-1536x395.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_1.png 1662w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Head-of-Line Blocking (1) [4]<\/figcaption><\/figure>\n\n\n\n<p>Beim Head-of-Line Blocking handelt es sich um das Blockieren der Verarbeitung bereits empfangener Pakete, durch den Verlust eines vorherigen Pakets.<br>Ein HTTP\/2-Server stellt bei einer Anfrage, die Ressourcen bereit und zerteilt diese in einzelne TCP Pakete. Die TCP Pakete werden daraufhin zum Client zur\u00fcckgesendet. Dabei kann es sein, dass das erste \u00fcbermittelte Paket von Ressource-A stammt und das zweite \u00fcbermittelte Paket zu einer ganz anderen Ressource geh\u00f6rt. Wenn der Server die Antwort-Pakete nun verschickt, kann es dazu kommen, dass irgendeine Middlebox im Internet eines der Pakete fallen l\u00e4sst. Die anderen Pakete werden ganz normal an den Empf\u00e4nger \u00fcbermittelt. [4]<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"263\" data-attachment-id=\"12246\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/head_of_line_blocking_2\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_2.png\" data-orig-size=\"1662,427\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"head_of_line_blocking_2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_2-1024x263.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_2-1024x263.png\" alt=\"\" class=\"wp-image-12246\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_2-1024x263.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_2-300x77.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_2-768x197.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_2-1536x395.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_2.png 1662w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Head-of-Line Blocking (2) [4]<\/figcaption><\/figure>\n\n\n\n<p>Das TCP-Protokoll garantiert, dass die empfangenen Pakete in der Reihenfolge verarbeitet werden, in der sie versendet wurden. Im Fall des verloren gegangenen Pakets kann genau dies zum Problem werden. Bevor bereits empfangene Pakete verarbeitet werden k\u00f6nnen, die erst nach dem verloren Paket versandt wurden, muss das verlorene Paket nachgefordert werden. Dies blockiert die gesamte Verarbeitung der nachfolgenden Pakete, auch wenn diese komplett unabh\u00e4ngige Daten beinhalten. Von der Unabh\u00e4ngigkeit wei\u00df TCP jedoch gar nichts, da das Multiplexing Teil des HTTP\/2 Protokolls ist. [4]<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">QUIC &#8211; kein Head-of-Line Blocking<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_quic.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"263\" data-attachment-id=\"12248\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/head_of_line_blocking_quic\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_quic.png\" data-orig-size=\"1662,427\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"head_of_line_blocking_quic\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_quic-1024x263.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_quic-1024x263.png\" alt=\"\" class=\"wp-image-12248\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_quic-1024x263.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_quic-300x77.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_quic-768x197.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_quic-1536x395.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/head_of_line_blocking_quic.png 1662w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Multiplexing bei der Verwendung von HTTP\/3 [4]<\/figcaption><\/figure>\n\n\n\n<p>Bei QUIC tritt das Head-of-Line Blocking nicht mehr auf. Dies liegt an der Verwendung von UDP. Auf der einen Seite besitzt UDP keinen Mechanismus um verlorene Pakete erneut anzufordern. Auf der anderen Seite spielt es bei der Verwendung von UDP-Paketen keine Rolle, in welcher Reihenfolge die Pakete verarbeitet werden.<br>Wenn ein Paket verloren gehen sollte, k\u00f6nnen bereits empfangene Pakete auf QUIC-Ebene schon weiterverarbeitet werden. Separat hiervon kann das verloren gegangene Paket nun von QUIC neu angefordert werden. [4]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Performancetests<\/h3>\n\n\n\n<p>Interessant ist im n\u00e4chsten Schritt, ob diese theoretischen \u00dcberlegungen in der Praxis tats\u00e4chlich Performance-Verbesserungen hervorrufen. Aus diesem Grund wurden unter anderem von Cloudflare einige Performancetests durchgef\u00fchrt.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Handshake<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/handshake_performance.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"197\" data-attachment-id=\"12250\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/handshake_performance\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/handshake_performance.png\" data-orig-size=\"1999,384\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"handshake_performance\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/handshake_performance-1024x197.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/handshake_performance-1024x197.png\" alt=\"\" class=\"wp-image-12250\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/handshake_performance-1024x197.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/handshake_performance-300x58.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/handshake_performance-768x148.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/handshake_performance-1536x295.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/handshake_performance.png 1999w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Time to first byte &#8211; HTTP\/2 und HTTP\/3 Handshake [6]<\/figcaption><\/figure>\n\n\n\n<p>QUIC halbiert die Anzahl der Nachrichten, die f\u00fcr den initialen Verbindungsaufbau notwendig sind. Um zu messen, welcher Verbindungsaufbau schneller ist wurde die &#8220;time to first byte&#8221;, also die Zeit bis das erste Byte \u00fcbertragen wird verglichen. Das Aufbauen der HTTP\/2 Verbindung hat dabei im Schnitt 201 ms gedauert. Der HTTP\/3-Verbindungsaufbau war im Vergleich dazu mit 176 ms im Durchschnitt 12,4 % schneller. [6]<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Synthetische Performancetests<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_15KB.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"187\" data-attachment-id=\"12252\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/synthetic_test_15kb\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_15KB.png\" data-orig-size=\"1999,366\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"synthetic_test_15KB\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_15KB-1024x187.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_15KB-1024x187.png\" alt=\"\" class=\"wp-image-12252\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_15KB-1024x187.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_15KB-300x55.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_15KB-768x141.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_15KB-1536x281.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_15KB.png 1999w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Performancetests &#8211; Latenz bei 15KB Nachrichten [6]<\/figcaption><\/figure>\n\n\n\n<p>Danach wurde die Performance der Nachrichten\u00fcbertragung mit synthetischen Performancetests ermittelt. Dabei misst man die \u00dcbertragungsgeschwindigkeit der Paketen mit einer festen Paketgr\u00f6\u00dfe. Der erste Test umfasste HTTP\/2 und HTTP\/3 Pakete mit einer Gr\u00f6\u00dfe von 15 KB.<br>Im Durchschnitt ist HTTP\/3 mit QUIC bei diesem Test 15ms schneller als HTTP\/2 mit TCP. [6]<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_1MB.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"197\" data-attachment-id=\"12253\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/synthetic_test_1mb\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_1MB.png\" data-orig-size=\"1999,385\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"synthetic_test_1MB\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_1MB-1024x197.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_1MB-1024x197.png\" alt=\"\" class=\"wp-image-12253\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_1MB-1024x197.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_1MB-300x58.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_1MB-768x148.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_1MB-1536x296.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_1MB.png 1999w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Performancetests &#8211; Latenz bei 1MB Nachrichten [6]<\/figcaption><\/figure>\n\n\n\n<p>Der n\u00e4chste Test umfasste Nachrichten mit einer Gr\u00f6\u00dfe von 1 MB. Dabei stellte sich heraus, dass HTTP\/2 mit TCP besser performt als HTTP\/3 mit QUIC. Im Durchschnitt wurden die Nachrichten in diesem Test mit HTTP\/2 und TCP 27ms schneller empfangen als bei HTTP\/3. [6]<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_5MB.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"202\" data-attachment-id=\"12254\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/synthetic_test_5mb\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_5MB.png\" data-orig-size=\"1999,394\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"synthetic_test_5MB\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_5MB-1024x202.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_5MB-1024x202.png\" alt=\"\" class=\"wp-image-12254\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_5MB-1024x202.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_5MB-300x59.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_5MB-768x151.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_5MB-1536x303.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/synthetic_test_5MB.png 1999w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Performancetests &#8211; Latenz bei 5MB Nachrichten [6]<\/figcaption><\/figure>\n\n\n\n<p>Bei Nachrichten mit einer Nachrichtengr\u00f6\u00dfe von 5 MB verst\u00e4rkt sich dieser Trend. Auch hier ist das \u00dcbermitteln der Nachrichten mit HTTP\/3 und QUIC langsamer als unter HTTP\/2 mit TCP. Der Unterschied liegt in diesem Fall im Durchschnitt sogar bei 126ms.<\/p>\n\n\n\n<p>Daran zeigt sich, dass die Performance bei der Verwendung von QUIC bei immer gr\u00f6\u00dferen Nachrichten, im Vergleich zu TCP immer schlechter wird. [6]<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Real-World Performancetests<\/h4>\n\n\n\n<p>Neben den synthetischen Performancetests wurden auch &#8220;Real-World&#8221; Performancetests durchgef\u00fchrt. Dabei wurde der Cloudflare-Blog (blog.cloudflare.com) auf einen HTTP\/3 Server deployed. Die Tests wurden dann mit Hilfe des WebPageTest-Frameworks durchgef\u00fchrt. In Kombination mit dem hauseigenen Monitoring-Tool &#8220;Browser Insights&#8221; wurden Metriken gesammelt um Aufschluss \u00fcber die Performance der Seite zu geben.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/real_world_test.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"195\" data-attachment-id=\"12256\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/18\/quic-die-zukunft\/real_world_test\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/real_world_test.png\" data-orig-size=\"1999,380\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"real_world_test\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/real_world_test-1024x195.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/real_world_test-1024x195.png\" alt=\"\" class=\"wp-image-12256\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/real_world_test-1024x195.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/real_world_test-300x57.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/real_world_test-768x146.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/real_world_test-1536x292.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/02\/real_world_test.png 1999w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Performancetests &#8211;  Latenz bei der \u00dcbertragung des Cloudflare Blogs [6]<\/figcaption><\/figure>\n\n\n\n<p>Auch in diesem Test schneidet HTTP\/2 im Durchschnitt besser ab als HTTP\/3. Der Unterschied liegt hier bei circa 1-4%. [6]<\/p>\n\n\n\n<p>Insgesamt schneidet HTTP\/2 mit TCP in allen Tests, bis auf den reinen Handshake-Vergleich besser ab. Je gr\u00f6\u00dfer die zu \u00fcbermittelnden Nachrichten dabei werden, desto besser sind die \u00dcbertragungszeiten von HTTP\/2 im Vergleich zu HTTP\/3.<\/p>\n\n\n\n<p>Tests von Google zeigten dar\u00fcber hinaus, dass die CPU-Last der Server durch die Verwendung von QUIC doppelt so hoch, wie bei der Verwendung von TCP in Kombination mit TLS ist. Dies bedeutet, dass Google doppelt so viel CPU-Ressourcen zur Verf\u00fcgung stellen m\u00fcsste, um die selbe Anzahl an Anfragen verarbeiten zu k\u00f6nnen. [5]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Auswertung<\/h3>\n\n\n\n<p>Die Cloudflare-Ingenieure vermuten, dass es aufgrund der verwendeten Congestion Algorithmen zu den Unterschieden in der Performance kommt. Bei Congestion Algorithmen handelt es sich um Algorithmen, die bei \u00dcberlastung eines Servers ankommende Pakete fallen lassen. [5][6]<br>Die Congestion Algorithmen, die auf TCP-Ebene verwendet werden, sind bereits \u00fcber viele Jahr optimiert worden. Auf Ebene von QUIC hat diese Optimierung noch nicht stattgefunden. Aus diesem Grund vermuten die Cloudflare-Ingenieure, dass die verwendeten Congestion Algorithmen den theoretischen Performancevorteil (bspw. kein Head-of-Line Blocking) von QUIC wieder zunichte machen. [6]<\/p>\n\n\n\n<p>Die erh\u00f6hte CPU-Last bei der Verwendung von QUIC kann an zwei Dingen liegen. Die erste M\u00f6glichkeit sind wieder die noch nicht optimierten Congestion Algorithmen. Auf der anderen Seite kann dies daran liegen, dass QUIC im Userspace verarbeitet wird. Dadurch ist Kommunikation zwischen den User- und dem Kernel-Space notwendig, die die CPU weiter belasten kann. TCP wird komplett im Kernel-Space verarbeitet und hat dieses Problem dadurch nicht. [5]<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fazit<\/h3>\n\n\n\n<p>Abschlie\u00dfend kann man sagen, dass QUIC in der Theorie viele Probleme von TCP l\u00f6sen kann. Gerade in Kombination mit HTTP sind hier Performancevorteile zu erwarten.<br>In der Praxis zeigt sich jedoch, dass TCP und HTTP\/2 zur Zeit, vor allem bei gr\u00f6\u00dferen Nachrichten besser performen als QUIC und HTTP\/3. Bei kleinen Nachrichten und beim Verbindungsaufbau sind HTTP\/3 und QUIC bereits schneller.<br>Dies ist damit zu erkl\u00e4ren, dass f\u00fcr QUIC noch viele Optimierungen notwendig sind. So muss beispielsweise das HTTP\/3 Protokoll noch auf QUIC angepasst werden. Die Congestion Algorithmen sind dar\u00fcber hinaus auch noch nicht optimiert.<\/p>\n\n\n\n<p>Man sieht das QUIC damit im Vergleich zu TCP noch am Anfang steht. Trotzdem setzen viele der gro\u00dfen Tech-Firmen bereits auf das neue Protokoll und stellen ihre Dienste auch \u00fcber HTTP\/3 zur Verf\u00fcgung. Daher kann man davon ausgehen, dass weiterhin an der Optimierung von QUIC geforscht wird und dass QUIC immer h\u00e4ufiger Verwendung finden wird.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">QUIC und HTTP\/3 selber ausprobieren<\/h3>\n\n\n\n<p>Um auszuprobieren, welche Dienste bereits HTTP\/3 unterst\u00fctzen, ben\u00f6tigt man einen entsprechenden Client. F\u00fcr die Browser Firefox und Chrome gibt es daf\u00fcr jeweils den Nightly-Build:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.mozilla.org\/en-US\/firefox\/channel\/desktop\/\" title=\"https:\/\/www.mozilla.org\/en-US\/firefox\/channel\/desktop\/\" target=\"_blank\" rel=\"noreferrer noopener\">Firefox Nightly<\/a><\/li><li><a href=\"https:\/\/www.google.com\/chrome\/canary\/\" target=\"_blank\" rel=\"noreferrer noopener\">Chrome Canary<\/a><\/li><\/ul>\n\n\n\n<p>Neben den klassischen Browsern gibt es auch eine <a href=\"https:\/\/github.com\/quicwg\/base-drafts\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"https:\/\/github.com\/quicwg\/base-drafts\">Vielzahl an Bibliotheken<\/a>, die bereits QUIC unterst\u00fctzen. Hier sind einige:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>aioquic (Python)<\/li><li>Haskell QUIC<\/li><li>kwik (Java)<\/li><li>Isquic (C)<\/li><li>mvfst (C++)<\/li><li>Neqo (Rust)<\/li><\/ul>\n\n\n\n<p>Viele der gro\u00dfen Tech-Firmen setzten bereits HTTP\/3 ein, mit denen man HTTP\/3 selber erleben kann. Hier sind einige Beispiele aufgelistet:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/google.com\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/google.com<\/a><\/li><li><a href=\"https:\/\/facebook.com\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/facebook.com<\/a><\/li><li><a href=\"https:\/\/instagram.com\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/instagram.com<\/a><\/li><li><a href=\"https:\/\/cloudflare-quic.com\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/cloudflare-quic.com<\/a><\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p class=\"has-text-align-center\"><strong>Author: <\/strong>Max Merz \u2014 <a href=\"http:\/\/merzmax.de\" target=\"_blank\" rel=\"noreferrer noopener\">merzmax.de<\/a>, <a href=\"https:\/\/twitter.com\/MrMaxMerz\" target=\"_blank\" rel=\"noreferrer noopener\">@MrMaxMerz<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Quellen <\/h3>\n\n\n\n<p>[1] <a href=\"https:\/\/ma.ttias.be\/googles-quic-protocol- moving-web-tcp-udp\/\" target=\"_blank\" rel=\"noreferrer noopener\">M. Geniar, Google\u2019s QUIC protocol: Moving the web from TCP to UDP <\/a><br>[2] <a href=\"https:\/\/blog.cloudflare.com\/accelerating-udp- packet-transmission-for-quic\/\" target=\"_blank\" rel=\"noreferrer noopener\">A. Ghedini, Accelerating UDP packet transmission for QUIC | The Cloudflare Blog<\/a><br>[3] <a href=\"https:\/\/blog.cloudflare.com\/the-road-to-quic\/\" target=\"_blank\" rel=\"noreferrer noopener\">A. Ghedini, The road to QUIC | The Cloudflare Blog<\/a> <br>[4] <a href=\"https:\/\/blog.cloudflare.com\/http3- the-past-present-and-future\/\" target=\"_blank\" rel=\"noreferrer noopener\">A. Ghedini und R. Lalkaka, HTTP\/3: The past, the present, and the future | The Cloudflare Blog<\/a><br>[5] <a href=\"https:\/\/calendar.perfplanet.com\/2018\/quic-and-http-3-too- big-to-fail\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"https:\/\/calendar.perfplanet.com\/2018\/quic-and-http-3-too- big-to-fail\/\">R. Marx, QUIC and HTTP\/3 : Too big to fail?! | Web Performance Calendar<\/a><br>[6] &nbsp;<a href=\"https:\/\/blog.cloudflare.com\/http-3-vs-http-2\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"https:\/\/blog.cloudflare.com\/http-3-vs-http-2\/\">S. Tellakula, Comparing HTTP\/3 vs. HTTP\/2 performance | The Cloudflare Blog<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>QUIC soll als neuer Standard das weit verbreitete TCP-Protokoll abl\u00f6sen. Welche Neuerungen QUIC mitbringt, wo seine St\u00e4rken liegen und warum \u00fcberhaupt eine Weiterentwicklung von TCP ben\u00f6tigt wird, versuche ich in diesem Artikel zu beantworten.<\/p>\n","protected":false},"author":922,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[649,262],"tags":[404,403,400,401,402,330],"ppma_author":[836],"class_list":["post-12206","post","type-post","status-publish","format-standard","hentry","category-interactive-media","category-rich-media-systems","tag-browser","tag-http","tag-quic","tag-tcp","tag-udp","tag-web"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":12162,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/02\/19\/websocket-protokoll-ein-detaillierter-technischer-einblick\/","url_meta":{"origin":12206,"position":0},"title":"WebSocket-Protokoll: Ein detaillierter technischer Einblick","author":"Laurin Keim","date":"19. February 2021","format":false,"excerpt":"Das HTTP-Protokoll existiert seit Beginn des Internets und hat sich bis heute in Bezug auf Performance immer weiter entwickelt. Die vielen TCP-Verbindungs-Aufbau-Prozeduren wurden durch das Multiplexing auf ein paar Wenige reduziert, welche jeweils mehrere verschiedene Daten \u00fcbertragen [7]. Auch der Header selbst wurde auf Performance getrimmt. So wurde aus dem\u2026","rel":"","context":"In &quot;Interactive Media&quot;","block_context":{"text":"Interactive Media","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/interactive-media\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/01\/websocket-header.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/01\/websocket-header.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/01\/websocket-header.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":23781,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/02\/01\/websockets-technischer-einblick-und-performance-vergleich\/","url_meta":{"origin":12206,"position":1},"title":"WebSockets: Technischer Einblick und Performance-Vergleich","author":"Nicole W\u00f6lfel","date":"1. February 2023","format":false,"excerpt":"In diesem Artikel wird ein kurzer Blick auf die zu Grunde liegende, technische Funktionsweise von WebSockets geworfen und ihre Performance im Vergleich zu HTTP und Server-sent Events (SSE) untersucht, wodurch letztlich das Potenzial von WebSockets eruiert werden kann. Hintergrund & Entstehung In der Vergangenheit war es bei Webanwendungen nur unter\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/01\/SSEvsWebSockets_neu.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/01\/SSEvsWebSockets_neu.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/01\/SSEvsWebSockets_neu.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/01\/SSEvsWebSockets_neu.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":23162,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2022\/03\/27\/slog-deterministische-datenbanksysteme-die-losung-fur-alle-probleme\/","url_meta":{"origin":12206,"position":2},"title":"SLOG &#8211; Deterministische Datenbanksysteme die L\u00f6sung f\u00fcr alle* Probleme?","author":"Julia Grimm","date":"27. March 2022","format":false,"excerpt":"*zumindest im Bereich georeplizierter Datenbanken Wir leben in einer globalisierten Welt, in welcher wir Anwendungen auf der ganzen Welt nutzen k\u00f6nnen. Egal wo wir gerade sind, k\u00f6nnen wir auf diese Programme und Daten zugreifen. Doch diese M\u00f6glichkeit stellt Softwaresysteme heutzutage vor gro\u00dfe Herausforderungen. Nutzer m\u00f6chten so schnell wie m\u00f6glich auf\u2026","rel":"","context":"In &quot;Databases&quot;","block_context":{"text":"Databases","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/databases\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/03\/Network-Monitoring.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/03\/Network-Monitoring.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/03\/Network-Monitoring.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/03\/Network-Monitoring.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/03\/Network-Monitoring.jpg?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":26254,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2024\/03\/21\/docker-security-hands-on-guide\/","url_meta":{"origin":12206,"position":3},"title":"Docker security: Hands-on guide","author":"Maximilian Tellmann","date":"21. March 2024","format":false,"excerpt":"Absichern von Docker Containern, durch die Nutzung von Best Practices in DockerFiles und Docker Compose. Einf\u00fchrung Es ist sehr wahrscheinlich im Alltag mit containerisierten Anwendungen in Ber\u00fchrung zu kommen, ohne sich dessen bewusst zu sein. In einer Zeit, in der sich der Trend der Unternehmen weiterhin stark in Richtung Cloud\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":25634,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/08\/17\/worldcoin-world-id\/","url_meta":{"origin":12206,"position":4},"title":"Worldcoin \/ World ID","author":"Johannes Kahlh\u00f6fer","date":"17. August 2023","format":false,"excerpt":"Einstieg Eine Firma namens \u201cTools for Humanity GmbH\u201d entwickelt Tools, um das Internet menschlicher zu machen, den Weg f\u00fcr ein weltweites bedingungsloses Grundeinkommen zu ebnen und unabh\u00e4ngig pr\u00fcfbare Wahlen zu erm\u00f6glichen. Das Ganze auch noch Open Source, f\u00fcr alle, und Werte hat sie auch noch, diese Firma. Doch bevor wir\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/800px-Zero_knowledge_cave_1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/800px-Zero_knowledge_cave_1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/800px-Zero_knowledge_cave_1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/800px-Zero_knowledge_cave_1.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":25073,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/07\/27\/sicherheit-von-i-voting-systemen-chancen-und-risiken-von-online-wahlen\/","url_meta":{"origin":12206,"position":5},"title":"Sicherheit von i-Voting-Systemen: Chancen und Risiken von online Wahlen","author":"Kilian Kunkel","date":"27. July 2023","format":false,"excerpt":"Ein paar kaputte Tonkr\u00fcge mit eingeritzten Namen darauf - so begann die faszinierende Geschichte der Wahlen. Im antiken Griechenland fanden die allerersten Abstimmungen statt, bei denen die B\u00fcrger die Namen von unliebsamen Zeitgenossen auf Tonscherben kratzten. Diejenigen, die am h\u00e4ufigsten genannt wurden, mussten f\u00fcr zehn Jahre ins Exil gehen [1].\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-27-at-6.12.21-PM.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-27-at-6.12.21-PM.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-27-at-6.12.21-PM.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-27-at-6.12.21-PM.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-27-at-6.12.21-PM.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-27-at-6.12.21-PM.png?resize=1400%2C800&ssl=1 4x"},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":836,"user_id":922,"is_guest":0,"slug":"mm312","display_name":"Max Merz","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/77136ad5eeba989d7f4d31557c36083fb3469fa5eaeb53871273c67e8f6f0b1f?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/12206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/922"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=12206"}],"version-history":[{"count":46,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/12206\/revisions"}],"predecessor-version":[{"id":20303,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/12206\/revisions\/20303"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=12206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=12206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=12206"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=12206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}