75.572 Redes y aplicaciones Internet - Resumen PDF

Title 75.572 Redes y aplicaciones Internet - Resumen
Author Mario Pn
Course Redes y aplicaciones Internet
Institution Universitat Oberta de Catalunya
Pages 7
File Size 119.4 KB
File Type PDF
Total Downloads 158
Total Views 638

Summary

REDES Y APLICACIONES INTERNET RESUMEN Mecanismos de Los programadores organizan sus programas como una de tareas con variables locales privadas y la habilidad de enviar y recibir datos entre tareas por medio del intercambio de mensajes. Se caracteriza por tener un espacio de direcciones distribuido ...


Description

REDES Y APLICACIONES INTERNET RESUMEN

Mecanismos de comunicación

Los programadores organizan sus programas como una colección de tareas con variables locales privadas y la habilidad de enviar y recibir datos entre tareas por medio del intercambio de mensajes. Se caracteriza por tener un espacio de direcciones distribuido y conocido que permite la comunicación entre tareas u objetos. En el modelo de memoria compartida, el programador ve la aplicación como una colección de tareas que normalmente son asignadas a hilos de ejecución en forma asíncrona. Los hilos de ejecución tienen acceso al espacio compartido de memoria con los mecanismos de control mencionados antes. La invocación remota es un paradigma de comunicación de procesos u objetos6 que consiste en la posibilidad de ejecutar una subrutina o método en otro espacio de direcciones (normalmente, otro ordenador al que se accede a través de la Red). Se trata de un paradigma de comunicación asíncrono en el que los emisores de mensajes no envían sus mensajes a receptores específicos. Por el contrario, los mensajes se publican en diferentes categorías sin saber quiénes son los suscriptores.

El paradigma de publicación-suscripción está pensado para proporcionar tres tipos de servicios: 1) Coordinar procesos. 2) Reproducir contenidos. 3) Informar a personas.

En la programación por eventos, tanto la estructura como la ejecución de los programas vienen determinados por los sucesos que ocurren en el sistema, ya sea definidos por los usuarios o que el programa mismo provoca. La representación externa de los datos es el convenio que se sigue para representar estructuras de datos durante el transporte por la Red: para convertir o seriar argumentos y resultados. La codificación binaria consiste en codificar los datos en el número de bits mínimo posible para reducir la cantidad de información que se va a transmitir.

La codificación textual consiste en transformar cada uno de los datos que se quieren transmitir a un formato textual, es decir, a un carácter del alfabeto ASCII.

Delimitación de datos Cualquier codificación tiene que determinar una manera de separar las partes que componen una secuencia de datos. Los stubs constituyen el código intermedio encargado de gestionar conexiones remotas entre el cliente y el servidor, y establecer protocolos de codificación y de parámetros y resultados de la invocación remota. Los stubs son así los artífices de la transparencia de acceso y localización en el software intermediario de invocación remota de procedimientos. En local, los lenguajes de programación organizan el programa en módulos que se comunican entre ellos mediante llamadas a procedimientos. Para controlar las interacciones entre módulos, la interfaz de cada módulo define la firma de los procedimientos o funciones que pueden ser invocados. Un servicio de nombres mantiene una lista de asociaciones entre nombres (identificadores simbólicos) y valores (direcciones de red). Por ejemplo, el DNS mantiene, en ASCII, las asociaciones entre nombres de dominio e IP asociadas. Un conector o socket es un punto de acceso a los servicios de comunicación en el ámbito de transporte. Cada socket tiene asociada una dirección que lo identifica. Conociéndola, se puede establecer una comunicación con un socket para que actúe como extremo de un canal bidireccional. La invocación remota de un método ( RMI) es la acción de invocar un método de una interfaz remota de un objeto remoto. La invocación de un método de un objeto remoto tiene exactamente la misma sintaxis de invocación que la de un objeto local. SOAP son las siglas de simple object access protocol, especificación de un protocolo para el intercambio de información estructurada de la implementación de los Servicios Web. SOAP usa XML como metalenguaje de codificación de los datos y hace uso de otros protocolos como HTTP y RPC para la negociación y transmisión de mensajes. SOAP ofrece los servicios y funcionalidades de mensajería básicas para permitir la definición de otros servicios web a más alto nivel, dado que, en cierto modo, se puede considerar la capa fundamental de los protocolos de los servicios web. Originariamente, REST hacía referencia a una arquitectura de aplicaciones en red, pero el término ha sido generalizado para referirse a cualquier interfaz web que usa HTTP y XML para el intercambio de información. Se diferencia de SOAP o XML-RPC porque REST no usa ninguna abstracción adicional fuera de las que ofrece el propio HTTP. Los principales paradigmas de comunicación, que incluyen el paso de mensajes en los que dos objetos, procesos o aplicaciones, usan primitivas para la comunicación explícita bidireccional. El paso de mensajes es uno de los paradigmas de comunicación más usados y es implementado, por ejemplo, por los conectores (sockets). Hemos visto también que hay otros paradigmas como la memoria compartida, donde, si los procesos se encuentran

en la misma máquina, pueden compartir un espacio de direcciones que les permite intercambiar información. En caso de que las aplicaciones sean distribuidas, hay implementaciones que permiten compartir memoria de manera remota; una de ellas son las tuple spaces. La invocación remota de procesos y la invocación remota de métodos dan nombre a un paradigma en el que procesos u objetos pueden invocar métodos a otras aplicaciones u objetos remotos como si fueran la misma máquina. Este paradigma requiere de mecanismos de codificación de la información que se quiere transmitir, puesto que los procesos u objetos pueden estar implementados en lenguajes de programación diferentes o estarse ejecutando en hardwares diferentes. Como máximos exponentes de este paradigma, hemos visto RMI, XML-RPC y SOAP. El módulo nos ha presentado el paradigma de comunicación basado en eventos, en los que la comunicación es del todo asíncrona y nos permite un desacoplamiento entre los emisores de los eventos y sus receptores. El paradigma de publicación-suscripción, muy usado en modelos orientados a objetos, en el desarrollo de entornos gráficos de usuario y aplicaciones distribuidas de gran escala.

Arquitectura de aplicaciones web

Ley de Zipf La frecuencia de ocurrencia de un evento concreto (P) como función del rango (i) cuando el rango estás determinado por la frecuencia de ocurrencia es una función potencial Pi ~ 1/i a , con el exponente a cercano a la unidad. Un servidor intermediario (proxy) es un servidor que acepta peticiones (HTTP) de clientes u otros intermediarios y genera a su vez peticiones hacia otros intermediarios o hacia el servidor web destino. Actúa como servidor del cliente y como cliente del servidor. Un proxy-cache está formado por un almacén de mensajes de respuesta (objetos), un algoritmo de control del almacén (entrar, salir, borrar o reemplazar) y un algoritmo rápido de consulta (lookup) de un mapa del contenido; toma la decisión de servirlo del almacén o pedirlo al servidor origen o a otro proxy-cache. Las aplicaciones que ofrecen contenidos en Internet se enfrentan al reto de la escala: un solo servidor ante eventualmente millones de personas que pueden pedirle sus servicios todos a la vez: el proveedor de información debe poner tantos recursos como audiencia pueda tener. Una CDN es un software intermediario (middleware) entre proveedores de contenidos y clientes web. La CDN sirve contenido desde varios servidores repartidos por todo el planeta. La infraestructura de la CDN está compartida por varios clientes de la CDN, y las peticiones tienen en cuenta la situación de la Red para hacer que cada cliente web obtenga el contenido solicitado del servidor de la CDN más eficiente (habitualmente,

una combinación del más próximo, el menos cargado y el que tiene un camino de mayor ancho de banda con el cliente). Las arquitecturas orientadas a servicios (SOA) se pueden definir como un paradigma de diseño de software que impone el uso de los servicios web para apoyar los requisitos de los usuarios. Así pues, en una aplicación distribuida los recursos se harán accesibles a través de servicios independientes, a los que se podrá acceder sin conocer los detalles de la implementación. La computación en nube es una forma de computación fundamentada en Internet, mediante la cual los recursos compartidos, el software y la información, son ofrecidos a todo tipo de dispositivos con acceso a la Red bajo demanda como servicios ubicados en Internet. Las formas con las que un servicio web o una aplicación asociada a un servidor web se pueden organizar para atender la demanda que pueden recibir de Internet. Muchos indicadores de Internet continúan creciendo de forma exponencial: el número de personas con acceso a Internet y el tráfico web, que hoy en día predomina sobre el resto de protocolos. La popularidad de los contenidos sigue la ley de Zipf, la ley de la desigualdad extrema: muchas visitas para muy pocos lugares. Esto hace que la demanda que pueda recibir en un momento concreto un servidor web pueda ser exageradamente grande. Conocer las características principales de esta demanda ayuda a prever situaciones en el diseño de un servicio web. La capacidad para servir peticiones es difícil de prever en un sistema tan complejo en el que influyen, entre muchos factores, la capacidad de la Red y su carga, las características de toda la máquina, el sistema operativo con numerosos subsistemas o el servidor web. Es conveniente conocer la capacidad de servicio de nuestro servidor y observar su comportamiento con niveles de carga elevados usando herramientas de generación de tráfico y medida del comportamiento bajo una carga sintética, así como herramientas de visualización de estadísticas de demanda real a partir de diarios (logs), que nos permitan detectar sobrecargas, sintonizar o actualizar el conjunto adecuadamente. Las aplicaciones en servidores web tienen dos componentes principales: el servidor web y el código adicional que amplía el servidor para ofrecer servicios o contenidos “dinámicos”. El servidor web es un sistema que se encarga de servir algunas de las muchas peticiones a la vez, por lo cual, se tiene que optimizar la organización de toda esta actividad simultánea a partir de procesos, flujos y fibras. Las aplicaciones web reciben peticiones del servidor y devuelven un resultado para enviar al cliente. Otro componente importante son los servidores intermedios entre navegadores y servidores web que desean copias de los objetos que ven pasar desde un servidor hacia un navegador. Principalmente, permiten “acortar” peticiones sirviéndolas a medio camino del servidor, en la memoria, con objetos recibidos recientemente, hecho que reduce la congestión de Internet y la carga de los servidores.

Mientras que los servidores de memoria rápida de trabajo se suelen situar cerca de los lectores, la demanda global de ciertos contenidos o la tolerancia a fallos puede recomendar ofrecer un servicio web desde varias ubicaciones. Hay varias maneras de montar un servicio distribuido: replicación o mirroring, DNS round-roben, redireccionamiento a nivel de transporte o HTTP, servidores intermediarios inversos. Otra alternativa es contratar la provisión de servicio a una red de distribución de contenidos o CDN, que es una infraestructura comercial compartida por varios clientes con infinidad de puntos de presencia próximos a la mayoría de usuarios de Internet, que se encargan de repartir y dirigir las peticiones web hacia los servidores menos cargados y más cercanos en su origen de la petición. La computación bajo demanda es un modelo más general que permite distribuir un sistema en varios componentes distribuidos que se comunican con invocaciones a servicios y el uso de recursos (computación, almacenamiento, servicios de aplicación), que se asignan dinámicamente según cuál sea la necesidad o el volumen de demanda de sus usuarios. Hemos visto las SOA como paradigma de construcción de aplicaciones a escala de Internet, los sistemas de parrilla de cálculo y su evolución hacia sistemas de computación en nube, muy relevantes hoy en día.

Programación de sockets

Un socket o conector es un punto de acceso a los servicios de comunicación en el ámbito de transporte. Cada socket tiene asociada una dirección que lo identifica. Conociendo esta última, se puede establecer una comunicación con un socket para que actúe como extremo de un canal bidireccional. Presentamos las principales funciones de C relacionadas con la interfaz de programación de sockets y sus formatos. 1) Crear un socket: int socket(int espacio, int estilo, int protocolo) 2) Asignar dirección a un socket: int bind(int descr, const struct sockaddr *adr, size_t long_adr); size_t long_adr); 3) Dejar un socket preparado para recibir peticiones de conexión: int listen(int descr, unsigned int n_petic); 4) Esperar que haya disponibilidad de datos en un socket: int select(int n_descr, fd_set *d_lect, fd_set *d_escr,

fd_set *d_excep, struct timeval *tiempo);

5) Enviar una petición de conexión: int connect(int descr, const struct sockaddr *adr, size_t long_adr); 6) Aceptar una petición de conexión: int accept(int descr, struct sockaddr *adr, size_t *long_adr); 7) Leer datos de un socket: int recvfrom(int descr, void *datos, size_t longitud, int flags, struct sockaddr *adr, size_t *long_adr);

int recv(int descr, void *datos, size_t longitud, int flags);

ssize_t read(int descr, void *datos, size_t longitud);

8)Escribir datos en un socket: int sendto(int descr, const void *datos, size_t longitud, int flags, const struct sockaddr *adr, size_t long_adr);

int send (int descr, const void *datos, size_t longi tud, int flags);

ssize_t write(int descr, const void *datos, size_t longitud);

9) Cambiar opciones de un socket y consultarlas: int setsockopt(int descr, int nivel, int nombre_opc, const void *val_opc, size_t long_opt);

int getsockopt(int descr, int nivel, int nombre_opc, void *val_opc, size_t *long_opt);

10) Cerrar un socket: int shutdown(int descr, int modo); int close(int descr);

Por lo que respecta al lenguaje Java, las clases ServerSocket (para los servidores) y Socket (para los clientes) son las que incluyen toda la funcionalidad de los sockets con el espacio de nombres Internet y orientados a conexión. Constructores:

ServerSocket(int port) ServerSocket(int port, int n_petic) ServerSocket(int port, int n_petic, InetAddress adr)

Socket(InetAddress adr, int port) Socket(InetAddress adr, int port, InetAddress adr_local, int port_local) Socket(string maquina, int port)

Además de los constructores, sólo es necesario ejecutar el método accept en el extremo del servidor para tener dos sockets conectados, a punto de intercambiarse información. Las clases DatagramSocket y DatagramPacket permiten la comunicación de sockets en modo no orientado a conexión (con protocolo UDP)....


Similar Free PDFs