• [^] # Re: on refait le protocole

    Posté par (site web personnel, Mastodon) . En réponse au journal Retour de Berlin. Évalué à 4. Dernière modification le 19 septembre 2014 à 13:50.

    Heureusement que tu précises que t'es pas énervé, parce qu'on pourrait croire le contraire :)

    C'est pour ça que je précisais, je savais que ça pouvait en donner l'impression. :p

    Mais (et ça n'est que mon avis), ça n'est pas parfait, et si je devais recommencer de 0 je changerais XML par autre chose. Encore une fois, expérience de pensée !

    Ok, j'avais pas pigé cet aspect des choses. Continuons donc dans l'expérience de pensée.

    Cas simple: je veux envoyer un message à edward@snowden.com; le seul qui sait comment faire c'est snowden.com. Je ne connais pas snowden.com, par contre mon serveur le connaît; j'envoie mon stanza à mon serveur qui transmet.

    Mouais, mon serveur connaît pas plus. Il demande au DNS à quel IP ça correspond, puis ensuite il transmet aux protocoles du dessous (TCP/IP) qui vont s'occuper de tout le transport et routage. Je vois vraiment pas où le serveur a fait du routage là.

    Cas MUC/Pubsub: c'est du multicast tout ce qu'il y a de plus connu. Ma ressource -> mon serveur -> le serveur qui héberge le service de pubsub -> le noeud pubsub

    Ben... c'est exactement la même chose que ton cas simple: 2 serveurs et 2 entités finales. C'est aussi la même chose que SMTP (dans le cas habituel où on envoie pas l'email directement au serveur final, ce qui est faisable mais peut être flaggué comme spam rapidement).

    Franchement c'est pas du routage ça, ton cas encore plus "compliqué" avec IRC non plus. Ou alors très vite fait un routage de super haut niveau, qui utilise en vrai un routage bien plus réel de bas niveau. Mais bon le même que l'ensemble des protocoles du net de nos jours. Et encore, c'est tiré par les cheveux. Enfin je vois vraiment pas où tu veux en venir.
    Ah d'ailleurs je viens de me souvenir du terme. On va plutôt appeler cela du "relai" à ce niveau de protocole. De même que le protocole SMTP fait aussi du "relai" de messages électroniques.

    Dans ce cas-là tu segmentes ton binaire, tu l'envoies morceau par morceau avec la possibilité pour les messages non-binaires de passer.

    Moui, si tu as des milliers de ces petits morceaux (soit milliers de fichiers, soit un fichier si gros qu'il faut le couper beaucoup), ça va quand même boucher globalement la communication. Ensuite tu pourrais imaginer un système de priorité (réimplémenter un OS dans ton flux de données!) mais ça implique soudainement beaucoup plus de communication (le système de priorité ne peut pas être laissé au soin de l'envoyeur, sinon il fait ce qu'il veut et envoie toujours ses données en masse. Donc l'envoyeur attend que le destinataire lui donne le feu vert, cad lui envoie une requête "ok c'est bon, tu peux m'envoyer 2 paquets maintenant, mais pas plus"). Et puis ça va inutilement ralentir l'envoi du fichier par conséquent (déjà que les utilisateurs se plaignent que les chargements sont trop lents!) alors qu'on a des connexions de fous maintenant avec des bandes passantes suffisamment larges pour à la fois recevoir plein de données binaires et textuelles en parallèle sans percevoir le moindre ralentissement. Pourquoi faire compliqué, moins efficace, prône aux erreurs de protocole, d'implémentation hasardeuse et complexe, avec une sensation utilisateur "lente" à la fois pour l'envoi des binaires et le texte, etc. alors qu'on peut faire facile et efficace simplement avec deux flux parallèles (et on laisse l'OS gérer les I/O en simultané)? Je comprends même pas le but de la discussion. Ça apporte quoi que les données soient dans le flux? Je vois que des désavantages.

    Bon c'est pas vrai: y en a qu'un seul d'avantage: si jamais on arrive pas à ouvrir un autre flux plus efficace (firewall, etc.), ben on n'a pas le choix. D'ailleurs je voudrais noter qu'il existe déjà depuis longtemps un tel transport binaire directement dans le flux, en base64, dans XMPP (transport "in-band" de Jingle). Mais franchement c'est à jamais utiliser si on a le choix de faire autrement (c'est d'ailleurs écrit clairement dans la XEP, c'est du "dernier recours" si on arrive pas à faire mieux). Proposer que ce genre de chose soit par défaut est d'après moi une aberration.

    Parser, ça veut dire passer la suite d'octets reçus de la socket dans la moulinette pour en extraire une structure qui a du sens

    Donc analyse des données (comme je disais, on peut donner plusieurs sens à "parser". Le serveur va effectivement lire tout le stanza pour la "syntaxe", car c'est un flux, mais pas pour le "sens" nécessairement).

    Ok dans ce cas là, ça tombe bien, oui le serveur s'arrête au header du stanza: le to bien sûr, mais aussi le from (vérifier que le from correspond bien à ce qui a été envoyé, je rappelle que XMPP est un protocole sécurisé et authentifié, pas comme SMTP, et donc qu'un serveur ne se contente pas de relayer des messages, il en vérifie notamment la provenance, la syntaxe, etc.), et éventuellement un chouille plus si nécessaire (par exemple le type, l'id si y a une réponse à renvoyer, etc.). Mais oui pourquoi le serveur irait analyser ce qu'il y a dans le stanza (à part si serveur de la NSA qui cherche des infos!)? Bien sûr que non, il ne va pas en extraire une "structure qui a du sens". C'est d'autant plus vrai que dans beaucoup de cas, il ne pourrait même pas. Je rappelle que XMPP est fait de plein de fonctionnalités, libre à chaque entité de les implémenter. Si on envoie une donnée particulière destinée à un client final, qui gère une fonctionnalité donnée, le serveur peut tout à fait ne pas avoir d'implémentation pour la dite-fonctionnalité. D'ailleurs la plupart du temps, les serveurs n'implémenteront pas les mêmes fonctionnalités (ou pas les mêmes bouts de la fonctionnalité) que les clients car ça n'a pas de sens. Donc le serveur se contente de relayer.

    Et donc ça tombe bien, le serveur s'arrête au "to", sans chercher "le sens de ce qu'il y a en dessous" qu'il ne comprendrait probablement même pas de toutes façons puisque c'est une XEP pour clients. Ça se passe exactement comme tu veux! Donc un argument qui tombe!

    Encore une fois, je parle de ce qu'il y aurait à changer si on repartait de 0, mais c'est clairement du chipotage, et ça n'enlève en rien les qualités de XMPP.

    Ok j'ai bien compris maintenant! ;-)

    Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]