Asuntos Oficiales > Retos
Re: Protocolo Hdlc
JuanK:
HDLC
High level data Link Protocol, es un protocolo ampliamente usado hoy en día, es el protocolo sobre el que corre Ethernet, que es un protocolo usado en las tarjetas de red para redes IEEE 802.3. Este reto esta basado en una variación de HDLC.
HDLC está diseñado para comunicaciones sincroniaza nivel de bit, es decir la información esta formada por un “stream” de bits sincronizados mediante una señal de reloj que define los limites de cada bit.
Pero, cómo se definen los limites de cada byte?.
Hay varias estrategias, la usada en HDLC es elegir un carácter llamado “flag” (“bandera”) que define en donde empieza o termina una serie de bytes.(y de hecho delimita un frame)
El carácter bandera es 0x7E (binario 0111 1110). De tal forma que cuando el receptor encuentra esta cadena de caracteres en el “stream” sabe que inicia una cadena de bytes, cada uno de 8 bits. La cadena de datos terminará cuando aparece otra bandera 0x7E. Es importante tener en cuenta que entre dos “frames” consecutivos debe haber una y solo una bandera y al finalizar la transmisión debe haber una bandera.
Pero que pasa si dentro del “stream” de datos aparece 0x7E?
Obviamente esto seria un problema.
La solución que se adopto fue la siguiente:
_Cuando el transmisor está en el proceso de transmitir un “frame” chequea cada bit transmitido. Si en un momento determinado aparecen 5 unos(1’s) consecutivos, se inserta un cero(0) extra después del quinto bit (A esto se le llama BitStufing) para evitar que se presente el patrón bandera.
Por supuesto el receptor tiene que estar preparado para recibir este tipo de “stream”: tiene que chequear el “stream” de bits. Cuando detecta una bandera, empieza a recoger los caracteres que conforman un “frame”. Pero si dentro del “frame” encuentra 5 unos (1’s) consecutivos, debe chequear el siguiente bit:
-Si es un 0, significa que recibió una bandera y por lo tanto que recibió el final del “frame”
-Si es un 1, es una secuencia de 6 o más unos, que es prohibida en el protocolo y que por lo tanto implica un error y el “frame” es abortado completamente. El receptor inicia de nuevo la búsqueda del siguiente carácter bandera.
Usted deberá escribir un programa receptor y otro programa transmisor de esta variación de HDLC.
Entrada del transmisor
Leerá por un archivo de tipo texto a ser transmitido. Este archivo podrá contener únicamente secuencia de caracteres ‘1’ y ‘0’ que representan los byte a ser transmitidos. El orden de los bit dentro del cada byte es de más a menos significativo.
Salida Transmisor
El archivo de entrada deberá ser transmitido a stdout insertando un carácter de bandera entre cada “frame” y haciendo las operaciones necesarias de BitStufing. Por facilidad vamos a suponer que el tamaño del “frame” es fijo, de 128 bits de datos efectivos, es decir, sin incluir las banderas ni los bits insertados en el proceso de BitStufing, tenga en cuenta que el último frame puede ser de menos de 128 bit, puede asumir que el tamaño del archivo de entrada es múltiplo de 8.
Salida receptor
El archivo de salida deberá ser de tipo texto y contener los bytes transmitidos(expresados en secuencia de caracteres ‘1’ y ‘0’), cada uno con sus bits en orden de menos a más significativo.
El receptor realizara exactamente la labor contraria del transmisor, deberá detectar errores de protocolos e informarlos.
Ejemplos
--- Código: Text --- Entradatransmisor: 00000000111100000101010100000000Salida transmisor: 011111100000000000001111100101010000000001111110Entrada receptor : 011111100000000000001111100101010000000001111110Salida receptor : 00000000111100000101010100000000 Entradatransmisor: 000011111110000011001100Salidatransmisor : 0111111011110000000001110011001101111110Entradareceptor : 0111111011110000000001110011001101111110Salidareceptor : 000011111110000011001100 Entradareceptor : 01100000111111011110000000001110011001101111110Salidareceptor : 000011111110000011001100 Como se puede observar en los ejemplos solo se lee un "frame" por vez, no es necesario implementar lectura de multiples frames.
Como no se especifican los nombres de archivo de entrada, es necesario que los programas recibanel nombre de archivo desde consola, pero solo como argumento del ejecutable, ejemplo:
c:executable entrada.txt
La salida en ambos casos es por pantalla.
© Jonathan ©:
Hola juank, muy buen reto, solo una duda, que manera el programa debe informar de los errores.
Esa parte no la entiendo, si bien el transmisor toma el archivo, lo decodifica, lo envia al receptor, este lo toma y lo vuelve a decodificar, pero cuando y como presentara los errores, y que errores??
Esto es realmente muy complicado :argh:, nos vas a sacar a todos ingenieros!!!... Bueno, Saludos y espero tu respuesta. :question: :ayuda:
JuanK:
Bueno, no esta tan complicado.. ya veras que estaba mas dificil el de los gatos... jajaja.
Lo de los errores...
Toca controlar lo siguiente:
1- Todo lo referente al manejo de los archivo.. lectura, escritura etc.
2-Que posean el formato indicado, en el de entrada por ejemplo que sea de 1s y 0s y que sean bytes que es la unidad minima de infromacion... y más
3-En el de salida casi que los mismo pero validar que cumpla con las reglas de protocolo y más
Sere muy estricto con eso en este reto...
eso si si necesitan asesoria acerca de como hacer algo me avisan...
Como consejo:
Prueben todas las posibilidades que se les ocurra... hagan de cuenta que son un usuario que no tiene idea de computadores y hagan copn los archivos todas las barbaridades que se les ocurra...
Eso es lo que hay que controlar.
Como mostrar los errores..
cada uno de los programas tiene entrada por archivo y salida por pantalla.. los errores se muestran por pantalla, cuando el progframador lo considere necesario.. eso si hay que tratar de mostrarlos en el momento en que es de utilidad saberlo, y el error debe describir la situacion , de manera que el que lo lea pueda saber donde se origino el problema, ejemplo:
--- Código: Text --- printf("nError de protocolo: Frame abortado :n%snEntrada no es una cadena de bytes.", frame); return 0; }
© Jonathan ©:
Hola juank, estoy con el reto a full, esta realmente bueno y no parece complicado ahora que lo estoy comenzando a entender, solo tengo una duda acerca de los dos programas que hay que hacer.
El primer programa toma los datos de un archivo, y lo codifica y lo imprime en pantalla, ahora bien aqui entra mi duda, el segundo programa como recibe los datos???
Tengo que guardar en otro archivo la informacion codificada del primer programa???
Bueno, aparte de esa duda tengo una ultima.
El archivo de entrada en el transmisor debera ser de un frame de 128 bits, es decir 128 caracteres de 1's y 0's???
Bueno, espero tu respuesta para terminar con estas dudas. Gracias de antemano y nuevamente GRACIAS. SALUDOS!!!
JuanK:
Muy bien por aceptar el reto!!!
El segundo programa debe leer los datos desde un archivo e imprimirlos en pantalla, es decir igual que el primer programa... no necesariamente s eprobara con los datos que arroje el primer programa.
El archivo de entrada es de una longitud indeterminada, pero siempre menor o igual a 128 bits.. es decir por lo menos tu programa debe soportar 128 bit, pero si soporta más no importa.
Entre las cosas que si debes evaluar es que la informacion este en bytes(es decir en octetos) por que esta es la unidad minima de informacion.
Navegación
[#] Página Siguiente
Ir a la versión completa