131 votes

protocoles binaires et protocoles textuels

Quelqu'un a-t-il une bonne définition de ce qu'est un protocole binaire ? et qu'est-ce qu'un protocole textuel ? comment ces protocoles se comparent-ils les uns aux autres en termes de bits envoyés sur le fil ?

Voici ce que dit Wikipédia sur les protocoles binaires :

Un protocole binaire est un protocole 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 serait-il envoyé par un protocole binaire et comment par un protocole textuel ? en termes de bits/octets envoyés sur le fil, bien sûr.

en fin de compte, si vous regardez une chaîne de caractères, il s'agit elle-même d'un tableau d'octets, de sorte que la distinction entre les deux protocoles devrait reposer sur les données réelles qui sont envoyées sur le fil. en d'autres termes, sur la façon dont les données initiales (fichier jpg) sont encodées avant d'être envoyées.

211voto

Tyler McHenry Points 35551

La différence entre un protocole binaire et un protocole textuel ne tient pas vraiment à la manière dont les blocs binaires sont codés. La différence réside dans le fait que le protocole est orienté vers les structures de données ou vers les chaînes de texte. Permettez-moi de vous donner un exemple : HTTP. HTTP est un protocole textuel, même si lorsqu'il envoie une image jpeg, il n'envoie que les octets bruts, et non un codage textuel de ceux-ci.

Mais ce qui fait de HTTP un protocole textuel, c'est que l'échange de données entre le serveur et l'utilisateur se fait par l'intermédiaire d'une connexion Internet. obtenir le fichier 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 qu'il aurait été très facile de regrouper tout cela 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[];
};

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

27voto

Jörg W Mittag Points 153275

Voici une définition un peu simpliste :

Vous le saurez quand vous le verrez.

C'est l'un des cas où il est très difficile de trouver une définition concise qui couvre tous les cas de figure. Mais c'est aussi l'un de ces cas où les cas de figure ne sont absolument pas pertinents, car ils ne se produisent tout simplement pas dans la vie réelle.

La plupart des 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 conneries non imprimables. L'une des difficultés pour faire comprendre la différence entre le texte et le binaire est qu'il faut le faire en 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 l'ai inventé sur le champ.)

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

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

un protocole texte est un protocole que vous pouvez déboguer à l'aide de telnet

Je fais peut-être preuve d'une certaine ringardise, mais j'ai avoir a écrit et lu des courriers électroniques via SMTP et POP3, lu des articles usenet via NNTP et consulté des pages web via HTTP en utilisant telnet Il n'y a pas d'autre raison que de voir si cela fonctionnerait réellement.

En fait, en écrivant ces lignes, j'ai repris la fièvre :

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 <Me@Example.Com>
< 503 sender not yet given
> SENDER:Me <Me@Example.Com>
< 500 unrecognized command
> RCPT FROM:Me <Me@Example.Com>
< 500 unrecognized command
> FROM:Me <Me@Example.Com>
< 500-unrecognized command
> HELP
< 214-Commands supported:
< 214 AUTH HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP ETRN
> MAIL FROM:Me <Me@Example.Com>
< 250 OK
> RCPT TO:You <You@SomewhereElse.Example.Com>
< 250 Accepted
> DATA
< 354 Enter message, ending with "." on a line by itself
> From: Me <Me@Example.Com>
> To: You <You@SomewhereElse.Example.Com>
> 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 un moment que je n'ai pas fait ça. Il y a pas mal d'erreurs là-dedans :-)

9voto

Frank Shearar Points 12481

Exemples de protocoles binaires : RTP , TCP , IP .

Exemples de protocoles textuels : SMTP , HTTP , SIP .

Cela devrait vous permettre de généraliser une définition raisonnable des protocoles binaires par rapport aux protocoles textuels.

Conseil : passez directement aux sections d'exemples ou aux diagrammes. Ils servent à illustrer La réponse de Tyler .

6voto

toyvenu Points 41

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

AFIK

Protocole binaire - B L'ordre est très important

Par exemple, RTP

Les deux premiers bits sont des versions Le bit suivant est le bit MarkUp

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

Par exemple, SIP

En outre, dans un protocole binaire, il est possible de diviser un octet, c'est-à-dire qu'un seul bit peut avoir une signification individuelle spécifique ; alors que dans un protocole textuel, l'unité minimale significative est l'octet. On ne peut pas diviser un octet.

4voto

Hernán Eche Points 1257

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

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

vous devriez lire ceci Base64

Tout commentaire est le bienvenu, j'essaie d'aller à l'essentiel.

Je pense que l'essentiel pour réduire le jeu de caractères est de réduire la complexité et d'atteindre la portabilité et la compatibilité. Il est plus difficile de s'arranger et de se mettre d'accord avec de nombreuses personnes pour respecter un jeu de caractères large (ou un jeu de caractères large quel qu'il soit). 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 l'une des principales).

Disons que dans les protocoles binaires, le "contrat" entre les parties porte sur les bits, le premier bit signifiant ceci, le second cela, etc. ou même les octets (mais avec la liberté d'utiliser le jeu de caractères sans penser à la portabilité), par exemple dans un système fermé privé ou (proche des normes matérielles), mais si vous concevez un système ouvert, vous devez prendre en compte la façon 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 donc les protocoles textuels dans lesquels le contrat sera aussi standard que possible. J'ai conçu les deux et c'était la raison, binaire pour des solutions très personnalisées et texte pour des systèmes ouverts et/ou portables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X