протоколы двоичной синхронной передачи данных v. текстовых протоколов

у кого-либо есть хорошее определение для того, каков протокол двоичной синхронной передачи данных? и что такое текстовый протокол на самом деле? как они выдерживают сравнение друг с другом с точки зрения битов, отправленных на проводе?

вот то, что Википедия говорит о протоколах двоичной синхронной передачи данных:

Протокол двоичной синхронной передачи данных является протоколом, который предназначается или, как ожидают, будет прочитан машиной, а не человеком (http://en.wikipedia.org/wiki/Binary_protocol)

о, продвиньтесь!

быть более ясным, если бы у меня есть jpg файл, как это было бы отправлено через протокол двоичной синхронной передачи данных и как через текст один? с точки зрения битов/байты, отправленных на проводе, конечно.

в конце дня при рассмотрении строки, это - самостоятельно массив байтов, таким образом, различие между этими 2 протоколами должно возложить то, какие фактические данные отправляются на проводе. другими словами, о том, как исходные данные (jpg файл) кодируются прежде чем быть отправленным.

82
задан Alexander Farber 11 December 2018 в 17:03
поделиться

6 ответов

Сравнение двоичного протокола и текстового протокола на самом деле не о том, как кодируются двоичные капли. Разница в том, ориентирован ли протокол на структуры данных или на текстовые строки. Приведу пример: HTTP. HTTP - это текстовый протокол, хотя при отправке изображения jpeg он отправляет только необработанные байты, а не их текстовую кодировку.

Но что делает HTTP текстовым протоколом, так это то, что обмен с получить jpg выглядит следующим образом:

Запрос:

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

Ответ:

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>

Обратите внимание, что это можно было очень легко упаковать гораздо более плотно в структуру, которая будет выглядеть (на C) примерно как

Request:

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

Response:

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

Где имена полей не должны передаваться вообще, и где, например, responseType в структуре ответа представляет собой int со значением 200 вместо трех символов «2» «0» «0». Вот что такое текстовый протокол: протокол, который предназначен для передачи в виде плоского потока (обычно удобочитаемых) строк текста, а не в виде структурированных данных многих различных типов.

146
ответ дан 24 November 2019 в 09:10
поделиться

Я думаю, вы ошиблись. Внешний вид данных на экране определяется не протоколом. "провод", но именно тип данных определяет, какой протокол использовать для его передачи. Возьмем, к примеру, сокет tcp, файл jpeg будет отправлен и получен с помощью двоичного протокола, потому что это двоичные данные (не человеческие читаемые байты, которые попадают в диапазон 32-126 ascii), но вы можете отправить / получить текстовый файл с обоими протоколами, и вы не заметите разницы.

0
ответ дан 24 November 2019 в 09:10
поделиться

Примеры двоичных протоколов: RTP , TCP , IP .

Примеры текстовых протоколов: SMTP , HTTP , SIP .

Это должно позволить вам обобщить разумное определение двоичных и текстовых протоколов.

Совет: просто перейдите к разделам с примерами или диаграммам. Они служат для иллюстрации потрясающего ответа Тайлера .

6
ответ дан 24 November 2019 в 09:10
поделиться

Оба используют разные наборы символов, текстовый, используют сокращенный набор символов, двоичный файл включает все, что может, а не только «буквы» и «числа» (поэтому в Википедии написано «человек»)

o будьте более ясны, если у меня есть файл jpg, как он будет отправлен через двоичный протокол и как> через текстовый? с точки зрения бит / байтов, отправленных по сети, конечно.

вы должны прочитать это Base64

любые комментарии приветствуются, я пытаюсь добраться до сути вещей здесь.

Я думаю, что суть сужения кодировки заключается в сужении сложности и достижении переносимости, совместимости. Труднее организовать и согласиться со многими уважать широкую кодировку (или что-то еще). Латинский / латинский алфавит и арабские цифры известны во всем мире. (Конечно, есть и другие соображения по сокращению кода, но это главный)

Допустим, в бинарных протоколах «контракт» между частями касается битов, первый бит означает то, второй то и т. Д. Или даже байтов (но со свободой использования кодировки, не думая о переносимости), например, в закрытой закрытой системе или (рядом со стандартами оборудования), однако, если вы разрабатываете открытую систему, вы должны учитывать, как ваши коды будут представлены в широком наборе ситуаций, например, как он будет представлен в машине на другой стороне мира ?, поэтому здесь идут текстовые протоколы, в которых контракт будет максимально стандартным. Я разработал и то, и другое, и это было причиной: двоичный код для очень нестандартных решений и текст для открытых и / или переносимых систем.

3
ответ дан 24 November 2019 в 09:10
поделиться

Как большинство из вас предположили, мы не можем различить, является ли протокол двоичным или текстовым, просто глядя на содержимое в сети

AFIK

Бинарный протокол - Биты являются граничными Порядок очень важен

Например, RTP

Первые два бита - версия Следующий бит - это бит MarkUp

Текстовый протокол - разделители, специфичные для протокола. Порядок полей не важен

Например, SIP

Еще одно: в двоичном протоколе мы можем разделить байт, то есть отдельный бит может иметь определенное индивидуальное значение; В текстовом протоколе минимальная значимая единица - БАЙТ. Вы не можете разбить байт.

5
ответ дан 24 November 2019 в 09:10
поделиться

Вот такое отговорочное определение:

Вы узнаете это, когда увидите.

Это один из тех случаев, когда очень трудно найти краткое определение, охватывающее все крайние случаи. Но это также и один из тех случаев, когда угловые случаи совершенно неуместны, потому что в реальной жизни их просто не бывает.

Практически все протоколы, с которыми вы столкнетесь в реальной жизни, будут выглядеть так:

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

[Представьте себе кучу другой непечатаемой чепухи. Одна из сложностей в передаче разницы между текстом и двоичным файлом заключается в том, что вам нужно сделать это в тексте :-)]

Или вот так:

< 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

[Я просто придумал это на месте.]

Там просто не так уж много двусмысленности.

Еще одно определение, которое я иногда слышал:

текстовый протокол — это протокол, который можно отлаживать с помощью telnet

Возможно, здесь я показываю свою занудство, но я на самом деле написал и читал электронную почту через SMTP и POP3, читал статьи Usenet через NNTP и просматривал веб-страницы через HTTP, используя telnet, только для того, чтобы посмотреть, будет ли это работать на самом деле.

Вообще-то, когда я писал это, меня опять словно лихорадило:

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.

Блин, давненько я этого не делал. Там довольно много ошибок :-)

24
ответ дан 24 November 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: