Nach meinen Erkenntnissen sind sehr viele Protokolle, die über das Internet übertragen werden, eher "textbasiert" als binär. Zu den fraglichen Protokollen gehören unter anderem HTTP, SMTP, FTP (ich denke, dies ist alles textbasiert?), WHOIS und IRC.
Tatsächlich springen einige dieser Protokolle durch einige Rahmen, wenn sie Binärdaten übertragen möchten .
Gibt es einen Grund dafür? Textbasierte Protokolle haben offensichtlich einen gewissen Overhead, da sie mehr Daten senden müssen, um die gleiche Menge an Informationen zu übertragen (siehe Beispiel unten). Welche Vorteile überwiegen?
Mit textbasiert meine ich, dass die meisten im Protokoll verwendeten Zeichen zwischen 0x20
(Leerzeichen) und 0x7E
( ~
) stehen, wobei gelegentlich "Sonderzeichen" für ganz spezielle Zwecke verwendet werden , wie z. B. die Zeilenumbrüche, Null, ETX und EOT. Dies steht im Gegensatz zur Übertragung von binären Rohdaten über die Verbindung.
Zum Beispiel 123456
würde das Übertragen der Ganzzahl als Text das Senden der Zeichenfolge 123456
(dargestellt in hexadezimaler Form 31 32 33 34 35 36
) beinhalten, wohingegen der 32-Bit-Binärwert als (dargestellt in hexadezimaler Form) gesendet würde 0x0001E240
(und wie Sie sehen können, das spezielle Nullzeichen "enthält" .
Antworten:
Als die Welt noch jünger war und Computer nicht nur verherrlichte PCs waren, variierten die Wortgrößen (ein Dezember 2020, den wir hier hatten, hatte 36-Bit-Wörter), das Format von Binärdaten war ein umstrittenes Problem (Big Endian vs. Little Endian und sogar noch seltsamer) Bitreihenfolgen waren vernünftigerweise üblich). Es bestand wenig Übereinstimmung über die Zeichengröße / -codierung (ASCII, EBCDIC waren die Hauptkonkurrenten, unser DEC hatte 5/6/7/8 Bit / Zeichencodierung). ARPAnet (der Internet-Vorgänger) wurde entwickelt, um Maschinen jeder Art zu verbinden. Der gemeinsame Nenner war (und ist) Text. Sie können sich ziemlich sicher sein, dass 7-Bit-codierter Text nicht durch die zugrunde liegenden Mittel zum Versenden von Daten beschädigt wird (bis vor kurzem war das Senden von E-Mails in einer 8-Bit-Codierung eine Garantie dafür, dass der Empfänger verstümmelte Nachrichten erhält.)
Wenn Sie z. B. in den Telnet- oder FTP-Protokollbeschreibungen stöbern (die ersten Internetprotokolle, bei denen die Netzwerkidee darin bestand, eine Remoteverbindung mit einem "Supercomputer" herzustellen und Dateien hin und her zu mischen), werden Sie feststellen, dass die Verbindung das Aushandeln vieler Details umfasst wir nehmen als uniform,
Ja, binär wäre (ein bisschen) effizienter. Aber Maschinen und Erinnerungen (und auch Netzwerke) sind enorm gewachsen, so dass das bisschen Fummeln von früher (meistens) der Vergangenheit angehört. Und niemand, der bei Verstand ist, wird vorschlagen, alle vorhandenen Protokolle herauszureißen, um sie durch binäre Protokolle zu ersetzen. Außerdem bieten Textprotokolle eine sehr nützliche Debugging-Technik. Heute installiere ich nie den Telnet-Server (besser das verschlüsselte SSH-Protokoll für Remoteverbindungen), sondern muss den Telnet-Client zur Hand haben, um mit einem fehlerhaften Server zu "sprechen", um Fehler zu finden. Heute würden Sie wahrscheinlich netcat oder ncat zum Herumfummeln verwenden ...
quelle
Ein Vorteil, der übersehen werden könnte, ist die Fähigkeit zu experimentieren . Wenn Sie Teile in die Röhre schieben, müssen Sie ein Hilfsprogramm schreiben, das sich
EHLO
in0x18
oder ähnliches übersetzt. Stattdessen können Sie einfach in einen Mail-Server telneten, sendenEHLO
und unterwegs sein.Nichts hindert Sie heutzutage daran, Code in Assembly oder Brainf * ck zu schreiben , und Sie könnten auf diese Weise sehr wohl ein paar Kleinigkeiten einsparen. Es ist jedoch nicht einfach, jemandem zu erklären, was Sie genau getan haben, damit er Ihren Code versteht und mit ihm interagiert.
Bei Protokollen ist es wichtig, dass Benutzer den Umgang mit ihnen leicht erlernen können, da die meisten Benutzer von ARPAnet oder den Anfängen des Internets Personen waren, die sich hinter einem Terminal wohl fühlten.
Ähnliche Argumente finden sich übrigens heute in Unternehmen. Sollten wir zu JSON oder BSON serialisieren (binäre Darstellung von JSON)? Wenn Sie auf BSON serialisieren, fallen einige Kosten an, aber Sie benötigen jetzt einen Übersetzer, um Ihr BSON in JSON umzuwandeln und umgekehrt, da ein Mensch diese Daten irgendwann lesen muss, wenn unvermeidlich etwas schief geht.
quelle
EHLO
. Jedes vom Menschen verwendbare Frontend für das Binärprotokoll könnte einen eigenen Namen haben, wenn der Binärstandard0x18
-in-this-position nicht genannt hätte.Es ist nicht so, dass viele Internetprotokolle textbasiert sind. In der Tat, wenn ich raten würde, würde ich sagen, dass textbasierte Protokolle in der Minderheit sind. Für fast jedes textbasierte Protokoll, das Sie im Internet sehen, gibt es mindestens zwei Binärprotokolle, die erfunden wurden, um dieselben oder ähnliche Daten zu senden.
Aber es ist wahr , dass die Mehrheit der Internet - Verkehr Verwendung textbasierte Protokolle. Diese Tatsache ist interessant, wenn Sie davon ausgehen, dass es viel mehr Binärprotokolle als Text, aber viel mehr Textverkehr als Binärprotokolle gibt. Dies bedeutet, dass die meisten erfolgreichen Protokolle im Internet textbasiert sind. Bis auf eine kleine Anzahl von Anwendungen (Bittorrent ist ein Beispiel) neigen Binärprotokolle zum Absterben.
In den Anfängen des Internets tendierten Unternehmen dazu, Binärprotokolle zu entwerfen und zu verwenden (MSN zum Beispiel, nicht die heutige MSN-Website, das ursprüngliche proprietäre MicroSoft-Netzwerk, das HTTP ersetzen sollte), während Militär, Forschungsinstitute und Akademiker dies taten Entwerfen und Verwenden von textbasierten Protokollen. Ein Grund dafür war, dass das Erstellen und Debuggen von Binärprotokollen schwierig war und Unternehmen es sich leisten können, die Leute dafür zu bezahlen, während das Militär, Forscher und Akademiker es in ihrer Freizeit für kein Gehalt taten (die meisten Leute, die das Internet entwickelten, hatten es getan) Arbeitsplätze, die nicht mit der Entwicklung des Internets zusammenhängen).
Wenn Sie als Hobby an Wochenenden Code schreiben und nicht für das bezahlt werden, was Sie tun, entscheiden Sie sich für die einfachere Lösung - den Text. So wurden textbasierte Protokolle von mehr Menschen als binäre Protokolle verwendet.
Aber das ist nicht die ganze Geschichte. Ein Netzwerk aufzubauen ist schwer. Sehr hart. Wir sind heute so an das Internet gewöhnt, dass wir nicht genau erkennen, was für ein Wunder der Technik es ist. Fast jeder Aspekt des Internets ist aus einer Fehlerbehebung hervorgegangen. Beispielsweise verwenden wir die IP-Adresse anstelle der MAC-Adresse, weil wir damit Router mit nur Kilobyte (oder heutzutage Megabyte) anstelle von Terabyte RAM für die Routingtabelle erstellen können. Je mehr Probleme wir zu lösen versuchten, desto mehr bevorzugen wir textbasierte Protokolle, um sie zu debuggen. Nachdem wir genug Erfahrung mit der Entwicklung von Netzwerkprotokollen auf niedriger Ebene hatten, bevorzugten die meisten erfahrenen Programmierer und Ingenieure bei der Entwicklung von Anwendungsprotokollen eher Textprotokolle.
Aus eigener Erfahrung habe ich für einen Router eines Unternehmens und für einen Telemetrie-Hersteller gearbeitet. Daher habe ich viel Erfahrung mit binären Protokollen wie TCP / IP, ARP, IEC60870-5- 101 und DNP3. Ich habe auch mit Textprotokollen wie HTTP, POP3 und NMEA gearbeitet. Ich habe auch mit binären Datenformaten wie ASN.1 und Textdatenformaten wie JSON und XML gearbeitet. Wenn ich wählen würde, würde ich fast jedes Mal Text wählen. Das einzige Mal, dass ich binär wählen würde, ist, wenn das Protokoll wirklich niedrig ist (dann würde ich gerade genug implementieren, damit ich ein textbasiertes Protokoll darüber oder darüber schreiben kann), oder die Daten sind natürlich binär (wie Audiodateien). .
quelle
Strukturierte Binärdateien haben auch Einschränkungen beim Erweitern. In den Tagen, in denen ich mit FidoNet zusammengearbeitet und ein Gateway zwischen FidoNet und UUCP / USNET aufgebaut habe, waren die Nachrichtenköpfe von Fidonet eine strukturierte Binärdatei. Es zu erweitern, indem nur versucht wird, irgendwo ein Byte hinzuzufügen, bedeutet, alles herauszubrechen, was versucht, damit zu arbeiten. Wenn Sie einen Textkopf oder ein Protokoll haben, können Sie etwas erweitern, ohne Dinge zu beschädigen.
quelle
Ihre Frage kann auf drei Arten interpretiert werden:
printf()
?Die Antwort auf die erste Frage lautet Interoperabilität. Ganzzahlen und Gleitkommawerte haben unterschiedliche binäre Darstellungen auf verschiedenen Rechnern oder sogar Compilern oder sogar nur mit unterschiedlichen Compileroptionen. Die effektive Übertragung per
printf/scanf
macht die Interoperabilität einfach. Beachten Sie, dass diese Auswahl nur für die Protokolle höherer Ebenen getroffen wurde, von denen einige oben erwähnt wurden. Auf der Netzwerkschicht werden Daten binär übertragen. Zu diesem Zweck definiert TCP / IP eine binäre Ganzzahldarstellung, und Bibliotheken, die TCP / IP implementieren, bieten Mittel zum Konvertieren zwischen Host- und Netzwerkdarstellungen mithtonl
und mit Freunden.Die Antwort auf die zweite Frage lautet wahrscheinlich, dass RFC 206 (beachten Sie die niedrige Nummer - 1971!) Das Telnet-Protokoll, auf dem viele Protokolle der Anwendungsschicht basieren, als direkten Ersatz für Teletypen beschreibt
(Hervorhebung im Originaltext.) Wenigstens einige Teletypen und insbesondere Teletypnetze verwendeten 7-Bit-ASCII als Zeichensatz, was eine natürliche Wahl gewesen sein musste.
Die Antwort auf die dritte lautet einfach: Da die Protokolle der Anwendungsschicht auf Telnet basieren und Telnet 7-Bit-ASCII ist, war viel Soft- und Hardware nicht darauf vorbereitet, mit 8-Bit-Daten umzugehen . Das Senden von binären Anhängen kann als Missbrauch von E-Mails angesehen werden. daher die Reifen. Heutzutage ist dies normalerweise nicht mehr der Fall und die Protokolle werden ständig erweitert (oder einfach verwendet), um Binärdaten direkt zu verarbeiten.
quelle