у кого-нибудь есть хорошее определение того, что такое бинарный протокол? а что такое текстовый протокол на самом деле? как они соотносятся друг с другом с точки зрения количества битов, отправленных по сети?
вот что говорит Википедия о бинарных протоколах:
Бинарный протокол - это протокол, который предназначен или ожидается, что его будет читать машина, а не человек ( http://en.wikipedia.org/wiki/Binary_protocol )
о, давай!
Чтобы быть более понятным, если у меня есть файл jpg, как он будет отправлен через двоичный протокол и как через текстовый? с точки зрения бит / байтов, отправленных по сети, конечно.
в конце дня, если вы посмотрите на строку, она сама по себе является массивом байтов, поэтому различие между двумя протоколами должно основываться на том, какие фактические данные отправляются по сети. другими словами, от того, как исходные данные (файл jpg) кодируются перед отправкой.
Ответы:
Сравнение двоичного протокола и текстового протокола на самом деле не о том, как кодируются двоичные капли. Разница в том, ориентирован ли протокол на структуры данных или на текстовые строки. Приведу пример: HTTP. HTTP - это текстовый протокол, хотя при отправке изображения в формате jpeg он отправляет необработанные байты, а не их текстовую кодировку.
Но что делает HTTP текстовым протоколом, так это то, что обмен для получения jpg выглядит так:
Запрос:
Отклик:
Обратите внимание, что это можно было бы очень легко упаковать в структуру, которая выглядела бы (на C) примерно как
Запрос:
Отклик:
Где имена полей вообще не нужно передавать, и где, например,
responseType
в структуре ответа стоит int со значением 200 вместо трех символов '2' '0' '0'. Вот что такое текстовый протокол: протокол, разработанный для передачи в виде плоского потока (обычно читаемых человеком) строк текста, а не в виде структурированных данных многих различных типов.источник
Вот определение вроде отговорки:
Это один из тех случаев, когда очень сложно найти краткое определение, охватывающее все угловые случаи. Но это также один из тех случаев, когда угловые случаи совершенно неуместны, потому что они просто не встречаются в реальной жизни.
Практически все протоколы, с которыми вы встретитесь в реальной жизни, будут выглядеть так:
[Представьте себе там тонну другой непечатной чуши. Одна из проблем в передаче разницы между текстом и двоичным кодом заключается в том, что вы должны передавать текст :-)]
Или вот так:
[Я только что придумал это на месте.]
Здесь просто не так уж много двусмысленности.
Другое определение, которое я иногда слышал, это
Может, здесь я проявляю свою нервозность, но у меня на самом деле написано и читать электронную почту через SMTP и POP3, чтения Usenet статей через NNTP и просматривать веб - страницы с помощью HTTP с помощью
telnet
, ни по какой другой причине , чем видеть , будет ли это на самом деле работа.На самом деле, когда я писал это, я снова как бы заболел лихорадкой:
Блин, прошло много времени с тех пор, как я это делал. Там довольно много ошибок :-)
источник
Примеры бинарных протоколов: RTP , TCP , IP .
Примеры текстовых протоколов: SMTP , HTTP , SIP .
Это должно позволить вам обобщить разумное определение двоичных и текстовых протоколов.
Подсказка: просто перейдите к разделам с примерами или схемам. Они служат для иллюстрации потрясающего ответа Тайлера .
источник
Как большинство из вас предположили, мы не можем различить, является ли протокол двоичным или текстовым, просто посмотрев на контент в сети.
AFIK
Бинарный протокол - биты являются границами Порядок очень важен
Например, RTP
Первые два бита - версия Следующий бит - бит MarkUp
Текстовый протокол - разделители, специфичные для протокола. Порядок полей не важен.
Например, SIP
Еще один пример: в двоичном протоколе мы можем разделить байт, т. Е. Отдельный бит может иметь определенное индивидуальное значение; В текстовом протоколе минимальная значимая единица - БАЙТ. Вы не можете разбить байт.
источник
Оба используют разный набор символов, текстовый, используют сокращенный набор символов, двоичный файл включает все, что может, а не только «буквы» и «числа» (поэтому в Википедии написано «человек»)
вы должны прочитать этот Base64
Я думаю, что суть сужения кодировки заключается в сужении сложности и достижении переносимости, совместимости. Труднее организовать и согласиться со многими уважать широкую кодировку (или что-то еще). Латинский / латинский алфавит и арабские цифры известны во всем мире. (Конечно, есть и другие соображения по сокращению кода, но это главный)
Скажем, в бинарных протоколах «контракт» между частями касается битов, первый бит означает это, второй то и т. Д. Или даже байтов (но со свободой использования кодировки, не думая о переносимости), например, в приватной закрытой системе или (рядом со стандартами оборудования), однако, если вы разрабатываете открытую систему, вы должны учитывать, как ваши коды будут представлены в широком наборе ситуаций, например, как они будут представлены в машине на другой стороне мира ?, поэтому вот текстовые протоколы, в которых договор будет максимально стандартным. Я разработал и то, и другое, и это было причиной: двоичный код для очень нестандартных решений и текст для открытых и / или переносимых систем.
источник
Как мы можем отправить файл изображения в SOAP: Нажмите здесь
Это показывает, что двоичные данные прикреплены как таковые [ПРИЛОЖЕНИЕ], а их ссылка сохраняется в сообщении SOAP.
Итак, протокол основан на тексте, а данные [Изображение] представляют собой двоичное вложение, кодировка которого не имеет значения.
Таким образом, SOAP является текстовым протоколом из-за того, как мы указываем заголовки Soap, а не фактические данные, закодированные в них.
источник
Я думаю, вы ошиблись. Не протокол определяет, как данные выглядят на «проводе», а тип данных определяет, какой протокол использовать для их передачи. Возьмите, например, сокет tcp, файл jpeg будет отправлен и получен с помощью двоичного протокола, потому что это двоичные данные (не читаемые человеком, байты, которые находятся в диапазоне 32-126 ascii), но вы можете отправить / получить текстовый файл с помощью оба протокола, и вы не заметите разницы.
источник
Текстовый протокол может быть понятным и обширным. Это говорит само за себя, потому что сообщение включает имена полей только в самом сообщении. Вы не сможете понять, какое значение означает в сообщении двоичного протокола, если не обратитесь к спецификации протокола.
Это обширный означает, что HTTP как текстовый протокол просто создает простые правила, но вы можете расширить структуру данных, свободно добавляя новые заголовки или изменяя тип содержимого для передачи различных полезных данных. Заголовки - это метаданные, которые могут согласовываться и автоматически адаптироваться.
источник