Universidad de León

Dept IESA, Prof J.Mª. Foces

    Prácticas de Redes de Computadores


Software necesario para visualizar los documentos


Visualizador gratuito de presentaciones realizadas con MS-PowerPoint para aquellos que no posean el producto.
Se trata de un paquete ofimático de software abierto y gratuito de una gran calidad con el que podéis visualizar las presentaciones de la asignatura.
Se trata de un paquete ofimático de software abierto y gratuito de una gran calidad con el que podéis visualizar las presentaciones de la asignatura. Neooffice está basado en OpenOffice.org y corre sobre Mac OS-X.
Adobe Acrobat Reader: Para visualizar ficheros pdf.



  1. Práctica 0:

    • Cuatro sesiones de 1h por grupo los días 19 y 26 de octubre y 2 y 9 de noviembre
    • Esta presentación la empleamos para las sesiones dedicadas a fundamentos para las practicas sobre TCP/IP

  2. Práctica 1: Día 16/nov y 23/Nov, 2h por cada grupo

    • Presentación sobre fundamentos. Hoy comenzamos en la sección 1.4 titulada Implementing Network Software, dedicada al API Berkeley Sockets para lenguaje C. Es recomendable explorar esta sección, nosotros explicaremos el API Java Sockets. Comenzaremos por las sockets (Nivel 5) correspondientes al transport UDP (Nivel 4, User Datagram Protocol), en concreto, hoy nos interesan las siguientes clases java: InetAddress, DatagramPacket y DatagramSocket.
    • Realizaremos un ejemplo ilustrativo en el que seremos capaces de arrancar remotamente un ordenador simplemente mandándole un datagrama especial conocido como Magic Packet. Un computador que recibe un datagrama Magic Packet que contenga su dirección MAC enviará el comando de arranque a la fuente de alimentación. El Magic Packet contiene 17 grupos de 6 bytes cada uno, el primero de ellos contiene todo unos y, los 16 restantes, cada uno de ellos contiene la dirección MAC del adaptador de red del computador que se desea arrancar remotamente, a esta capacidad se la conoce como WOL (Wake On Lan) y se envian a la direccion de broadcast de la red del computador objetivo lo que ocasiona el arranque del computador objetivo si éste hubiera sido configurado adecuadamente.
    • Documentación de la clase DatagramPacket
    • Documentación de la clase DatagramSocket
    • Documentación de la clase InetAddress
    • Estudiaremos el texto fuente, WakeOnLan.java, del programa con detalle. Podéis elegir la herramienta de desarrollo que mejor conozcáis. Si no conocéis ninguna, podéis usar el editor gedit (El símbolo $ representa cualquier prompt que presente vuestra shell):
      $ gedit WakeOnLan.java
      Una vez editado el programa, lo compiláis así:
      $ javac WakeOnLan.java
      Puesto que el programa (WakeOnLan.class) pertenece al paquete wol (Observad la sentencia package wol;), ahora, tendréis que crear una carpeta llamada wol:
      $ mkdir wol
      Ahora movemos el fichero de clase WakeOnLan.class a la carpeta recién creada:
      $ mv WakeOnLan.class wol
      Ahora, ya podemos ejecutar nuestro programa:
      $ javac wol.WakeOnLan
    • Ejercicio propuesto nº 1. Modificad el programa para que imprima en pantalla los 102 bytes que constituyen la MagicPacket, byte a byte, en grupos de 6 bytes.
    • Ejercicio propuesto nº 2. Modificad el programa para que lea los seis bytes que consitutuyen la dirección MAC desde el teclado (interactivamente) o bien desde la linea de comandos.
    • Presentación sobre fundamentos. Continuamos explicando que no basta con que las redes cumplan los requisitos funcionales sino que lo hagan con eficiencia y con rendimientos aceptables (Sección 1.5)

  3. Práctica 2: Días 30/nov (2h/grupo) y 7 de diciembre (1h/grupo)

  4. Práctica 3: Día 14 de diciembre (2h/grupo)

    • Fundamentos teóricos sobre CIDR/VLSM:
      Introd. tecnología de redes
      Introd. CIDR, VLSM y particionamiento IP
      Notas y ejemplos sobre particionamiento IP
      Understanding IP addressing (3COM)
    • Ejercicios para entregar en la próxima sesión de prácticas (Día 21 de diciembre):
      1. Calculad el número de IP’s contenidas en 193.146.96.1/20
      2. Segmentad el espacio anterior en 4 subredes, una de 1024, dos de 512 y otra de 2048
      3. Una organización necesita adquirir espacio IP para los siguientes tamaños máximos de redes internas:
        100, 200, 300, 400, 500, 600, 700, 800, 900, 1000
        Calculad el tamaño mínimo de bloque agregado CIDR que contenga los bloques anteriores
        Calculad un particionamiento VLSM que satisfaga a los bloques anteriores
        Asumid una dirección IP base para el bloque CIDR, calculad entonces el número de red de cada bloque, su dirección de broadcast y el rango de Ips asociado
      4. Proponed un algoritmo de particionamiento IP, realizad una especificación ligera del mismo. Asumid que se escribirá en Java, por tanto, contáis con APIs avanzados como Collections, los cuales os permitirán trabajar con árboles, colas, pilas, etc.
      5. Escribid un método Java que acepte un objeto InetAddress y que devuelva cuál es su clase: A, B o C. Escribid un programa de prueba.

  5. Práctica 4: Día 21 de diciembre (2h/grupo)

    • Fundamentos teóricos sobre CIDR/VLSM:
      Introd. tecnología de redes
    • Ejercicios para entregar en la próxima sesión de prácticas (Día 11 de enero de 2012):
      1. Una organización necesita adquirir espacio IP para los siguientes tamaños máximos de redes internas:
        30, 50, 80, 100, 200 y 300. Proponed un esquema de segmentación en subnets, para ello, asumid una dirección IP base para el bloque CIDR y calculad el número de red de cada subnet, su dirección de broadcast y el rango de Ips asociado. Asociad el espacio marginal a una o varias subnets denominadas null0, null1, etc
      2. Escribid un método Java que acepte un objeto InetAddress y un prefijo CIDR y que devuelva un InetAddress que contenga el número de red
      3. Escribid un método Java que acepte un objeto InetAddress y un prefijo CIDR y que devuelva un InetAddress que contenga la dirección de broadcast
      4. Escribid un método Java que acepte un objeto InetAddress y un prefijo CIDR y que devuelva un InetAddress que contenga la primera dirección del rango direccionable
      5. Escribid un método Java que acepte un objeto InetAddress y un prefijo CIDR y que devuelva un InetAddress que contenga la última dirección del rango direccionable
      6. Escribid un programa de prueba para todos los métodos anteriores

  6. Día 11 de enero (2h/grupo)

    • Entrega de ejercicios escritos
    • Realización de ejercicios de comprobación en la pizarra
    • Explicación y discusión sobre el alineamiento de las subnets y como garantizarla
    • Dudas sobre los ejercicios de programación propuestos (Representación y operaciones básicas con la clase Java IPAddress)

  7. Día 18 de enero (2h/grupo)

    • Entrega de ejercicios escritos
    • Explicación y discusión sobre el particionamiento del espacio restante formado por subnets nulas
    • Demostraciones los programas de cálculo con direcciones IP (Representación y operaciones básicas con la clase Java IPAddress)
    • Soluciones de los ejercicios propuestos de particionamiento y asignación de IPs

  8. Día 15 de febrero (2h/grupo)

  9. Día 22 de febrero (2h/grupo)

    • 1. Abstracción las interfaces de red: Introducción al API Network Interface Java: NIfEnumerator.java , un programa de ejemplo que ilustra las clases Network Interface y Pattern para enumerar las interfaces ethernet presentes en un sistema. Probad este programa y, a continuación, acceded a la documentación Javadoc de la clase NetworkInterface, haceos una idea general de qué representa esta clase y qué servicios ofrece: NetworkInterface Java 6
    • 2. Revisad los comandos de Linux y de Windows que nos permiten configurar las interfaces de red presentes en nuestro sistema, para ello, seguid la presentación: Introd. tecnología de redes. .
      Prestad una atención particular al comando linux ifconfig y al comando de Windows ipconfig, en linux, leed la página del manual de ifconfig mediante el siguiente comando:
      $ man ifconfig
    • 3. Tomando como ejemplo ilustrativo el programa servidor: Server0.java escribid un programa Java servidor que, a cada cliente que se conecte le sirva la hora actual. Del mismo modo, escribid un programa cliente que se conecte con el servidor anterior y recupere la hora ofrecida por el servidor; podéis usar como ejemplo de la clase Socket (Socket cliente java) el siguiente programa: Client0.java . Podéis encontrar la documentación Javadoc de las clases centrales del API Java java.net en internet (Socket para clientes y ServerSocket para el servidor).
    • 4. Finalmente, reformad una vez más el cliente y servidor anteriores para que el servidor, en vez de la hora, devuelva la dirección MAC de la interface ethernet que esté en uso en la conexión actual.

  10. Día 29 de febrero (2h/grupo) 7/marzo, 14/Marzo y 21/Marzo

    • En esta sesión os proponemos un ejercicio de programación con Java Sockets que realizaréis de forma independiente, aunque os guiaré en el desarrollo, se trata pues de un ejercicio propuesto y guiado.
    • Estimación del throughput del canal asociado a una conexión entre Java Sockets. En este ejercicio tendréis que escribir una aplicación C/S en Java, por tanto estará constituida por una aplicación cliente y una aplicación servidor. El objetivo de la aplicación consiste en medir el throughput de la conexión Socket--ServerSocket (S--SS). Recordad que el throughput es el caudal máximo de un canal, el caudal efectivo y medido; recordad que bandwidth es el caudal nominal de un canal, por ejemplo, un enlace Gigabit Ethernet ofrece un caudal nominal (bandwidth) de 1 Gbps (Gigabits/seg), sin embargo, si el nivel de demanda de tráfico experimentado por un switch supera un determinado umbral, eso conduce a que el throughput se aleje más y más del valor nominal: perseguimos medir el throughput en diversas condiciones.
    • Al principio de la sesión realizaré una pequeña demostración real de lo que perseguimos: inyectar tráfico en el canal S--SS y cuantificar el cociente número de Mbits transferidos / tiempo en segundos . En las sesiones de prácticas dedicadas a las DatagramSockets os propuse dos Java APIs que os permitirán medir tiempos con más o menos resolución.
    • En la sesión de hoy escribiremos la primera versión de la aplicación C/S, la cual, correrá en ordenadores del laboratorio y la probaréis en equipos de 4 personas, 2 de ellas se encargarán del Server y, las otras dos, se encargarán del Client. La próxima semana, subiréis vuestras clases a un servidor que se encuentra en otra red y volveréis a efectuar las mismas medidas. Las medidas que realicéis hoy, las llevaréis a cabo con los sistemas descargados, es decir, observaréis que la CPU de los equipos está practicamente descargada totalmente y, que no hay aplicaciones que estén usando la red.
    • Podéis utilizar como ejemplo base los siguientes programas -ambos, habréis de corregirlos antes de extenderlos.
      ThroughputMeasureServer.java
      ThroughputMeasureClient.java
    • Para subir los resultados obtenidos al servidor, escribid un cliente que esté conforme al protocolo de aplicación explicado en la pizarra, el servidor está alojado en paloalto.unileon.es y escucha en el puerto TCP 50001. Recordad que estamos utilizando las clases ObjectOutputStream y ObjectInputStream y que para enviar el nombre del equipo usaréis (Suponed que oos es un ObjectOutputStream) oos.writeObject("Antonio Antunez Anton"), para enviar el flotante que contiene el resultado de velocidad usaréis oos.writeFloat(mbps) donde Float mbps; son los Mbps. El mensaje final ha de ser "END".
      En el servidor, para leer las cadenas haréis algo como esto:
      String message0 = (String) ois.readObject();
      para leer un flotante:
      Float mbps = (Float) ois.readFloat();
    • Textos fuente del servidor de recogida de resultados de Throughput: recordad paloalto.unileon.es TCP port 50001:
      ThroughputDataLogger.java
      RequestServer.java
      Utilizad los fuentes del servidor, sobre todo el RequestServer, para escribir vuestro cliente.º

  11. Día 28 de marzo (2h/grupo)

    • Hoy explicaremos cómo escribir servidores Java que empleen Threads para mejorar la productividad. Estos servidores, cuando reciben una solicitud de conexión la completan y, la socket resultante, la pasan como parámetro a una objeto que se encargará de completar implementar el protocolo de aplicación involucrado. La ejecución de este objeto tiene lugar en hilos de ejecución separados, lo cual produce dos efectos positivos: el servidor propiamente dicho se ocupará de recibir nuevas conexiones, solamente y, el servicio de cada cliente será responsabilidad de un solo objeto servidor el cual correrá concurrentmente con todos los demás objetos proveedores de servicio. Esta ejecución concurrente resulta más productiva y más segura, porque, ningún cliente que pudiera implementar el protocolo de forma erronea, podrá dejar al servidor bloqueado.
    • Como ilustración de la programación concurrente con Java Threads, descargad el servidor que empleamos para reunir vuestros datos de throughput y compiladlo conjuntamente con su cliente. Es esencial que estudieis con detalle el código, sobre todo el que se encarga de realizar el proceso explicado en el párrafo anterior. Una vez estudiado, habréis de ejecutar servidor y cliente y comprobar que funciona correctamente. Resulta de particular interés en esta práctica que probéis a conectar varios clientes a un único servidor y que comprobéis cómo las conexiones aparecen impresas en la consola.
      ThroughputDataLogger.java
      RequestServer.java
      Client.java

  12. Día 4 de abril (2h/grupo)

    • Presentación sobre la arquitectura TCP/IP desde un punto de vista práctico (Parte 1)
    • Ayuda para completar el cliente y el servidor, pruebas del servidor concurrente

  13. Día 18 de abril (2h/grupo)

    • Presentación sobre la arquitectura TCP/IP desde un punto de vista práctico (Parte 2): Tecnologías Ethernet de medio compartido y conmutadas, tramas ethernet, direcciones MAC unicast y broadcast
    • Presentación inicial sobre el analizador de protocolos Wireshark: ICMP y ARP

  14. Día 2 de mayo (2h/grupo)

    • Presentación sobre la arquitectura TCP/IP desde un punto de vista práctico (Parte 3): Protocolos ARP, ICMP y DHCP (PD Ch. 3)
    • Análisis de protocolos con Wireshark: Ejercicios adicionales con ICMP, ARP y DHCP:
      For this activity, use the lab's network and the Wireshark network analyzer.
      (a) Start a new capture with no capture filter activated
      (b) Complete several transactions form your computer such as:
      i. Fetch the home page of www.unileon.es
      ii. Test to see whether the ssh service is running in paloalto.unileon.es, if you are running Linux/Unix simply type the following command on the command line, if you are running Windows, then download the open source putty program (Search putty and download putty.exe):$ ssh paloalto.unileon.es
      iii. Ask another user in your same local network to give his IP address, then ping it (example: $ ping 192.168.3.51), if this is the first time that you contact that network node then, the previous command will cause some arp transactions to be executed, you will see them on Wireshark, also you will see the ICMP protocol at play
      (c) Stop the capture and scroll to the beginning of it, then, identify several packets and obtain a screen dump of one of each of the following packet types:
      i. arp
      ii. icmp
      iii. tcp
      iv. udp
      (d) Study the encapsulation of each of the packets identified on (c) starting with the outermost container, i.e., the Ethernet frame
      i. Consult chapter 1 of PD if you need a refresher on OSI and encapsulation or any of the references offered in this course's web site
      ii. In the school's library you can find at least one book on Wireshark
      5. Now, respond to the following questions related to your NIC (Network Interface Card) configuration:
      (a) What's your IP address?
      (b) What's your Network Mask?
      (c) What's your NIC's MAC address?
      (d) What's your ethernet technology at use?
      (e) What MAC -- IP associations are known by your node?

  15. Días 9, 16 y 23 de mayo (2h/grupo cada día)

    • Intrdoucción a los protocolos IP, ARP, ICMP y DHCP
      Análisis de situaciones variadas mediante Wireshark
    • Diseño de una inter-red simple mediante routers Cisco SOHO
      Inter-red

  16. Día 30 de mayo (2h/grupo)