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.
Antworten:
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:
Antwort:
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:
Antwort:
Wo die Feldnamen überhaupt nicht übertragen werden müssten und wo beispielsweise
responseType
in 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.quelle
Hier ist eine Art Cop-Out-Definition:
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:
[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:
[Ich habe das gerade sofort erfunden.]
Es gibt dort einfach nicht so viel Unklarheit.
Eine andere Definition, die ich manchmal gehört habe, ist
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:
Verdammt, es ist schon eine Weile her, seit ich das getan habe. Nicht wenige Fehler drin :-)
quelle
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 .
quelle
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.
quelle
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").
Sie sollten diese Base64 lesen
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.
quelle
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.
quelle
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.
quelle
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.
quelle