SoloCodigo

Asuntos Oficiales => Retos => Mensaje iniciado por: JuanK en Jueves 2 de Octubre de 2003, 19:32

Título: Re: Protocolo Hdlc
Publicado por: JuanK en Jueves 2 de Octubre de 2003, 19:32
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
  1.  
  2. Entradatransmisor: 00000000111100000101010100000000
  3. Salida transmisor: 011111100000000000001111100101010000000001111110
  4. Entrada receptor : 011111100000000000001111100101010000000001111110
  5. Salida receptor  : 00000000111100000101010100000000
  6.  
  7. Entradatransmisor: 000011111110000011001100
  8. Salidatransmisor : 0111111011110000000001110011001101111110
  9. Entradareceptor  : 0111111011110000000001110011001101111110
  10. Salidareceptor   : 000011111110000011001100
  11.  
  12. Entradareceptor  : 01100000111111011110000000001110011001101111110
  13. Salidareceptor   : 000011111110000011001100
  14.  
  15.  
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.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Jueves 2 de Octubre de 2003, 22:43
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:
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Jueves 2 de Octubre de 2003, 23:01
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
  1.  
  2. printf("nError de protocolo: Frame abortado :n%snEntrada no es una cadena de bytes.", frame);
  3.               return 0;
  4.             }
  5.  
  6.  
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Viernes 3 de Octubre de 2003, 23:29
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!!!
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Domingo 5 de Octubre de 2003, 03:38
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.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Lunes 6 de Octubre de 2003, 14:52
Hola juank, bueno gracias por los comentarios anteriores, ahora tengo otra pequeña duda, quisiera saber si en este fragmento de texto que escribiste al publicar el reto hay un error o yo estoy equivocado:

Entradatransmisor: 00000000111100000101010100000000
Salida transmisor: 011111100000000000001111001010100000000001111110

Entrada receptor : 011111100000000000001111001010100000000001111110
Salida receptor  : 00000000111100000101010100000000

   Ya que me parece que hay un cero que no deberia estr, y deberia ser 1.

Entradatransmisor: 00000000111100000101010100000000
Salida transmisor: 011111100000000000001111001010100000000001111110

   No entiendo porque es un cero, por favor explicame si es un error tuyo o es algo que no entiendo de la explicacion del reto. Gracias y Saludos :adios:
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Lunes 6 de Octubre de 2003, 16:09
Es algo que no has entendido, o que no has leido bien.. yo se que es , pero no te lo voy a decir :P .

Suerte.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Lunes 6 de Octubre de 2003, 16:26
Bueno, yo entiendo algo, que es lo  que esta en este fragmento:

_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.

Pero no me cierra todo ya que no encuentro cual es el byte bandera, esa parte no la entiendo porque al principio dices que el Flag es 01111110, y en ese fragmento esta diciendo que el flag es 00111110 o cualquier byte que contenga 5 1's consecutivos, al final, creo que eso me costara entenderlo, por favor disculpame si mis dudas son un poco tontas, es que no puedo continuar con el programa sin antes eliminar esas dudas. Gracias  :question:
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Lunes 6 de Octubre de 2003, 17:46
Este ejercicio me lo pusieron en la maraton nacional de programación, y tambien tube muchas dudas.. eso si no respondieron ninguna...ya que una de las reglas que hay es que no se responde ninguna pregunta.. lo cual me parece muy tonto porque en particualr perdi mucho tiempo en este ejercicio por un error de redaccion, ya que daba para varias
interpretaciones, asi que no hay problema por preguntar.

Tu problema es que has interpretado de manera errada, ya que el texto dice:
 
Citar
_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.

Lo primero indica que si esta transmitiendo y encuentra 5 unos, despues del quiento bit en uno agrega un cero.

Lo segundo, nos dice que en el receptor, si se reciben 5 unos, revisa el siguiente bit, si el siguiente bit despues de esos 5 unos es un cero entonces se descarta el cero y se continua leyendo los bIts, pero si es un uno es un error de protocolo porque el transmisor no pudo haber enviado más de 5 unos seguidos.

Lo del 00111110 es solo que has tenido un poco de dificultad con la interpretacion de este fragmento, nunca se dice de ningun modo ni explicita ni implicitamente que la bandera sea esa.. la bander unicamente es 01111110.

No estoy seguro si me he hecho entender, en todo caso si te quedan dudas me comentas, pues como ya te dije no hay ningun problema en preguntar.


Un saludo y suerte.!!!

Me cuentas como te fue.
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Lunes 6 de Octubre de 2003, 19:47
Bueno la pista que dare para este reto es que se fijen en esto:
 
Citar
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.

 
Citar
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.

Creo que esta pista les  solucionara muchos inconvenientes a quienes desarrollen el reto, no debi haberselas dicho.. pero se trata de que todos aprendamos.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Martes 7 de Octubre de 2003, 00:43
Hola juank, has eliminado varias dudas que tenia, la pista que nos has dado es muy buena, gracias por todo y hasta prontito.
:gracias:
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Martes 7 de Octubre de 2003, 22:00
Hola juank, queria consultarte acerca de el siguiente fragmento de mensaje que nos diste dias atras:


 
Citar
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.


   Esto quiere decir por ejemplo que pongamos aparte de 1's y 0's en el archivo que leera el transmisor alguno que otro caracter cualquiera??
  como puede ser un @, u, 9, A, etc?.

   Gracias de antemano y perdon por las simples tontadas que pregunto. SALUDOS!! :think:
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Martes 7 de Octubre de 2003, 22:06
Asumamos solo las barbaridades, locuras, demencias, idioteses, etc.. que se puedan hacer con los caracteres:
'0'
'1'
'n'
que son los que usa el programa, esto es porque el hecho de dejar 1y 0 como caracteres facilita el seguimiento y la elaboracion del programa, pero originalmente habria sido mejor leer los bits de un archivo binario, con eso solo controlariamos 1 y 0.


Juank
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Martes 7 de Octubre de 2003, 22:18
Gracias juank, perdona por la consulta, es que me tenia en duda, ya tengo casi listo el programa transmisor, cuando lo termine lo coloco aqui o presento los dos juntos??? ....     Eso si llego.

   Bueno, saludos y gracias.
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Martes 7 de Octubre de 2003, 22:20
Los dos ..
es mejor postear solo los retos completos.

Por cierto ya voy a acabar el siguiente reto..
es acerca del lenguaje español.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Martes 7 de Octubre de 2003, 23:45
Gracias por contestarme tan rapido, estoy de acuerdo con lo que dices de publicar el reto completo, me alegro que ya casi termines el proximo reto. Espero no sea nada raro ni tenga que ver con la ortografia, porque ahi voy muerto, bueno, te agradesco por todo, prontito volvere a escribir, SALUDOS
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Miércoles 8 de Octubre de 2003, 00:48
Acabe de terminar el proximo reto.. estuvo un poco complicadito.. perro solo detalles de programacion...

Bueno los dejo me voy a la universidad, entro a clase en 10 min... y en bus me demoro 40 min en llegar...

necesitare un milagro.

Hasta luego
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Jueves 9 de Octubre de 2003, 01:16
juank, creo que si hay un error en la redaccion del codigo.
   En uno de los mensajes que me respondiste me dijiste lo siguiente:


 
Citar
Lo primero indica que si esta transmitiendo y encuentra 5 unos, despues del quiento bit en uno agrega un cero.

Lo segundo, nos dice que en el receptor, si se reciben 5 unos, revisa el siguiente bit, si el siguiente bit despues de esos 5 unos es un cero entonces se descarta el cero y se continua leyendo los bIts, pero si es un uno es un error de protocolo porque el transmisor no pudo haber enviado más de 5 unos seguidos.

Lo del 00111110 es solo que has tenido un poco de dificultad con la interpretacion de este fragmento, nunca se dice de ningun modo ni explicita ni implicitamente que la bandera sea esa.. la bander unicamente es 01111110.

No estoy seguro si me he hecho entender, en todo caso si te quedan dudas me comentas, pues como ya te dije no hay ningun problema en preguntar.


   Perfecto, lo de las banderas lo entendi, pero no comprendo porque si en el fragmento dice que cambia a 0 el bit siguiente despues de los 5 1's, en el ejemplo que nos diste cambia pero el quinto bit, no el siguiente.

   Ya realice el programa transmisor, funciona perfecto, solo que mi programa cambia a cero el bit siguiente de los 5 1's, por lo que no concuerda con el siguiente ejemplo que tu colocaste al redactar el reto:


 
Citar
Entradatransmisor: 00000000111100000101010100000000
Salida transmisor: 011111100000000000001111001010100000000001111110
Entrada receptor : 011111100000000000001111001010100000000001111110
Salida receptor  : 00000000111100000101010100000000



   Bueno, espero tu respuesta, despues de que me contestes te realizo otra consulta, gracias y saludos.
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Jueves 9 de Octubre de 2003, 14:23
Bueno, el enunciado esta bien.. porque como te comente esta transcrito de la olimpiada nacional de programación.

Ahora lo del ejemplo si esta mal digitado.. me comi un 1:P

Gracias por fijarte, ya lo corregi, se nota que si has entendido el programa!!!

Me alegro, suerte y continua.

Ahh si si encuentras otra cosita(espero que no), me cuentas please.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Jueves 9 de Octubre de 2003, 15:55
Hola juank, bueno, hiba a consultarte algunas pequeñas dudas para limar perezas de mi fuente, pero veo que modificaste el error que habia en la redaccion del reto y tambien agregaste lo siguiente:

 
 
Citar
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.


   juank, eso que agregaste quiere decir que el programa receptor no debe guardar los datos de salida en un archivo como me habias dicho que debia hacer, o aparte de guardar los datos en un archivo de salida tambien debe imprimirlos en stdout.

   Bueno, ahora esta es mi duda, tengo ambos programas terminados, pero ahora debere modificar el recepto ya que no imprime los datos en stdout y los guarda en un archivo, contestame lo antes posible y te consulto otras dudas para terminar con esto, Bueno saludos y saludos :think:
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Jueves 9 de Octubre de 2003, 16:44
Lo de la entrada de datos por argumentos lo adicione al segundo dia de publicado el reto, solo por aclarar porque ya estaba implicito en el texto.

Lo que siempre se ha dicho es que ambos programas reciben entrada por archivo y salida por pantalla no?:kicking::think:
Es decir, no se ha mencionado que la salida del primer programa deba ser redireccionada al segundo.. por eso son dos programas aparte.

Se hiso asi para facilitar la evalucion del programa , ya que es más facil verficar la salida por pantalla que en un archivo, y a la vez es más facil que la entrada este en un archivo de texto, a que toque digitarla por stdin.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Jueves 9 de Octubre de 2003, 16:50
Hola juank, perdon, debo estar equivocado, es que ya sueño con 1's y 0;s y se podria decir que hablo hasta pavadas. Bueno, queria consultarte tambien que si el archivo de entrada de los bits puede tener lineas n, es decir que en el archivo diga:

101010111111010101010
101010000000010101010
11111111110101000000101010

   Varias lineas.

   De ser asi, dbe imprimir igual que el archivo, osea una linea debajo de la otra o una al lado de la otra.???

  Bueno, gracias y nuevamente perdon.
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Jueves 9 de Octubre de 2003, 19:05
no, por lo menos yo tuve esa duda pero como no hay que hacer lo que no se pide, entonces es de una unica linea.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Jueves 9 de Octubre de 2003, 23:45
Hola juank, bueno, esta vez te pregunto:

   El archivo de entrada en el transmisor va a tenr x cantidad de bits, supuestamente el programa transmisor debe tomar esos bits de a 8, formando con ellas x cantidad de bytes... ahora bien si yo tengo en el archivo 35 bits, y al convertirlo en byte me quedan 4 byte, que formarian 32 bits, me sobran 3 bits, que no se veran en el programa.... que debo hacer con esos tres bits, debo avisar en el programa que hay tres bits que estan demas o no informar nada.

   Aparte de eso quisiera saber de que tipo de errores de protocolo debo informar y en cual de los dos programas, ya que no encuentro que informas porque el bitstufin modifica y acomoda algo que seria un error que es la secuencia de 6 o mas 1;s consecutivos, eso no lo entiendo, por favor si me puedes colocar un ejemplo te lo agradeceria.

   Bueno, por ahora esto es todo, espero terminar el programa para antes de mañana, si me contestas esto hoy, es seguro que para mañana o pasado esta terminado..... Gracias y saludos.

   :lightsabre:
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Viernes 10 de Octubre de 2003, 00:01
1-La unidad minima que puede representar de informacion en un computador es el byte, asi que tres bits no son una unidad de infromacion, por tanto no puede ser transmitida ni recibida.
 
Citar
...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.


Lo de los errores,, no te lo debo decir, debes controlar todo lo que sea posible, porejemplo lo que me acabas de decir de los 3 bit es un error.. hayuno pocos más pero los deberas determinar tu mismo, porque es parte del reto.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Viernes 10 de Octubre de 2003, 00:16
Muy bien, gracias por eliminar mis dudas, voy a intentar terminar el programa lo mas antes posible, espero lograrlo en lo posible en esta misma semana. Saludos. :food:
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Viernes 10 de Octubre de 2003, 14:20
Hola juank, esta vez te consulto si lo  del bitstufing es un error y hay que hacer saber al usuario del mismo, cuantas veces se hizo y etc..., es la unica duda que me queda, los programas ya estan terminados, solo me queda verificar eso y creo estarian listos.

   Ha y otra cosa era que si a los bits que estan antes de iniciar una bandera de inicio, dentro del archivo que entra al receptor, eso tambien los contamos e informamos que hay x cantidad de bits antes de iniciar la bandera.???

   Bueno, espero tu respuesta, saludos y hasta pronto. :guitar:
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Viernes 10 de Octubre de 2003, 14:34
si no comienza con bandera no es una trama hdlc, el usuario nunca sabe que sucede pordebajo co hdlc, asi que no necesita saber que se hizo lo del bit stuffingm solo reportar los errores que se salgan del control del protocolo, si tu protocolo lo detecta como error y no le puede poner remedio.. hjay que informarlo.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Viernes 10 de Octubre de 2003, 15:57
Muy bien, muchas gracias juank, eres todo un amigo. Saludos.  :bravo:
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Martes 14 de Octubre de 2003, 14:31
Hola a todos, despues de tanto trabajo, tiempo y dedicacion, he logrado realizar los programas que se piden en el reto, debo confezar que me costo bastante, ya que soy novato en eso del lenguaje C el cual he aprendido solo bajando informacion de internet.
Los codigos que he elaborado, a mi criterio, son un 30% de lo que podrian ser, es decir, hay muchas cosas que se pueden mejorar, me hare cargo de eso y me gustaria que si alguien ve y sabe como mejorar alguna de las partes de los fuentes, tenga la generosa voluntad de explicarme como hacer.
No se nace sabiendo y como todos saben, los humanos cometemos errores, en mi caso puede ser que orrores. Bueno, aqui corto con el discurso y los invito a revisar y verificar los fuentes los cuales creo dan una solucion a los problemas planteados.

Atte. :guitar: © Jonathan © :guitar:
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Martes 14 de Octubre de 2003, 17:46
Te falta validar cuando el receptor recive un frame que no corresponde a un entramado de bytes, en el transmisor parece que si lo tienes bien... por el momento es eso.. seguire revisando.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Jueves 16 de Octubre de 2003, 13:29
Bueno, aqui coloco el codigo corregido, no tuve tiempo de hacer pruebas, probe solo una o dos veces, espero sea loque me pides juank. Saludos....... :guitar:
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Viernes 17 de Octubre de 2003, 17:25
Hola Jhonnathan , tardare un pco en revisar tu solucion, porque he renunciado a mi trabajo para comenzar en otro y tendre 3 meses de capacitacion, asi que unicmante me podre seguir conectando en mi casa por un tiempo.

Tratare de revisarlo este fin de semana.

Gracias por la pasciencia y de antemano te agardezco la ayuda que nos puedas brindar en el foro.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Viernes 17 de Octubre de 2003, 23:47
Hola amigo, pues no necesitas agradecer nada, es todo un gusto para mi aportar en lo que pueda, cuando se trata de ayudar a progresar para el futuro ahi estoy yo. Espero te valla bien en todas tus cosas, y que el trabajo que tendras sea 1000 veces mejor que el que tenias. Ya me tocara a mi hacer todas la cosas que tu haces, por ahora solo debo dedicarme a la secundaria :brickwall:, es algo aburrido pero que todos debemos realizar. Bueno juank, todos mis deseos de suerte para vos y muchos saludos. :guitar:
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Miércoles 29 de Octubre de 2003, 06:41
hola amigo.. mil disculpas por mi demora.. pero tu ya conoces los motivos.. hoy revisando el de trsnmision, me arrojo este erro:
 
Código: Text
  1.  
  2. Exiting due to signal SIGSEGV
  3. General Protection Fault at eip=00001a97
  4. eax=00090930 ebx=0000029e ecx=00000030 edx=642981d6 esi=00000054 edi=00010964
  5. ebp=00090940 esp=000908f0 program=H:DOCUME~2SWRETOSSOLUCI~1JHONAT~1TX.EXE
  6. cs: sel=01a7  base=029e0000  limit=0009ffff
  7. ds: sel=01af  base=029e0000  limit=0009ffff
  8. es: sel=01af  base=029e0000  limit=0009ffff
  9. fs: sel=017f  base=000077d0  limit=0000ffff
  10. gs: sel=01bf  base=00000000  limit=0010ffff
  11. ss: sel=01af  base=029e0000  limit=0009ffff
  12. App stack: [00090964..00010964]  Exceptn stack: [000108c0..0000e980]
  13.  
  14. Call frame traceback EIPs:
  15.   0x00001a97
  16.   0x00003428
  17.  
  18.  


Eso no pasaba antes, asi que creo que el error se genero por utilizar un espacio de memoria no asignado.. verifica por favor.. es probable que en tu compilador no te vote este error, pero el mio sui lo arroja porque es muy delicado con eso.

Por otro lado , recuerda que por standart la funcion main debe devolver int más no void.

Creo que este reto ya es tuyo, asi que apenas modifiques lo del error de asignacion de memoria... seras el ganador.

De todos modos publicare el mio para que lo revices.. seria bueno que para proximos programas estructuraras mas tu codigo ya que aunque funciona bien, es poco legible y reutilizable.. de todos modos esto solo se aprende con el tiempo y la practica... sigue mejorando ya vas muy bien.
Título: Re: Protocolo Hdlc
Publicado por: Super_G en Viernes 31 de Octubre de 2003, 02:56
Por que :
Entradatransmisor: 00000000111100000101010100000000
Salida transmisor: 011111100000000000001111100101010000000001111110
La salida no deberia ser????:
011111100000000011110000010101010000000001111110
o que operacion se realiza ademas de poner las banderas si en este caso no existe problemas con 5 1s seguidos??????
me refiero a que depues de la bandera deberia venir la informacion de entrada y al final la bandera de finalizacion, o no entendi nada???
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Viernes 31 de Octubre de 2003, 19:33
vas bien y has ebntendido bien, pero te falta leer algo..
te diria que es pero no es necesario, mekjor pegale una leida a los post del foro...
que ahi ya tienes la respuesta.. jhonatan tuvo el mismo problema.
Título: Re: Protocolo Hdlc
Publicado por: Super_G en Sábado 1 de Noviembre de 2003, 03:25
Aver si entendi:
los datos son de 8bits(1Byte), estos datos que le lee el transmisor virnen los bytes de bit mas significativo a bit menos significativo y para transmitilos lo pone al reves si en la frame resultante(donde no se limitan los bytes) aparece una secuensia de 5 1s consecutivos es entonces donde se inserta el cero acontinuacion; y recien es transmitido.
Si esto es asi entoces es mas complicado de lo que pensaba.

otra duda seria sobre lo de las banderas si el receptor al teminar los datos y llega a la bandera lee los primeros 5 1s y despues es otro 1 y no un cero ¿esto significa error?, pues dice que si despues de 5 unos verifica si el siguiente bit sea un 0 y no un 1 pues si es un 1 :"es una secuencia de 6 o más unos, que es prohibida en el protocolo " pero si es la bandera "01111110" y tiene 6 1s como es esto??????
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Jueves 6 de Noviembre de 2003, 15:12
pero no hay problema...
si en un octeto se encuentran 01111110 es una bandera y por tanto fin de la trama.. pero si los 6 unos estan en intermedio de 2 octetos seria un error ejemplo

10101011 - 11110001

aca hay seis unos seguidos pero no es bandera porque no estan en el mismo octeto en cambio

10101011 - 01111110

si es bandera porque los 6 unos estan en el mismo octecto.
Título: Re: Protocolo Hdlc
Publicado por: Super_G en Viernes 7 de Noviembre de 2003, 03:01
Entoces en el receptor la revision tambien es por octetos, entoces hace la verificaion de los unos y la bandera por octetos, 2 cosas al mismo tiempo pense que las hacia por separado.

Gracias por la ayuda, ahora espero poder hacer el programa y me parece un poquito mas complicado de lo que hasta ahora habia pensado
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Viernes 7 de Noviembre de 2003, 14:06
claro , si recibes seis unos y no estan en el mismo octeto osea:

00101011-11110000

al pasarlo al protocolo quedaria:

00101011-11101000-0
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Lunes 17 de Noviembre de 2003, 14:34
Hola a todos, juank, perdon por mi demora, he estado para unos proyectos.
   Compilo una y otra vez el fuente y no aparecen nisiquiera warning, si puedes decirme de que modo debo configurar mi compilador te agradeceria, no me aparece ningun tipo de error.

   El compilador es Borland C++ 3.1

   Gracias y Saludos :adios:
Título: Protocolo Hdlc
Publicado por: JuanK en Miércoles 19 de Noviembre de 2003, 21:51
si ese borland.. no valida eso pero igual se puede generar el error si por accidente se toma un segmento utilizado por el sistema operativo.

espera mas detalles en estos dias.. tratare de contestarte completo en la noche.
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Domingo 7 de Diciembre de 2003, 19:52
Hola a todos,
bueno he culminado mi universidad, asi que mientras iniciamos el nuevo periodo academico me veran muy seguido por aqui, ç
he vuelto a revisar el EXELENTE Trabajo de jhonatan,
el error se genera unicamente en el receptor cuando se envian cadenas de datos muy grandes,de resto esta todo OK!!!!

Espero tus comentarioos amigo y de antemano pido perdon por mi demora.
Título: Re: Protocolo Hdlc
Publicado por: © Jonathan © en Lunes 8 de Diciembre de 2003, 01:48
Felicitaciones juank!!!:smartass: ... me alegro que hallas finalizado con tu universidad, con respecto a mi trabajo, te comento que no logro encontrarle los errores, a mi no me salta ni siquiera un warning. Si sabes como puedo arreglarlo me informas. Por el momento solo te envio un gran abrazo. SALUDOS!  :hola:
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Domingo 14 de Diciembre de 2003, 19:23
:kicking: FIN:

Buno ya no hay más para hacer en este reto, ya que Jonathan lo ha finalizado... :comp:
queda unicamente para subsanar el porque en unos compiladores arroja error de memoria al introducir cadenas de mas de 128 bit en el receptor, pero dado que al unico que le sale el error es a mi :lightsabre: , no veo porque insistir y doy por cerrado este reto.

ASI QUE FELICITACIONES A  
:smartass:JONATHAN:smartass:
  POR HABER TERMINADO EL RETO!!!!

 :ph34r: Ahora solo me resta invitarlos a todos que participen del nuevo reto el cual esta aún más interesante.!!! :alien:

 :hola:
Título: Re: Protocolo Hdlc
Publicado por: JuanK en Domingo 14 de Diciembre de 2003, 19:34
SOLUCION

Amigos :lol:
a continuación publico la solución que le di al reto de HDLC.

Como siempre cualquier duda o inquiertud sera bien recibida. :lightsabre:  :smartass:
Título: Re: Protocolo Hdlc
Publicado por: xeneize24 en Viernes 29 de Agosto de 2008, 10:30
Buenas

Tengo un par de dudas con HDLC.

La primera esta en otro hilo

foros.solocodigo. com/viewtopic.php?f=23&t=36598


La segunda es sobre HDLC con envio continuo.

Supongamos que tenemos una ventana de tamaño 3.

El intercambio de tramas seria de forma que se envian 3 tramas (0 1 y 2) y el receptor envia ack(2) para validar la 2 y las anteriores sin validar? o sin embargo, te valida las tramas 1 a 1? Es decir, envia ack(0), ack(1), ack(2)...

Gracias