¿Alguien tiene una buena definición de lo que es un protocolo binario? y ¿qué es un protocolo de texto en realidad? ¿Cómo se comparan estos entre sí en términos de bits enviados por cable?
esto es lo que dice Wikipedia sobre los protocolos binarios:
Un protocolo binario es un protocolo que se pretende o se espera que sea leído por una máquina en lugar de un ser humano ( http://en.wikipedia.org/wiki/Binary_protocol )
¡Oh vamos!
para ser más claro, si tengo un archivo jpg, ¿cómo se enviaría a través de un protocolo binario y cómo a través de uno de texto? en términos de bits / bytes enviados por cable, por supuesto.
al final del día, si observa una cadena, es en sí misma una matriz de bytes, por lo que la distinción entre los 2 protocolos debe basarse en los datos reales que se envían por el cable. en otras palabras, sobre cómo se codifican los datos iniciales (archivo jpg) antes de ser enviados.
Respuestas:
El protocolo binario versus el protocolo de texto no se trata realmente de cómo se codifican los blobs binarios. La diferencia es realmente si el protocolo está orientado en torno a estructuras de datos o cadenas de texto. Déjame darte un ejemplo: HTTP. HTTP es un protocolo de texto, aunque cuando envía una imagen jpeg, solo envía los bytes sin formato, no una codificación de texto de ellos.
Pero lo que hace que HTTP sea un protocolo de texto es que el intercambio para obtener el jpg se ve así:
Solicitud:
Respuesta:
Tenga en cuenta que esto podría haberse empaquetado mucho más fácilmente en una estructura que se vería (en C) algo como
Solicitud:
Respuesta:
Donde los nombres de los campos no tendrían que transmitirse en absoluto y donde, por ejemplo,
responseType
en la estructura de respuesta es un int con el valor 200 en lugar de tres caracteres '2' '0' '0'. Eso es lo que es un protocolo basado en texto: uno que está diseñado para comunicarse como un flujo plano de líneas de texto (generalmente legibles por humanos), en lugar de como datos estructurados de muchos tipos diferentes.fuente
Aquí hay una especie de definición de evasión:
Este es uno de esos casos en los que es muy difícil encontrar una definición concisa que cubra todos los casos de esquina. Pero también es uno de esos casos en los que los casos de la esquina son completamente irrelevantes, porque simplemente no ocurren en la vida real.
Casi todos los protocolos que encontrará en la vida real se verán así:
[Imagínese un montón de basura no imprimible allí. Uno de los desafíos para transmitir la diferencia entre texto y binario es que debe realizar la transmisión en texto :-)]
O así:
[Acabo de inventar esto en el acto.]
Simplemente no hay tanta ambigüedad allí.
Otra definición que he escuchado a veces es
Tal vez esté mostrando mi nerd aquí, pero en realidad he escrito y leído correos electrónicos a través de SMTP y POP3, leído artículos de Usenet a través de NNTP y he visto páginas web a través de HTTP
telnet
, sin otra razón que ver si realmente funcionaría.En realidad, mientras escribía esto, cogí la fiebre de nuevo:
Maldita sea, ha pasado bastante tiempo desde que hice esto. Hay bastantes errores allí :-)
fuente
Ejemplos de protocolos binarios: RTP , TCP , IP .
Ejemplos de protocolos de texto: SMTP , HTTP , SIP .
Esto debería permitirle generalizar a una definición razonable de protocolos binarios frente a protocolos de texto.
Sugerencia: simplemente pase a las secciones de ejemplo o los diagramas. Sirven para ilustrar la contundente respuesta de Tyler .
fuente
Como la mayoría de ustedes sugirió, no podemos diferenciar si el protocolo es binario o de texto simplemente mirando el contenido en el cable.
AFIK
Protocolo binario: los bits son límites El orden es muy crítico
Por ejemplo, RTP
Los primeros dos bits son la versión El siguiente bit es el bit MarkUp
Protocolo de texto: delimitadores específicos del protocolo El orden de los campos no es importante
Por ejemplo, SIP
Una más es que, en el protocolo binario, podemos dividir un byte, es decir, un solo bit puede tener un significado individual específico; Mientras que en un protocolo de texto, la unidad mínima significativa es BYTE. No puede dividir un byte.
fuente
Ambos usan un conjunto de caracteres diferente, el de texto, usa un conjunto de caracteres reducido, el binario incluye todo lo que puede, no solo "letras" y "números" (es por eso que wikipedia dice "ser humano")
deberías leer esto Base64
Creo que la esencia para reducir el juego de caracteres es reducir la complejidad y alcanzar la portabilidad y la compatibilidad. Es más difícil organizar y estar de acuerdo con muchos para respetar un conjunto de caracteres amplio (o lo que sea) El alfabeto latino / romano y los números arábigos son mundialmente conocidos. (Por supuesto, hay otras consideraciones para reducir el código, pero esa es la principal)
Digamos que en los protocolos binarios el "contrato" entre las partes se trata de bits, el primer bit significa esto, el segundo eso, etc. o incluso bytes (pero con la libertad de usar el juego de caracteres sin pensar en la portabilidad) por ejemplo en un sistema cerrado privado o (cerca de los estándares de hardware), sin embargo, si diseña un sistema abierto, debe tener en cuenta cómo se representarán sus códigos en un amplio conjunto de situaciones, por ejemplo, ¿cómo se representarán en una máquina en el otro lado del mundo? aquí vienen los protocolos de texto donde el contrato será lo más estándar posible. He diseñado ambos y esas fueron las razones, binario para soluciones muy personalizadas y texto para sistemas abiertos y / o portátiles.
fuente
¿Cómo podemos enviar un archivo de imagen en SOAP? Haga clic aquí
Esto muestra que los datos binarios se adjuntan como tales [ADJUNTO] y su referencia se guarda en el mensaje SOAP.
Por lo tanto, el protocolo se basa en texto y los datos [Imagen] son archivos adjuntos binarios cuya codificación no es relevante
Por lo tanto, SOAP es un protocolo de texto debido a la forma en que especificamos los encabezados de Soap y no los datos reales codificados en él.
fuente
Creo que te equivocaste. No es el protocolo lo que determina cómo se ven los datos en el "cable", pero es el tipo de datos el que determina qué protocolo usar para transmitirlos. Tome tcp socket, por ejemplo, un archivo jpeg se enviará y recibirá con un protocolo binario porque son datos binarios (no legibles por humanos, bytes que van entre el rango 32-126 ascii), pero puede enviar / recibir un archivo de texto con ambos protocolos y no notaría la diferencia.
fuente
El protocolo de texto puede explicarse por sí mismo y ser extenso. Se explica por sí mismo porque el mensaje incluye los nombres de los campos solo en el mensaje. No puede comprender qué significa el valor en el mensaje del protocolo binario si no se refiere a la especificación del protocolo.
Su extenso significa que HTTP como protocolo de texto solo crea reglas simples, pero puede extender la estructura de datos agregando libremente nuevos encabezados o cambiando el tipo de contenido para transportar diferentes cargas útiles. Y los encabezados son los metadatos y tienen la capacidad de negociación y adaptación automática.
fuente