Warum sind so viele Internetprotokolle textbasiert?

47

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 123456wü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" .

IQAndreas
quelle
3
Von den 5 genannten Protokollen wurden HTTP, SMTP, WHOIS und IRC hauptsächlich zum Austausch von Textdaten entwickelt.
el.pescado
4
Beachten Sie, dass HTTP / 2 ein binäres Protokoll ist.
Isanae
4
Sie beziehen sich hauptsächlich auf Protokolle der Anwendungs- und Präsentationsebene . Protokolle niedrigerer Ebene (TCP, IP, Ethernet) sind fast immer binär.
Nick T
2
FTP hat einen Binärmodus, der beim Übertragen von Binärdateien sehr wichtig war, da der normale Übertragungsmodus in vielen Clients Zeilenenden neu schreibt, um der Hostkonvention zu entsprechen, die Binärdateien beim Übertragen zwischen Hosts mit unterschiedlichen Zeilenenden beschädigt. Dieser Binärmodus war nur für die Dateiübertragung gedacht und wirkte sich nicht auf die Befehle aus.
Casey
2
FTP verwendet zwei Netzwerkverbindungen, eine textbasierte (Befehlskanal) und eine binäre (Datenkanal).
Pseudonym

Antworten:

40

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 ...

vonbrand
quelle
10
Die Problemlösung wird ebenfalls erheblich verbessert. Das Lesen einer Paketerfassung ist schwierig genug. Es wird sogar noch schlimmer, wenn Anwendungen keine Nachrichten in einem für Menschen lesbaren Format senden.
Nanban Jim
5
"Und niemand, der bei Verstand ist, wird vorschlagen, alle vorhandenen Protokolle herauszureißen, um sie durch Binärprotokolle zu ersetzen" - Sie verhandeln stattdessen Ihren Weg von den textbasierten Protokollen zu dem, was Sie für besser halten, von HTTP zu dem, was es war SPDY Request Header-Komprimierung und ist jetzt Teil von HTTP / 2. Oder von HTTP zu binären Inhaltstypen oder Übertragungscodierungen.
Steve Jessop
4
Mit Nur-Text-Protokollen können Sie auch potenziell gefährliche oder nicht vertrauenswürdige Daten sicher untersuchen. Ich verwende beispielsweise Telnet, wenn ich einen Spam- / Phishing-Versuch erhalte, von dem ich praktisch garantieren kann, dass er meinem System keinen Schaden zufügt. Ein textbasierter Zugriff auf ein System ist von entscheidender Bedeutung. Selbst heute werden Sie feststellen, dass HTTP / 1.1 selten "Nur-Text" ist, da der Accept-Encoding-Header eine Komprimierung ermöglicht, die von den meisten Browsern und Servern unterstützt wird, um Seiten schneller zu laden.
Phyrfox
Auf der Vintage Computer Fair im Mittleren Westen fand ich es interessant, dass Maschinen wie der Altair 680 Code im Motorola S-Record-Format benötigen, das 76 Zeichen für jeweils 32 Datenbytes (44 Overhead-Zeichen) verwendet. Selbst wenn man sich auf die Verwendung eines 41-stelligen Zeichensatzes wie 0-9 AZ + - * / = beschränken würde, sollte es dennoch möglich sein, diesen auf etwas näher an 57 Zeichen (25 Zeichen Overhead) zu reduzieren, was die Zeit für ein verkürzen würde ASR-33, um 1 K Code von 4 Minuten auf ungefähr drei zu übertragen. Angesichts der langsamen E / A-Geschwindigkeiten frage ich mich, warum solche Dinge anscheinend nicht häufig ausgeführt wurden.
Supercat
24

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 EHLOin 0x18oder ähnliches übersetzt. Stattdessen können Sie einfach in einen Mail-Server telneten, senden EHLOund 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.

Naftuli Kay
quelle
Wenn Protokolle als binäre in erster Linie entworfen worden, sondern als eine binäre Abkürzung für ein Textprotokoll, kann es nicht einmal sein eine gemeinsam vereinbarte Begriff wie EHLO. Jedes vom Menschen verwendbare Frontend für das Binärprotokoll könnte einen eigenen Namen haben, wenn der Binärstandard 0x18-in-this-position nicht genannt hätte.
Peter Cordes
10

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). .

Slebetman
quelle
3

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.

Tim Pozar
quelle
Gelernte Lektion: Versions-Tag in Binärdaten einfügen.
Peter - Reinstate Monica
3

Ihre Frage kann auf drei Arten interpretiert werden:

  1. Warum werden numerische Daten in Textdarstellung übertragen, als ob sie mit zB gedruckt worden wären printf()?
  2. Warum verwenden die klassischen Protokolle der Anwendungsschicht - z. B. der FTP-Steuerkanal, SMTP, HTTP - traditionell alle einen 7-Bit-ASCII-Zeichensatz? (7-Bit-ASCII kann als "Text" betrachtet werden, da die meisten Bytes druckbaren Glyphen oder Textsteuerungscodes wie Zeilenvorschub und Feed entsprechen.)
  3. Warum werden Blobs von Binärdaten häufig in 7-Bit-ASCII konvertiert, wenn sie über das Internet gesendet werden, z. B. als E-Mail-Anhang?

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/scanfmacht 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 mit htonlund 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

deren Funktion es ist ein Online - System - Terminal zu machen scheinen zu jedem Fernschreiber-kompatibel, Time-Sharing - System im Netzwerk , als ob es direkt an dem System angeschlossen wurde .

(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.

Peter - Setzen Sie Monica wieder ein
quelle