web-dev-qa-db-fra.com

protocoles binaires v. protocoles de texte

quelqu'un at-il une bonne définition de ce qu'est un protocole binaire? et qu'est-ce qu'un protocole de texte en réalité? comment se comparent-ils les uns aux autres en termes de bits envoyés sur le fil? 

voici ce que dit wikipedia sur les protocoles binaires:

Un protocole binaire est un protocole destiné ou destiné à être lu par une machine plutôt que par un être humain ( http://en.wikipedia.org/wiki/Binary_protocol )

oh allez! 

pour être plus clair, si j'ai un fichier jpg, comment cela serait-il envoyé via un protocole binaire et comment via un texte? en termes de bits/octets envoyés sur le fil, bien sûr. 

à la fin de la journée, si vous examinez une chaîne, celle-ci est elle-même un tableau d'octets, de sorte que la distinction entre les 2 protocoles doit reposer sur les données réellement envoyées sur le réseau. en d'autres termes, sur la manière dont les données initiales (fichier jpg) sont codées avant d'être envoyées.

67
der_grosse

Le protocole binaire contre le protocole texte ne concerne pas vraiment la manière dont les blobs binaires sont codés. La différence est vraiment si le protocole est orienté autour des structures de données ou des chaînes de texte. Laissez-moi vous donner un exemple: HTTP. HTTP est un protocole texte, même s'il envoie une image JPEG au format jpeg, il n'envoie que les octets bruts, et non leur codage texte. 

Mais ce qui fait de HTTP un protocole texte, c'est que l'échange vers get le jpg ressemble à ceci:

Demande:

GET /files/image.jpg HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.01 [en] (Win95; I)
Host: hal.etc.com.au
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8

Réponse:

HTTP/1.1 200 OK
Date: Mon, 19 Jan 1998 03:52:51 GMT
Server: Apache/1.2.4
Last-Modified: Wed, 08 Oct 1997 04:15:24 GMT
ETag: "61a85-17c3-343b08dc"
Content-Length: 60830
Accept-Ranges: bytes
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: image/jpeg

<binary data goes here>

Notez que cela aurait très facilement pu être emballé beaucoup plus étroitement dans une structure qui ressemblerait (en C) à quelque chose comme

Demande:

struct request {
  int requestType;
  int protocolVersion;
  char path[1024];
  char user_agent[1024];
  char Host[1024];
  long int accept_bitmask;
  long int language_bitmask;
  long int charset_bitmask;
};

Réponse:

struct response {
  int responseType;
  int protocolVersion;
  time_t date;
  char Host[1024];
  time_t modification_date;
  char etag[1024];
  size_t content_length;
  int keepalive_timeout;
  int keepalive_max;
  int connection_type;
  char content_type[1024];
  char data[];
};

Où les noms de champs ne devraient pas du tout être transmis, et où, par exemple, responseType dans la structure de réponse est un entier avec la valeur 200 au lieu de trois caractères '2' '0' '0'. C'est ce qu'est un protocole basé sur du texte: un protocole conçu pour être communiqué sous forme de flux de lignes de texte (généralement lisibles par l'homme) plutôt que sous forme de données structurées de nombreux types différents.

130
Tyler McHenry

Voici une sorte de définition de cop-out:

Vous le saurez quand vous le verrez.

C'est l'un de ces cas où il est très difficile de trouver une définition concise couvrant tous les cas critiques. Mais c’est aussi l’un des cas où les cas critiques n’ont rien à voir avec la pertinence, car ils ne se produisent tout simplement pas dans la vie réelle.

Pratiquement tous les protocoles que vous rencontrerez dans la vie réelle ressembleront à ceci:

> fg,m4wr76389b zhjsfg gsidf7t5e89wriuotu nbsdfgizs89567sfghlkf
>  b9er t8ß03q+459tw4t3490ß´5´3w459t srt üßodfasdfäasefsadfaüdfzjhzuk78987342
< mvclkdsfu93q45324äö53q4lötüpq34tasä#etr0 awe+s byf eart

[Imaginez une tonne d'autres merdes non-imprimables là-bas. Un des défis pour transmettre la différence entre texte et binaire est que vous devez le faire dans un texte :-)]

Ou comme ceci:

< HELLO server.example.com
> HELLO client.example.com
< GO
> GETFILE /foo.jpg
< Length: 3726
< Type: image/jpeg
< READY?
> GO
< ... server sends 3726 bytes of binary data ...
> ACK
> BYE

[Je viens d'inventer cela sur place.]

Il n'y a tout simplement pas beaucoup d'ambiguïté ici.

Une autre définition que j'ai parfois entendue est 

un protocole de texte est un protocole que vous pouvez déboguer avec telnet

Je montre peut-être ma nervosité ici, mais j’ai réellement écrit et lu des courriels via SMTP et POP3, lu des articles sur usenet via NNTP et visualisé des pages Web via HTTP en utilisant telnet fonctionnerait réellement.

En fait, en écrivant ceci, j'ai un peu attrapé la fièvre à nouveau:

bash-4.0$ telnet smtp.googlemail.com 25
Trying 74.125.77.16...
Connected to googlemail-smtp.l.google.com.
Escape character is '^]'.
< 220 googlemail-smtp.l.google.com ESMTP Thu, 15 Apr 2010 19:19:39 +0200
> HELO
< 501 Syntactically invalid HELO argument(s)
> HELO client.example.com
< 250 googlemail-smtp.l.google.com Hello client.example.com [666.666.666.666]
> RCPT TO:Me <[email protected]>
< 503 sender not yet given
> SENDER:Me <[email protected]>
< 500 unrecognized command
> RCPT FROM:Me <[email protected]>
< 500 unrecognized command
> FROM:Me <[email protected]>
< 500-unrecognized command
> HELP
< 214-Commands supported:
< 214 AUTH HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP ETRN
> MAIL FROM:Me <[email protected]>
< 250 OK
> RCPT TO:You <[email protected]>
< 250 Accepted
> DATA
< 354 Enter message, ending with "." on a line by itself
> From: Me <[email protected]>
> To: You <[email protected]>
> Subject: Testmail
>
> This is a test.
> .
< 250 OK id=1O2Sjq-0000c4-Qv
> QUIT
< 221 googlemail-smtp.l.google.com closing connection
Connection closed by foreign Host.

Bon sang, ça fait longtemps que je n'ai pas fait ça. Quelques erreurs ici :-)

22
Jörg W Mittag

Comme la plupart d'entre vous l'ont suggéré, nous ne pouvons pas différencier si le protocole est binaire ou texte en regardant simplement le contenu sur le réseau.

AFIK

Protocole binaire - Les bits sont des limites L'ordre est très critique

Par exemple, RTP

Les deux premiers bits sont la versionLe prochain bit est le bit MarkUp 

Protocole texte - Délimiteurs spécifiques au protocole L'ordre des champs n'est pas important

Par exemple, SIP

Un autre est, dans le protocole binaire, nous pouvons diviser un octet, c’est-à-dire qu’un seul bit peut avoir une signification particulière; Dans un protocole texte, l'unité minimale significative est BYTE. Vous ne pouvez pas diviser un octet.

4
toyvenu

Exemples de protocoles binaires: RTP , TCP , IP .

Exemples de protocoles texte: SMTP , HTTP , SIP .

Cela devrait vous permettre de généraliser à une définition raisonnable des protocoles binaires vs textes.

Astuce: passez simplement aux exemples de sections ou aux diagrammes. Ils servent à illustrer la réponse rock de Tyler .

4
Frank Shearar

J'ai accidentellement trouvé cette vieille question et décidé d'ajouter mon opinion, du moins de la vérifier.

La plupart des réponses expliquent en quoi les protocoles texte et binaire diffèrent du point de vue de la machine. Du point de vue humain, un protocole de texte est lisible/éditable (un humain peut lire et écrire des paquets sans décodeur/encodeur). Cela présente au moins deux avantages: un débogage/maintenance simplifié de l’implémentation du protocole texte et la possibilité de tester à l’aide d’outils simples et universels tels que telnet.

Un autre petit avantage: les protocoles de texte sont considérés comme plus fiables, car (je suppose) qu’il est impossible ou simplement difficile d’utiliser un trou dans l’implémentation du protocole pour exécuter du code malveillant, par exemple. en exploitant le débordement de tampon. C'est un petit avantage, car les protocoles binaires peuvent atteindre le même objectif en encodage en base64.

Il existe également certains inconvénients des protocoles de texte:

  • L'implémentation de protocoles texte est généralement plus difficile à implémenter Que binaire, à cause de l'analyseur.
  • Les protocoles binaires consomment moins de bande passante

Essayer de compiler une recommandation finale de ceci:

Définir un protocole en tant que texte lorsque:

  • C'est un protocole de contrôle qui peut être traité comme une suite de commandes ou de requêtes/réponses ((interactif). Du point de vue de la mise en œuvre, il peut être implémenté comme une machine à états finis. À titre d'exemple, considérons le streaming multimédia: RTSP - un protocole de contrôle, utilise une machine à états et se compose de requêtes/réponses - est un protocole texte, lorsque RTP est un protocole binaire, car il transporte principalement des données binaires naturelles telles que des flux multimédias.
  • Il est destiné à une utilisation en masse: par de nombreuses personnes, implémentations ou applications; le débogage/maintenance simplifié est donc très important.

.

3
Andriy Tylychko

Les deux utilisent un jeu de caractères différent, le texte un, utilise un jeu de caractères réduit, le binaire inclut tout ce qu'il peut, pas seulement "des lettres" et "des nombres" (c'est pourquoi wikipedia dit "être humain")

o soyez plus clair, si j’ai un fichier jpg, comment cela serait-il envoyé via un protocole binaire et comment> via un texte? en termes de bits/octets envoyés sur le fil, bien sûr. 

vous devriez lire ceci Base64

tous les commentaires sont appréciés, j'essaie d'aller au fond des choses ici.

Je pense que l'essentiel pour réduire le jeu de caractères est de réduire la complexité et d'atteindre la portabilité, la compatibilité. Il est plus difficile de s'entendre et de s'entendre avec beaucoup pour respecter un charset Wide (ou un large). L'alphabet latin/romain et les chiffres arabes sont connus dans le monde entier. (Il y a bien sûr d'autres considérations pour réduire le code, mais c'est le principal)

Disons que dans les protocoles binaires, le "contrat" ​​entre les parties concerne les bits, le premier signifie, le second, etc., ou même les octets (mais avec la liberté d'utilisation du jeu de caractères sans penser à la portabilité), par exemple dans un système fermé privé ou (proche des normes matérielles), cependant, si vous concevez un système ouvert, vous devez tenir compte de la manière dont vos codes seront représentés dans un large éventail de situations, par exemple comment ils seront représentés dans une machine à l'autre bout du monde? voici les protocoles de texte où le contrat sera aussi standar que possible. J'ai conçu les deux et c'étaient les raisons, binaire pour des solutions très personnalisées et texte pour des systèmes ouverts et/ou portables. 

3
Hernán Eche

Comment pouvons-nous envoyer un fichier image sous SOAP: Cliquez ici

Cela montre que les données binaires sont attachées en tant que telles [ATTACHMENT] et que leur référence est enregistrée dans le message SOAP.

Donc, le protocole est basé sur le texte et les données [Image] sont des pièces jointes binaires dont le codage n'est pas pertinent

Ainsi, SOAP est un protocole texte en raison de la façon dont nous spécifions les en-têtes Soap et non des données réelles codées dans celui-ci.

1
Karan Kaw

Je pense que vous vous êtes trompé ... Ce n'est pas le protocole qui détermine l'apparence des données sur le "fil", mais le type de données qui détermine le protocole à utiliser pour le transmettre . Prenez la prise TCP, par exemple, Le fichier jpeg sera envoyé et reçu avec un protocole binaire car il s'agit de données binaires (non lisibles par l'homme, octets compris dans la plage 32-126 ascii), mais vous pouvez envoyer/recevoir un fichier texte avec les deux protocoles sans remarquez la différence.

0

Le protocole de texte peut être explicite et étendu . Il s'explique facilement, car le message inclut les noms de champ uniquement dans le message lui-même. Vous ne pouvez pas comprendre quelle valeur signifie dans le message du protocole binaire si vous ne vous référez pas à la spécification du protocole.

Cela signifie que HTTP, en tant que protocole texte, établit simplement des règles simples, mais vous pouvez étendre la structure de données en ajoutant librement de nouveaux en-têtes ou en modifiant le type de contenu afin de transporter différentes charges utiles. Et les en-têtes sont les métadonnées et ont la capacité de négociation et d’adaptation automatique. 

0
Chao