2017-12-26 22 views
0

Ich bin ein wenig verwirrt, wie Menschen Binärdaten darstellen, und wie es über Netzwerke gesendet wird. Ich werde das am Beispiel von Wikipedia erklären. UBz: < - https://imgur.com/a/POELH -> Also habe ich meine Binärdaten als Base 64 kodiert, und ich sende den Text TWFU. Also sende ich T dann W dann F und schließlich U. Aber um T zu senden, ein Zeichen. Ich brauche ein Byte, um es zu senden, wie mir immer gesagt wurde. Ein Zeichen, das über ein Netzwerk gesendet wird, ist ein Byte.Wie werden verschlüsselte Daten über ein Netzwerk gesendet?

Weil ich jetzt zu der Überzeugung gekommen bin, dass wenn ich 24 Bytes kodiere, ich über 4 Zeichen senden werde, aber um über 4 Zeichen zu senden, brauche ich die gleiche Menge an Bytes wie Zeichen ??

Also beim Senden über das Netzwerk "Man" (unencoded) (Requiring 3 bytes normally) vs "TWFu" (encoded) (requiring 4 bytes normally) im Beispiel von oben, sind die gleiche Sequenz von Bits über das Netzwerk die gleiche gesendet. Da ich beim letzten Mal einen Socket verwendet habe, um Daten zu senden, fragen sie nur nach einer Zeichenketteneingabe, niemals nach einer Text + -Kodierungseingabe.

Antwort

1

Base64 ist eine Methode zum Kodieren beliebiger 8-Bit-Daten in einem reinen 7-Bit-Kanal. So sehr das Internet auf dem Prinzip von 8-Bit-Bytes basiert, wird angenommen, dass es für den Textmodus 7-Bit-ASCII ist, sofern nicht anders angegeben.

Wenn Sie diese Daten Base64 codiert senden, dann senden Sie buchstäblich TWFU. Viele textbasierte Protokolle verwenden Base64 aus praktischen Gründen: Es ist ein etablierter Standard und für die meisten Anwendungen effizient genug.

Die Grundlage des Internets, IP, ist ein Protokoll, das auf 8-Bit-Bytes basiert. Wenn Sie binäre Daten senden, können Sie alle 8 Bits vollständig nutzen, aber wenn Sie mit einem Textmodus-Protokoll arbeiten, von dem es viele gibt, stecken Sie normalerweise 7-Bit-ASCII fest, es sei denn, das Protokoll hat eine Möglichkeit Geben Sie an, welcher Zeichensatz oder welche Kodierung Sie verwenden.

Wenn Sie die Möglichkeit haben, zu einer "binären" Übertragung zu wechseln, können Sie Side Base für Base64 verwenden. Wenn Sie mit einem 7-Bit-ASCII-Protokoll arbeiten, benötigen Sie wahrscheinlich Base64.

Beachten Sie, dass dies nicht die einzige Methode zum Codieren beliebiger Binärzeichen ist. Es gibt auch quoted printable wie in E-Mail und URI encoding für URLs verwendet. Diese sind effizienter in Fällen, in denen das Ausbrechen außergewöhnlich ist, aber viel weniger effizient, wenn dies für jedes Zeichen erforderlich ist.

+0

Sie sagen also, dass ich über das Netzwerk "TWFu" senden, die 4 Bytes benötigt. Sobald es über das Netzwerk ist, dekodiert die Person es? Ich verstehe nur nicht den Sinn, etwas zu codieren, das MEHR Zeichen benötigt. In diesem Beispiel könnten sie "Man" über das Netzwerk senden und 3 Bytes benötigen. Aber sie codieren es zu "TWFu", das 4 Bytes benötigt. Ich sehe den Punkt darin nicht, sobald es über das Netzwerk gesendet wird, entschlüsselt die Person es und viele Bytes werden ignoriert? 'https: // de.wikipedia.org/wiki/Base64' Lesen aus dem ersten Beispiel hier. –

+0

Normalerweise codieren Sie nicht 7-Bit-ASCII, aber Sie würden für binären Inhalt, der mit Legacy-Systemen kompatibel sein muss. E-Mail verwendet als Beispiel Base64 für Anhänge, um sicherzustellen, dass die E-Mail selbst einfach nur Text ist und einfach verarbeitet werden kann. Die Dekodierung liegt in der Verantwortung des Empfängers und wird normalerweise durch das Protokoll oder den Standard bestimmt. Die Bytes werden nicht "ignoriert", ich bin nicht sicher, wo Sie diesen Eindruck bekommen. – tadman

+0

Der Schlüssel hier ist, dass Text-Modus-Protokolle, von denen es viele gibt, in der Regel 7-Bit-Codierung nach dem ASCII-Standard erfordern. Neuere textbasierte Kodierungen (z. B. JSON) verwenden UTF-8, das 8-Bit ist, aber immer noch keine willkürlichen Binärdaten enthalten kann, da in UTF-8 das höchste Bit eine signifikante Bedeutung für Multi-Byte-Zeichen hat. Base64 ist eine 6-Bit-Kodierung und funktioniert ziemlich gut mit * den meisten * der Nur-Text-Zeichen im ASCII-Standard. Denken Sie daran, dass 0 bis 31 als "Steuerzeichen" reserviert sind, die eine besondere Bedeutung haben, wie zB Zeilenvorschub und so weiter. – tadman

0

Wenn Sie wissen, dass Sie nur mit 7-Bit-Text arbeiten, brauchen Sie keine Base-64-Kodierung.

Wenn Sie jedoch

Man 
Boy 

über einen rein 7-Bit-Kanal senden würde brauchen Sie nicht mit den Zeilenumbrüche als wörtliche senden. Stattdessen würden Sie codierte Basis 64

senden, die Zeilenumbrüche codiert hat, aber keine inkompatiblen Zeichen verwendet. Natürlich muss der Empfänger wissen, dass Sie verschlüsselten Text senden - entweder durch das verwendete Protokoll impliziert oder in irgendeiner Weise explizit markiert.

+0

Ich bin verwirrt, wo Sie und das andere Plakat diesen 7-Bit von, 7-Bit-Kanal bekommen? Nicht sicher, was Sie meinen –

+0

Viele Anwendungsprotokolle können nur 7 Bit verwenden und sind nicht in der Lage, vollständige 8-Bit-Daten zu übertragen/empfangen, z. SMTP oder IMAP. Stellen Sie sich vor, Sie senden ein binäres JPEG-Bild mit einer Schreibmaschine. – Zac67

2

Synopsis: "Wie" ist eine Vereinbarung. "Roh" ist üblich.


Die Daten werden auf die gleiche Weise gesendet, wie Sender und Empfänger übereinstimmen. Es gibt viele Protokolle, die Standardvereinbarungen sind. Protokolle arbeiten auf vielen Ebenen. Ein sehr häufiges Paar, das zwei Ebenen abdeckt, ist TCP/IP. Viele Protokolle höherer Ebene sind darüber geschichtet.(Ein Protokoll höherer Ebene hängt möglicherweise von bestimmten zugrunde liegenden Protokollen ab.) HTTP und SMTP sind sehr häufige Protokolle auf höherer Ebene, oft mit SSL dazwischen.

Manchmal werden die Ebenen oder die Software, die sie implementiert, als Stapel bezeichnet. Es gibt auch die Referenz (oder konzeptionelle) OSI Model. Der entscheidende Punkt dabei ist, dass es eine Sprache bietet, um über verschiedene Ebenen zu sprechen. Die von ihm definierten Layer können einem bestimmten Stapel zugeordnet sein oder auch nicht.

Ihre Frage ist zu vage, um direkt zu antworten. Bei HTTP werden ständig "rohe" Binärdaten übertragen. Die HTTP-Header können die Länge des Bodys in Oktetten angeben und der Body folgt der Kopfzeile. Als Teil der Vereinbarung zwischen dem Sender und dem Empfänger kann der Header Metadaten über die binären Daten unter Verwendung von MIME-Headern bereitstellen. Zum Beispiel: Ihr Gravatar enter image description here mit Header einschließlich gesendet:

content-length:871 
content-type:image/png 

das reicht für den Empfänger zu wissen, dass der Absender behauptet, dass es sich um eine PNG-Grafik von 871 Byte. Der Empfänger liest den Header und liest dann 871 Bytes für den Body und nimmt dann an, dass ein HTTP-Header folgt.

Einige Protokolle verwenden andere Synchronisierungsmethoden als Körper mit vordefinierten Größen. Sie können vollständig textbasiert sein und eine Syntax verwenden, die nur bestimmte Zeichen zulässt. Sie können durch eine Verschachtelungsvereinbarung erweitert werden, um so etwas wie Base64 zu verwenden, um binäre Daten als Text darzustellen.

Einige Schichten bieten möglicherweise eine Datenkomprimierung mit ausreichender Dichte, so dass die Erweiterung durch höhere Schichten wie Base64 keine große Rolle spielt. Siehe zum Beispiel HTTP Compression.

Wenn Sie HTTP in Aktion sehen möchten, drücken Sie F12 und gehen Sie auf die Registerkarte Netzwerk. Wenn Sie andere aktive Protokolle auf Ihrem Computer sehen möchten, versuchen Sie WireShark, Microsoft Message Analyzer, Fiddler oder ähnliches.

Verwandte Themen