binäre Protokolle v. Textprotokolle


89

Hat jemand eine gute Definition für ein Binärprotokoll? und was ist eigentlich ein textprotokoll? Wie vergleichen sich diese in Bezug auf die auf dem Draht gesendeten Bits?

Hier ist, was Wikipedia über binäre Protokolle sagt:

Ein binäres Protokoll ist ein Protokoll, das von einer Maschine und nicht von einem Menschen gelesen werden soll oder soll ( http://en.wikipedia.org/wiki/Binary_protocol ).

Ach komm schon!

Um klarer zu sein, wenn ich eine JPG-Datei habe, wie würde das über ein Binärprotokoll und wie über ein Textprotokoll gesendet werden? in Bezug auf die auf der Leitung gesendeten Bits / Bytes natürlich.

Am Ende des Tages, wenn Sie sich eine Zeichenfolge ansehen, handelt es sich selbst um ein Array von Bytes, sodass die Unterscheidung zwischen den beiden Protokollen davon abhängen sollte, welche tatsächlichen Daten auf der Leitung gesendet werden. Mit anderen Worten, wie die Anfangsdaten (JPG-Datei) vor dem Senden codiert werden.


mögliches Duplikat von binären vs
Textprotokollen

Antworten:


162

Beim binären Protokoll im Vergleich zum Textprotokoll geht es nicht wirklich darum, wie binäre Blobs codiert werden. Der Unterschied besteht darin, ob sich das Protokoll an Datenstrukturen oder an Textzeichenfolgen orientiert. Lassen Sie mich ein Beispiel geben: HTTP. HTTP ist ein Textprotokoll, obwohl beim Senden eines JPEG-Bildes nur die Rohbytes gesendet werden, keine Textcodierung.

Was HTTP jedoch zu einem Textprotokoll macht, ist, dass der Austausch zum Abrufen des JPG folgendermaßen aussieht:

Anfrage:

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

Antwort:

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>

Beachten Sie, dass dies sehr leicht viel enger in eine Struktur gepackt werden könnte, die (in C) ungefähr so ​​aussehen würde

Anfrage:

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;
};

Antwort:

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[];
};

Wo die Feldnamen überhaupt nicht übertragen werden müssten und wo beispielsweise responseTypein der Antwortstruktur ein int mit dem Wert 200 anstelle von drei Zeichen '2' '0' '0' ist. Das ist ein textbasiertes Protokoll: eines, das als flacher Strom von (normalerweise für Menschen lesbaren) Textzeilen und nicht als strukturierte Daten vieler verschiedener Typen kommuniziert werden soll.


19
+1 für die 1-Liner-Definition "Der Unterschied besteht darin, ob sich das Protokoll an Datenstrukturen oder an Textzeichenfolgen orientiert."
Frank Shearar

2
Tyler, danke für die Antwort, eine ziemlich tiefe, die ich sagen sollte. Geek-Szenario, das auf dem beruht, worüber wir uns alle einig sind, auf dem Drahtweg nur Nullen und Einsen. Sagen Sie mir bitte, ob dies erfasst, was Sie erwähnen. Angenommen, ich möchte Nummer 15 (Dez) über das Netzwerk senden (Sie haben 2 identische Computer über das Netzwerk, kein großes / kleines indisches Chaos usw.). Wenn ich ein Binärprotokoll verwenden werde (sagen wir, ich sende es über einen TCP-Socket), wird dies als 00001111 auf dem Draht angezeigt, aber wenn ich ein Textprotokoll verwenden werde, wird es als 00110001 (ASCII für Zeichen 1) UND verwendet 00110101 (ASCII für char 5) wahr oder Mist? :)
der_grosse

1
Das ist richtig. Der Vorteil der Textausführung besteht nicht nur in der Lesbarkeit durch den Menschen, sondern auch darin, dass Sie sich keine Sorgen um die Endianness machen müssen, wenn Ihre Zahlen länger als ein Byte sind.
Tyler McHenry

1
Ich bin weder mit der 1-Zeilen-Definition noch mit dem Beispiel des Sendens von Zeichen 15 einverstanden. Um die Unterschiede zu sehen, muss ich, wie ich in meiner Antwort angegeben habe, den gesamten Zeichensatz und die Begrenzer / Protokolle kennen. Das kann man nicht sagen basierend auf einem einzelnen Datenbeispiel, wenn das Protokoll textbasiert oder binärbasiert ist. Sie könnten auf das Kabel "schauen" und eine 65 (char 'A') sehen, und Sie können immer noch nicht sagen, dass es sich um ein textbasiertes oder ein binäres Protokoll handelt. Beide könnten dieselbe Darstellung für ein einzelnes Zeichen haben oder nicht, aber das ist nicht grundlegend.
Hernán Eche

25

Hier ist eine Art Cop-Out-Definition:

Sie werden es wissen, wenn Sie es sehen.

Dies ist einer der Fälle, in denen es sehr schwierig ist, eine präzise Definition zu finden, die alle Eckfälle abdeckt. Es ist aber auch einer dieser Fälle, in denen die Eckfälle völlig irrelevant sind, weil sie im wirklichen Leben einfach nicht auftreten.

So ziemlich alle Protokolle, denen Sie im wirklichen Leben begegnen, sehen entweder so aus:

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

[Stellen Sie sich dort eine Menge anderen nicht druckbaren Mist vor. Eine der Herausforderungen bei der Übermittlung des Unterschieds zwischen Text und Binär ist, dass Sie die Übermittlung im Text durchführen müssen :-)]

Oder so:

< 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

[Ich habe das gerade sofort erfunden.]

Es gibt dort einfach nicht so viel Unklarheit.

Eine andere Definition, die ich manchmal gehört habe, ist

Ein Textprotokoll ist eines, mit dem Sie debuggen können telnet

Vielleicht zeige ich hier meine Nerdigkeit, aber ich habe tatsächlich E-Mails über SMTP und POP3 geschrieben und gelesen, Usenet-Artikel über NNTP gelesen und Webseiten über HTTP mit verwendet telnet, und zwar aus keinem anderen Grund, als um zu sehen, ob es tatsächlich funktionieren würde.

Eigentlich habe ich beim Schreiben wieder Fieber bekommen:

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.

Verdammt, es ist schon eine Weile her, seit ich das getan habe. Nicht wenige Fehler drin :-)


7

Beispiele für binäre Protokolle: RTP , TCP , IP .

Beispiele für Textprotokolle: SMTP , HTTP , SIP .

Dies sollte es Ihnen ermöglichen, eine vernünftige Definition von Binär- und Textprotokollen zu verallgemeinern.

Tipp: Fahren Sie einfach mit den Beispielabschnitten oder den Diagrammen fort. Sie dienen dazu, Tylers rockige Antwort zu veranschaulichen .


1
Frank, danke für die Links, aber wenn ich mit den RFCs fertig bin, wird es 2099 sein :) Ich wollte einige Antworten von Leuten, die diese bereits gelesen haben. Ich
denke

Muss sagen, tolles Teilen.
Iqra.

5

Wie die meisten von Ihnen vorgeschlagen haben, können wir nicht einfach anhand des Inhalts auf der Leitung unterscheiden, ob das Protokoll Binär oder Text ist

AFIK

Binäres Protokoll - Bits sind Grenzen Die Reihenfolge ist sehr kritisch

ZB RTP

Die ersten beiden Bits sind die Version. Das nächste Bit ist das MarkUp-Bit

Textprotokoll - Protokollspezifische Begrenzer Die Reihenfolge der Felder ist nicht wichtig

ZB SIP

Zum anderen können wir im Binärprotokoll ein Byte aufteilen, dh ein einzelnes Bit kann eine bestimmte individuelle Bedeutung haben. Während in einem Textprotokoll die minimale sinnvolle Einheit BYTE ist. Sie können kein Byte teilen.


2

Beide verwenden unterschiedliche Zeichensätze, der Text einen, verwenden einen reduzierten Zeichensatz, die Binärdatei enthält alles, was sie kann, nicht nur "Buchstaben" und "Zahlen" (deshalb sagt Wikipedia "Mensch").

Um klarer zu sein, wenn ich eine JPG-Datei habe, wie würde das über ein Binärprotokoll gesendet und wie> über ein Textprotokoll? in Bezug auf die auf der Leitung gesendeten Bits / Bytes natürlich.

Sie sollten diese Base64 lesen

Kommentare werden geschätzt, ich versuche hier auf das Wesentliche zu kommen.

Ich denke, die Essenz für die Einschränkung des Zeichensatzes besteht darin, die Komplexität zu verringern und Portabilität und Kompatibilität zu erreichen. Es ist schwieriger, mit vielen einen breiten Zeichensatz (oder einen breiten Satz) zu vereinbaren und diesen zuzustimmen. Das lateinisch / römische Alphabet und die arabischen Ziffern sind weltweit bekannt. (Es gibt natürlich andere Überlegungen, um den Code zu reduzieren, aber das ist eine wichtige)

Nehmen wir an, in binären Protokollen handelt es sich bei dem "Vertrag" zwischen den Teilen um Bits, das erste Bit bedeutet dies, das zweite usw. oder sogar Bytes (aber mit der Freiheit, den Zeichensatz zu verwenden, ohne an Portabilität zu denken), beispielsweise in einem privaten geschlossenen System oder (in der Nähe von Hardware-Standards). Wenn Sie jedoch ein offenes System entwerfen, müssen Sie berücksichtigen, wie Ihre Codes in einer Vielzahl von Situationen dargestellt werden, z. B. wie sie in einer Maschine auf einer anderen Seite der Welt dargestellt werden Hier kommen die Textprotokolle, in denen der Vertrag so weit wie möglich standardisiert wird. Ich habe beides entworfen und das waren die Gründe, binär für sehr kundenspezifische Lösungen und Text für offene oder / und tragbare Systeme.


Ich weiß über base64 Bescheid und was es tut, und genau das habe ich mir vorgestellt, als ich die Frage gestellt habe. base64 ist gut, wenn ich etwas in seiner ASCII-Darstellung (Codierung) senden möchte, so dass dies ein Textprotokoll wäre. Technisch gesehen teilt es die Biteingabe in 6er-Paare auf, verwendet eine Nachschlagetabelle und so weiter. Kann jemand eine ähnliche Erklärung dafür geben, wie ein binäres Protokoll funktioniert? Zusatzfrage: Auf welcher OSI-Ebene können wir über Binär- und Textprotokolle sprechen und welche genaue Bedeutung haben diese Welten auf diesen Ebenen?
der_grosse

1
Beispiele für Binärdateien sind Protokolle auf niedriger Ebene wie einfache serielle Kommunikation ( en.wikipedia.org/wiki/Asynchronous_serial_communication ) oder wie Daten im Speicher gespeichert werden ( en.wikipedia.org/wiki/Data_structure_alignment ). Über OSI. Nun, da Text- und Binärprotokolle zur Darstellung von Daten verwendet werden (nicht nur für die Kommunikation), müssen sie sich nicht auf einer OSI-Ebene befinden. Ich kann sagen, dass Schicht 1,2,3,4 "binär" haben Protokoll "und" Textprotokoll "können auf 5,6,7 stehen.
Hernán Eche

1

Wie können wir eine Bilddatei in SOAP senden: Klicken Sie hier

Dies zeigt, dass Binärdaten als solche angehängt sind [ATTACHMENT] und ihre Referenz in einer SOAP-Nachricht gespeichert ist.

Das Protokoll ist also textbasiert und data [Image] ist ein binärer Anhang, dessen Codierung nicht relevant ist

Daher ist SOAP ein Textprotokoll, da wir Soap-Header angeben und keine tatsächlichen Daten darin codieren.


0

Ich denke du hast es falsch verstanden. Es ist nicht das Protokoll, das bestimmt, wie Daten auf dem "Draht" aussehen, sondern es ist der Datentyp, der bestimmt, welches Protokoll zum Übertragen verwendet wird. Nehmen wir zum Beispiel den TCP-Socket, eine JPEG-Datei wird mit einem Binärprotokoll gesendet und empfangen, da es sich um Binärdaten handelt (nicht lesbar, Bytes im Bereich von 32 bis 126 ASCII), aber Sie können eine Textdatei mit senden / empfangen beide Protokolle und Sie würden den Unterschied nicht bemerken.


Nein, ich glaube nicht, dass ich es falsch verstanden habe. Ich suche immer noch nach einer (guten) Definition, WAS ein Binärprotokoll ist. Das Beispiel mit dem JPEG war, meine Frage zu klären und nichts anderes, machen Sie es nicht zum Zentrum der Frage. Ich sollte sagen, dass das Protokoll bestimmt, wie die Daten aussehen, wenn sie auf der Leitung übertragen werden. Warum ist das ein Protokoll?
der_grosse

Ich habe dir eine genaue Definition gegeben, du musst nur sorgfältig lesen. "Ein binäres Protokoll verwaltet Bytes, die im Bereich von 32 bis 126 ASCII liegen und auch als nicht druckbare Zeichen bezeichnet werden"
Simone Margaritelli,

Die Textprotokolle behandeln diese auch, indem sie sie in kleinere aufteilen, die in die ASCII-Tabelle passen. und so weiter. Im besten Fall ist Ihre Definition also vage. aber danke für den Beitrag.
der_grosse

0

Das Textprotokoll kann selbsterklärend und umfangreich sein. Es ist selbsterklärend, da die Nachricht die Feldnamen nur in der Nachricht selbst enthält. Sie können nicht verstehen, welcher Wert in der Nachricht des Binärprotokolls bedeutet, wenn Sie sich nicht auf die Protokollspezifikation beziehen.

Es ist umfangreich, bedeutet, dass HTTP als Textprotokoll nur einfache Regeln enthält. Sie können die Datenstruktur jedoch erweitern, indem Sie frei neue Header hinzufügen oder den Inhaltstyp ändern, um verschiedene Nutzdaten zu transportieren. Und die Header sind die Metadaten und können ausgehandelt und automatisch angepasst werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.