Laboratorio de Sistemas Operativos

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Laboratorio de Sistemas Operativos"

Transcripción

1 Laboratorio de Sistemas Operativos Juan Antonio Álvarez, Toñi Reina, David Ruiz, Antonio Tallón, Pablo Neira, José Ángel Bernal y Sergio Segura Boletín 8: Mecanismo de IPC de Berkeley. Sockets Curso 2006/07 Índice 1. Introducción 2 2. Comunicación orientada a conexión (con sockets en modo stream) 3 3. Llamadas del sistema relacionadas con sockets Creación de un socket. socket () Asociación de un socket con una dirección. bind () Direcciones en el dominio UNIX Direcciones en el dominio Internet Creación de una cola en el socket. listen () Aceptación de la petición de conexión de un cliente. accept () Solicitud de conexión en un cliente. connect () Liberación de recursos. close () Envío/recepción de datos mediante sockets en modo stream. send (), recv () Otras funciones de utilidad Funciones de ordenación de bytes Funciones de conversión de nombres y direcciones Búsqueda de máquinas. gethostbyname () Conversión de formato de direcciones IP Obtención del nombre del host. gethostname () Ejercicios Ejercicios de Examen 15 1

2 1. Introducción Mediante el uso de sockets podemos crear una conexión punto a punto entre dos procesos. Esta conexión se trata de forma similar a un fichero en ambos procesos. El mecanismo por el que se crea la conexión es un mecanismo cliente-servidor, lo que implica la existencia de un proceso que acepta conexiones (el servidor) y otro que solicita conexiones (cliente). Una vez establecida la conexión, esta se comporta como un canal de datos bidireccional. Según el tipo de conexión establecida, podemos distinguir en UNIX distintos tipos de sockets, entre los que destacan: 1. Sockets en modo stream. Son aquellos que establecen una conexión punto a punto en la que se garantiza que: No se pierde información; es decir, todo lo que se envía se recibe. El orden de recepción de los datos es el mismo que el orden en el que se enviaron. No llegan paquetes duplicados. 2. Sockets en modo datagrama. En este tipo de socket no se establece una conexión punto a punto, sino que se envían los bloques de información de un proceso a otro sin la existencia de ningún tipo de canal. Cada bloque de información enviado se conoce como datagrama. Esta forma de transmisión no garantiza el orden de recepción de los datagramas, ni garantiza tampoco que se reciba toda la información que se envía. Se dice, por tanto, que este tipo de sockets son un medio de transmisión no fiable. 3. Sockets raw, que acceden directamente al nivel de red, que en el caso de internet sería el protocolo IP. Este tipo de socket se deja a usuarios experimentados, y no se verán en este boletín. A los sockets en modo stream se les suele llamar sockets conectados y a los sockets en modo datagrama se les suele llamar sockets no conectados. Tanto en un caso como en otro, el sistema operativo creará un punto de conexión a nivel de transporte (véase el modelo OSI de redes), que en el caso de modo stream será el protocolo TCP, protocolo fiable, y en el caso de los datagrama, será el protocolo UDP (no fiable). En la figura 1 se muestra un esquema de los tipos de sockets STREAM SOCKET DATAGRAM SOCKET RAW SOCKET TCP UDP IP Nivel de Red Nivel Físico Figura 1: Tipos de sockets y niveles sobre los que se sustentan. Si nos centramos en el dominio en el que se realiza la comunicación, los sockets se pueden clasificar en dos tipos: 1. Sockets en dominio UNIX. En este caso, los procesos cliente y servidor han de residir en la misma máquina. 2

3 2. Sockets en el dominio de Internet. Aquí se permite la comunicación de procesos de forma independiente a la máquina en la que se ejecutan, pudiendo estar el cliente en una máquina y el servidor en otra en otro lugar del mundo. Aquí el sistema operativo es el encargado de gestionar la comunicación, y para ello se apoya en algún protocolo de red, como TCP/IP. 2. Comunicación orientada a conexión (con sockets en modo stream) Una conexión típica es una relación no simétrica, esto implica que para comenzar una conexión de red un programa tiene que saber qué papel juega (cliente o servidor). El servidor será el proceso que ofrezca las conexiones, mientras que el cliente solicitará una conexión. Hasta que no queda establecida la conexión, no contamos con un canal simétrico y bidireccional (lo que implica que no hay diferencia entre cliente y servidor). Los pasos a realizar en cualquier conexión serán, por tanto: 1. Establecimiento de conexión. Este proceso será distinto para el cliente y para el servidor. 2. Recepción/envío de datos. Aquí ya no habrá diferencias entre cliente y servidor. 3. Destrucción del canal. Cliente y servidor han de destruir el canal, terminando la comunicación y liberando los recursos del sistema utilizados. Como cliente y servidor se diferencian a la hora de establecer la conexión, vamos a ver, de forma más detallada, cuáles son estas diferencias. Establecimiento de conexión en el servidor 1. Solicitar al sistema operativo un socket. Para ello se utiliza la llamada al sistema socket. A este primer socket se le denomina socket de escucha. A él le llegarán las solicitudes de conexión de los clientes, pero nunca se utilizará para el envío o la recepción de datos. 2. Asignar un nombre (en el caso de dominio UNIX) o un número de puerto (dominio Internet) al socket de escucha. Para rellenar esta información se utiliza la llamada al sistema bind. 3. Determinar la longitud de la cola de espera y dejar listo el socket de escucha para. es cuchar solicitudes de conexión por parte de los clientes. Esto se realiza con la llamada al sistema listen. 4. Aceptar conexiones de los procesos clientes. Para aceptar una conexión se utiliza la llamada al sistema accept. Esta llamada es bloqueante, lo que implica que el proceso queda suspendido hasta que recibe una petición de conexión por parte de un cliente. Si no hubo ningún problema, accept devuelve un descriptor de socket. Este socket se conoce como socket conectado, y es el que se utilizará para mandar y recibir datos del cliente, dejando el socket de escucha libre para aceptar nuevas peticiones de otros clientes. Establecimiento de conexión en el cliente 1. Solicitar al sistema operativo un socket. Para ello se utiliza la llamada al sistema socket. 2. Conectar el socket con un socket del servidor. Esto se consigue mediante la llamda al sistema connect, que utiliza el nombre (dominio UNIX) o el número de puerto (dominio Internet) para identificar al socket al que se desea conectar. En la figura 2 se muestra gráficamente de forma más detallada los pasos a seguir para establecer la conexión tanto en el cliente, como en el servidor. Como se puede observar, una vez establecida la conexión, se entra en un bucle de lectura-escritura hasta que el cliente decida terminar el diálogo con el servidor. En el siguiente apartado se verán estas llamadas al sistema con más detalle. 3

4 (protocolo orientado a conexión) Servidor socket ( ) bind ( ) listen ( ) Cliente accept ( ) socket ( ) Proceso bloqueado hasta que se conecta con el cliente Establecimiento Conexión connect ( ) read ( ) Petición write ( ) Procesar Petición write ( ) Respuesta read ( ) Figura 2: Llamadas al sistema de sockets para un protocolo orientado a conexión. 3. Llamadas del sistema relacionadas con sockets 3.1. Creación de un socket. socket () La llamada al sistema socket es el primer paso a realizar para crear una conexión, tanto en el cliente como en el servidor. Su declaración es la siguiente: #include <sys/types.h> int socket(int domain, int type, int protocol); en la cual domain Indica la familia de direcciones que se quiere emplear. Las distintas familias se definen mediante constantes que se incluyen en el archivo de cabecera <sys/socket.h>. Las dos familias más comunes son: AF UNIX Es una familia de protocolos internos de UNIX. Se utiliza para comunicar procesos que se encuentran en una misma máquina. No requiere que haya hardware de red, puesto que no realiza accesos a ninguna red. AF INET Es la familia de protocolos de Internet. Implica la creación de sockets que se van a comunicar mediate protocolos como TCP o UDP. 4

5 type Indica la semántica de la comunicación para el socket. Puede tomar uno de los siguientes valores predefinidos: SOCK STREAM El socket se crea para una comunicación orientada a conexión. SOCK DGRAM El socket se crea para una comunicación no orientada a conexión o datagrama. protocol Especifica el protocolo particular que se va a utilizar con el socket. Normalmente, cada tipo de socket tiene asociado un sólo protocolo, pero si hubiera más de uno, se especificaría mediante este argumento. Cuando protocol vale 0, la elección del protocolo se deja en manos del sistema. Si la llamada a socket se ejecuta correctamente, devolverá un descriptor de fichero. En caso contrario, devolverá un -1 y en la variable global errno colocará el código del error que se ha producido Asociación de un socket con una dirección. bind () La llamada al sistema bind se utiliza en el servidor para registrar su dirección, de forma que le dice al sistema. es ta es mi dirección y cualquier mensaje que recibas en esta dirección me lo tienes que dar a mi. En el caso del dominio UNIX esta dirección será un nombre, y en el dominio Internet será und dirección de red. Su formato es el siguiente: #include <sys/types.h> int bind(int s, const struct sockaddr *name, int namelen); donde s Es el descriptor del socket de escucha al que se quiere asociar a la dirección. name Es un puntero a un tipo genérico que almacena los datos de la dirección. El tipo real va a depender del dominio del socket namelen Es el tamaño en bytes de la estructura que se pasa con el puntero name. Si la llamada a bind funciona correctamente, se devuelve un 0. Si hay algún error, se devuelve un -1 y establece el código de error en la variable global errno Direcciones en el dominio UNIX En el caso de la familia de direcciones AF UNIX la dirección se indica utilizando la estructura struct sockaddr un que está definida en el archivo de cabecera <sys/un.h>. Esta estructura tiene el siguiente formato: struct sockaddr_un { sa_family_t sun_family; /* AF_UNIX */ char sun_path[108]; /* path name (gag) */ }; y en ella, sun family Indicará la familia de direcciones. Y en este caso, tendrá siempre el valor AF UNIX. sun path Aquí hay que indicar la ruta de un archivo del sistema de ficheros, ya que cuando se une un socket AF UNIX a una ruta, por ejemplo, /tmp/misocket, se crea un fichero. Si el fichero ya existiese, la llamada a bind devolvería un error. 5

6 Ejemplo 1 El siguiente trozo de código muestra la creación de un socket de escucha del dominio UNIX, y le asigna como dirección una ruta de un archivo mediante la llamada bind #include <sys/types.h> #include<sys/un.h> #include <string.h>... struct sockaddr_un su; int s; s = socket ( AF_UNIX, SOCK_DGRAM, 0); su.sun_family = AF_UNIX; strcpy( su.sun_path, "/tmp/misockunix"); bind ( s, (struct sockaddr *) &su, sizeof(su)); Direcciones en el dominio Internet Para la familia de direcciones de Internet (AF INET), la dirección se recoge en una estructura de tipo struct sockaddr in, la cual, está declarada en el fichero de cabecera <netinet/in.h>. Su definición es la siguiente: struct sockaddr_in { sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8]; }; struct in_addr { in_addr_t s_addr; /* Direccion IPv4 de 32 bits */ }; /* en Network Byte Order */ donde, sin family Indicará la familia de direcciones. Y en este caso, tendrá siempre el valor AF INET. sin port Indica el puerto. Un puerto no es más que un número no negativo de 16 bits, es decir, que puede tomar valores entre el 0 y el 65535, y que es utilizado por el protocolo TCP para identificar un servicio de una máquina. Los puertos menores de 1024 están reservados para servicios estándares. El resto, es decir, desde el 1024 al 65535, están libres para ser asignados a cualquier servicio de usuario. Algunos ejemplos de estos servicios estándares son el ftp (que por defecto trabaja con los puertos 20 y 21), el http (que por defecto trabaja con el puerto 80). Si se le da al campo puerto el valor 0, será el núcleo el que se encargue de seleccionar uno de los puertos libres que tenga disponible. Aunque conozcamos los números de los puertos estándares asociados con determinados servicios, a la hora de programar es conveniente utilizar la llamada al sistema getservbyname, que obtiene el número de puerto asignado a un servicio estándar. Hay que tener en cuenta que el puerto hay que expresarlo en network byte order, para lo que habrá que utilizar la función htons. Aunque esto se explicará con más detalle en el apartado Funciones de ordenación de bytes. sin addr En este campo irá la dirección de la máquina sobre la que se ejecuta el servidor. Para rellenar este campo se utilizan funciones auxiliares como gethostname y gethostbyname. Para ver estas funciones con más detalle ir al apartado Funciones de conversión de nombres y direcciones. sin zero Este campo se diseñó para posibles ampliaciones futuras, a efectos de programación, no se tendrá en cuenta, es decir, que no habrá que preocuparse por inicializarlo ni darle ningún valor. 6

7 Ejemplo 2 El siguiente trozo de código muestra la creación de un socket de escucha del dominio Internet, y le asigna una dirección IP y un puerto mediante bind. Para entender el funcionamiento de las llamadas gethostname y gethostbyname mírese el apartado Funciones de conversión de nombres y direcciones #include <sys/types.h> #include <netinet/in.h> #include <netdb.h> #include <string.h>... struct sockaddr_in sin; int s; struct hostent *hp; char hostname[lon_hostname]; /* Obtenemos el nombre de la máquina donde se ejecuta el código */ gethostname(hostname, sizeof(hostname)); /* Obtenemos su dirección IP, a partir del nombre */ hp = gethostbyname (hostname); if (hp == NULL) printf ("Error"); else{ s = socket ( AF_INET, SOCK_STREAM, 0); sin.sin_family = AF_INET; sin.sin_port = htons(15495); /* Asignamos puerto en Network byte order */ /* Obtenemos la dirección IP en Network byte order */ memmove (&sin.sin_addr, hp->h_addr, hp->h_length); } /* Asociamos dirección y puerto al socket de escucha */ bind ( s, (struct sockaddr *) &sin, sizeof(sin)); Creación de una cola en el socket. listen () La llamada al sistema listen se ejecuta en el servidor tras las llamadas a socket y a bind, y realiza dos acciones: 1. Cuando se crea un socket, por defecto, el sistema lo crea como un socket activo, es decir, un socket cliente que más tarde realizará una petición de conexión mediante la llamada connect. La función listen se encarga de convertir un socket no conectado en un socket pasivo, indicando que el núcleo debería aceptar peticiones de conexión y dirigirlas a este socket. Es decir, le indica al sistema que el socket se tendrá que poner a. es cuchar. 2. Habilita una cola asociada con el descriptor del socket. Esta cola se va a encargar de recojer las peticiones de conexión procedentes de los procesos cliente. La llamada a listen solamente tiene sentido en los sockets de tipo SOCK STREAM. El formato de la llamada a listen es el siguiente: #include <sys/types.h> 7

8 int listen(int s, int backlog); donde s Es el descriptor del socket de escucha que se va a poner a. es cuchar, previamente se le ha tenido que asociar la dirección y el puerto mediante la llamada bind. backlog Indica la longitud de la cola asociada al descriptor del socket, o lo que es lo mismo, el número máximo de peticiones de conexión pendientes de aceptación. Si esta cola está llena y se recibe una petición de conexión, ésta es ignorada. La llamada a listen devuelve un 0 si se ejecuta correctamente, y un -1 en caso de error, estableciendo en errno el código del error 3.4. Aceptación de la petición de conexión de un cliente. accept () accept se llama para aceptar conexiones de los clientes. Esta función coge la primera petición de conexión de la cola y crea otro socket con las mismas propiedades que el socket de escucha, el cual se conoce como socket conectado. Si no hubiera ninguna petición en la cola, y el socket no tiene activo el modo no bloqueante (O NDELAY), esta llamada bloquea al proceso que la llama hasta que llegue una petición. El prototipo de la función accept es el siguiente: #include <sys/types.h> int accept(int s, struct sockaddr *addr, int *addrlen); donde s Es el descriptor del socket de escucha que está siendo escuchado y por donde llegan las peticiones de los clientes. addr Este es un parámetro de salida, y se utiliza para devolver la dirección de cliente, una vez que cliente y servidor están conectados. addrlen Argumento de entrada-salida. Antes de llamar a la función accept hay que inicializarlo al tamaño de la estructura a la que apunta addr. En el retorno de accept se tendrá el número de bytes rellenados por la función con los datos del cliente. En este punto es importante hacer la distinción entre socket de escucha y socket conectado. A lo largo de la vida de un proceso servidor, solamente se creará un socket de escucha, sin embargo, se creará un socket conectado por cada conexión de cliente que se acepte. Cuando el servidor termina de servir a un cliente, debe cerrar el socket conectado. La función accept devuelve el descriptor del socket conectado, en caso de que no se haya producido ningún tipo de error, y -1 en caso contrario. En caso de error, el código del mismo se podrá obtener consultando la variable errno. Ejemplo 3 El siguiente trozo de código muestra la utilización de la llamada accept. Tenga en cuenta que se es un socket de escucha que ha debido ser asignado a una dirección y un puerto y. es cuchado #include <sys/types.h> 8

9 #include <netinet/in.h>... int se; int sc; int longaddr; struct sockaddr_in si; longaddr = sizeof(si); sc = accept (se, (struct sockaddr *)&si, &longaddr); if (sc == -1) { /* Error aceptando conexión */ } 3.5. Solicitud de conexión en un cliente. connect () La llamada al sistema connect la utiliza un cliente para establecer una conexión con un servidor. Su prototipo es el siguiente: #include <sys/types.h> int connect(int s, const struct sockaddr *name, int namelen); donde s Es el descriptor del socket que previamente se ha tenido que crear con la llamada a socket. name Este es un puntero a una estructura que debe contener la dirección del servidor al que se quiere conectar el cliente. namelen Es el tamaño en bytes de la estructura que contiene la dirección del servidor. Si el socket es de tipo SOCK DGRAM, connect especifica la dirección del socket remoto al que se le van a enviar los mensajes, pero no se conecta con él. La llamada devuelve el control inmediatamente. Además a través del socket solamente se podrán recibir mensajes procedentes de la dirección especificada en name. Si el socket es de tipo SOCK STREAM, connect intenta conectar con el ordenador remoto para realizar una conexión cliente-servidor. La llamada se bloquea hasta que la conexión se completa. Si la conexión no se puede realizar inmediatamente, pero el socket tiene activo el modo de acceso O NDELAY, la llamada a connect devuelve el control indicando que se ha producido un error de conexión. Si la conexión se realiza con éxito, la llamada devuelve un 0; en caso de error, devuelve un -1 y en errno estará el código del error producido Liberación de recursos. close () Como ya se ha visto en los apartados anteriores, los sockets son tratados por el sistema igual que los ficheros. Por lo tanto, para liberar los recursos utilizados por un socket cuando no se necesiten más, se utiliza la llamada close vista en el boletín de ficheros Envío/recepción de datos mediante sockets en modo stream. send (), recv () Una vez que cliente y servidor están conectados, se tiene un canal de comunicación bidireccional y simétrico. Podemos mandar o recibir información por los sockets de tres formas distintas: 9

10 1. Mediante llamadas al sistema específicas de sockets, es decir, utilizando send y recv. 2. Utilizando las llamadas read y write que se vieron en el boletín de ficheros, ya que el sistema trata a un socket como a un descriptor de fichero. 3. Asociándole un buffer al descriptor del socket, con la función fdopen, vista en el boletín de ficheros, y trabajar así a alto nivel (con un puntero a FILE) y utilizar las funciones de stdio: fprintf, fgets, fgetc, fputc,... En este apartado nos centraremos en describir las llamadas específicas de sockets, porque el resto se supone conocido. El prototipo de las llamadas send y recv es el siguiente: ssize_t recv(int s, void *buf, size_t len, int flags); ssize_t send(int s, const void *buf, size_t len, int flags); las dos funciones son similares a las estándares read y write, pero tienen un parámetro extra. Los tres primeros argumentos son los mismos que los tres primeros de read y write. Es decir, s Es el descriptor del socket conectado del que se va a leer o por el que se va a escribir. buf Es un puntero al inicio del bloque a enviar, en el caso de send, o al inicio del bloque donde se colocará la información leída, en el caso de recv. len Es el tamaño en bytes a enviar (send) o bytes disponibles para recibir (recv). flags Es o bien 0, o bien, se forma mediante la suma lógica (OR) de una serie de constantes definidas en el sistema. Para ver estas constantes, consulte el manual. send devuelve el número de bytes enviados, o -1 en caso de error. recv devuelve el número de bytes leídos, o -1 si ocurrió algún error. Si el número de bytes a leer fuese mayor que el tamaño de buf, entonces habría que hacer más invocaciones a recv para leer toda la información que haya disponible. (recv) y send son llamadas bloqueantes. Esto quiere decir que, para el caso de recv, si se hace una llamada al sistema y no hay datos disponibles para leer, el proceso que hizo la llamada quedará suspendido hasta que haya datos disponibles. En el caso de send, el proceso que realiza la llamada puede quedar bloqueado en el caso en el que el sistema tenga sus buffers lleno y no pueda almacenar temporalmente los datos a enviar. 4. Otras funciones de utilidad 4.1. Funciones de ordenación de bytes A la hora de enviar datos por la red, nos podemos encontrar con problemas cuando se interpreta la información recibida. Consideremos, por ejemplo, un entero de 16 bits, que consta de dos bytes. Para almacenarlo, y por lo tanto, para enviarlo, tenemos dos posibilidades: 1. Almacenar el byte menos significativo en las direcciones más bajas y el más significativo en las direcciones más altas, lo que en la bibliografía se conoce como little-endian. 2. Almacenar el byte más significativo en la direcciones más bajas y el menos significativo en las más altas, o big-endian. Desafortunadamente, no hay un estándar para el orden de los bytes, y nos podemos encontrar con sistemas que usan un formato y sistemas que usan el otro. La forma que tiene un sistema de ordenar los bytes se conoce como host byte order. Para evitar el tener que conocer la ordenación de los bytes de la máquina destino, se utiliza lo que se conoce como network byte order o un criterio ocmún para enviar los datos por la red. 10

11 Para convertir datos numéricos de network byte order a host byte order, y viceversa, se emplean las siguientes funciones: #include <netinet/in.h> unsigned short htons (unsigned short); unsigned long htonl (unsigned long); unsigned short ntohs (unsigned short); unsigned long ntohl(unsigned long); htons y htonl convierten de host byte order a network byte order. La primera convierte un entero corto, y la segunda un entero largo. ntohs y ntohl convierten de network byte order a host byte order. La primera convierte un entero corto, y la segunda un entero largo Funciones de conversión de nombres y direcciones En cualquier sistema cliente-servidor es necesario conectar el cliente con el servidor, por lo tanto, debe existir un sistema de identificación y localización de servicios. En el caso de la famila de direcciones de Internet, el protocolo que se utiliza es el IP, y las direcciones, se conocen como direcciones IP. Una dirección IP viene dada por 32 bits, y para que el ser humano la entienda bien, se suede dar en formato ASCII agrupada por cadenas de bytes separados por puntos. Por ejemplo, , la cual corresponde al número Pero con la dirección IP no basta para la localización, ya que una máquina puede ofertar múltiples servicios como ftp, telnet, http, echo, etc. De la misma forma que para localizar a una persona no basta con saber el portal, sino también el piso y la puerta, es necesario dar más información para localizar un servicio concreto. Esta información se da con un número que se conoce como puerto. Sin embargo, los usuarios normales no están acostumbrados a trabajar con números, sino que es mucho más fácil recordar el nombre de una máquina (murillo.eii.us.es) que su dirección IP. Para no obligar a que el usuario conozca la dirección IP de una máquina y poder trabajar con los nombres de los hosts se emplean las siguientes funciones que vamos a ver en esta sección. Pero esto no es todo, ya que trabajar con números no es demasiado cómodo para el ser humano. Así que, las máquinas tienen asignados nombres, de tal forma, que un nombre de máquina tiene una equivalencia con una dirección IP. Surgieron así bases de datos para convertir nombres de máquina a direcciones IP y viceversa. En UNIX esta información se encuentra en ficheros situados en el directorio /etc. Las correspondencias entre nombres y direcciones IP se encuentran en el fichero /etc/hosts Búsqueda de máquinas. gethostbyname () La función más básica que busca un nombre de host es la función gethostbyname, la cual devuelve una estructura que contendrá todas las direcciones IP para esa máquina. Esta información la obtendrá o bien de un servidor de nombres, o bien del archivo /etc/hosts El formato de esta función es el siguiente: #include <netdb.h> struct hostent *gethostbyname(const char *name); donde name es el nombre del host del que se desea conocer la dirección IP. La estructura que devuelve gethostbyname es la siguiente: 11

12 struct hostent { char *h_name; /* official name of host */ char **h_aliases; /* alias list */ int h_addrtype; /* host address type */ int h_length; /* length of address */ char **h_addr_list; /* list of addresses from name server */ #define h_addr h_addr_list[0] /* address, for backward compatiblity */ }; En esta estructura: h name Contiene una cadena con el nombre oficial de la máquina. h aliases Es un array de cadenas de caracteres, cada una de las cuales es un alias de la máquina. h addrtype Indica el tipo de dirección, en nuestro caso, AF INET. h length Indica la longitud en bytes de la dirección, que para el caso AF INET es de 4 bytes (la dirección IP). h addr list Es un array de cadenas en el que pada posición corresponde a una dirección IP asociada a la máquina. h addr Este campo se mantiene por compatibilidad con versiones anteriores. Contiene la dirección IP principal, y no es más que la primera posición del array h addr list. En la figura 3 se describe gráficamente el formato de la estructura hostent. struct hostent h_name h_aliases h_addrtype: AF_INET h_length: 4 h_addr_list nombre oficial\0 NULL NULL alias #1\0 alias #2\0 struct in_addr() direccionip#1\0 struct in_addr() direccionip#2\0 struct in_addr() direccionip#3\0 h_length = 4 Figura 3: Llamadas al sistema de sockets para un protocolo orienteado a conexión Conversión de formato de direcciones IP. Para convertir una dirección IP del formato de caracteres separados por puntos as su representación como un entero largo, disponemos de la función inet addr. La conversión inversa se realiza mediante la función inet ntoa. Sus prototipos son los siguientes: #include <sys/types.h> #include <netinet/in.h> 12

13 #include <arpa/inet.h> in_addr_t inet_addr(const char *cp); char *inet_ntoa(const struct in_addr in); Obtención del nombre del host. gethostname () Para obtener el nombre de la máquina donde que ejecuta la llamada a esta función se utiliza gethostname cuyo prototipo es el siguiente: #include <unistd.h> int gethostname(char *name, int namelen); 5. Ejercicios 1. Realice un programa cliente de intercambio de mensajes entre máquinas utilizando el protocolo TCP/IP y utilizando sockets de tipo stream. El proceso cliente, deberá pedirle al usuario un mensaje por la entrada estándar. Este mensaje deberá ser enviado a un proceso servidor, que estará situado en una máquina distinta. El proceso servidor, cuando reciba el mensaje, deberá imprimirlo por la salida estándar. La invocación del cliente se hará de la siguiente forma: cliente <nombre_maquina> <puerto> donde <nombre_maquina> será la dirección de la máquina en la que se ha lanzado el proceso servidor que atenderá sus conexiones, y <puerto> será el número de puerto TCP por el que el servidor atiende las peticiones de los clientes. Para probar el cliente utilice el servidor que le será proporcionado por el profesor de prácticas. Una prueba de ejecución puede ser la siguiente: Lance el proceso servidor en el servidor de prácticas murillo de la siguiente forma: $ servidor 1234 Lance el proceso cliente en su máquina local: $ cliente murillo 1234 Introduca un mensaje: Hola Introduzca un mensaje en el terminal asociado al cliente y compruebe que el mensaje aparece en el terminal asociado al servidor. 2. Implemente un proceso servidor concurrente de intercambio de mensajes que se comunique con el cliente que ha implementado en el ejercicio anterior. El proceso servidor deberá estar pendiente de atender las solicitudes de conexiones por parte de los clientes. Una vez establecida la conexión, deberá imprimir por su salida estándar los mensajes que envíen los clientes. La invocación al servidor se realizará de la siguiente forma: servidor <puerto> donde <puerto> será el número de puerto TCP por el que el servidor atenderá las peticiones. Puede realizar la misma prueba que en el ejercicio anterior, pero en lugar de utilizar el servidor proporcionado por el profesor de prácticas, utilice su propio servidor. NOTA: Para hacer la implementación del ejercicio vaya por pasos. Pruebe primero a realizar un servidor que atienda una conexión. Después, modifique el código para convertirlo en iterativo y que pueda atender más de una conexión, pero no de forma simultánea. Y, por último, haga que su servidor atienda varias conexiones concurrentemente. 13

14 3. Realice un programa cliente y un programa servidor concurrente de intercambio de archivos entre máquinas utilizando el protocolo TCP/IP y utilizando sockets de tipo stream. El servidor estará pendiente de atender las peticiones de conexión por parte del cliente. Una vez aceptada una conexión, el cliente le enviará al servidor un mensaje con el siguiente formato: GET <archivo> donde <archivo> debe ser el nombre de un archivo que exista en el sistema de archivos del servidor. Una vez que el servidor reciba el mensaje, comprobará si existe el archivo solicitado por el cliente. Si el archivo existe, le mandará un mensaje con el siguiente formato: OK <bytes><retorno><fin_de_linea> donde <bytes> es el tamaño en bytes del archivo que se va a enviar a continuación, <retorno> es el carácter \r y <fin_de_linea> el \n. Y justo a continuación le enviará, carácter a carácter, el archivo solicitado. Si el archivo no existiera o hubiera algún problema para acceder a él. El servidor mandará un mensaje con el formato: NOK <descripcion_del_error> donde <descripcion_del_error> es un pequeño mensaje de texto que describe por qué no se ha podido enviar el archivo. Las invocaciones al cliente y al servidor tendrán los siguientes formatos: servidor <puerto> cliente <nombre_maquina> <puerto> <archivo> donde <nombre_maquina> será la dirección de la máquina en la que se ha lanzado el proceso servidor que atenderá sus conexiones, <puerto> será el número de puerto TCP por el que el servidor atiende las peticiones de los clientes, y <archivo> será el archivo que ha solicitado el cliente al servidor. 14

15 6. Ejercicios de Examen 1. (Ejercicio de Examen 1 a CONV II ) Se desea implementar un servidor de archivos concurrente (fileserv) que trabaje en modo conectado (SOCK_STREAM) y que pueda funcionar a través de internet (AF_INET). Para implementar el servidor, se han decidido crear las siguientes funciones: int Serv_Crea_Socket (void); Reserva una posición en la tabla de descriptores de archivos para almacenar información sobre un socket. Devuelve el descriptor del socket creado, si no hay ningún tipo de problema, y -1 en caso de error. int Serv_Reserva_Puerto(int sock, int puerto, struct hostent *hp); Une el socket dado por sock con el número de puerto TCP/IP y la dirección dada en la estructura struct hostent. Devuelve -1 si hay algún error, y 0 en caso contrario. int Serv_Asigna_ColaEsc(int sock); Asigna el tamaño de la cola de espera a la constante TAM_COLA, y convierte el socket en pasivo. Si existe algún problema al realizar la operación, devuelve -1. En caso contrario devuelve 0. int Serv_Acepta_Conexion(int sock); Toma como argumento un socket pasivo, y devuelve un socket conectado. Si hay algún error, devuelve -1. En caso contrario, devuelve el descriptor del socket conectado. int Serv_Procesa_Conexion(int sock, char directorio[]); Toma como argumento un socket conectado y la ruta absoluta del directorio que contendrá los archivos que sirve el servidor de archivos. El servidor se deberá invocar de la siguiente forma: fileserv <puerto> <directorio> donde <puerto> es el número de puerto TCP/IP por el que el servidor atenderá las peticiones recibidas por parte de los clientes, y <directorio> será la ruta absoluta de un directorio, que deberá existir en el sistema, y en el que se situarán los archivos y/o directorios que servirá nuestro programa. Apartado a.- Escriba el código de la función Serv_Reserva_Puerto. Apartado b.- Escriba el código del programa principal para crear el servidor de archivos concurrente. El servidor deberá capturar la combinación de teclas Ctrl+C (señal SIGINT) para terminar correctamente el programa, lo que implica que no se deben dejar procesos huérfanos, ni sockets abiertos. Apartado c.- Escriba el código de una función C llamada enviar_archivo que pueda ser llamada por la función serv_procesa_conexion, y que se encargue de enviar al cliente a través del socket la siguiente información: Si el archivo solicitado no existe, al cliente se le enviará el siguiente mensaje: \ERR-01: Archivo inexistente \r\n. Nótese que se utiliza como terminador de mensaje el conjunto de caracteres $\backslash$r $\backslash$n. Si el archivo solicitado existe, pero no se tiene permiso de lectura sobre el mismo, se debe enviar el mensaje: \ERR-02:Sin permiso \r\n. Por último, si el archivo existe y se tiene permiso de lectura, se deberá enviar una cabecera con el tamaño en bytes del archivo (Por ejemplo, v, y a continuación se deben enviar, carácter a carácter, los 456 bytes de que consta el archivo. El prototipo de la función que debe implementar es el siguiente: void enviar_archivo (int sc, char directorio[], char archivo[]) donde: sc es el descriptor del socket conectado al cliente. directorio contiene la ruta absoluta del directorio donde están los archivos que sirve el servidor, y archivo es el nombre del archivo solicitado por el cliente. NOTA: El archivo se debe tratar a bajo nivel. 15

16 2. (Ejercicio de Examen 2 a CONV II ) Se desea implementar un servidor de archivos concurrente fileserv y un cliente filecli para este servidor que trabajen en modo conectado (SOCK_STREAM) y que puedan funcionar a través de internet (AF_INET). Las invocaciones a estos programas se tendrán el siguiente formato: fileserv filecli donde: Se pide: <puerto> <directorio> <nombre-maquina> <puerto> <peticion> <puerto> es el número de puerto TCP/IP por el que el servidor atenderá las peticiones recibidas por parte de los clientes, en el caso del servidor, y el puerto por el que realizará las peticiones en caso del cliente. <directorio> será la ruta absoluta de un directorio, que deberá existir en el sistema, y en el que se situarán los archivos y/o directorios que servirá el servidor. <nombre-maquina> será el nombre de la máquina en la que se esté ejecutando el servidor al que se desea conectar el cliente. <peticion> indicará la operación que le solicita el cliente al servidor. Esta <peticion> podrá tener tres formatos distintos: ls En este caso el cliente le solicita al servidor un listado de los archivos disponibles para descargar. Como resultado de la operación en el terminal del cliente debe aparecer un listado de los mismos. get <nombre archivo> El cliente le solicita al servidor el archivo <nombre_archivo>. Como resultado de la operación en el directorio desde donde se lanzó el cliente debe aparecer el archivo solicitado, si la operación se ha realizado correctamente, o un mensaje de error, en caso contrario. put <nombre archivo> El cliente le envía al servidor el archivo <nombre_archivo>. Como resultado de la operación en el directorio <directorio> del servidor debe aparecer el archivo enviado, si la operación se ha realizado correctamente. Si no, aparecerá en el terminal del cliente un mensaje de error. Apartado a.- Escriba el código de la función Cliente_Solicita_Conexion que toma como parámetro de entrada el puerto TCP/IP por el que el cliente realizará la conexión, y un puntero a una estructura hostent, que contendrá información acerca del servidor al que el cliente se quiere conectar. Devolverá un entero que será el descriptor del socket creado y ya conectado ó -1 en caso de error. Apartado b.- Escriba el código de la función del servidor Servidor_Envia_Listado, que tomará como argumentos de entrada un descriptor de socket conectado sd, y el directorio que contiene los archivos que el cliente puede descargar del directorio. Esta función deberá enviarle al cliente un listado de aquellos archivos regulares que tengan permiso de lectura para aquellos usuarios que no sean ni el propietario ni pertenezcan al grupo del propietario. El listado tendrá el formato que se presenta a continuación, donde, aparece el nombre del archivo, seguido de su tamaño en bytes: practica.c 100 bytes f1.c 233 bytes <fin> 2 archivos disponibles 3. (Ejercicio de Examen 3 a CONV II ) Se desea implementar un servidor de archivos concurrente fileserv y un cliente filecli para ese servidor que trabajen en modo conectado (SOCK_STREAM) y que puedan funcionar a través de internet (AF_INET). Las invocaciones a estos programas se tendrán el siguiente formato: fileserv <puerto> <directorio> filecli <nombre-maquina><puerto> <peticion> donde: 16

17 Se pide: <puerto> es el número de puerto TCP/IP por el que el servidor atenderá las peticiones recibidas por parte de los clientes, en el caso del servidor, y el puerto por el que realizará las peticiones el cliente. <directorio> será la ruta absoluta de un directorio, que deberá existir en el sistema, y en el que se situarán los archivos y/o directorios que servirá el servidor. <nombre-maquina> será el nombre de la máquina en la que se esté ejecutando el servidor al que se desea conectar el cliente. <peticion> indicará la operación que le solicita el cliente al servidor. Esta <peticion> podrá tener tres formatos distintos: ls En este caso el cliente le solicita al servidor un listado de los archivos disponibles para descargar. Como resultado de la operación en el terminal del cliente debe aparecer un listado de los mismos. get <nombre archivo> El cliente le solicita al servidor el archivo <nombre_archivo>. Como resultado de la operación en el directorio desde donde se lanzó el cliente debe aparecer el archivo solicitado, si la operación se ha realizado correctamente, o un mensaje de error, en caso contrario. put <nombre archivo> El cliente le envía al servidor el archivo <nombre_archivo>. Como resultado de la operación en el directorio <directorio> del servidor debe aparecer el archivo enviado, si la operación se ha realizado correctamente. Si no, aparecerá en el terminal del cliente un mensaje de error. Apartado a.- Escriba el código de la función Servidor_Acepta_Conexion, cuyo prototipo es el siguiente: void Servidor_Acepta_Conexion(int se, int *sc). Dicha función tomará como argumentos de entrada un descriptor de socket de escucha se en modo pasivo y un argumento de salida (que se pasa por referencia) sc que es el descriptor de socket conectado. La función bloqueará al proceso servidor hasta recibir una conexión por parte de un cliente, en cuyo caso, se aceptará la conexión y se devolverá el socket conectado. Apartado b.- Realice la función int Cliente_Recibe_Archivo, cuyo prototipo es el siguiente: int Cliente_Recibe_Archivo(int sc, char archivo[],int permisos). Dicha función recibe como argumentos un entero sc que representa el socket conectado al servidor de archivos, archivo que es el nombre del archivo que vamos a recibir y que habrá que crear y dónde introduciremos el contenido leído del socket conectado y por último permisos que indica los permisos con el que crearemos el archivo. En caso de que el cliente reciba correctamente el archivo y guarde su contenido, devolveremos 0 en caso contrario, devolveremos 1. Para saber si el archivo se ha localizado en el servidor y puede ser enviado correctamente, lo primero que se enviará desde el servidor será la cadena Correcto: y a continuación el contenido del archivo. En caso de que lo que inicialmente enviado no sea dicha cadena, se habrá producido un error. 4. (Ejercicio de Examen 3 a CONV II ) Se desea implementar un servidor de archivos concurrente (fileserv) que trabaje en modo conectado (SOCK_STREAM) y que pueda funcionar a través de internet (AF_INET). Para implementar el servidor, se han decidido crear las siguientes funciones: int Serv_Crea_Socket_Escucha (int puerto, struct hostent *hp); Toma como entrada un número de puerto TCP/IP y la dirección dada en la estructura struct hostent, y devuelve, el descriptor del socket en modo pasivo, preparado para la escucha, ó, -1 en caso de error. int Serv_Acepta_Conexion(int sock); Toma como argumento un socket pasivo, y devuelve un socket conectado. Si hay algún error, devuelve -1. En caso contrario, devuelve el descriptor del socket conectado. int Serv_Procesa_Conexion(int sock, char directorio[]); Toma como argumento un socket conectado y la ruta absoluta del directorio que contendrá los archivos que sirve el servidor de archivos El servidor se deberá invocar de la siguiente forma: fileserv <puerto> <directorio> donde <puerto> es el número de puerto TCP/IP por el que el servidor atenderá las peticiones recibidas por parte de los clientes, y <directorio> será la ruta absoluta de un directorio, que deberá existir en el sistema, y en el que se situarán los archivos y/o directorios que servirá nuestro programa. 17

18 Apartado a.- Escriba el código de la función Serv_Crea_Socket_Escucha. Apartado b.- Una de las posibles peticiones que le pueden llegar al servidor es la operación PUT <archivo>, mediante la cual, un proceso cliente puede enviarle un archivo al servidor. Implemente la función: int Servidor_Guardar_Archivo (int socket, char archi[], int tam) que toma el descriptor del socket conectado al cliente (socket), un nombre de archivo (arch) y el tamaño del mismo (tam), y deberá crear una copia en el directorio dado por la constante HOME, que se supone definida, del archivo que el cliente envía por el socket. 18

PRÁCTICA 4 PASO DE MENSAJES

PRÁCTICA 4 PASO DE MENSAJES PRÁCTICA 4 PASO DE MENSAJES Introducción Cuando los procesos interactúan unos con otros pueden necesitar intercambiar información. Uno de los métodos posibles para conseguir esto es el paso de mensajes.

Más detalles

Diseño de aplicaciones distribuidas ÍNDICE

Diseño de aplicaciones distribuidas ÍNDICE Aplicaciones Distribuidas (s) Aplicaciones Distribuidas (s) TCP TCP Protocolos de Protocolos de Transporte Transporte UDP UDP STREAM STREAM (TCP) (TCP) SOCKET SOCKET Etapas en la Creación Etapas en la

Más detalles

Práctica 1 Programación de Aplicaciones Distribuidas: Sockets UDP. Laboratorio de Comunicación de Datos ITT Telemática Septiembre 2011

Práctica 1 Programación de Aplicaciones Distribuidas: Sockets UDP. Laboratorio de Comunicación de Datos ITT Telemática Septiembre 2011 Práctica 1 Programación de Aplicaciones Distribuidas: Sockets UDP Laboratorio de Comunicación de Datos ITT Telemática Septiembre 2011 Introducción Aplicaciones Distribuidas Su funcionalidad se distribuye

Más detalles

Migrando aplicaciones a IPv6

Migrando aplicaciones a IPv6 Migrando aplicaciones a Fundamentos técnico: DualStack y Socket.h Alonso Sandoval A. Hernán Vargas L. Universidad Técnica Federico Santa María asandova@alumnos.inf.utfsm.cl, hvargas@alumnos.inf.utfsm.cl

Más detalles

Mecanismos IPC: sockets

Mecanismos IPC: sockets Mecanismos IPC: sockets Ampliación de Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid Sockets Los sockets son una abstracción lógica que permiten la comunicación bidireccional

Más detalles

Estructuras y funciones de programación de sockets.

Estructuras y funciones de programación de sockets. Estructuras y funciones de programación de sockets. Introducción. En estos apuntes se incluye una breve descripción de las estructuras y funciones cuyo uso puede ser necesario para el desarrollo de las

Más detalles

Qué es un socket? Dominios de comunicación. Tipos de sockets en el dominio AF_INET. Sockets Stream. Sockets Datagram. Sockets Raw

Qué es un socket? Dominios de comunicación. Tipos de sockets en el dominio AF_INET. Sockets Stream. Sockets Datagram. Sockets Raw Qué es un socket? Es una interfaz de entrada salida de datos que permite la intercomunicación entre procesos. Los procesos pueden estar ejecutándose en el mismo o en distintos sistemas, unidos mediante

Más detalles

Sockets (TCP) Tema 2.- Nivel de aplicación en Internet

Sockets (TCP) Tema 2.- Nivel de aplicación en Internet Sockets (TCP) Tema 2- Nivel de aplicación en Internet Dr Daniel Morató es de Computadores Ingeniero Técnico en Informática de Gestión, 2º curso Material parcialmente adaptado del libro Computer Networking:

Más detalles

Estructuras y funciones de programación de sockets.

Estructuras y funciones de programación de sockets. Estructuras y funciones de programación de sockets. Introducción. Autor: Enrique Bonet En estos apuntes se incluye una breve descripción de las estructuras y funciones cuyo uso puede ser necesario para

Más detalles

-> Todo socket viene definido por dos características fundamentales:

-> Todo socket viene definido por dos características fundamentales: LOS SOCKETS. Los sockets no son más que puntos o mecanismos de comunicación entre procesos que permiten que un proceso hable (emita o reciba información) con otro proceso incluso estando estos procesos

Más detalles

Redes de Computadores Nivel de Aplicación: Programación con sockets I

Redes de Computadores Nivel de Aplicación: Programación con sockets I Redes de Computadores Nivel de Aplicación: Programación con sockets I Área de Ingeniería Telemática Dpto. Automática y Computación http://www.tlm.unavarra.es/ En clases anteriores... El nivel de aplicación

Más detalles

DESARROLLO DE APLICACIONES DISTRIBUIDAS. SOCKETS en UNIX

DESARROLLO DE APLICACIONES DISTRIBUIDAS. SOCKETS en UNIX DESARROLLO DE APLICACIONES DISTRIBUIDAS PRÁCTICAS CURSO 2002-2003 SOCKETS en UNIX 1. Los SOCKETS en OSI/ISO - Como ya conocéis, el modelo OSI/ISO estructura los diferentes elementos que conforman una red

Más detalles

Introducción de Sockets en C.

Introducción de Sockets en C. PRÁCTICA 2: Introducción de Sockets en C. 1 La Interfaz Socket es una API para redes TCP/IP que se compone de funciones o rutinas. Originalmente se construyó a principios de los 80 para el sistema operativo

Más detalles

Introducción a la programación con sockets en C

Introducción a la programación con sockets en C Introducción a la programación con sockets en C Enrique Bonet Departamento de Informática Universidad de Valencia Índice Introducción Socket Creación de un socket Cierre de un socket Asociación de un socket

Más detalles

Clase de Sockets en lenguaje C. Prof. Ricardo González

Clase de Sockets en lenguaje C. Prof. Ricardo González Clase de Sockets en lenguaje C Prof. Ricardo González 1 Modelo de Programación Cliente-Servidor Cliente: un programa que envía peticiones. Servidor: un programa que ofrece un servicio que satisface peticiones

Más detalles

Sistemas de Transportes de Datos (STD) Tema III: UDP y TCP (Entrega 4) Grupo de Aplicaciones Telemáticas. Grupo de Aplicaciones Telemáticas

Sistemas de Transportes de Datos (STD) Tema III: UDP y TCP (Entrega 4) Grupo de Aplicaciones Telemáticas. Grupo de Aplicaciones Telemáticas Sockets Abstracción para las operaciones de E/S a través de la red. Generalización de mecanismos de acceso a ficheros para suministrar un punto a través del cual realizar las comunicaciones. : Crear un

Más detalles

PROGRAMACIÓN CON SOCKETS

PROGRAMACIÓN CON SOCKETS UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA PROGRAMACIÓN CON SOCKETS Celeste Campo Carlos García Rubio {celeste,cgr}@it.uc3m.es PROGRAMACIÓN CON SOCKETS Pág. 1 1. Introducción.

Más detalles

UNIVERSIDAD DE CANTABRIA DEPARTAMENTO DE INGENIERÍA DE COMUNICACIONES GRUPO DE INGENIERÍA TELEMÁTICA

UNIVERSIDAD DE CANTABRIA DEPARTAMENTO DE INGENIERÍA DE COMUNICACIONES GRUPO DE INGENIERÍA TELEMÁTICA UNIVERSIDAD DE CANTABRIA DEPARTAMENTO DE INGENIERÍA DE COMUNICACIONES GRUPO DE INGENIERÍA TELEMÁTICA MANUAL DE SOCKETS EN C TABLA DE CONTENIDOS Introducción.. 4 Sockets en C.. 7 2.1 Conceptos Básicos..

Más detalles

Sistemas Operativos: Programación de Sistemas. Curso 2006-07. Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

Sistemas Operativos: Programación de Sistemas. Curso 2006-07. Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Tema 7 : Comunicación mediante sockets Sistemas Operativos: Programación de Sistemas Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Santana Pérez Curso 2006-07 Introducción Los sockets (también

Más detalles

Ingeniería Técnica de Telecomunicación, esp. Telemática Universidad de Jaén

Ingeniería Técnica de Telecomunicación, esp. Telemática Universidad de Jaén Contenido. Introducción Primitivas Sockets orientadas a conexión (TCP) Primitivas orientadas a no conexión (UDP) Programación con Sockets en Internet Funciones sockets Funciones auxiliares 1 Bibliografía.

Más detalles

Adaptación de aplicaciones a IPv6

Adaptación de aplicaciones a IPv6 Adaptación de aplicaciones a IPv6 extensión de la interfaz de sockets Eva M. Castro ecastro@dit.upm.es Tutorial IPv6 -Adaptación de aplicaciones a IPv6 1 Contenido * Introducción Modelo de sockets BSD

Más detalles

Sistemas Operativos Distribuidos

Sistemas Operativos Distribuidos Sockets Sistemas Distribuidos Sockets Aparecieron en 1981 en UNIX BSD 4.2 Intento de incluir TCP/IP en UNIX. Diseño independiente del protocolo de comunicación. Un socket es punto final de comunicación

Más detalles

Sistemas Distribuidos. Sockets

Sistemas Distribuidos. Sockets Sistemas Distribuidos Sockets Sockets Aparecieron en 1981 en UNIX BSD 4.2 Intento de incluir TCP/IP en UNIX. Diseño independiente del protocolo de comunicación. Un socket es punto final de comunicación

Más detalles

Sockets: funcionamiento y programación. Sockets tipo UNIX. MSc. Ivan A. Escobar

Sockets: funcionamiento y programación. Sockets tipo UNIX. MSc. Ivan A. Escobar Sockets tipo UNIX MSc. Ivan A. Escobar Creación socket: socket() int socket(familia, tipo, protocolo) Regresa un valor entero Parecido descriptor de archivos: descriptor socket sockfd int familia familia

Más detalles

Arquitecturas Cliente/Servidor

Arquitecturas Cliente/Servidor Arquitecturas Cliente/Servidor Integrantes: Arellano Santiago Víctor Manuel Girón Capistrán Aldo Iván Guerrero Ramirez Eduardo Daniel Rosas Peña Ramiro SOCKETS EN C. LLAMADAS PARA EL MANEJO DE SOCKETS

Más detalles

ARQUITECTURA DE REDES Laboratorio PRÁCTICA 2: MANUAL DE SOCKETS EN C. Grado en Ingeniería Informática Curso 2014/15

ARQUITECTURA DE REDES Laboratorio PRÁCTICA 2: MANUAL DE SOCKETS EN C. Grado en Ingeniería Informática Curso 2014/15 ARQUITECTURA DE REDES Laboratorio PRÁCTICA 2: MANUAL DE SOCKETS EN C Grado en Ingeniería Informática Curso 2014/15 ÍNDICE 1. INTRODUCCIÓN.. 3 1.1 La familia de protocolos TCP/IP. 3 1.2 Nivel de red (IP)..

Más detalles

COMUNICACIÓN ENTRE PROCESOS SOCKETS

COMUNICACIÓN ENTRE PROCESOS SOCKETS COMUNICACIÓN ENTRE PROCESOS SOCKETS Diseño de Sistemas Operativos Curso 2007/08 Grupo: Mi30 Martín Santana, A. David Martínez Santana, Luis Ignacio Qué son?(definición) n) Los sockets son mecanismos de

Más detalles

Problemas de Redes de Computadores. Ingeniería Técnica en Informática de Gestión Conjunto de problemas 1

Problemas de Redes de Computadores. Ingeniería Técnica en Informática de Gestión Conjunto de problemas 1 Problemas de Redes de Computadores. Ingeniería Técnica en Informática de Gestión Conjunto de problemas 1 Preguntas cortas Pregunta 1.1: Si configuro mi servidor Web para que no acepte conexiones desde

Más detalles

Características de un lenguaje ideal para robótica

Características de un lenguaje ideal para robótica COMUNICACIÓN MEDIANTE SOCKETS Enrique Ortega Edrodoso Ingeniería Técnica de Informática de Gestión Introducción Los vehículos autoguiados comerciales disponibles en la actualidad tienen una serie de inconvenientes

Más detalles

Sockets Básicos. Sockets Básicos

Sockets Básicos. Sockets Básicos Sockets Básicos Pedro Merino Gómez Jesus Martínez Cruz Dpto. Lenguajes y Ciencias de la Computación Universidad de Málaga Sockets Básicos Temas a tratar... APIS para acceso a TCP/IP El socket como descriptor

Más detalles

Sockets Básicos. APIS para acceso a TCP/IP. APIS para acceso a TCP/IP. APIS para acceso a TCP/IP. APIS para acceso a TCP/IP. Temas a tratar...

Sockets Básicos. APIS para acceso a TCP/IP. APIS para acceso a TCP/IP. APIS para acceso a TCP/IP. APIS para acceso a TCP/IP. Temas a tratar... Sockets Básicos Pedro Merino Gómez Jesus Martínez Cruz Dpto. Lenguajes y Ciencias de la Computación Universidad de Málaga Temas a tratar... Sockets Básicos El como descriptor para E/S Funciones básicas

Más detalles

Problemas de Redes de Computadores. Conjunto de problemas 1

Problemas de Redes de Computadores. Conjunto de problemas 1 Problemas de Redes de Computadores. Ingeniería Técnica en Informática de Gestión Conjunto de problemas 1 Pregunta 1.1: Si configuro mi servidor Web para que no acepte conexiones desde la dirección IP 130.206.1.1,

Más detalles

ADMINISTRACIÓN GENERAL DE TECNOLOGÍA DE LA INFORMACIÓN ADMINISTRACIÓN CENTRAL DE DESARROLLO Y MANTENIMIENTO DE APLICACIONES

ADMINISTRACIÓN GENERAL DE TECNOLOGÍA DE LA INFORMACIÓN ADMINISTRACIÓN CENTRAL DE DESARROLLO Y MANTENIMIENTO DE APLICACIONES ADMINISTRACIÓN GENERAL DE TECNOLOGÍA DE LA INFORMACIÓN ADMINISTRACIÓN CENTRAL DE DESARROLLO Y MANTENIMIENTO DE APLICACIONES SISTEMA DE AUTOMATIZACIÓN ADUANERA INTEGRAL (S. A. A. I.) PROTOCOLOS DE COMUNICACIÓN

Más detalles

Tema 4: Sockets: Un interfaz con TCP/IP

Tema 4: Sockets: Un interfaz con TCP/IP Tema 4: Sockets: Un interfaz con TCP/IP Introducción. Conceptos básicos. Dirección de un socket. Llamadas básicas de los sockets. Diferencias entre BSD-Sockets y WinSockets. Asignación de puertos a procesos.

Más detalles

sockets Flujo (SOCK_STREAM) Comunicación bidireccional Confiable (entrega garantizada) Información ordenada en el destino Datagrama (SOCK_DGRAM)

sockets Flujo (SOCK_STREAM) Comunicación bidireccional Confiable (entrega garantizada) Información ordenada en el destino Datagrama (SOCK_DGRAM) s s Comunicación punto-a-punto entre procesos Los s son los extremos de la comunicación Diferentes dominios UNIX: Entre procesos de un mismo equipo Internet: Entre procesos de diferentes equipos (TCP/IP)

Más detalles

Programación Básica de Sockets en Unix para Novatos

Programación Básica de Sockets en Unix para Novatos Tabla de contenidos BracaMan Introducción...3 Diferentes tipos de sockets en Internet...3 Estructuras...3 Conversiones....5 Direcciones IP...5 Funciónes Importantes...6 Algunas palabras sobre dns...14

Más detalles

Desarrollo de Aplicativos con winsockets

Desarrollo de Aplicativos con winsockets Seminario de Redes de Computadoras 66.48 Desarrollo de Aplicativos con winsockets Docentes: Ing. Marcelo Utard Ing. Pablo Ronco Alumnos: Baños, Germán Gámez, Pablo Rabino, Juan Pablo Salas, Federico Introducción

Más detalles

Sockets (UDP) Tema 2.- Nivel de aplicación en Internet

Sockets (UDP) Tema 2.- Nivel de aplicación en Internet Sockets (UDP) Tema 2.- Nivel de aplicación en Internet Dr. Daniel Morató es de Computadores Ingeniero Técnico en Informática de Gestión, 2º curso Sockets y UDP UDP: no hay conexión entre cliente y servidor»

Más detalles

Tema 4 Sockets: Un interfaz con TCP/IP

Tema 4 Sockets: Un interfaz con TCP/IP 1 Tema 4 Sockets: Un interfaz con TCP/IP Capítulos: Introducción. Conceptos básicos. Dirección de un socket. Llamadas básicas de los sockets. Diferencias entre BSD-Sockets y WinSockets. Asignación de puertos

Más detalles

Manejo de sockets IPv6

Manejo de sockets IPv6 Universidad Técnica Federico Santa María INF-354 Taller de Redes de Computadores Manejo de sockets IPv6 Autores: Alonso Sandoval Hernán Vargas Profesor: Javier Cañas 21 de noviembre de 2014 Índice 1. Resumen

Más detalles

Modem IBM Compatible. IBM Compatible. Ethernet IBM AS/400. Laser printer. Workstation. Mac II. El Interfaz. Socket. versión perliminar

Modem IBM Compatible. IBM Compatible. Ethernet IBM AS/400. Laser printer. Workstation. Mac II. El Interfaz. Socket. versión perliminar IBM Compatible Modem IBM Compatible Ethernet IBM AS/400 Laser printer Workstation Mac II El Interfaz Socket versión perliminar ÍNDICE 1. INTRODUCCIÓN. 2. QUÉ ES UN SOCKET?. 2.1. Dominio de un socket. 2.2.

Más detalles

SOCKETS en Linux. Lic. Leonardo de - Matteis. Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur 2011

SOCKETS en Linux. Lic. Leonardo de - Matteis. Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur 2011 Introducción al uso de SOCKETS en Linux Lic. Leonardo de - Matteis Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur 2011 Interfaz de programación de aplicaciones NAPI

Más detalles

Introducción a Sockets en Linux

Introducción a Sockets en Linux Introducción a Sockets en Linux Horacio Goetendía Bonilla 6 de Enero de 2003 Índice 1. Conceptos 2 1.1. Socket............................... 2 2. Sockets en Unix standar 2 2.1. Namespace (int dominio)(dominio

Más detalles

Tema 3: COMUNICACIÓN ENTRE PROCESOS

Tema 3: COMUNICACIÓN ENTRE PROCESOS Tema 3: COMUNICACIÓN ENTRE PROCESOS E. U. Informática en Segovia Departamento de Informática Universidad de Valladolid 1 Introducción Estudia las comunicaciones punto a punto entre los lados de un enlace

Más detalles

Programación con sockets

Programación con sockets Programación con sockets Internetworking with TCP/IP Client/Server Programming and Applications: Linux/POSIX Sockets Version Douglas E. Comer David L. Stevens Capítulos: 2, 5, 7 Grupo de Sistemas y Comunicaciones

Más detalles

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Facultad de Ingeniería

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Facultad de Ingeniería UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de Ingeniería Arquitecturas Cliente/Servidor Sockets en C Alumnos: Arellano Santiago Víctor Manuel Girón Capistrán Aldo Iván Guerrero Ramirez Eduardo Daniel

Más detalles

Redes (IS20) Ingeniería Técnica en Informática de Sistemas - (2º Curso)

Redes (IS20) Ingeniería Técnica en Informática de Sistemas - (2º Curso) Redes (IS20) Ingeniería Técnica en Informática de Sistemas - (2º Curso) Práctica 2: Programación en Red. Protocolos TCP y UDP. Comunicación entre procesos mediante Sockets Descripción del equipo: 1. Ordenadores

Más detalles

Tema 2. Comunicación entre procesos

Tema 2. Comunicación entre procesos Tema 2. Comunicación entre procesos SCS Sistemas Cliente/Servidor 4 o informática http://ccia.ei.uvigo.es/docencia/scs octubre 2008 FJRP, FMBR 2008/09 ccia SCS 2.1 Requisitos y alternativas Sistemas distribuidos

Más detalles

Sistema Cliente Servidor Con Sockets

Sistema Cliente Servidor Con Sockets Sistema Cliente Servidor Con Sockets Rafael Benedicto Tovar Antonio Soler Muñoz 0 Índice 1. Resumen del proyecto 2 Introducción teórica 2.1 - Qué es un socket? 2.2 - Dominios de comunicación 2.3 - Tipos

Más detalles

Práctica 5: Implementación en C++ de sistemas cliente/servidor basados en comunicación

Práctica 5: Implementación en C++ de sistemas cliente/servidor basados en comunicación Práctica 5: Implementación en C++ de sistemas cliente/servidor basados en comunicación síncrona Programación de Sistemas Concurrentes y Distribuidos Grado de Ingeniería Informática Dpto. de Informática

Más detalles

Administración de redes en GNU/Linux

Administración de redes en GNU/Linux Administración de redes en GNU/Linux La configuración de una red en UNIX/Linux es en cierta medida más compleja que en sistemas Microsoft. Sin embargo para numerosos administradores tiene un mayor grado

Más detalles

Desarrollo de Aplicaciones Distribuidas. Sockets. Daniel Avellaneda

Desarrollo de Aplicaciones Distribuidas. Sockets. Daniel Avellaneda Desarrollo de Aplicaciones Distribuidas Sockets Daniel Avellaneda Sockets en Java Qué es un Socket Un socket es una abstracción a través de la cual una aplicación pueden mandar y recibir datos. Un socket

Más detalles

Programación con Sockets

Programación con Sockets Programación con Sockets INTRODUCCIÓN 1 Qué son los Sockets? Son un mecanismo de comunicación entre procesos: Dentro de una misma máquina. Distribuidos en diferentes máquinas. Que pueden ser identificados

Más detalles

PRÁCTICA 2: Cliente-servidor UDP

PRÁCTICA 2: Cliente-servidor UDP PRÁCTICA 2: Cliente-servidor UDP El objetivo de esta práctica es la familiarización con aplicaciones elementales que usan los servicios de transporte de los sockets UDP. A lo largo de la práctica se realizarán

Más detalles

Programación de aplicaciones distribuidas usando sockets

Programación de aplicaciones distribuidas usando sockets Programación de aplicaciones distribuidas usando sockets 1 a Versión: José Luis Díaz. Octubre 1994. 2 a Versión: José Ramón Arias. Nov. 1998, Oct. 1999, Oct. 2000. Índice general 1. Programación de aplicaciones

Más detalles

Programación de sockets

Programación de sockets Programación de sockets Xavier Perramon Tornil Enric Peig Olivé P03/75064/00978 FUOC P03/75064/00978 Programación de sockets Índice Introducción... 5 Objetivos... 6 1. Qué son los sockets... 7 1.1. Visión

Más detalles

Programación C/S Básica

Programación C/S Básica 1 de 16 Programación C/S Básica Enrique Alba Torres Universidad de Málaga (UMA) 2 de 16 Los servicios Internet se ofertan como sistemas Cliente/Servidor Los protocolos de base suelen ser peer-to-peer (igual-a-igual)

Más detalles

TELEPROCESO Y SISTEMAS DISTRIBUIDOS

TELEPROCESO Y SISTEMAS DISTRIBUIDOS Universidad Nacional del Nordeste TELEPROCESO Y SISTEMAS DISTRIBUIDOS La Interfaz Socket Lic. Vanesa S. Roffé Año 2009 Introducción - Origen de la INTERFAZ SOCKET La Interfaz Socket es una API para redes

Más detalles

Programación en red sobre TCP/IP Interface sockets

Programación en red sobre TCP/IP Interface sockets Programación en red sobre TCP/IP Interface sockets Teresa Monreal y Pablo Ibáñez Area de Arquitectura y Tecnología de Computadores Departamento de Informática e Ingeniería de Sistemas 1 Indice Introducción.

Más detalles

SISTEMAS DE COMUNICACIONES DE DATOS

SISTEMAS DE COMUNICACIONES DE DATOS SISTEMAS DE COMUNICACIONES DE DATOS Técnicas Digitales III Ing. Gustavo Nudelman 2012 Fundamentos de Networking Subtitulo o nombre del capitulo Capitulo 1 Universidad Tecnológica Nacional Definiciones

Más detalles

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Tema 5 : Comunicación entre Procesos mediante Tuberías Sistemas Operativos: Programación de Sistemas Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Santana Pérez Curso 2006-07 Introducción Algunas

Más detalles

ARQUITECTURA DE REDES Laboratorio

ARQUITECTURA DE REDES Laboratorio 1nsloo.cl ARQUITECTURA DE REDES Laboratorio Práctica 2: Ejercicios de aplicación de Sockets en C 1. OBJETIVOS. El objetivo de esta práctica es que el alumno llegue a conocer los principales conceptos relacionados

Más detalles

Introducción a Sistemas Operativos: Ficheros

Introducción a Sistemas Operativos: Ficheros Introducción a Sistemas Operativos: Ficheros Clips Fr ancisco J Ballesteros 1. Entrada/Salida Es importante saber cómo utilizar ficheros. En UNIX, es aún más importante dado que gran parte de los recursos,

Más detalles

Arquitecturas cliente/servidor

Arquitecturas cliente/servidor Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor Creación de Sockets Cliente/Servidor Sockets en TCP Sockets en UDP Definición de DAEMON Concepto de Hilos Qué es un socket? Un socket

Más detalles

Mecanismo(s) de intercambio de información entre 2 ó más computadores conectados entre sí o a través de otros.

Mecanismo(s) de intercambio de información entre 2 ó más computadores conectados entre sí o a través de otros. Comunicaciones Comunicaciones: Mecanismo(s) de intercambio de información entre 2 ó más computadores conectados entre sí o a través de otros. Terminología: Trama: unidad de información a transmitir Medio:

Más detalles

Bloque I: Introducción. Tema 2: Introducción a TCP/IP

Bloque I: Introducción. Tema 2: Introducción a TCP/IP Bloque I: Introducción Tema 2: Introducción a TCP/IP Índice Bloque I: Introducción Tema 2: Introducción a TCP/IP Introducción Niveles y protocolos Direcciones IP y nombres DNS Números de puerto Transmisión

Más detalles

PROTOCOLO FTP PROTOCOLO DE TRANSFERENCIA DE ARCHIVOS ING. RAUL BAREÑO GUTIERREZ RAUL BAREÑO GUTIERREZ 1

PROTOCOLO FTP PROTOCOLO DE TRANSFERENCIA DE ARCHIVOS ING. RAUL BAREÑO GUTIERREZ RAUL BAREÑO GUTIERREZ 1 PROTOCOLO FTP PROTOCOLO DE TRANSFERENCIA DE ARCHIVOS RAUL BAREÑO GUTIERREZ 1 FTP. Qué es? Es un protocolo que permite pasar ficheros de un computador que los tiene (servidor FTP) a un computador que los

Más detalles

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros Práctica 3. Paso de parámetros entre subrutinas 1. Objetivo de la práctica El objetivo de esta práctica es que el estudiante se familiarice con la programación en ensamblador y el convenio de paso de parámetros

Más detalles

SOCKET S. Alberto Castro Rojas

SOCKET S. Alberto Castro Rojas SOCKET S EL64E Alberto Castro Rojas 1 Interfaz de programación genérica Soporte de múltiples suites de protocolos de comunicación (familias) Representaciones de direcciones sin dependencias (endpoint)

Más detalles

Protocolos de transporte y aplicación

Protocolos de transporte y aplicación Protocolos de transporte y aplicación Tema 1 SRI Vicente Sánchez Patón I.E.S Gregorio Prieto Funciones protocolos de aplicación Los protocolos de la capa de aplicación los utilizan tanto los dispositivos

Más detalles

Versión 1.0, 26 de marzo de 2.000

Versión 1.0, 26 de marzo de 2.000 ARQUITECTURA DE REDES DE COMPUTADORES II 2ª Práctica. Sockets. 4º Curso de la Ingeniería en Informática Departamento de Tecnología Electrónica Universidad de Sevilla Versión 1.0, 26 de marzo de 2.000 TITULACIÓN:

Más detalles

CENTRO DE ESTUDIOS NOVA - Cartagena Laboratorio de Software de Comunicaciones TEMA 1 FUNDAMENTOS DE SOCKETS TCP Y UDP

CENTRO DE ESTUDIOS NOVA - Cartagena Laboratorio de Software de Comunicaciones TEMA 1 FUNDAMENTOS DE SOCKETS TCP Y UDP TEMA 1 FUNDAMENTOS DE SOCKETS TCP Y UDP Concepto de UDP UDP son las siglas de Protocolo de Datagrama de Usuario (en inglés User Datagram Protocol) un protocolo sin conexión que, como TCP, funciona en redes

Más detalles

Redes de Computadores: Relación de problemas 1. Sockets

Redes de Computadores: Relación de problemas 1. Sockets Redes de Computadores: Relación de problemas 1. Sockets 1. Obtención de nombres y direcciones IP Uso de gethostbyname y gethostbyaddr. Bajo el sistema operativo Linux, esta información se puede obtener

Más detalles

Análisis Experimental de la Transmisión de Datos

Análisis Experimental de la Transmisión de Datos UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA DEPARTAMENTO DE ELECTRÓNICA Análisis Experimental de la Transmisión de Datos ELO322 Redes de Computadores I Pablo Ahumada D. Jorge Cápona G. Resumen Se muestra

Más detalles

Práctica 1: sockets en Python

Práctica 1: sockets en Python Práctica 1: sockets en Python Álvaro Navarro anavarro@gsyc.es Jesús M. González-Barahona jgb@gsyc.es Infraestructura de Redes 5 o Ingeniería Informática 08/09 1. Fase 1: Cliente UDP Esta primera fase tiene

Más detalles

Sistemas distribuidos

Sistemas distribuidos Sistemas distribuidos El primer elemento clave en un sistema distribuido es la red. Definición Cualquier conjunto de dos o más equipos informáticos interconectados entre sí con el objetivo de compartir

Más detalles

Sockets. Los sockets son un mecanismo de comunicación entre procesos que se utiliza en Internet.

Sockets. Los sockets son un mecanismo de comunicación entre procesos que se utiliza en Internet. Sockets La biblioteca estándar de clases de Java nos proporciona todo lo que necesitamos para utilizar sockets en nuestras aplicaciones en el paquete java.net, por lo que tendremos que añadir la siguiente

Más detalles

Ingeniería en Automática Industrial Software para Aplicaciones Industriales I

Ingeniería en Automática Industrial Software para Aplicaciones Industriales I Formas de comunicación! " Formas de comunicación! " TRABAJO EN RED BÁSICO Los computadores en una red se comunican unos con otros a través de protocolos de comunicación. Un protocolo establece una descripción

Más detalles

Bloque I: Introducción. Tema 2: Introducción a TCP/IP

Bloque I: Introducción. Tema 2: Introducción a TCP/IP Bloque I: Introducción Tema 2: Introducción a TCP/IP Índice Bloque I: Introducción Tema 2: Introducción a TCP/IP Introducción Niveles y protocolos Direcciones IP y nombres DNS Números de puerto Transmisión

Más detalles

Bibliografía [COM00] Internetworking with TCP/IP, vol. 3, Cap. 2 y del 7 al 15.

Bibliografía [COM00] Internetworking with TCP/IP, vol. 3, Cap. 2 y del 7 al 15. Tema 5: El Modelo Cliente-Servidor Conceptos básicos. Características y estructura de un cliente. Obtención de información. Algoritmos del cliente TCP y UDP. Ejemplos. Características y estructura de un

Más detalles

Procesos e Hilos en C

Procesos e Hilos en C Procesos e Hilos en C 6 de febrero de 2012 En esta sesión vamos a escribir programas en lenguaje C que utilicen hilos y procesos para comparar el rendimiento del sistema ante la gestión de unos y otros.

Más detalles

AMPLIACION DE SISTEMAS OPERATIVOS SOCKETS AIRAN GODOY HERNANDEZ JOSE MARIA RODRIGUEZ RODRIGUEZ 5º INGENIERIA EN INFORMATICA

AMPLIACION DE SISTEMAS OPERATIVOS SOCKETS AIRAN GODOY HERNANDEZ JOSE MARIA RODRIGUEZ RODRIGUEZ 5º INGENIERIA EN INFORMATICA AMPLIACION DE SISTEMAS OPERATIVOS SOCKETS AIRAN GODOY HERNANDEZ JOSE MARIA RODRIGUEZ RODRIGUEZ 5º INGENIERIA EN INFORMATICA 1 Definición de Socket Punto de comunicación entre procesos, mediante el cual

Más detalles

Los sockets de Unix. Dr. Roberto Gómez Cárdenas ITESM-CEM. Dr. Roberto Gomez C. Diapo. No.

Los sockets de Unix. Dr. Roberto Gómez Cárdenas ITESM-CEM.  Dr. Roberto Gomez C. Diapo. No. Los sockets de Unix Emisor Receptor Dr. Roberto Gómez Cárdenas ITESM-CEM rogomez@itesm.mx http//homepage.cem.itesm.mx/rogomez Dr. Roberto Gomez C. Diapo. No. 1 La comunicación - Comunicación ocurre a través

Más detalles

SISTEMAS OPERATIVOS Y TCP/IP. - El Modelo de Referencia TCP/IP -

SISTEMAS OPERATIVOS Y TCP/IP. - El Modelo de Referencia TCP/IP - SISTEMAS OPERATIVOS Y TCP/IP - El Modelo de Referencia TCP/IP - Objetivos Describir el modelo de referencia TCP/IP Comparar el modelo TCP/IP con el modelo OSI Analizar el formato general del datagrama

Más detalles

Tema 5 El Modelo Cliente-Servidor

Tema 5 El Modelo Cliente-Servidor 1 Tema 5 El Modelo Cliente-Servidor Capítulos: Conceptos básicos. Características y estructura de un cliente. Obtención de información. Algoritmos del cliente TCP y UDP. Ejemplos. Características y estructura

Más detalles

Redes de Computadores Nivel de Transporte: Introducción + UDP

Redes de Computadores Nivel de Transporte: Introducción + UDP es de Computadores Nivel de Transporte: Introducción + UDP Área de Ingeniería Telemática Dpto. Automática y Computación http://www.tlm.unavarra.es/ Hasta ahora Introducción a grandes rasgos > Internet

Más detalles

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO Definición y objetivos de un S.O Definición y objetivos del sistema operativo Estructura, componentes y servicios de un S.O Llamadas al sistema

Más detalles

Examen Final de Teoría. Grupo de teoría:

Examen Final de Teoría. Grupo de teoría: Preguntas Cortas (2 puntos) 1. Respecto a la optimización de gestión de memoria CoW, explica brevemente: a. Qué soporte hardware utiliza el sistema para poder implementarla? b. Qué permisos aplica el sistema

Más detalles

Bloque IV: El nivel de red. Tema 9: IP

Bloque IV: El nivel de red. Tema 9: IP Bloque IV: El nivel de red Tema 9: IP Índice Bloque IV: El nivel de red Tema 9: IP Introducción Cabecera IP Fragmentación IP Referencias Capítulo 4 de Redes de Computadores: Un enfoque descendente basdado

Más detalles

UNIVERSIDAD NACIONAL AUTONOMA DE NICARAGUA

UNIVERSIDAD NACIONAL AUTONOMA DE NICARAGUA UNIVERSIDAD NACIONAL AUTONOMA DE NICARAGUA FACULTAD REGIONAL MULTIDISCIPLINARIA ESTELI FAREM - ESTELI Asignatura: Teletratamiento de REDES I Prof. Manuel Rivas Chavarría CONTENIDOS: 1. Modelo de referencia

Más detalles

1_servicio_eco_stream_secuencial/eco_clie_tcp.c Tue Mar 09 09:57:

1_servicio_eco_stream_secuencial/eco_clie_tcp.c Tue Mar 09 09:57: 1_servicio_eco_stream_secuencial/eco_clie_tcp.c Tue Mar 09 09:57:01 2010 1 #include #include int s, leido; struct sockaddr_in dir; struct hostent *host_info; host_info=gethostbyname("localhost");

Más detalles

Computación de Alta Performance Curso 2009 PROGRAMACIÓN PARALELA EN LENGUAJE C

Computación de Alta Performance Curso 2009 PROGRAMACIÓN PARALELA EN LENGUAJE C Computación de Alta Performance Curso 2009 MECANISMO DE PROGRAMACIÓN PARALELA EN LENGUAJE C AGENDA Mecanismos a estudiar. Fork. Pipes y FIFOs. System V IPC: Semáforos. Cola de mensajes. Memoria compartida.

Más detalles

Redes de Computadores Más sobre TCP. Área de Ingeniería Telemática Dpto. Automática y Computación

Redes de Computadores Más sobre TCP. Área de Ingeniería Telemática Dpto. Automática y Computación Redes de Computadores Más sobre TCP Área de Ingeniería Telemática Dpto. Automática y Computación http://www.tlm.unavarra.es/ En clases anteriores Nivel de transporte UDP Introducción a TCP y transporte

Más detalles

Guía Beej de Programación en Redes

Guía Beej de Programación en Redes Guía Beej de Programación en Redes Uso de sockets de Internet Brian "Beej" Hall beej@piratehaven.org Copyright 1995-2001 por Brian "Beej" Hall Traducción al español a cargo de Damián Marqués Lluch

Más detalles

Tema 5. Entrada y Salida

Tema 5. Entrada y Salida Tema 5 Entrada y Salida Contenidos 1. Conceptos Previos de Entrada y Salida de Datos. 2. Funciones de Salida de Datos. putchar puts printf 3. Funciones de Entrada de Datos. getchar gets scanf 4. Ficheros

Más detalles

Lo guardamos como prog.c, lo compilamos y lo ejecutamos en la máquina tlm14 obteniendo el siguiente resultado:

Lo guardamos como prog.c, lo compilamos y lo ejecutamos en la máquina tlm14 obteniendo el siguiente resultado: Nomenclatura: En todas las cuestiones la dirección IP de un router llamado RX configurada en su interfaz número y lo indicaremos con IPRX,ify y la dirección MAC de ese interfaz, caso de ser Ethernet, con

Más detalles

Bloque III: El nivel de transporte. Tema 5: UDP y TCP

Bloque III: El nivel de transporte. Tema 5: UDP y TCP Bloque III: El nivel de transporte Tema 5: UDP y TCP Índice Bloque III: El nivel de transporte Tema 5: UDP y TCP UDP Cabecera UDP TCP Cabecera TCP Referencias Capítulo 3 de Redes de Computadores: Un enfoque

Más detalles

Juan de Dios Murillo Morera e-mail: jmurillo@una.ac.cr Santiago Caamaño Polini e-mail: scaamano@costarricense.cr INTRODUCCIÓN

Juan de Dios Murillo Morera e-mail: jmurillo@una.ac.cr Santiago Caamaño Polini e-mail: scaamano@costarricense.cr INTRODUCCIÓN UNICIENCIA 24 pp. 83-89 2010 IMPLEMENTACIÓN DE UN SERVIDOR FTP UTILIZANDO EL MODELO CLIENTE/SERVIDOR MEDIANTE EL USO DE SOCKETS EN LENGUAJE C UNIX CON EL FIN DE MEJORAR LOS TIEMPOS DE RESPUESTA EN LA RED

Más detalles

UDP Tema 3.- Nivel de transporte en Internet

UDP Tema 3.- Nivel de transporte en Internet UDP Tema 3.- Nivel de transporte en Internet Dr. Daniel Morató Redes de Computadores Ingeniero Técnico en Informática de Gestión, 2º curso Material adaptado del libro Com puter Networking: A Top Down Approach

Más detalles

SCHOOL OF HACKING 2015 RETO BUFFER OVERFLOW

SCHOOL OF HACKING 2015 RETO BUFFER OVERFLOW SCHOOL OF HACKING 2015 RETO BUFFER OVERFLOW INSTRUCCIONES Para la resolución del reto habrá que tener una máquina física o virtual Linux instalada al menos con las siguientes características: - Compilador

Más detalles