protocoles binaires v. protocoles de texte

quelqu'un aurait-il une bonne définition de ce qu'est un protocole binaire est? et qu'est ce qu'un protocole texte en fait? comment ces comparer à l'autre en termes de bits transmis sur le fil?

voici ce que wikipedia dit au sujet des 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 cela serait-il envoyé par un protocole binaire et comment par un texte? en termes de bits/octets envoyés sur le fil du cours.

à la fin de la journée, si vous regardez une chaîne, il est lui-même un tableau d'octets, de sorte que la distinction entre les 2 protocoles devraient reposer sur des données qui est envoyé sur le fil. en d'autres termes, sur la façon dont les données initiales (fichier jpg) sont codées avant d'être envoyé.

tous les commentaires sont favorables, j'essaie d'en venir à l'essence des choses ici.

salutations!

63
demandé sur der_grosse 2010-04-15 16:06:07

9 réponses

protocole binaire versus protocole texte n'est pas vraiment sur la façon dont les blobs binaires sont encodés. La différence réside en fait dans le fait que le protocole est orienté autour de structures de données ou autour de chaînes de texte. Permettez-moi de donner un exemple: HTTP. HTTP est un protocole texte, même si, quand il envoie une image jpeg, il envoie les octets brutes, pas un codage de texte.

mais ce qui rend HTTP un protocole de texte est que l'échange vers obtenir 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 pu très facilement ê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 champ n'auraient pas à être transmis du tout, et où, par exemple, le responseType dans la structure de réponse est un int 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 qui est conçu pour être communiqué comme un flux plat de lignes de texte (habituellement lisible par l'homme), plutôt que comme des données structurées de plusieurs types différents.

124
répondu Tyler McHenry 2010-04-15 12:30:30

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

Vous le saurez quand vous le voyez.

C'est l'un de ces cas où il est très difficile de trouver une définition concise qui couvre tous les cas de coin. Mais c'est aussi l'un de ces cas où les cas de coin sont complètement hors de propos, parce qu'ils ne se produisent tout simplement pas dans la vie réelle.

à peu près tous les protocoles que vous rencontrerez dans la vie réelle ressemblera à 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 ici. L'un des défis pour transmettre la différence entre le texte et le binaire est que vous devez faire la transmission dans le 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 ça sur place.]

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

une autre définition que j'ai parfois entendu est

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

peut-être que je montre ma nervosité ici, mais je ont réellement écrit et lire des e-mails via SMTP et POP3, lire des articles usenet via NNTP et consulté des pages web via HTTP en utilisant telnet , pour aucune autre raison que de voir si cela 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 <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.

ça fait longtemps que je n'ai pas fait ça. Pas mal d'erreurs là-dedans: -)

20
répondu Jörg W Mittag 2010-04-15 17:39:04

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

AFIK

protocole binaire-les Bits sont limites L'ordre est très critique

par exemple., RTP

les deux premiers bits sont la version Le prochain morceau est le morceau de MarkUp

texte protocole-délimiteurs spécifiques au protocole Afin de les champs ne sont pas importants

par exemple., SIP

un de plus est, dans le protocole binaire, Nous pouvons diviser un octet, c.-à-d., un seul bit pourrait avoir une signification individuelle spécifique; tandis que dans un protocole de texte unité significative minimum est un octet. Vous ne pouvez pas partager un octet.

thnx

- octets

4
répondu toyvenu 2010-08-16 05:01:26

utilise tous les deux 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 est-ce que cela serait envoyé par un protocole binaire et comment >par un texte un? en termes de bits/octets envoyés sur le fil du cours.

vous devriez lire ce Base64

tous les commentaires sont favorables, j'essaie d'en venir à l'essence des choses ici.

je pense que l'essence pour réduire le jeu de caractères, est de réduire la complexité, et atteindre la portabilité, la compatibilité. Il est plus difficile de s'arranger et d'être d'accord avec plusieurs pour respecter un charset large, (ou un large quoi que ce 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 la le code, mais c'est un principal)

disons dans les protocoles binaires que le" contrat " entre les parties est d'environ bits, premier bit signifie ceci, deuxième que, etc.. ou même bytes (mais avec la liberté d'utiliser le jeu de caractères sans penser à la portabilité) par exemple en système fermé privé ou (près des standars de matériel), cependant si vous concevez un système ouvert, vous devez tenir compte de la façon dont vos codes seront représentés dans un large ensemble de situations, par exemple comment il sera représenté dans un machine à l'autre côté du monde?, donc, voici le texte des protocoles où le contrat sera aussi standard que possible. J'ai conçu les deux et ce sont les raisons, binaire pour des solutions très personnalisées et texte pour les systèmes ouverts ou/et portables.

3
répondu Hernán Eche 2010-04-15 13:06:43

exemples de protocoles binaires: RTP , TCP , IP .

exemples de protocoles de texte: SMTP , HTTP , SIP .

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

Conseil: il suffit de passer aux sections d'exemple, ou les diagrammes. Ils servir à illustrer Tyler rocking answer .

3
répondu Frank Shearar 2017-05-23 12:10:48

j'ai accidentellement trouvé cette vieille question et a décidé d'ajouter mon avis, au moins pour le vérifier.

la plupart des réponses expliquent comment le texte et les protocoles binaires sont différents du point de vue de la machine. Du point de vue humain, un protocole de texte est lisible/éditable par l'humain (un humain peut lire et écrire des paquets sans décodeur/encodeur). Cela signifie au moins deux avantages: le débogage simplifié/la maintenance de la mise en œuvre du protocole de texte et la possibilité de tester par simple et outils universels comme telnet.

encore un petit avantage: les protocoles texte sont traités comme plus fiables, car (je suppose) il est impossible ou simplement difficile d'utiliser un trou dans la mise en œuvre du protocole pour exécuter du code malveillant, par exemple en exploitant le débordement de tampon. C'est un petit avantage parce que les protocoles binaires peuvent atteindre le même par encodage base64.

il y a aussi certains inconvénients des protocoles de texte:

  • texte la mise en œuvre des protocoles est généralement plus difficile que binaire, en raison de l'analyseur.
  • les protocoles binaires consomment moins de bande passante

essayer de compiler une recommandation finale à partir de ceci:

élaboration d'un protocole en tant que texte un quand:

  • c'est un protocole de contrôle qui peut être traité comme une série de commandes ou les demandes/réponses ((interactif). Du point de mise en œuvre de vue, il peut être mis en œuvre comme une machine d'état fini. À titre d'exemple, considérons la diffusion multimédia en continu: RTSP - un protocole de contrôle, utilise une machine d'état et se compose de requêtes/réponses - est un protocole de texte, lorsque RTP est un protocole binaire parce qu'il transporte essentiellement des données binaires naturelles comme les flux multimédia.
  • il est destiné à un usage de masse: par beaucoup de gens, implémentations ou applications; donc le débogage simplifié/maintenance est très important.

.

3
répondu Andriy Tylychko 2011-08-25 08:47:21

Comment envoyer un fichier image dans SOAP: Cliquez ici

cela montre que les données binaires sont attachées en tant que telles [pièce jointe] et que leur référence est sauvegardée dans le message SOAP.

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

ainsi, SOAP est le protocole de texte en raison de la façon dont nous spécifions les en-têtes de Soap et non les données réelles encodées en elle.

1
répondu Karan Kaw 2013-05-23 13:58:48

je pense que vous vous trompez. Ce n'est pas le protocole qui détermine l'apparence des données sur le "fil", mais c'est le type de données qui détermine quel protocole utiliser pour les transmettre. Prenez la socket tcp par exemple, un fichier jpeg sera envoyé et reçu avec un protocole binaire parce que ce sont des données binaires (pas lisibles par l'homme, des octets qui vont dans la gamme 32-126 ascii), mais vous pouvez envoyer / recv un fichier texte avec les deux protocoles et vous ne remarquerez pas la différence.

0
répondu Simone Margaritelli 2010-04-15 12:12:52
Le protocole de texte

peut être explicite et extensif. Cela s'explique par le fait que le message inclut les noms de champ juste dans le message lui-même. Vous ne pouvez pas comprendre quelle valeur signifie dans le message du protocole binaire si vous ne faites pas référence à la spécification du protocole.

il est extensible signifie HTTP comme un protocole de texte juste faire des règles simples, mais vous pouvez étendre la structure des données en ajoutant librement de nouveaux en-têtes ou en changeant le type de contenu au transport différentes charges utiles. Et les en-têtes sont les méta-données et la capacité de négociation et automatiquement d'adaptation.

0
répondu Chao 2015-03-18 07:16:43