1. 2. 3. 4. 5. Definición de puerto Sockets Conceptos cliente/servidor Definición de Stream Concurrencia, multiprogramación y multitarea 6. Servidores iterativos y concurrentes 7. Estándares Stream • Es una secuencia de datos habilitados en un momento dado. • Una abstracción utilizada cuando se leen o escriben archivos, o cuando se realiza una comunicación mediante sockets. • Son canales preconectados de entradas y salidas entre una computadora, generalmente una secuencia de bytes. Tipos de stream • Las conexiones I/O son conocidas como entrada estándar, salida estándar y salida de error estándar. • Un stream (flujo) es una secuencia de caracteres que fluyen hacia o desde un proceso. • Un input stream (flujo de entrada) esta ligado a alguna fuente de entrada para el proceso, p.e. teclado o socket. • Un output stream (flujo de salida) está ligado a una salida del proceso, p.e. monitor o socket. Ejemplo aplicación cliente-servidor 1) El cliente lee líneas desde la entrada estándar (flujo inFromUser), las envía al servidor vía un socket (flujo outToServer) 2) El servidor lee líneas desde el socket 3) El servidor las convierte a mayúsculas, y las envía de vuelta al cliente 4) El cliente lee y muestra la línea modificada desde el socket (flujo inFromServer) Concurrencia • Es el número máximo de flujos de ejecución secuenciales (hilos) que podría estar ejecutado simultáneamente • Las ejecuciones pueden ser en una máquina multitarea, en una con múltiples procesadores o por medio de una red de datos en varias computadoras. • Un programa concurrente puede contener dos o más procesos que cooperan para llevar a cabo una tarea en común. Multiprogramación • Este concepto se refiere a diversas fracciones de memoria las cuales contienen diferentes programas. • División de tiempo compartido en donde diferentes usuarios puedes ejecutar programas propios de forma concurrente usando el mismo sistema desde la misma o diferentes computadoras. Multitarea • La multitarea de computadoras se divide en dos campos: procesos y threads (o procesos de poco peso) • La multitarea son varias entidades (tareas) ejecutables activas al mismo tiempo – Ejemplo: • Un navegador • Cada ventana es un nuevo proceso y cada petición un thread. ¿Qué pasa cuando varios clientes tratan de conectarse en el mismo tiempo a un servidor? Servidores Iterativos • Una forma de ir atendiéndolos es uno por ciclo, como el programa que atiende pedidos de archivos: – Se acepta una conexión – Se lee la petición – Se lee desde el archivo y se escribe en el socket hasta encontrar el fin de archivo. Servidor secuencial (iterativo) atendiendo a más de un cliente Durante la conversación, el puerto 4444 no puede escuchar otras peticiones Solo después de efectuar la transmisión el puerto 4444 puede volver a escuchar Si hay interacción del servicio con el usuario, p. e. transferir un archivo y digitar el nombre; el servidor queda en espera de que el usuario conteste. – Ineficiente - ¿Qué sucede si el servidor tiene que esperar mucho al usuario? • Timeout de petición, y puede escuchar al siguiente cliente Desventajas servidores iterativos • El problema es que todo cliente debe esperar su turno para ser atendido. • Si uno de ellos pide un archivo muy grande los demás tienen que esperar. • La mayor parte de espera es debido a las operaciones I/O, hay capacidad de CPU desperdiciada. Servidor concurrente • Un servidor concurrente atiende a varios clientes al mismo tiempo. • Más aún, mientras está atendiendo sigue escuchando. • Se trata de crear un nuevo proceso o línea de ejecución cada vez que un cliente “llega” a pedir un servicio. Servidores Concurrentes: hay procesos separados para atender el puerto y para transferir la respuesta o el resultado de la petición Después que el cliente contacta al servidor, éste crea otro proceso para atender al cliente y queda escuchando el puerto 4444 Mientras el nuevo proceso está atendiendo al primer cliente, el segundo cliente puede contactar al servidor en el puerto 4444 Y el servidor crea otro proceso… Estándares POSIX (Portable Operating System Interface for UNIX) • La norma POSIX fue elaborada por IEEE para conseguir la portabilidad en distintos entornos UNIX. • La familia de estándares POSIX es designada formalmente como IEEE 1003. • En donde se definen varios puntos de la funcionalidad como scheduling y el uso de hilos, entre otros RFC (Request For Comments) • Son un conjunto de informes, propuestas de documentos y estándares de protocolos que describen el funcionamiento interno de la Internet. • Cada uno de estos documentos contiene una propuesta oficial para generar un nuevo protocolo de Internet. http://www.rfc-editor.org/ Ejemplo SMTP (RFC 5321) Ejemplos: Número de RFC No. RFC Protocolo 768 UDP 783 TFTP 791 IP 793 TCP 894 IP sobre ethernet 2131 DHCP 2. Creación de sockets cliente/servidor • Sockets en TCP • Sockets en UDP • Definición de DAEMON • Concepto de Hilos