2010-04-15 11 views
59

¿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 entre sí en términos de bits enviados por el cable?protocolos binarios v. Protocolos de texto

aquí es lo que dice Wikipedia sobre los protocolos binarios:

Un protocolo binario es un protocolo que se pretende ni se espera que sea leído por una máquina en lugar de un ser humano (http://en.wikipedia.org/wiki/Binary_protocol)

vienen oh en!

para ser más claro, si tengo un archivo jpg, ¿cómo se enviará a través de un protocolo binario y cómo a través de un texto? en términos de bits/bytes enviados por el cable, por supuesto.

al final del día si mira una cadena, ella misma es una matriz de bytes por lo que la distinción entre los 2 protocolos debe descansar en qué datos reales se envían por cable. en otras palabras, sobre cómo se codifica la información inicial (archivo jpg) antes de enviarse.

se comentan todos los comentarios, estoy tratando de llegar a la esencia de las cosas aquí.

saludos!

+0

posible duplicado de [protocolos binarios versus texto] (http://stackoverflow.com/questions/2364581/binary-vs-text-protocols) – dkinzer

Respuesta

114

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 a estructuras de datos o alrededor de cadenas de texto. Déjame dar un ejemplo: HTTP. HTTP es un protocolo de texto, aunque cuando envía una imagen JPEG, simplemente envía los bytes sin formato, no una codificación de texto de ellos.

Pero lo que hace HTTP un protocolo de texto es que el intercambio de llegar el jpg tiene el siguiente aspecto:

Solicitud:

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 

Respuesta:

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> 

Tenga en cuenta que este fácilmente podría haber sido empaquetado mucho más firmemente en una estructura que se vería (en C) algo así como

Solicitud:

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

Respuesta:

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

Donde los nombres de campo no tendrían que ser transmitidos en absoluto, y donde, por ejemplo, el 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 ser comunicado como un flujo plano de líneas de texto (generalmente legibles por humanos), en lugar de como datos estructurados de muchos tipos diferentes.

+11

+1 para la definición de 1 línea "La diferencia es realmente si el protocolo está orientado alrededor de las estructuras de datos o alrededor de las cadenas de texto". –

+1

Tyler, gracias por la respuesta, una más profunda que debería decir. escenario geek que se basa en lo que todos acordamos, en el recorrido solo 0 y 1. dime si esto captura lo que estás diciendo. dicen que quiero enviar el número 15 (dec) a través de la red (tiene 2 computadoras idénticas en la red, no hay caos indio grande/pequeño, etc.). si voy a usar un protocolo binario (digamos que lo envío a través de un socket TCP), esto irá en el cable como 00001111 pero si voy a usar un protocolo de texto irá como 00110001 (ASCII para char 1)) Y 00110101 (ASCII para char 5) ¿verdad o basura? :) –

+1

Eso es correcto. La ventaja de hacerlo a texto no es solo la legibilidad humana, sino también no tener que preocuparse por la permanencia si sus números son de más de un byte de longitud. –

0

Creo que lo entendiste mal. No es el protocolo el que determina cómo se ven los datos en el "cable", sino que es el tipo de datos el que determina qué protocolo usar para transmitirlo. Tome el socket tcp, por ejemplo, un archivo jpeg se enviará y recibirá con un protocolo binario porque son datos binarios (no legibles para el ser humano, bytes que van entre el rango 32-126 ascii), pero puede enviar/recibir un archivo de texto con ambos protocolos y no notarías la diferencia.

+0

no No creo que lo haya entendido mal. Todavía estoy buscando una (buena) definición de QUÉ es un protocolo binario. el ejemplo con el jpeg fue para aclarar mi pregunta y nada más, no la convierta en el centro de la cuestión. Debo decir que el protocolo determina cómo se ven los datos cuando se transmiten por el cable. ¿Por qué es un protocolo? –

+0

Le di una definición precisa, solo tiene que leer con cuidado. "Un protocolo binario administra bytes que van entre el rango 32-126 ascii, también llamados caracteres no imprimibles" –

+0

los protocolos de texto manejan esos también dividiéndolos en otros más pequeños que se ajustarán a la tabla ASCII. y así. entonces, en el mejor de los casos, tu definición es vaga. pero gracias por la contribución. –

3

ambos usos diferentes juego de caracteres, el texto uno, utilizar un juego de caracteres reducida, el binario incluye todo lo posible, no sólo "letras" y "números", (por eso Wikipedia dice "ser humano")

o sea más claro, si tengo un archivo jpg, ¿cómo se enviará a través de un protocolo binario y cómo> a través de un texto? en términos de bits/bytes enviados por el cable, por supuesto.

usted debe leer este Base64

ningún comentarios son apprecited, yo estoy tratando de llegar a la esencia de las cosas aquí.

Creo que la esencia para reducir el juego de caracteres, se está reduciendo la complejidad y la portabilidad, la compatibilidad. Es más difícil organizar y aceptar que muchos respeten un conjunto de caracteres amplio, (o uno más amplio). El alfabeto latino/romano y los números arábigos son mundialmente conocidos. (Por supuesto, existen otras consideraciones para reducir el código, pero esa es una principal)

Digamos en los protocolos binarios que el "contrato" entre las partes se trata de bits, el primer bit significa esto, el segundo que, etc. o incluso bytes (pero con la libertad de usar el juego de caracteres sin pensar en la portabilidad) por ejemplo en sistemas cerrados privados o (cerca de 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 un conjunto de situaciones, por ejemplo, ¿cómo se representará en una máquina al otro lado del mundo ?, así que aquí vienen los protocolos de texto donde el contrato será lo más estándar posible. He diseñado ambos y esos fueron los motivos, binarios para soluciones muy personalizadas y texto para sistemas abiertos y/o portátiles.

+0

Sé sobre base64 y lo que hace y esto es exactamente lo que tenía en mente cuando publiqué la pregunta. base64 es bueno cuando deseo enviar algo en su representación ASCII (codificación) para que sea un protocolo de texto. técnicamente divide la entrada de bit en pares de 6, usa una tabla de búsqueda, etc. ¿Alguien puede dar alguna explicación similar sobre cómo funciona un procol binario? pregunta suplementaria: ¿a qué nivel de OSI podemos hablar acerca de los protocolos binarios y de texto y cuál es el significado exacto de estos mundos en esos niveles? –

+0

Ejemplo de protocolos binarios de bajo nivel, como la comunicación en serie simple (http://en.wikipedia.org/wiki/Asynchronous_serial_communication) o cómo se almacenan los datos en la memoria (http://en.wikipedia.org/wiki/Data_structure_alignment). Acerca de OSI ... bien porque el texto y los protocolos binarios se utilizan para representar datos (no solo para la comunicación) no es necesario que estén en ningún nivel de OSI, dijo que, puedo decir que la capa 1,2,3,4 tiene "binario" protocolo ", y" protocolo de texto "puede estar en 5,6,7. –

3

Ejemplos de protocolos binarios: RTP, TCP, IP.

Ejemplos de protocolos de texto: SMTP, HTTP, SIP.

Esto debería permitir generalizar a una definición razonable de protocolos binarios y de texto.

Sugerencia: simplemente salte a las secciones de ejemplo, o los diagramas. Sirven para ilustrar Tyler's rocking answer.

+0

Frank, gracias por los enlaces, pero cuando termine con los RFC será 2099 :) Quería algunas respuestas de personas que ya los leyeron. Todavía estoy pensando en la respuesta de Tyler McHenry ... –

+0

Debo decir, Gran intercambio. –

19

Aquí es una especie de definición de escabullirse:

lo sabrás cuando lo veas.

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 que los casos de esquina son completamente irrelevantes, porque simplemente no ocurren en la vida real.

casi todo los protocolos que se encontrará en la vida real, o bien tener este aspecto:

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

[imaginar una tonelada de basura otra no imprimible allí.Uno de los retos en la transmisión de la diferencia entre el texto y binario es que usted tiene que hacer el transporte en el texto :-)]

O así:

< 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 

[acabo de hacer esto en el punto .]

Simplemente no hay mucha ambigüedad allí.

Otra definición que a veces he oído es

un protocolo de texto es uno que puede depurar utilizando telnet

Tal vez estoy mostrando mi nerdiness aquí, pero tener realmente escrito y leer correos electrónicos a través de SMTP y POP3, leer artículos de usenet a través de NNTP y páginas web visitadas a través de HTTP usando telnet, sin más motivo que ver si realmente funcionaría.

En realidad, al escribir esto, yo un poco llamó la fiebre de nuevo:

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 <[email protected]> 
< 503 sender not yet given 
> SENDER:Me <[email protected]> 
< 500 unrecognized command 
> RCPT FROM:Me <[email protected]> 
< 500 unrecognized command 
> FROM:Me <[email protected]> 
< 500-unrecognized command 
> HELP 
< 214-Commands supported: 
< 214 AUTH HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP ETRN 
> MAIL FROM:Me <[email protected]> 
< 250 OK 
> RCPT TO:You <[email protected]> 
< 250 Accepted 
> DATA 
< 354 Enter message, ending with "." on a line by itself 
> From: Me <[email protected]> 
> To: You <[email protected]> 
> 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. 

Joder, ha sido bastante tiempo desde que he hecho esto. Muy pocos errores en que hay :-)

+0

Hombre, +1, solo ... +1. –

+0

+1 para "Uno de los desafíos al transmitir la diferencia entre el texto y el binario es que tiene que hacer la transportación en el texto". –

3

Como la mayoría de ustedes sugirió que no puede diferenciar si el protocolo es binario o texto simplemente mirando el contenido en el cable

AFIK

Protocolo binario - Los bits son límites orden es muy crítico

Por ejemplo, RTP

primeros dos bits son bits versión siguiente es poco marcado de

.

protocolo de texto - Los delimitadores específicos de protocolo orden de los campos no es importante

Por ejemplo, SIP

Uno más es, en el protocolo binario, podemos dividir un byte, es decir, un solo bit podría. tener un significado individual específico; Mientras que en un protocolo de texto la unidad mínima significativa es BYTE. No puedes dividir un byte.

thnx

-Bytes

2

me encontré accidentalmente esta vieja pregunta y decidió añadir mi opinión, al menos para comprobarlo.

La mayoría de las respuestas explican cómo el texto y los protocolos binarios son diferentes del punto de vista de la máquina. Desde el punto de vista humano, un protocolo de texto es legible/editable por el ser humano (un ser humano puede leer y escribir paquetes sin decodificador/codificador). Esto significa al menos dos beneficios: la depuración/mantenimiento simplificado de la implementación del protocolo de texto y la posibilidad de realizar pruebas mediante herramientas simples y universales como telnet.

Una pequeña ventaja más: los protocolos de texto se consideran más confiables, porque (supongo) es imposible o simplemente es difícil usar un agujero en la implementación del protocolo para ejecutar algún código malicioso, p. explotando el desbordamiento del búfer. Es una pequeña ventaja porque los protocolos binarios pueden lograr lo mismo con la codificación base64.

allí son también algunas desventajas de los protocolos de texto:

  • Texto aplicación protocolos suelen ser más difficalt para implementar que la binaria, debido analizador.
  • protocolos binarios son menos ancho de banda que consume

Tratando de compilar algunas recomendación final de esta:

Desing un protocolo como un texto de uno cuando:

  • Es un protocolo de control que se pueden tratada como una serie de comandos o solicitudes/respuestas ((interactivo). Desde el punto de vista de la implementación, puede implementarse como una máquina de estados finitos. Como ejemplo, considere la transmisión multimedia: RTSP - un protocolo de control, uso s máquina de estados y consiste en solicitudes/respuestas - es un protocolo de texto, cuando RTP es un protocolo binario porque transporta datos binarios casi naturales como flujos multimedia.
  • Está destinado al uso masivo: por muchas personas, implementaciones o aplicaciones; así que la depuración/mantenimiento simplificado es muy importante.

.

+2

Su argumento de seguridad es completamente BS. El análisis de un protocolo de texto es más difícil y más propenso a los errores que un protocolo binario, por lo tanto, hay más posibilidades de errores de seguridad. –

+0

@ Nicolás: tienes razón. Un beneficio es que no necesita codificar64 base-su protocolo para el túnel a través de, por ejemplo, HTTP para eludir el servidor proxy. –

+0

HTTP maneja datos binarios muy bien. ¿Crees que los servidores web envían imágenes JPEG en codificación base64? –

1

How can we send an image file in SOAP: Click here

Esto muestra que los datos binarios se adjunta como tales [ADJUNTO] y su referencia se guarda en el mensaje SOAP.

Por lo tanto, el protocolo está basado en texto y datos [Imagen] se adjunto binario cuya codificación no es relevante

Por lo tanto, SOAP es un protocolo de texto debido a la forma en que especificamos cabeceras de jabón y datos no reales codificados en ella.

0

El protocolo de texto puede ser fácil de entender y extenso. Se explica por sí mismo porque el mensaje incluye los nombres de los campos solo en el mensaje en sí. No puede entender qué valor significa en el mensaje del protocolo binario si no se refiere a la especificación del protocolo.

Su extenso significado HTTP como protocolo de texto solo hace que las reglas sean simples, pero puede ampliar 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.

Cuestiones relacionadas