Anti-patrones: ejemplos bien documentados de malas soluciones para diseñar un pésimo sistema de software.

Desarrollar un nuevo software no es tarea fácil por muy simple que sean las funcionalidades solicitadas, hay muchas etapas a seguir y muchas cosas pueden salir mal, en especial si se parte de una mala conceptualización.

Resultado de imagen para tom escopeta

Esto es lo que hace un anti-patrón.

Los anti-patrones surgen principalmente de la falta de experiencia o conocimiento, no seguir los estándares, falta de documentación, de ser subjetivo a la hora de escoger una solución efectiva. Se estudian a fin de poderlos evitar en el futuro, y en su caso, para que su presencia pueda ser reconocida fácilmente.

Un anti-patrón de diseño software es un patrón de diseño que invariablemente conduce a una mala solución para un problema.

De una forma análoga podríamos decir por ejemplo, que si una persona no cae en el anti-patrón «estereotipo» criminal, terrorista, estafador, dictador, y similares, entonces podríamos afirmar que no es una mala persona. Lo cual no implica, que sea una buena; para serlo debería no sólo no encajar en los anti-patrones mencionados, sino además, cumplir con uno o más patrones «cualidades» tales como ser honesto, trabajador, responsable, etc.

antipatterns

En la elaboración de un sistema, intervienen al menos, diversos actores: arquitectos de software, administradores de proyecto y desarrolladores. Para cada uno de ellos, existen anti-patrones que describen comportamientos y soluciones incorrectas Los anti-patrones (una vez conocidos) constituyen para cada uno de los actores involucrados, descripciones de problemas recurrentes en la construcción de software, les proporcionan un vocabulario común para identificar problemas y discutir posibles soluciones y les sugieren pasos para la re-ingeniería, y re-organización estructural de un sistema.

Los anti-patrones los podemos agrupar de la siguiente manera:

Anti-patrones de Administración de Proyecto

  • Software bloat: Es también conocido como el “súper equipo de programadores”. Consiste en la creencia de que asignar más personal a un proyecto, acotará el tiempo de entrega. Regularmente como una forma desesperada de intentar corregir retraso del proyecto.
  • Smoke and mirrors: Ocurre cuando el equipo se compromete a cumplir expectativas del cliente que escapan las capacidades tecnológicas de la organización. Es importante la correcta administración de las expectativas del cliente.
  • Corncob: Los empleados se obstaculizan unos a otros. Personas conflictivas o difíciles de tratar que forman parte del equipo de desarrollo, desvían u obstaculizan el proceso de producción, porque transfieren sus problemas personales o diferencias, con otros miembros del equipo al proyecto.
  • Bad management: Gestionar un proyecto sin tener suficientes conocimientos sobre la materia. El proyecto se descuida y no se monitorea de manera adecuada, es muy difícil de detectar en etapas iniciales, pero repentinamente emerge de golpe y suele voltear de cabeza la situación del proyecto. Se manifiesta con retrasos en las fechas de entrega y/o áreas incompletas.
  • Absentee manager: Situación en la que el principal responsable o coordinador se ausenta o permanece en paradero desconocido o no localizable durante importantes períodos de tiempo.
  • All you have is a hammer: Gestión gris y plana, incapaz de tratar a los subordinados de manera personalizada y acorde con sus necesidades particulares.
  • Fruitless hoops: Gestor o coordinador que solicita grandes cantidades de datos (en ocasiones sin relevancia alguna) antes de tomar una decisión.
  • Golden child: Situación en la que ciertas responsabilidades, oportunidades, reconocimientos o recompensas van a parar a un determinado miembro del equipo como consecuencia de una relación personal o en clara contradicción con su rendimiento real.
  • Headless chicken: Se aplica al gestor, coordinador o responsable que vive en una permanente situación de pánico y medidas desesperadas.
  • Metric abuse: Utilización manipuladora o incompetente de las medidas y las métricas.
  • Mr. Nice Guy: Se aplica al gestor que pretende convertirse en amigo de todos.
  • Spineless executive: Gestor, coordinador o responsable que no tiene el coraje de enfrentarse a las situaciones, asumir las responsabilidades de los errores, o dar la cara por sus subordinados.

Anti-patrones de Diseño de Software

  • The God: Un objeto omnipresente y desconocido. Todo sistema donde una sola clase ó modulo (la función main o equivalente) hace toda la funcionalidad. En consecuencia, tenemos un código desorganizado y fuertemente acoplado a dependencias.
  • Golden Hammer: Conocida también como la vara mágica. Es un vicio relacionado con aferrarse a un solo paradigma, para solucionar todos los problemas que se nos presentan al desarrollar software, como por ejemplo, siempre querer usar el mismo lenguaje de programación para todos los desarrollos, sea o no conveniente. Lo cual conlleva frecuentemente a consumir mucho más esfuerzo para resolver un problema.
  • Lava Flow: Tal como lo indica su nombre “programar al estilo volcán”. Es construir grandes cantidades de código de manera desordenada, con poca documentación y poca claridad de su función en el sistema. Conforme el sistema avanza en su desarrollo, y crece, se dice que estos flujos de lava se solidifican, es decir, se vuelve mucho más complicado corregir los problemas que originan, y el desorden va creciendo geométricamente.
  • Spaghetti Code: Son todos aquellos fragmentos código no documentado, donde cualquier pequeña variación provoca un cambio estructural completo del sistema. Si se quiere ir al extremo de manera coloquial seria como codificar con los “pies”. A diferencia del estilo volcán, donde la crítica es a la forma en que el sistema crece (se anexan módulos), aquí la crítica es a la forma en que se escribe cada una de las líneas, desde la indentación hasta el lenguaje o lenguajes utilizados y su integración. El spaghetti es causa directa del síndrome del programador desesperado. Pero si para colmo, tenemos sólo un chef, o en el contexto un “Programador Solitario”. ¿Quién era ese hombre tras el monitor? Que no está ya disponible para explicarnos su receta. Simplemente se tienen problemas, muchos problemas.
  • Poltergeist: Son diseños no dimensionados correctamente, es decir se tienen demasiadas clases en un programa o tablas en una base de datos. También puede ser clases o tablas con mínimas responsabilidades. Muchas veces se utiliza para disfrazar la presencia del anti-patrón The God. Se colocan clases inútiles, que disfrazan el hecho que todo el sistema se encuentra construido en uno, o unos cuantos archivos, módulos o clases. Este anti-patrón sugiere un modelo de análisis y/o diseño inestable: el diseño no coincide con la implementación, y por ello es imposible hacer extensiones al sistema, porque entre tanto “fantasma”, encontrar los elementos relevantes es imposible.
  • Input kludge: No especificar e implementar el manejo de entradas inválidas.
  • Sequential coupling: Construir una clase que necesita que sus métodos se invoquen en un orden determinado.
  • Heroic naming: Identificar los componentes de un programa (interfaces, clases, propiedades, métodos…) con nombres que provocan aparente una estandarización con la ingeniería del software pero que en realidad oculta una implementación anárquica.
  • Boat anchor: Retener partes del sistema que ya no tienen utilidad.
  • Hard code: Hacer supuestos sobre el comportamiento del sistema en su estructura o secuencia de implementación, por ejemplo: flujos estáticos e invariables debido a falta de previsión sobre elementos que puedan variar en el futuro.
  • Blind faith: Despreocuparse de la comprobación de los resultados que produce una subrutina, o bien de la efectividad de un parche o solución a un problema.
  • Exception handling: Emplear mecanismos de manejo de excepciones del lenguaje para implementar la lógica general del programa. Por otro lado, también es un problema común introducir condiciones para evitar que se produzcan excepciones en tiempo de ejecución, lanzando una excepción si dicha condición falla.
  • Packratting: Consumir recursos de memoria en exceso debido a no liberar objetos reservados dinámicamente una vez que ya han dejado de ser utilizados.

Anti-patrones de Arquitectura

  • Stovepipe: También conocido como “cocinado en caliente”. Es la forma breve de referirse a la creación de islas dentro de la misma empresa (cada departamento crea su propio subdepartamento de sistemas). “Islas” independientes, y en conflicto unas con otras. Cada isla desarrolla la parte del sistema que necesita para satisfacer sus requerimientos, sin preocuparse por el resto (no existe una buena gestión), el escenario resultante implica una pobre o nula interoperabilidad, obviamente, no existe la reutilización y, consecuentemente se incrementan costos. Contrario a lo que se podría suponer, cada vez es más común este tipo de acciones, dada la premura de varios departamentos de la empresa, por contar con un entregable en el menor tiempo posible.

  • Casarse con el diablo: Crear una dependencia fuerte hacia un fabricante o proveedor para obtener una solución. El problema es inminente: se depende completamente de un ente externo, la calidad de los productos se comprometen, al ser una dependencia fuerte estamos propensos a sus excusas, justificaciones y ritmo de trabajo.
  • Reinventing the wheel: Se refiere a reimplementar componentes que ya existen o cuya funcionalidad es similar. Por lo general, es consecuencia del poco conocimiento de la organización o trabajo ya existente por parte del arquitecto, lo que conlleva a buscar soluciones para problemas ya solucionados.

  • Architecture as requirement: Imponer que el diseño considere, obligatoriamente, el uso de herramientas o métodos no necesariamente idóneos.
  • Bear trap: Invertir mucho en una herramienta poco adaptada o factible, de manera que después es imposible deshacerse de ella.

Anti-patrones Organizacionales

  • Scope creep: Permitir que el alcance de un proyecto crezca sin el control adecuado.
  • Design by committee: Contar con muchas opiniones sobre un diseño, pero adolecer de falta de una visión unificada.
  • Escalation of commitment: No ser capaz de revocar una decisión a la vista de que no ha sido acertada.
  • Mushroom management: Tratar a los empleados sin miramientos, sin informarles de las decisiones que les afectan (manteniéndolos cubiertos y en la oscuridad, como los champiñones).
  • Management by perkele: Aplicar una gestión autoritaria con tolerancia nula ante las disensiones.
  • Cost migration: Trasladar los gastos de un proyecto a un departamento o socio de negocio vulnerable.
  • Continuous obsolescence: Destinar desproporcionados esfuerzos a adaptar un sistema a nuevos entornos.
  • Violin string organization: Mantener una organización afinada y en buen estado, pero sin ninguna flexibilidad.
  • Analysis paralysis: Dedicar esfuerzos desproporcionados a la fase de análisis de un proyecto, eternizando el proceso de diseño iterando sobre la búsqueda de mejores soluciones o variantes.
  • I told you so: Permitir que la atención se centre en que la desoída advertencia de un experto se ha demostrado justificada.
  • Cash cow: Pecar de autocomplacencia frente a nuevos productos por disponer de un producto legacy muy lucrativo.

Anti-patrones de Configuración

  • Extension conflict: Problemas con diferentes extensiones que tratan de gestionar las mismas partes del sistema (específico de Mac OS).
  • Dependency hell: Escenario de problemas producidos por las versiones de otros productos que se necesitan para hacer funcionar un tercero.
    • DLL hell: Problemas con las versiones, disponibilidad o proliferación de DLLs (específico de Microsoft Windows)
    • JAR hell: Problemas con diferentes versiones o ubicaciones de ficheros JAR (Java), típicamente causados por la falta de comprensión del modelo de carga de clases.

Conclusiones

La idea no es tanto decir “no hagas esto” sino “tal vez no sepas que haces esto…, pero no funciona”.

Algunos de estos patrones, son tan risibles que se puede suponer que nadie podría cometerlos, y sin embargo, muchos de nosotros, estudiantes, profesionales, especialistas, hemos caído en al menos uno de ellos. Por lo que conocerlos nos ayuda a identificar de forma oportuna problemas o consecuencias futuras.

Es importante reflexionar que la tecnología avanza en un rumbo tan acelerado que las mejores prácticas de esta época, pueden evolucionar y convertirse en anti-patrones en un futuro próximo.

La programación estructural podría ser un ejemplo futuro, en cierto contexto: “solución sencilla y rápida con consecuencias negativas a largo plazo”.

Referencias

  1. William J. Brown. Ed. John Wiley & Sons, 2000. Antipatterns in Project Management. ISBN: 0471363669
  2. Bill Dudney, Stephen Asbury, Joseph Krozak, and Kevin Wittkopf. Ed. John Wiley & Sons, 2003. J2EE AntiPatterns. ISBN: 0471146153.
  3. William J. Brown. Ed. John Wiley & Sons, 1998. Antipatterns: Refactoring Software, Architectures, and Projects in Crisis. ISBN: 0471197130.
  4. Gamma, Erich; Richard Helm, Ralph Johnson, and John Vlissides (1995). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. ISBN 0-201-63361-2.
  5. Junta de Andalucía. (2014). Especificación de los Anti patrones de diseño de Arquitectura de Software. Recuperado el 12 de Octubre de 2014, de Junta de Andalucía: http://www.juntadeandalucia.es/servicios/madeja/contenido/recurso/820

 

CONFIGURANDO OSPF

OSPF_INT.png

Open Shortest Path First (OSPF), es un protocolo de routing de estado de enlace basado en un estándar abierto, ha sido descrito en varios RFCs. El término Open en el nombre del protocolo hace referencia a que es un protocolo abierto al público y no es propietario de ninguna compañía, una de las principales características de OSPF es la capacidad de escalabilidad de la red a través de un modelo jerárquico que es posible conseguir mediante la utilización de distintas áreas.

OSPF versión 2 (OSPFv2) se encuentra disponible para IPv4, mientras que OSPF versión 3 (OSPFv3) se encuentra disponible para IPv6.

CARACTERÍSTICAS

  • Sin clase: por su diseño, es un protocolo sin clase, de modo que admite VLSM y CIDR.
  • Eficaz: los cambios de estados de enlace dirigen actualizaciones de routing (no hay actualizaciones periódicas). Usa el algoritmo SPF para elegir la mejor ruta.
  • Convergencia rápida: propaga rápidamente los cambios que se realizan a la red.
  • Escalable: funciona bien en tamaños de redes pequeñas y grandes. Se pueden agrupar los routers en áreas para admitir un sistema jerárquico.
  • Seguro: admite la autenticación de síntesis del mensaje 5 (MD5). Cuando están habilitados, los routers OSPF solo aceptan actualizaciones de routing cifradas de peers con la misma contraseña compartida previamente.

La distancia administrativa (AD) es la confiabilidad (o preferencia) del origen de la ruta. OSPF tiene una distancia administrativa predeterminada de 110.

Los mensajes OSPF se encapsulan directamente dentro de datagramas IP, con número de protocolo 89 (TCP=6, UDP=17)

Las direcciones IP multicast 224.0.0.5 y 224.0.0.6 son utilizadas por el protocolo de enrutamiento OSPF.

OSPF_formato.png

TIPOS DE MENSAJE OSPF

  • 0x01 Saludo
  • 0x02 Descripción de la base de datos (DBD)
  • 0x03 Solicitud de estado de enlace (LSR)
  • 0x04 Actualización de estado de enlace (LSU)
  • 0x05 Acuse de recibo de estado de enlace (LSAck)

FUNCIONAMIENTO BÁSICO DE OSPF

OSPF es un protocolo de enrutamiento interior que mediante el intercambio de mensajes entre los routers de la red permite conocer la topología de dicha red y calcular el camino más corto a todas las subredes para construir la tabla de enrutamiento mediante el algoritmo de Dijkstra.

  • Descubrimiento de vecinos (otros routers OSPF conectados a su misma subred) mediante mensajes HELLO.
  • Intercambio de la base de datos topológica de OSPF mediante mensajes LS UPDATE (Link State Update) que se envían por inundación. Cada router con todos los mensajes LS UPDATE mantiene una base de datos (Link State DB) que representa topología completa de la red.
  • Cálculo del algoritmo de Dijkstra en cada router, partiendo de la base de datos de la topología de la red.
  • Los cambios en la topología se comunican mediante nuevos mensajes LS UPDATE.

MENSAJE DE SALUDO

  • Detectar vecinos OSPF y establecer adyacencias.
  • Utilizada por redes de acceso multiple para elegir un router designado (DR) y un router designado de respaldo (BDR).
  • El intervalo de tiempo por defecto es cada 30 segundos en enlaces WAN y 10 segundos en enlaces LAN a través de la dirección multicast 224.0.0.5.
  • El Intervalo muerto (Dead time) es 4 veces el intervalo de envio de un mensaje de saludo, posterior a este tiempo un enlace se considera desconectado de la red.
  • Los mensajes de saludo no se propagan por inundación, sólo tienen sentido en el enlace local en el que se generan.

ROUTER DESIGNADO (DR)

El router designado es el representante de la subred responsable de crear los mensajes que contienen información sobre la misma.

ROUTER DESIGNADO DE RESPALDO (BDR)

Se elige como BDR el segundo mejor router según los criterios de elección de DR para en caso de que falle el router designado este tome su lugar inmediatamente.

Si el DR deja de funcionar (deja de enviar un HELLO en 40 segundos), el BDR se convierte en el nuevo DR y se elegirá un nuevo BDR.

Una vez elegidos DR y BDR en una subred si se conecta un nuevo router a esa subred, no se modifica el DR ni el BDR, incluso aunque los routers que se conecten tengan mayor prioridad o mayor identificador.

Si en una subred sólo hay conectado un router OSPF, éste se elegirá como DR y no habrá BDR. Si posteriormente arrancan otros routers OSPF conectados a esa subred, se elegirá entre ellos el BDR.

CRITERIO DE SELECCIÓN DE DR/BDR

Las elecciones de DR/BDR no ocurre en las redes punto a punto, solo en redes de acceso multiple.

Cuando los routers comienzan a ejecutar OSPF simultáneamente. Inicialmente no hay elegidos ni DR ni BDR y ambos routers intercambian mensajes de HELLO para darse a conocer.

Transcurridos aproximadamente 40 segundos, ambos saben que hay otro router en la misma subred y proceden a elegir DR y BDR, si los routers tienen la misma prioridad, se eligirá DR/BDR según su identificador.

  1. DR: Router con la prioridad de interfaz OSPF mas alta.
  2. BDR: Router con la segunda prioridad de interfaz OSPF mas alta.
  3. Si las prioridades de las interfaces OSPF son iguales se utiliza la ID del router mas alta para romper dicha igualdad.
Router(config-if)#ip ospf priority [0-255]
  • El router no puede convertirse en DR o BDR con un valor de 0.
  • El valor de prioridad por defecto es 1

CONFIGURAR EL ID DEL ROUTER

Asignar el ID del router mediante el siguiente comando:

Router(config)#router ospf [id_del_proceso]
Router(config-router)#router-id [direccion_ip]

Este comando tiene prioridad sobre las interfaces loopback y físicas.

  • La dirección IP mas alta de cualquiera de sus interfaces loopback.
  • La dirección IP activa mas alta de alguna de sus interfaces físicas.

AREAS

Single Area (Router de backbone)

  • Un solo tipo de router
  • El flooding invade todo el area
  • Todos los routers calculan SPF
  • Mayor consumo de ancho de banda
  • Mayor carga de CPU en el router

Multi Area

  • Diferentes funciones del router (ABR)
  • El flooding de updates ocurren solo en el area afectada
  • Solo los routers de dicha area calculan SPF
  • Menor carga de CPU
  • Menor consumo de ancho de banda

TIPOS DE LSA

Tipo 1 (LSA Ruteador): Son llamados router link, estos LSAs describen el estado y el coste de los enlaces entre routers de área. Estos LSAs sólo se propagan dentro de una misma área, no en todo el sistema autónomo.

Tipo 2  (LSA Res): Son llamados network links, estos LSAs describen todos los routers que hay en una red en particular. Estos LSAs se propagan dentro del área que contiene la red.

Tipo 3 (LSA Resumen): Las envía un ABR (enrutador de borde de área) para traspasar la información de un área a otra. OSPF las denomina “summary”.

Tipo 4 (LSA Resumen ASBR): Representa a un ASBR (enrutador del límite de sistema autónomo).

Tipo 5 (LSA Externo): Representa a una ruta externa redistribuida dentro de OSPF desde otro protocolo. El ASBR toma las rutas provenientes del protocolo externo y las reenvía como tipo 5 a todas las áreas internas, excepto a las de tipo Stub.

Tipo  7: Las normas de OSPF dicen que solamente en un área Backbone debería haber redistribución. En un área NSSA se puede conectar un router que tenga conexión con otro protocolo de enrutamiento externo (RIP) y el ASBR enviaría esas redes en formato de tipo 7, de tal manera que el ABR las tome y las redistribuya como tipo 5.

ESTADOS DE OSPF

Down: Un router asigna el estado down a otro router cuando el emisor no ha recibido un paquete hello de parte del receptor. Cuando un router está down significa que no ha recibido ninguna información de sus vecinos. Si no se recibe un paquete Hello en los siguientes 40 segundos, el router pasará a estar full down.

Attempt: En el estado de intento, el router envía paquetes Hello unicast cada intervalo de consulta con el vecino desde el cual no se han recibido mensajes Hellos dentro del intervalo muerto.

Init: Este estado especifica que el router ha recibido un paquete Hello desde su vecino, pero el identificador de router  del receptor no se incluyó en el paquete Hello. Cuando un router recibe un Hello desde un vecino, debería incluir el router ID del remitente en su paquete hello a modo de acuse de recibo (ACK) de que se recibió un paquete válido.

Two way: Este estado indica que se ha establecido una comunicación bidireccional entre dos routers. Bidireccional, en el contexto de OSPF, significa que cada router ha visto el paquete hello del otro.

Exchange: En el estado de intercambio los routers OSPF intercambian paquetes de descripción de base de datos. Estos paquetes contienen solamente encabezados de LSA (Link State Advertisment) y describen los contenidos de la base de datos de estado de enlace.

Loading: Los vecinos completan la base de datos que les envían los otros routers.

Full:  En este estado los routers establecen adyacencia completa entre ellos. Todos los LSAs de router y de red se intercambian y las bases de datos se sincronizan completamente. Este se podría describir como el estado óptimo de un router OSPF ya que todos los router conocen la información de los demás.

OSPF_ESTADOS.png

CONFIGURACIÓN DE OSPF EN SINGLE AREA

OSPF_SINGLE_TOPO.png

Tabla de direccionamiento

OSPF_TABLA_1.png


Router 1

R1(config)#interface serial 0/0/0
R1(config-if)#ip address 192.168.12.1 255.255.255.252
R1(config-if)#clock rate 64000
R1(config-if)#no shutdown
R1(config)#interface serial 0/0/1
R1(config-if)#ip address 192.168.13.1 255.255.255.252
R1(config-if)#no shutdown
R1(config)#interface fa0/0
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#no shutdown

R1(config)# router ospf 1
R1(config-router)#network 192.168.1.0 0.0.0.255 area 0
R1(config-router)#network 192.168.12.0 0.0.0.3 area 0
R1(config-router)#network 192.168.13.0 0.0.0.3 area 0

R1(config)#interface lo0
R1(config-if)#ip address 1.1.1.1 255.255.255.255
R1(config-if)#end
R1#wr

R1(config)#router ospf 1
R1(config-router)#router-id 11.11.11.11
R1(config)#end
R1#wr

R1(config)#router ospf 1
R1(config-router)#passive-interface fa0/0

R1(config)#router ospf 1
R1(config-router)#auto-cost reference-bandwidth 10000

Router 2

R2(config)#interface serial 0/0/0
R2(config-if)#ip address 192.168.12.2 255.255.255.252
R2(config-if)#no shutdown
R2(config)#interface serial 0/0/1
R2(config-if)#ip address 192.168.23.1 255.255.255.252
R2(config-if)#clock rate 64000
R2(config-if)#no shutdown
R2(config)#interface fa0/0
R2(config-if)#ip address 192.168.2.1 255.255.255.0
R2(config-if)#no shutdown

R2(config)# router ospf 1
R2(config-router)#network 192.168.2.0 0.0.0.255 area 0
R2(config-router)#network 192.168.12.0 0.0.0.3 area 0
R2(config-router)#network 192.168.23.0 0.0.0.3 area 0

R2(config)#interface lo0
R2(config-if)#ip address 2.2.2.2 255.255.255.255
R2(config-if)#end
R2#wr

R2(config)#router ospf 1
R2(config-router)#router-id 22.22.22.22
R2(config)#end
R2#wr

R2(config)#router ospf 1
R2(config-router)#passive-interface fa0/0

R2(config)#router ospf 1
R2(config-router)#auto-cost reference-bandwidth 10000

Router 3

R3(config)#interface serial 0/0/0
R3(config-if)#ip address 192.168.13.2 255.255.255.252
R3(config-if)#clock rate 64000
R3(config-if)#no shutdown
R3(config)#interface serial 0/0/1
R3(config-if)#ip address 192.168.23.2 255.255.255.252
R3(config-if)#no shutdown
R3(config)#interface fa0/0
R3(config-if)#ip address 192.168.3.1 255.255.255.0
R3(config-if)#no shutdown

R3(config)# router ospf 1
R3(config-router)#network 192.168.3.0 0.0.0.255 area 0
R3(config-router)#network 192.168.13.0 0.0.0.3 area 0
R3(config-router)#network 192.168.23.0 0.0.0.3 area 0

R3(config)#interface lo0
R3(config-if)#ip address 3.3.3.3 255.255.255.255
R3(config-if)#end
R3#wr

R3(config)#router ospf 1
R3(config-router)#router-id 33.33.33.33
R3(config)#end
R3#wr

R3(config)#router ospf 1
R3(config-router)#passive-interface fa0/0

R3(config)#router ospf 1
R3(config-router)#auto-cost reference-bandwidth 10000


router#show ip protocols
router#show ip route
router#show ip route ospf
router#show ip ospf
router#show ip ospf border-routers
router#show ip ospf database
router#show ip ospf interface
router#show ip ospf neighbor

CONFIGURANDO EIGRP

EIGRP_1.jpg

EIGRP es un protocolo de enrutamiento dinámico vector-distancia propietario de Cisco, el cual es considerado un híbrido debido a que a pesar de ser un protocolo vector-distancia, también hace uso de diferentes parámetros para evaluar las conexiones al igual que lo hacen los protocolos de estado de enlace.

EIGRP es una opción ideal para las grandes redes multiprotocolo construidas principalmente con routers Cisco.

CARACTERÍSTICAS DE EIGRP

  • Hace un descubrimiento eficiente de los vecinos debido al algoritmo que utiliza.
  • Soporta redes discontinuas es decir redes subneteadas “VLSM” (Variable Length Subnet Mask) Máscara de subred de longitud variable.
  • Soporte de IPV6.
  • Balanceo de carga de igual y desigual costo.
  • Uso de diferentes contraseñas para autenticarse.
  • Autenticación MD5.
  • Envía actualizaciones sólo cuando la topología cambia.
  • Uso de PDM (Módulo dependiente del protocolo) para enrutar diferentes protocolos como IP, IPv6, IPX y AppleTalk.
  • Uso de RTP (Protocolo de transporte confiable) para entrega confiable de actualizaciones, consultas y respuestas a los vecinos.

MÉTRICAS

  • Ancho de banda (Por defecto)
  • Carga
  • Retraso (Por defecto)
  • Confiabilidad

EIGRP_K.png

TIPO DE PAQUETES

Paquete de saludo: Se usa para detectar vecinos y formar adyacencias con ellos, se envian por defecto cada 5 segudos.

Paquete de actualización: Se usa para difundir la información de enrutamiento luego de un cambio en la red.

Paquete de reconocimiento (ACK): Se usa para reconocer la recepción de los paquetes de actualización, consulta y respuesta.

Paquete de consulta y respuesta: Los paquetes de consulta pueden ser unicast o multicast, se usan para la busqueda de redes, el paquete de respuesta es solamente unicast.

DUAL (ALGORITMO DE ACTUALIZACIÓN DIFUSO)

EIGRP es un protocolo de vector de distancia mejorado basado en el Algoritmo de actualización difuso (DUAL) para calcular el trayecto más corto hasta un destino dentro de la red. DUAL puede converger rápidamente después de un cambio en la topología, debido a que puede usar rutas de respaldo a otras redes sin recalcular DUAL. Estas rutas de respaldo se conocen como “sucesores factibles” (FS).

Un FS es un router vecino que tiene una ruta de respaldo sin bucles a la misma red que el sucesor y satisface la condición de factibilidad (FC).

La FC se cumple cuando la distancia notificada (RD) desde un vecino hasta una red es menor que la distancia factible desde el router local hasta la misma red de destino. Si la distancia notificada es menor, representa una ruta sin bucles. La distancia notificada es simplemente una distancia factible desde el vecino EIGRP hasta la misma red de destino. La distancia notificada es la métrica que un router informa a un vecino acerca de su propio costo hacia esa red.

EIGRP_SHOW_1.jpg

Por defecto la métrica es la suma del ancho de banda y el retardo multiplicado por 256. Cada Router lleva el regitro de dos métricas para cada ruta: distancia reportada y distancia factible.

La distancia notificada es la distancia a la que dice el router remoto que está de la ruta a alcanzar. Por ejemplo si un router es el sucesor y resulta que lo que queremos alcanzar desde otro router es una red lan de este sucesor, la distancia notificada será el coste de su red lan.

La distancia factible es la distancia total, es decir es la distancia remota + el costo del enlace para alcanzar al router que anuncia la distancia notificada.

TOPOLOGIA DE LABORATORIO

EIGRP_GNS3.png

ROUTER 1

R1#config t
R1(config)#router eigrp 22
R1(config-router)#network 10.10.10.0 0.0.0.255
R1(config-router)#network 172.16.1.0 0.0.0.3
R1(config-router)#network 192.168.2.0 0.0.0.3
R1(config-router)#no auto-summary
R1(config-router)#passive-interface fastEthernet 0/0
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip address 10.10.10.1 255.255.255.0
R1(config-if)#no shutdown
R1(config)#interface serial 0/0
R1(config-if)#ip address 172.16.1.1 255.255.255.252
R1(config-if)#no shutdown
R1(config)#interface serial 0/1
R1(config-if)#ip address 192.168.2.1 255.255.255.252
R1(config-if)#no shutdown
R1(config)#key chain llavero_R1
R1(config-keychain)#key-string clave
R1(config)#interface serial 0/0
R1(config-if)#ip authentication mode eigrp 22 md5
R1(config-if)#ip authentication key-chain eigrp 22 llavero_R1

ROUTER 2

R2#config t
R2(config)#router eigrp 22
R2(config-router)#network 10.10.20.0 0.0.0.127
R2(config-router)#network 172.16.1.0 0.0.0.3
R2(config-router)#network 192.168.1.0 0.0.0.3
R2(config-router)#no auto-summary
R2(config-router)#passive-interface fastEthernet 0/0
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip address 10.10.20.1 255.255.255.128
R2(config-if)#no shutdown
R2(config)#interface serial 0/0
R2(config-if)#ip address 172.16.1.2 255.255.255.252
R2(config-if)#clock rate 64000
R2(config-if)#no shutdown
R2(config)#interface serial 0/1
R2(config-if)#ip address 192.168.1.1 255.255.255.252
R2(config-if)#clock rate 64000
R2(config-if)#no shutdown
R2(config)#key chain llavero_R2
R2(config-keychain)#key-string clave
R2(config)#interface serial 0/0
R2(config-if)#ip authentication mode eigrp 22 md5
R2(config-if)#ip authentication key-chain eigrp 22 llavero_R2

ROUTER 3

R3#config t
R3(config)#router eigrp 22
R3(config-router)#network 10.10.30.0 0.0.0.63
R3(config-router)#network 192.168.1.0 0.0.0.3
R3(config-router)#network 192.168.2.0 0.0.0.3
R3(config-router)#no auto-summary
R3(config-router)#passive-interface fastEthernet 0/0
R3(config)#interface fastEthernet 0/0
R3(config-if)#ip address 10.10.30.1 255.255.255.192
R3(config-if)#no shutdown
R3(config)#interface serial 0/0
R3(config-if)#ip address 192.168.1.2 255.255.255.252
R3(config-if)#no shutdown
R3(config)#interface serial 0/1
R3(config-if)#ip address 192.168.2.2 255.255.255.252
R3(config-if)#clock rate 64000
R3(config-if)#no shutdown

 

CONFIGURACION DE RIP VERSION 2

CISCO_RIP_V2

Configurar RIP (Routing Information Protocol) en un router Cisco es sencillo, lo importante es conocer sus características y funcionamiento. Actualmente existen tres versiones distintas de RIP, una de ellas se ha creado específicamente para enrutamiento de IPv6, las otras dos, RIPv1 y RIPv2 se utilizan para IPv4. RIPv1 ya no se utiliza en la actualidad debido a su antiguedad y carencias carencias respecto a RIPv2.

  • RIPv1: No soporta subredes ni direccionamiento CIDR. Tampoco incluye ningún mecanismo de autentificación de los mensajes. No se usa actualmente. Su especificación está recogida en el RFC 1058. Es un protocolo de routing con clase.
  • RIPv2: Soporta subredes, CIDR y VLSM. Soporta autenticación utilizando uno de los siguientes mecanismos: no autentificación, autentificación mediante contraseña, autentificación mediante contraseña codificada mediante MD5 (desarrollado por Ronald Rivest). Su especificación está recogida en RFC 1723 y en RFC 2453.
  • RIPng: RIP para IPv6. Su especificación está recogida en el RFC 2080.

DIRECCIONAMIENTO DE LA RED

RED_RIP_V2.png

ROUTER 1
R1#configure terminal
R1(config)#router rip
R1(config-router)#version 2
R1(config-router)#network 10.0.1.4
R1(config-router)#network 10.0.1.8
R1(config-router)#network 192.168.3.0
R1(config-router)#passive-interface fastEthernet 0/1
R1(config)#interface fastEthernet 0/1
R1(config-if)#ip address 192.168.3.1 255.255.255.0
R1(config-if)#no shutdown
R1(config)#interface serial 0/0/0
R1(config-if)#ip address 10.0.1.9 255.255.255.252
R1(config-if)#no shutdown
R1(config)#interface serial 0/0/1
R1(config-if)#ip address 10.0.1.6 255.255.255.252
R1(config-if)#no shutdown

ROUTER 2
R2#configure terminal
R2(config)#router rip
R2(config)#ip route 0.0.0.0 0.0.0.0 200.1.1.2
R2(config-router)#version 2
R2(config-router)#network 10.0.1.8
R2(config-router)#network 192.168.4.0
R2(config-router)#network 200.1.1.0
R2(config-router)#passive-interface fastEthernet 0/0
R2(config-router)#default-information originate
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip address 192.168.4.1 255.255.255.0
R2(config-if)#no shutdown
R2(config)#interface serial 0/0/0
R2(config-if)#clock rate 64000
R2(config-if)#ip address 10.0.1.10 255.255.255.252
R2(config-if)#no shutdown
R2(config)#interface serial 0/1/1
R2(config-if)#ip address 200.1.1.1 255.255.255.248
R2(config-if)#no shutdown

ROUTER 3
R3#configure terminal
R3(config)#router rip
R3(config-router)#version 2
R3(config-router)#network 10.0.1.4
R3(config-router)#network 10.0.1.0
R3(config-router)#network 192.168.5.0
R3(config-router)#passive-interface fastEthernet 0/0
R3(config)#interface fastEthernet 0/0
R3(config-if)#ip address 192.168.5.1 255.255.255.0
R3(config-if)#no shutdown
R3(config)#interface serial 0/0/0
R3(config-if)#clock rate 64000
R3(config-if)#ip address 10.0.1.5 255.255.255.252
R3(config-if)#no shutdown
R3(config)#interface serial 0/1/0
R3(config-if)#clock rate 64000
R3(config-if)#ip address 10.0.1.2 255.255.255.252
R3(config-if)#no shutdown

R4#configure terminal
R4(config)#router rip
R4(config-router)#version 2
R4(config-router)#network 10.0.1.0
R4(config-router)#network 192.168.1.0
R4(config-router)#network 192.168.2.0
R4(config-router)#passive-interface fastEthernet 0/0
R4(config-router)#passive-interface fastEthernet 0/1
R4(config)#interface fastEthernet 0/0
R4(config-if)#ip address 192.168.2.1 255.255.255.0
R4(config-if)#no shutdown
R4(config)#interface serial 0/0/0
R4(config-if)#ip address 10.0.1.1 255.255.255.252
R4(config-if)#no shutdown
R4(config)#interface fastEthernet 0/1
R4(config-if)#ip address 192.168.1.1 255.255.255.0
R4(config-if)#no shutdown

ISP#configure terminal
ISP(config)#ip route 0.0.0.0 0.0.0.0 200.1.1.1
ISP(config)#interface serial 0/0/0
ISP(config-if)#ip address 200.1.1.2 255.255.255.248
ISP(config-if)#clock rate 64000
ISP(config-if)#no shutdown

TABLAS DE ENRUTAMIENTO

Router 1

R1_RIP.png

Router 2

R2_RIP.png

Router 3

R3_RIP.png

Router 4

R4_RIP.png

ISP

ISP_RIP.png

Prueba de PING

PING_RIP.png

default-information originate: Este comando nos sirve para que el router con salida a internet o con la ruta 0.0.0.0/0 la pueda compartir con todos los routers que estan configurados con el mismo protocolo.

passive-interface [Nombre de interfaz] : Es un comando de mucha utilidad a la hora de ahorrar ancho de banda, porque nos permite decirle al router que por la interfaz [Nombre de interfaz] no envíe actualizaciones de su tabla de enrutamiento.

Las rutas por defecto se utilizan para poder enviar tráfico a destinos que no concuerden con las tablas de enrutamiento de los dispositivos que integran la red. El caso más común para su implementación sería el de redes con acceso a Internet ya que sería imposible contener en las tablas de enrutamiento de los dispositivos todas las rutas que la componen.

Forma 1:

Router#configure terminal
Router#(config)#ip route 0.0.0.0 0.0.0.0 «siguiente salto»

Forma 2:

Router#configure terminal
Router#(configure)#ip route 0.0.0.0 0.0.0.0 «interfaz de salida»

Configurando la autenticación en RIP

R1# configure terminal
R1(config)# key chain RIP
R1(config-keychain)# key 1
R1(config-keychain-key)# key-string RGjtl5ANYa
R1(config-keychain-key)# end
R1#configure terminal
R1(config)# interface serial 0/0/0
R1(config-if)# ip rip authentication mode md5
R1(config-if)# end
R1# configure terminal
R1(config)# interface serial 0/0/1
R1(config-if)# ip rip authentication mode md5
R1(config-if)# end
R2#configure terminal
R2(config)# key chain RIP
R2(config-keychain)# key 1
R2(config-keychain-key)# key-string RGjtl5ANYa
R2(config-keychain-key)# end
R2# configure terminal
R2(config)# interface serial 0/0/0
R2(config-if)# ip rip authentication mode md5
R2(config-if)# end
R3#configure terminal
R3(config)# key chain RIP
R3(config-keychain)# key 1
R3(config-keychain-key)# key-string RGjtl5ANYa
R3(config-keychain-key)# end
R3# configure terminal
R3(config)# interface serial 0/0/0
R3(config-if)# ip rip authentication mode md5
R3(config-if)# end
R3#configure terminal
R3(config)# interface serial 0/1/0
R3(config-if)# ip rip authentication mode md5
R3(config-if)# end
R4#configure terminal
R4(config)# key chain RIP
R4(config-keychain)# key 1
R4(config-keychain-key)# key-string RGjtl5ANYa
R4(config-keychain-key)# end
R4#configure terminal
R4(config)# interface serial 0/0/0
R4(config-if)# ip rip authentication mode md5
R4(config-if)# end