Hace tiempo que no escribo y es que he estado trabajando en Demasiadas, Demasiadas cosas interesantes, una de ellas es la reconstruccion de mi Servidor HTTP. La otra tarea no tan trivial es un Protocolo de Mensajeria Interna en LAN y con routing a varios servidores. En fin, el punto es que Ambos requieren que sobre
TCP se transmitan diferentes tipos de mensajes.
Porque no usar .NET Remoting? Muy pesado para tantas conexiones y necesito hacer clientes en diferentes plataformas basados en un sola definicion de protocolo y no tengo tanta experiencia haciendo SinkProviders de Remoting asi que he decidido hacer un separador de Mensajes TCP. Porque TCP necesita un separador de mensajes?
TCP(combinado con IP) es un protocolo de transmision de flujos de datos, no de mensajes. Cual es la diferencia?
En un protocolo de Flujo de Datos(Data Stream) se envian los datos en el mismo orden pero no se tiene seguridad de que lleguen de la misma forma y lo voy a explicar asi. Un punto de Red llamado A envia datos a un punto de red llamado B:
Punto de Red 'A' Envia los siguientes flujos(cada linea representa un flujo de datos):
- 23,34,11,73
- 34,67,83,96
El punto de Red 'B'(quien recibe los mensajes) podria recibir los mismos datos en la misma o diferente cantidad de flujos:
- 23
- 34,11
- 73,34,67
- 83,96
Como veran los datos llegan en el mismo orden pero no de la misma forma debido a que TCP garantiza que el flujo llegue al destino en el orden original pero no de la misma forma y esto se puede observar en el ejemplo donde 'A' envia 2 flujos pero 'B' recibe 4, sin embargo los bytes llegan de la misma forma.
Tambien se puede demostrar esto asi:
'A' envia los siguientes textos representados en flujos(cada linea representa un flujo):
- Este es el contenido de el Archivo 1
- pero el Archivo 1 tambien tiene otra linea que es esta.
- (B, Aqui comienza el Archivo2)
- Esta es la linea del Archivo 2
'B' recibe:
- Este es el contenido de el
- Archivo 1pero el Archivo 1
- tambien tiene otra linea que
- esta
- (B
- , Aqui comienza el Archivo2)
- Esta es la linea
- del Archivo 2
Como podran observar no es posible contar con TCP para manejar conceptos de 'formas de datos', solo podemos contar con TCP para conceptos de 'transmision de datos'.
En un protocolo de Red basado en mensajes se Garantiza que los Datos lleguen en el mismo Orden en la Forma original(esto se conoce como 'Mensaje'):
Ejemplo:
El Punto de Red 'A' envia 2 mensajes:
- {23,34,11,73}
- {34,67,83,96}
El punto de Red 'B' recibe 2 mensajes:
- {23,34,11,73}
- {34,67,83,96}
Nota: las llaves indican agrupacion de bytes, es decir, un mensaje completo.
Con un protocolo basado en Mensajes se puede tener la seguridad de que los mensajes enviados llegaran de la misma forma con la que fueron enviados.
Hay una implementacion de Ordenamiento y Forma de Mensajes de Red llamado
SCTP pero es implementado por el Sistema Operativo, no por la aplicacion.
Porque no usar SCTP? SCTP es soportado en pocas plataforma(Windows no es una de ellas) sobre
IPv6 y mi Protocolo de Mensajeria LAN tiene que funcionar en IPv4 sobre Linux y Windows, ademas debo reutilizarlo para HTTP el cual trabaja sobre IPv4 y IPv6.
No tengo mas opciones que desarrollar uno, publicare el codigo fuente pronto en Google Code. En una nueva entrega explicare como funciona HTTP y como estoy desarrollando el separador de mensajes en C# y Mono.
Saludos.
No comments:
Post a Comment