Wednesday, November 26, 2008

Deine Indifferenz ist mir scheißegal!

Bien, la versión 4 del protocolo IP (Internet Protocol). Es el estándar actual de Internet para identificar dispositivos conectados a esta red.
Sin embargo, IPV4 no fue la primera versión del protocolo IP que existió, (esto es claro, debido a que es la versión 4!) Veremos ahora unas diferencias que existen entre la versiòn 4 y la versiòn 2, esto es IPV2.

En RFC 791,ó en IPV2, el mismo espacio de dirección así como los mismos campos de la cabecera IP (Las direcciones de destinatario y fuente) son usados para identificar y localizar, usualmente el identificador de un host es idéntico a su localizador,
este identificador es ùnico tanto en tiempo como en espacio.
En IPV4, es un hecho que las direcciones YA NO son globalmente únicas y no tienen un nivel de vida indefinido.

Tambièn han existido mucha evoluciòn en el modo de hacer routing desde que IP se especificò por primera vez [RFC 791]. Muchos de los principios de Routing han pasado a ña historia, algunos principios sí se han perservado, mientras que nuevas principios han sido introducidos.
Más información, se puede leer aqui->
  • Click hier,um etwas schön zu sehen!
  • Wednesday, November 19, 2008

    Von zeit zur zeit denke ich an dich und mich...

    No es sencillo en Windows, (a partir de Windows XP), sacar datos por el puerto paralelo.
    El sistema operativo simplemente no da permisos para hacerlo, los sistemas operativos Windows 2000 y XP no permiten que los programas tengan acceso directo a este puerto!
    Es mucho más fácil hacerlo en Linux Gnu, pero si uno está obsesionado con hacerlo en Windows XP, aquí están los pasos que deberá seguir para tener acceso a la escritura en este puerto:

    1. Baja y descomprime el archivo UserPort

    2. Copia el archivo userport.sys al directorio C:\WINDOWS\SYSTEM32\DRIVERS

    3. Ejecuta el programa userport.exe, y sin tocar nada mas, presiona el botón "Start", luego cierra el userport.Esto tendrás que hacerlo cada vez que reinicies el ordenador.

    4. Finalmente ejecuta el programa que daba problemas en modo de compatibilidad para “Windows 98”. ¿como se hace esto? Muy sencillo:

    Para establecer las propiedades de compatibilidad de un programa:

    * Haga clic en el botón derecho del ejecutable o en el acceso directo al mismo, y haga clic en Propiedades.
    * Seleccione la casilla de Ejecutar este programa en modo compatibilidad.
    * Seleccione de la lista el sistema operativo Windows 98.
    * Ejecute el programa de nuevo cuando haya terminado de cambiar la configuración.

    Ahora bien, se "supone" que con esto debemos poder tener acceso al puerto paralelo, claro está que es necesario probarlo, para hacerlo se puede hacer un sencillo programa en C++, y usar la siguiente función:
    _outp(a,b);
    Esta función, localizada en la librería de Conio.h, (uuuh Conio...gag me with a spoon!) recibe 2 parámetros, " a" es el puerto al cual se desea escribir, en este caso es el puerto paralelo y por ende se pondría aquí 0x378, que es el número asigando a este puerto, y "b", que es el valor que se desea enviar a esta puerto. b es un valor entero, y el valor máximo que puede tomar es 255,esto se debe a la configuración del puerto paralelo que usé, contaba con 8 bits de salida, y los demás representaban tierra y uno extra la señal de storbe.
    Recordemos que el bianrio 11111111 equivale a 255, y por ende es el mayor valor que se puede representar con esta salida, ahora bien el menor valor es cero, y es cuando tenemos 00000000.

    Un programa simple, para verificar que nuestro puerto paralelo está funcionado adecuadamente se presenta a continuación: (Este programa lo corrí en Visual Studio 2003)


    #include
    #include
    #include
    int main()
    {
    char c='s';
    int orden, alphacommand = 1, betacommand = 2;

    while (tolower(c)=='s')
    {
    printf("\n1 = alphacommand\n");
    printf("2 = betacommand\n");
    printf("Elija el comando (1/2): ");
    scanf("%i",&orden);
    if (orden==alphacommand)
    _outp(0x378, 0x1);
    else if (orden==betacommand)
    _outp(0x378, 0x0);

    printf("\nComando Realizado.\n\nDesea Continuar?:(S/N)");
    c = getch();
    }

    return 0;
    }

    El programa anterior cuando se escoje el alfacomando, prenderá un bit del puerto paralelo, con un multimetro se puede verificar que esto se lleve acabo realmente.
    Esperemos que este post ahorre el tiempo de las personas...und sie können mit dieser Zeit eine gute Liebe finden





    Tuesday, November 18, 2008

    Un mensajito no de amor, sino de ICMP...:(

    Los errores de mensajes ICMP, se usan por los routers y los hosts ó clientes, para decirle a un dispositivo enviador de datagramas, que se tuvieron problemas recibiéndolo.
    En la versión original de ICMP, 5 diferentes mensajes de error son definidos. Estos mensajes se describen en el estándar ICMP, RFC 792.
    Veamos ahora los mensajes de error que presenta ICMPv4:

    Mensaje de "Destino Inalcanzable" : Los cuales se envían cuando existen fallos en el envió del datagrama.
    Seamos reales, el protocolo de internet es uno que no es muy confiable, no existe garantía que un datagrama que es enviado por dispositivo hacia otro vaya realmente a llegar. Toda la red de clientes y routers hará su mayor esfuerzo para entregar un datagrama, pero es posible que no llegue a su destino por un sin fin de razones. Claro está, que los dispositivos que se encuentran en una red IP entienden esto, y se diseñan adecuadamente.

    Ahora bien, a pesar de que IP está diseñado para fallar, no se deben tomar estas fallas a la ligera. Se necesita un mecanismo que le diga al dispositivo fuente, que algo "malo" está sucediendo, además se le deberá decir la razón de ello.
    En IPV4 este servicio se brinda através de la transmisión del mensaje "Destino Inalcanzable". Estos mensajes, incluyen la porción de los datagramas que no se pudieron entregar, esto ayuda a que emisor entienda en dónde se tuvo el error.

    Se muestra a continuación el formato que tiene el mensaje de Destino Incalcanzable

    Grafik

    Se muestran a continuación códigos de los subtipos de errores (Error Subtype) que presenta este tipo de mensajes:

    Valor de código

    Subtipo de mensaje

    Descripción

    0

    Red inalcanzable

    El datagrama no pudo ser entregado a la red que se especificó en el campo de ID de red en la porción de la dirección IP. Se peude deber a un problema en el routing, aunque también puede ser causado por tener una mala dirección

    1

    Cliente inalcanzable

    El datagrama logró llegar a la red que se especificó, mas no pudo ser entregado al host que se indicó en la dirección. Esto suele ser de nuevo un problema relacionado con el ruteo.

    2

    Protocolo inalcanzable

    El protocolo que se especifico en el campo del protocolo fue inválido para el cliente al cual el datagrama fue entregado.

    3

    Puerto inalcanzable

    El puerto destino, especificado en la cabecera UDP ó TCP fue inválido.


    Mensajes de Fuente sofocada: Se utiliza para decirle al dispositivo que deberá enviar los datagramas a una menor tasa.
    Si un destinatario, está recibiendo datagramas a una tasa relativamente lenta, es posible que procese cada uno de los datagramas al vuelo, en el momento en el que los recibe. Sin embargo, la recepción de datagramas en una red tienede a ser disparejo, debido a las tasas altas y bajas de tráfico existente. Para esos momentos en los cuales se reciben datagramas a una frecuencia mayor que en la que se pudiesen estos procesar, todos los dispositivos cuentan con un buffer en donde pueden temporalmente guardar a los datagramas que reciben, se guardarán allí hasta que ya tengan tiempo para procesarlos.
    Sin embargo el buffer es en si de un tamaño limitado, y pueden existir casos en los que el tráfico se recibe tan rápido que el buffer se llena. Cuando esto sucede, el dispositivo se ve obligado a desahacerse, descartar todos los nuevos datagramas que le lleguen. El receptor deberá por ende enviar un mensaje de retroalimentación a la fuente y explicarle su problema.

    En IPv4,un dispositivo que es obligado a "tirar" datagramas debido a una congestion, le envía al receptor retroalimentación a la fuente, mediante los mensajes de Sofocamiento de la fuente. Es una manera cortés de decirle a la fuente: " ¡¡No tan rápido!!" . Cuando un dispositivo recibe este tipo de mensajes, sabe que debe disminuir la frecuencia a la cual envía los datagramas al receptor en cuestión.
    Se muestra continuación el formato de este tipo de mensaje:


    Nombre del Campo

    Tamaño (bytes)

    Descripción

    Tipo

    1

    Tipo: Identifica el tipo de mensaje ICMP. Para mensajes de Sofocamiento de fuente, este valor se pone en 4.

    Código

    1

    Code: Identifica el subtipo de error siendo comunciado, en este caso no se usa y se deja en 0.

    Checksum

    2

    Checksum: Campo de 16 bits usado en la cabecera del ICMP

    SinUso

    4

    SinUSO: 4 bytes que se dejan en blanco y no se usan

    Porción original del Datagrama

    Variable

    Porción original del Datagrama: Incluye toda La cabecera así como los primero 8 bytes del datagrama que fueron descartados debido a congetionamiento.





    Mensaje de tiempo excedido: Se envía cuando un datagrama ha estado viajando por la red demasiado tiempo, ó cuando se está tardando mucho en unir los distintos fragmentos del datagrama, para re esamblarlo.

    Mensaje de Redirección: Este mensaje permite que el router dé retro alimentación respecto a mejores rutas que existen para llegar a un cliente.

    Mensaje de Problema con los Parámetros: Este es un mensaje genérico, usado para todos los demás problemas que pudiesen existir que no están cubiertos en los otros mensajes de error de ICMP.
    Si un dispositivo encuentra problemas serios con cualquiera de los parametros dentro de la cabecera de un datagrama IP, deberá descartar o deshacerse del datagrama. AHora bien, debido a que se trata de una situación crítica, deberá comunciarse con el emisor del datagrama y reportr su problema. Esto se logra através del uso del mensaje "Problema de Parametro" que ICMPv4 brinda.
    Este es un tipo de mensaje que peude ser usado, para indicar cualquier tipo de error que exista en la cabecera de un datagramaIP.sage had the problem.



    Nombre del Campo

    Tamaño (bytes)

    Descripción

    Tipo

    1

    Tipo: Identifica el tipo de mensaje ICMP, este valor se pone en 12.

    Código

    1

    Code: Identifica el subtipo de error siendo comunciado, se muestra una tabla abajo de esta que indica el tipo de suberrores que pueden existir.

    Checksum

    2

    Checksum: Campo de 16 bits usado en la cabecera del ICMP

    Apuntador

    1

    Apuntador: Apunta a la localización del datagrama donde se ocasionó el problema.
    Se utiliza este campo, sólo cuando el valor del código es 0.

    SinUso

    4

    SinUSO: 4 bytes que se dejan en blanco y no se usan

    Porción original del Datagrama

    Variable

    Porción original del Datagrama: Incluye toda La cabecera así como los primero 8 bytes del datagrama que fueron descartados debido a congetionamiento.





    Ahora se muestran los parámetros para interpretar los códigos de error


    Valor del Códig

    Tipo de Submensaje

    Descripción

    0

    El apuntador indica el error

    El apuntador indica donde se localiza el error.

    1

    Falta un campo requerido

    Debido a que el apuntador no puede señalar donde existió este tipo de error, debido a que el campo NO existe, es necesario manejarlo de este modo.

    2

    Longitud incorrecta

    La longitud total de datagrama fue incorrecta, lo cual indica un problema general con todo el datagrama. De nuevo el apuntador no es de mucha ayuda.