Redes de Computadoras Obligatorio 2 - 2016 Redes de Computadoras Obligatorio 2 - 2016 Facultad de Ingeniería Instituto de Computación Departamento de Arquitectura de Sistemas Nota previa - IMPORTANTE Se debe cumplir íntegramente el “Reglamento del Instituto de Computación ante Instancias de No Individualidad en los Laboratorios”, disponible en el EVA. En particular está prohibido utilizar documentación de otros estudiantes, de otros años, de cualquier índole, o hacer público código a través de cualquier medio (EVA, news, correo, papeles sobre la mesa, etc.). Forma de entrega La entrega de la tarea consiste en un único archivo obligatorio2GrupoGG.tar.gz que deberá contener los siguientes archivos: • • • Un documento llamado Obligatorio1GrupoGG.pdf donde se documente todo lo solicitado en la tarea. GG es el número del grupo. Los programas solicitados. Un directorio extras incluyendo cualquier otro archivo que considere relevante. La entrega se realizará en el sitio del curso, en la plataforma EVA. Fecha de entrega Los trabajos deberán ser entregados antes del 16/10/2016 a las 23:30 horas. No se aceptará ningún trabajo pasada la citada fecha y hora. En particular, no se aceptarán trabajos enviados por e-mail a los docentes del curso. Observaciones Los programas pueden ser escritos en cualquier lenguaje de programación, con el previo acuerdo del docente de monitoreo. Los programas deberán poder ejecutarse dentro de las máquinas virtuales brindadas para el curso en los PCs Linux de la Facultad. Se deben documentar todos los casos de uso, incluyendo la invocación de los programas y sus parámetros de entrada, y un análisis de los resultados. Objetivo del Trabajo Tener una primer experiencia académica ante las diferentes versiones de protocolo HTTP. Durante el año 2015 se produjo la publicación del RFC 7540 - Hypertext Transfer Protocol Version 2, una actualización del protocolo fundamental del WWW. El objetivo del presente obligatorio es lograr una aproximación al protocolo, combinando estudio de los mismos, documentación e implementaciones. Página 1 de 3 Redes de Computadoras Obligatorio 2 - 2016 Se pide 1) Evolución de HTTP Se deberá documentar los aspectos fundamentales de las versiones 1.0, 1.1 y 2 del protocolo, indicando cronológicamente las mejoras que se le han agregado al protocolo a lo largo del tiempo, describiendo características comunes y detalles específicos de cada versión. Esta parte de la documentación será de aproximadamente 2.500 palabras. 2) Manipulando el protocolo HTTP Desarrolle un programa que determine qué versiones de HTTP soporta un servidor que responde por determinada URL. El programa deberá contar con una interfaz de usuario mínima que permita recibir una URL, y que luego de conectarse al servidor correspondiente sea capaz de determinar la o las versiones de HTTP que soporta. A modo de ejemplo, si un servidor soporta 1.0 y 1.1, entonces una salida correcta podría ser “HTTP 1.0 HTTP 1.1”. Para la implementación solo pueden utilizarse bibliotecas para manipulación de strings, expresiones regulares y sockets TCP, y no se puede hacer uso de ninguna biblioteca para el manejo de HTTP. 3) Mi primer cliente y servidor HTTP 2! Deberá desarrollarse un cliente y un servidor HTTP2. Requerimientos del servidor: • Debe tomar al menos dos parámetros al ejecutarse: i) el puerto en el que escucha, y ii) una ruta en el sistema de archivos que será el repositorio donde se encuentra el contenido que va a servir. • El contenido servido deberá poder ser navegado tanto desde el cliente a desarrollar como desde un navegador del mercado (Firefox por ejemplo). • Deberá soportar el método GET del protocolo HTTP 2 y será capaz de manejar el escenario de la multiplexación de pedidos sobre la misma conexión. Requerimientos del cliente: • Será capaz de conectarse al servidor, y utilizar el protocolo HTTP2 para hacer pedidos GET y obtener los recursos (no importa visualizarlos como en un navegador, sino ser capaces de transferir los recursos y guardarlos en un archivo). • Tomará como parámetros obligatorios: el servidor (FQDN o IP), y la ruta (path) del recurso a obtener. Soportará una bandera “-m” que indique que se va a realizar pedido con multiplexación, para lo cual deberá incluir tantas rutas adicionales como recursos que se pretender obtener en paralelo. Se debe diseñar e implementar un escenario en el cual sea posible probar la funcionalidad de PUSH del protocolo HTTP2. A modo de ejemplo, se pide que el servidor envíe periódicamente la hora hacia los clientes conectados sin que los mismos lo hayan solicitado mediante un GET; el cliente debe ser capaz de desplegar la hora recibida. Página 2 de 3 Redes de Computadoras Obligatorio 2 - 2016 Cronograma Hasta el 24/9: comenzar con los desafíos 1) y 2) del obligatorio. Se sugiere comenzar a probar prototipos de 2). Durante los parciales: avanzar ambos desafíos y comenzar a estudiar posibles implementaciones de 3). Desde el 2/10 al 16/10 (fecha de entrega): terminar desafíos 1) y 2) y realizar el 3) coordinando con los docentes el lenguaje y bibliotecas a utilizar. Herramientas Para la implementación del desafío 3) se podrán utilizar bibliotecas de manejo de HTTP, previo acuerdo con los docentes. Referencias y Bibliografía Recomendada [1] RFC 1945 - Hypertext Transfer Protocol – HTTP/1.0 – T. Berners-Lee, R. Fielding, H. Frystyk - 1996. [2] RFC 2616 - Hypertext Transfer Protocol – HTTP/1.1 – R. Fielding, J. Gettys, J. Mogul, H. Frystyk, T. Berners-Lee - 1997. [3] RFC 7540 - Hypertext Transfer Protocol Version 2 – M. Belshe, R. Peon, M. Thomson – 2015. Página 3 de 3