{"id":130,"date":"2013-06-03T22:39:52","date_gmt":"2013-06-03T21:39:52","guid":{"rendered":"http:\/\/blog.gryzor.com\/?p=130"},"modified":"2013-06-03T23:00:09","modified_gmt":"2013-06-03T22:00:09","slug":"tcp-est-mort","status":"publish","type":"post","link":"https:\/\/blog.gryzor.com\/index.php\/2013\/06\/03\/tcp-est-mort\/","title":{"rendered":"TCP est mort"},"content":{"rendered":"<p>Mais on ne le sait pas encore \ud83d\ude42<br \/>\nPour vous en convaincre, je n&#8217;ai qu&#8217;un exemple : <a title=\"Mosh\" href=\"http:\/\/mosh.mit.edu\/\">mosh<\/a> (pour MObile SHell).<br \/>\nJe qualifierai Mosh de compl\u00e9ment \u00e0 ssh : il s&#8217;initialise bien sur TCP port 22, puis poursuit les communications, avec -je crois et j&#8217;esp\u00e8re- le m\u00eame niveau de s\u00e9curit\u00e9 sur une (ou plusieurs) sockets UDP.<\/p>\n<p>UDP lui apporte la r\u00e9activit\u00e9 dans la gestion des acknowledgments.<\/p>\n<p>En r\u00e9sum\u00e9, il virtualise la session par rapport \u00e0 la connnexion. Si la connexion expire ou dispara\u00eet, la session persiste et cherche\/attend simplement un nouveau support de connexion.<br \/>\nAvantages imm\u00e9diats :<\/p>\n<ul>\n<li><span style=\"font-size: 13px;\">Un keepalive permanent super dynamique, tr\u00e8s pratique au niveau shell (je vois les caract\u00e8res que j&#8217;ai tap\u00e9s et que le serveur n&#8217;a pas encore confirm\u00e9s, ils sont soulign\u00e9s)<\/span><\/li>\n<li><span style=\"font-size: 13px;\">Je me d\u00e9connecte 1\/2 h (genre sur mon PC via le t\u00e9l\u00e9phone en 3G, j&#8217;\u00e9teinds le t\u00e9l\u00e9phone et prends bien mon temps pour le rallumer), je reviens, mosh reprend imm\u00e9diatement la main<\/span><\/li>\n<li><span style=\"font-size: 13px;\">Je change d&#8217;IP (dans le train, ou je switche de la 3G \u00e0 un r\u00e9seau wifi) ; je n&#8217;ai pas le sentiment de perte de session, pas besoin de me reconnecter.<\/span><\/li>\n<\/ul>\n<p>Inconv\u00e9nients :<\/p>\n<ul>\n<li><span style=\"font-size: 13px;\">le passage des firewalls, eh oui &#8211; mais mosh-server permet de choisir son port UDP ;), donc finalement, ce n&#8217;est qu&#8217;un port de plus \u00e0 ouvrir<\/span><\/li>\n<li><span style=\"font-size: 13px;\">mosh ne g\u00e8re pas [encore] du forward de ports<\/span><\/li>\n<\/ul>\n<p>Ce que je n&#8217;ai pas mesur\u00e9 :<\/p>\n<ul>\n<li><span style=\"line-height: 13px;\">Dans quelle mesure mosh augmente le volume de donn\u00e9es \u00e9chang\u00e9es, avec tous ces ACKs UDP, par rapport \u00e0 une session SSH traditionnelle<\/span><\/li>\n<\/ul>\n<p><span style=\"font-size: 13px;\"><span style=\"font-size: 13px;\">Sur des connexions qui perdent plus de 10% de datagrammes, TCP est terrible. Il double progressivement les retry, si bien que tr\u00e8s vite, en n&#8217;ayant pas de chance et en perdant quelques paquets, la connexion peut se bloquer compl\u00e9tement pour tr\u00e8s longtemps. Surtout avec une surcouche SSL.<\/span><\/span><\/p>\n<p>Bref, vous doutez? Essayez mosh, vous serez bluff\u00e9s ! En plus, il est d\u00e9j\u00e0 packag\u00e9 debian (et m\u00eame dans stable &#8211; pfff je suis en retard ou quoi ?).<\/p>\n<p>La suite ? Pour les applis mobiles, hyper-r\u00e9actives&#8230;vivement une impl\u00e9mentation de HTTP sans TCP, allez, UDP 80 ? \ud83d\ude42<\/p>\n<p>Que celui qui n&#8217;a jamais attendu 1\/4 d&#8217;heure le chargement de Google Maps me jette la premi\u00e8re pierre !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mais on ne le sait pas encore \ud83d\ude42 Pour vous en convaincre, je n&#8217;ai qu&#8217;un exemple : mosh (pour MObile SHell). Je qualifierai Mosh de compl\u00e9ment \u00e0 ssh : il s&#8217;initialise bien sur TCP port 22, puis poursuit les communications, avec -je crois et j&#8217;esp\u00e8re- le m\u00eame niveau de s\u00e9curit\u00e9 sur une (ou plusieurs) sockets [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.gryzor.com\/index.php\/wp-json\/wp\/v2\/posts\/130"}],"collection":[{"href":"https:\/\/blog.gryzor.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.gryzor.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.gryzor.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.gryzor.com\/index.php\/wp-json\/wp\/v2\/comments?post=130"}],"version-history":[{"count":9,"href":"https:\/\/blog.gryzor.com\/index.php\/wp-json\/wp\/v2\/posts\/130\/revisions"}],"predecessor-version":[{"id":140,"href":"https:\/\/blog.gryzor.com\/index.php\/wp-json\/wp\/v2\/posts\/130\/revisions\/140"}],"wp:attachment":[{"href":"https:\/\/blog.gryzor.com\/index.php\/wp-json\/wp\/v2\/media?parent=130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.gryzor.com\/index.php\/wp-json\/wp\/v2\/categories?post=130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.gryzor.com\/index.php\/wp-json\/wp\/v2\/tags?post=130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}