Tema 4: Sockets: Un interfaz con TCP/IP



Documentos relacionados
Tema 4 Sockets: Un interfaz con TCP/IP

Introducción de Sockets en C.

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

TELEPROCESO Y SISTEMAS DISTRIBUIDOS

Mecanismos IPC: sockets

Estructuras y funciones de programación de sockets.

Migrando aplicaciones a IPv6

Programación con Sockets

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

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

COMUNICACIÓN ENTRE PROCESOS SOCKETS

SOCKET S. Alberto Castro Rojas

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

Adaptación de aplicaciones a IPv6

Tema 4.1: - TRANSPORTE-

Programación C/S Básica

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

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

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

Interfaz de Socket. Agustín J. González ELO309 ELO309 1

Redes (IS20) Ingeniería Técnica en Informática de Sistemas. CAPÍTULO 8: El nivel de transporte en Internet

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

Programación con sockets

Analista Universtiario en Sistemas. Sistemas Operativos. IPC - Sockets SOCKETS

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

Problemas de Redes de Computadores. Conjunto de problemas 1

PROGRAMACIÓN CON SOCKETS

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

Nivel de Transporte en Internet

DESARROLLO DE APLICACIONES DISTRIBUIDAS. SOCKETS en UNIX

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

Diseño de aplicaciones distribuidas ÍNDICE

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

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

Características de un lenguaje ideal para robótica

Programación de aplicaciones distribuidas usando sockets

Arquitectura de Redes y Servicios de Telecomunicación

Boletín 7- Sockets. Departamento de Lenguajes y Sistemas Informáticos

BOLETIN 8 INDICE. ordenación de bytes. conversión de nombre y direcciones.

Curso de Redes Computadores 1 Tema 3 Introducción a la capa de transporte. Interfaz de programación en redes. Sockets.

Programación C/S Básica

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

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

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

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

ARQUITECTURAS CLIENTE/SERVIDOR

Arquitecturas cliente/servidor

TimeOut RTT medido 1 5 seg. 2*5= ,7 3 TimeOut 3 TimeOut 3 0, ,35 5 0,44

Introducción Mensajes UDP. Asignación de puertos a procesos. Bibliografía [COM06] Internetworking with TCP/IP, Cap. 11.

SOCKETS BASADOS EN CONEXIÓN (SOCK_STREAM)

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

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

Sistemas Distribuidos. Sockets

Programación de sockets

Red LSUB. 4 de marzo de 2015 GSYC

Sistemas Operativos Distribuidos

Programación en red sobre TCP/IP Interface sockets

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

Sockets Básicos. Sockets Básicos

COMUNICACIÓN Sistemas Distribuidos

Sistema Cliente Servidor Con Sockets

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...

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

INTRODUCCIÓN A LA PROGRAMACIÓN CON SOCKETS. Celeste Campo Carlos García Rubio

Conceptos básicos de redes TCP/IP

Comunicación entre Procesos y Sockets

Capa de TRANSPORTE. Ing. José Martín Calixto Cely Original: Galo Valencia P.

Servidor FTP. Ing. Camilo Zapata Universidad de Antioquia

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

Estructuras y funciones de programación de sockets.

SISTEMAS DE COMUNICACIONES DE DATOS

Nivel aplicación Interacción Cliente Servidor. ELO322: Redes de Computadores Agustín J. González

Práctica 3 de Redes de Área Local Cliente y Servidor de ficheros concurrente

PRÁCTICA 4 PASO DE MENSAJES

Bloque IV: El nivel de red. Tema 10: Enrutamiento IP básico

Tema 2. Comunicación entre procesos

WSAEADDRNOTAVAIL (10049) Dirección solicitada no se puede asignar.

Tema 3: COMUNICACIÓN ENTRE PROCESOS

TEMA 2 Técnicas básicas de construcción de aplicaciones distribuidas. Universidad de Oviedo / Dpto. de Informática

Práctica GESTIÓN Y UTILIZACIÓN DE REDES LOCALES. Curso 2001/2002. TCP/IP: protocolo TCP

Servicios de Internet

Tema 4. Gestión de entrada/salida

Práctica 3: Estudio de los protocolos HTTP, SMTP, POP3 e IMAP mediante un analizador de red: Wireshark

Aplicaciones Cliente/Servidor en Gambas Prof: Mileti, P.

Desarrollo de Aplicativos con winsockets

Arquitecturas cliente/servidor

1. Definición de puerto 2. Sockets 3. Conceptos cliente/servidor 4. Definición de Stream 5. Concurrencia, multiprogramación y multitarea 6.

Lab 01: Programación de Sockets en TCP

CFGM. Servicios en red. Unidad 2. El servicio DHCP. 2º SMR Servicios en Red

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

TEMA 5: EL TELNET SERVICIOS DE COMUNICACIONES

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET

Juan de Dios Murillo Morera Santiago Caamaño Polini INTRODUCCIÓN

INTRODUCCION. Tema: Protocolo de la Capa de aplicación. FTP HTTP. Autor: Julio Cesar Morejon Rios

PRACTICA CAPITULO 2 MODULO 1 PROTOCOLOS Y LA FUNCIONALIDAD DE LA CAPA DE APLICACIÓN

3.INSTALACIÓN Y CONFIGURACIÓN DE LOS EQUIPOS DE RED

Práctica 1: sockets en Python

Introducción a Sockets en Linux

S C TP: Una alternativa al protocolo TC P s obre Linux. Ing. Isaac Fernández Baca Peña

Análisis Experimental de la Transmisión de Datos

Transcripción:

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. Atributos de los sockets. Bibliografía [COM06] Internetworking with TCP/IP, Cap. 21 Arquitectura de Redes y Servicios de Telecomunicación (ARST)

Utilizan los servicios de TCP/IP. Servicio con conexión: TCP. Servicio sin conexión: UDP. Diseño basado en el modelo cliente-servidor. Por cada aplicación tendremos el proceso del cliente y el del servidor (ambos utilizan el interfaz de los sockets para comunicarse). Host A Sockets S.O. Cliente Www Hardware Las aplicaciones en Internet. Internet Host B Servidor Www Sockets S.O. Hardware 2

Las aplicaciones en Internet. El cliente suele ser usado por el usuario, el cual dirige las peticiones de servicio hacia el servidor seleccionado. Ej.: Clientes WWW: NetScape, IExplorer, Mozilla, etc... El servidor debe permanecer siempre en marcha esperando las peticiones de servicio de los clientes en un puerto bien-conocido. Ej.: Servidores WWW: IIS (NT y W2000), NCSA, Apache, etc. 3

Orígenes: Introducir TCP/IP en un sistema BSD UNIX (~1980). Necesidad de un interfaz entre las aplicaciones y una arquitectura de red. Sockets: Un interfaz genérico. Interfaz estándar. Portabilidad de aplicaciones. Diferentes pilas de protocolos. Define una librería de primitivas que acceden a los servicios de las pilas de protocolos de un host. Introducción. Conceptos básicos. Ftp TCP/IP Www Socket Interface Driver News IPX/SPX Network hardware User app. NETBIOS 4

Introducción. Conceptos básicos. Aunque el interfaz de los sockets fue escrito inicialmente para máquinas UNIX, hoy en día se ha llevado a otros S.O s (Mac, MsWin, OS2, etc.). En todos ellos se describe un interfaz básico idéntico al original de UNIX*, Las mismas primitivas con los mismos parámetros. Tipos y estructuras de datos idénticos. favoreciendo la portabilidad de aplicaciones. En lo que sigue, trabajaremos sobre un sistema UNIX con la pila de protocolos TCP/IP. (*) Con algunas excepciones 5

Ap. usuario TCP/IP Interfaz de sockets IPX/SPX Driver FTP Hardware de red Qué es un socket? Es un punto de acceso (SAP) que una aplicación puede crear para acceder a los servicios de comunicación que ofrecen la pilas de protocolos. NETBIOS WWW 6

Definición: #include <sys/socket.h> Dirección de un socket. Estructura de datos que permite a las aplicaciones definir una dirección (endpoint) única en Internet. Para comunicarse con otras aplicaciones, es necesario definir la dirección del socket que se va a utilizar. Formato genérico de una dirección de socket. struct sockaddr { u_short sa_family; /* Tipo de dir. */ char sa_data[14]; /* Valor de la dir. */ } 7

#include <netinet/in.h> Dirección de un socket TCP/IP Para cada familia de protocolos se define un formato de dirección de socket específico. En concreto, para TCP/IP: struct sockaddr_in { u_short sin_family; /* AF_INET */ u_short sin_port; /* Nº puerto */ struct in_addr sin_addr; /* Dir. IP */ char sin_zero[8]; } struct in_addr { u_long s_addr; /* Direc. IP */ } 8

SOCKET. #include <sys/types.h> #include <sys/socket.h> Llamadas básicas de los sockets. Primitiva que crea un socket con el fin de utilizar los servicios de un determinado protocolo de una familia de protocolos residente en el host. int socket (int family, int type, int protocol); Family: AF_INET, AF_UNIX, AF_XNS, AF_APPLETALK, etc. Type: SOCK_STREAM (TCP), SOCK_DGRAM (UDP), SOCK_RAW (ICMP,IP). Protocol: IP_PROTO_TCP, IP_PROTO_UDP, IP_PROTO_ICMP, IP_PROTO_RAW. 9

int sd; /* variable que guardará el descriptor del socket */ sd = socket (AF_INET, SOCK_DGRAM, 0); Llamada SOCKET La primitiva socket devuelve un entero positivo que corresponde al descriptor del socket creado. En caso de error, devuelve -1 y en la variable global errno se describe el tipo de error (Común a todas las llamadas del interfaz) El descriptor de socket que devuelve esta llamada, se utilizará al hacer una operación sobre él (enviar datos, establecer una conexión TCP, etc ), distinguiendolo de otros sockets. Ejemplo de uso: 10

#include <sys/types.h> #include <sys/socket.h> Llamada BIND. Asigna una dirección local a un socket recién creado (llamada socket). Antes de utilizar un socket es necesario asignarle una dirección que lo identifique. int bind (int sockfd, struct sockaddr* myaddr, int addrlen); sockfd: Descriptor de socket al que vamos a asignar una dirección. myaddr: Puntero a una estructura donde se guarda la dirección. addrlen: Tamaño (en bytes) de la dirección de socket (INET = 16 ). 11

Llamada BIND. Los servidores definirán una dirección de socket en la que figure el puerto bien-conocido. Los clientes pueden especificar uno, aunque normalmente relegan la elección de puerto al sistema (ver ejemplo). Ejemplo de uso: int sd, err; sockaddr_in myaddr; /* variable de tipo dirección de socket INET*/ sd = socket (AF_INET, SOCK_DGRAM, 0); myaddr.sin_family = AF_INET; myaddr.sin_addr.s_addr = INADDR_ANY; myaddr.sin_port = 0; err = bind (sd, (struct sockaddr *) &myaddr, sizeof(myaddr)); 12

#include <sys/types.h> #include <sys/socket.h> Llamada CONNECT. Los clientes la utilizan para establecer una conexión (asociación) con un servidor. Devuelve un entero indicando el resultado de la operación. -1 : Error en el intento de conexión (errno). 0 : Conexión establecida. int connect (int sd, struct sockaddr* destaddr, int addrlen); sd: Descriptor de socket sobre el que realizaremos la conexión. destaddr: Dirección de socket del servidor. addrlen: Tamaño (en bytes) de la dirección de socket (INET = 16 ). 13

Conexión o asociación: Características de la llamada CONNECT Realiza internamente un BIND del socket. Obligatoria para clientes TCP. Llamada CONNECT. {Protocolo, IP origen, Puerto origen, IP destino, Puerto destino} Puede usarse con sockets de tipo SOCK_DGRAM estableciendo una asociación entre cliente y servidor. UDP no realiza acción alguna. Tras el connect, se pueden enviar los datos sin identificar el destino (asociación establecida). Sólo se aceptarán datagramas de la dirección indicada. 14

Ejemplo de uso: #define host 158.42.53.99 /* Dir IP del servidor */ #define port 7 /* Puerto donde se encuentra el servidor de ECHO */ int sd, err; struct sockaddr_in servaddr; sd = socket (AF_INET, SOCK_STREAM, 0); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_aton(host); servaddr.sin_port = htons(port); Llamada CONNECT. err = connect (sd, (struct sockaddr *) &servaddr, sizeof(servaddr)); if (err < 0) { printf ( Can t connect to %: %s \n",host,sys_errlist[errno]); exit (-1); } 15

#include <sys/socket.h> int listen (int sd, int nconn); Llamada LISTEN. Pasa el socket a modo pasivo, dispuesto a encolar peticiones de conexión. Se suele usar después de SOCKET y BIND, y justo antes de ACCEPT (servidores). Sólo para sockets de tipo SOCK_STREAM (TCP). sd: Descriptor de socket en el que aceptaremos peticiones de conexión. nconn: Tamaño de la cola donde se almacenan las peticiones de conexión entrantes (Normalmente 5). 16

#include <sys/types.h> #include <sys/socket.h> Llamada ACCEPT. Espera la llegada de una petición de conexión sobre el socket previamente inicializado. Sólo para servidores TCP. Se usa tras SOCKET, BIND y LISTEN. int accept (int sd, struct sockaddr *addr, int *addrlen); sd: Descriptor de socket donde esperaremos peticiones de conexión. addr: Devuelve la dirección del cliente. addrlen: Tamaño en bytes de la dirección del cliente. accept devuelve un entero, que en caso de éxito, corresponde al descriptor de un nuevo socket asociado a la conexión establecida. 17

Características de la llamada ACCEPT. Cuando se invoca, bloquea el programa hasta que llegue una petición de conexión sobre el socket. Si se tienen peticiones encoladas (LISTEN) intenta establecer una conexión con la primera. El socket que se pasa como argumento (socket maestro) no tiene definida una asociación, mientras que el nuevo socket que devuelve ACCEPT si que tiene definida la asociación entre ambos procesos. Socket maestro: { TCP, IP fuente, Puerto fuente, *, * } Nuevo socket: { TCP, IP fuente, Puerto fuente, IP dest., Puerto dest. } 18

Si el servidor es : M Servidor S Servidor Iterativo Características de la llamada ACCEPT. Iterativo, tras atender una conexión de cliente, la cierra y vuelve a esperar una nueva conexión sobre el socket maestro. Concurrente, creará un nuevo proceso por cada conexión que se establezca (pasándole el nuevo socket), mientras que utiliza el socket maestro para recibir nuevas peticiones de conexión. Proceso maestro M Procesos esclavos Procesos esclavos Procesos esclavos Servidor Concurrente S S S 19

#define port 7 /* Puerto bien-conocido del servicio de ECHO */ int sd, newsd, err, addrlen; struct sockaddr_in servaddr, cliaddr; Ejemplo de uso de ACCEPT sd = socket (AF_INET, SOCK_STREAM, 0); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = INADDR_ANY; servaddr.sin_port = htons(port); err = bind (sd, (struct sockaddr *) &servaddr, sizeof(servaddr)); err = listen (sd, 5); for (;;) { newsd = accept (sd, (struct sockaddr *) &cliaddr, &addrlen); if (newsd < 0) err_exit ( Error estableciendo la conexión ); if (fork () == 0) { (* Nuevo proceso *) close (sd); echo (newsd); (* Función que realiza el servicio de ECHO *) exit (0); } close (newsd); (* Proceso padre *) } 20

Llamadas de transferencia de datos Existen un conjunto de llamadas que se usan para el envío y recepción de datos a través de un socket: Recepción: read, recv, y recvfrom Transmisión: write, send y sendto Estas llamadas devuelven: El número de octetos que realmente se han leído o escrito. Devuelven un -1 cuando se produce un error. Las lecturas read y recv devuelven un cero cuando se encuentra con la marca fin de fichero (cierre conexión remota). Las lecturas eliminan la información del buffer interno del socket, pasándola al buffer de la aplicación. Son bloqueantes : No devuelven el control hasta que no se ha completado la operación. Es posible modificar este comportamiento en recepción con la función de carga PUSH de TCP. 21

Características de read y write Son las llamadas al sistema clásicas. Se utilizan sobre sockets conectados. No es necesario indicar la dirección del otro extremo #include <sys/types.h> #include <unistd.h> int read (int sd, char *buff, size_t count); int write (int sd, char *buff, size_t count); sd: Descriptor de socket sobre el que vamos a leer/escribir. buff: Buffer donde están los datos a enviar/recibir. count: Número de octetos que queremos leer/escribir. read y write 22

Características muy similares a las anteriores. Se usan para realizar envíos o lecturas de datos con condiciones especiales. #include <sys/types.h> #include <sys/socket.h> send y recv int send (int sd, void *buff, int count, int flags); int recv (int sd, void *buff, int count, int flags); sd, buff y count: Mismo significado que Read y Write. flags: Indican un envío o recepción especial. Así: 0 : Envío normal (equivalente a Read/Write). MSG_OOB: Envío de datos urgentes. MSG_PEEK: Para recoger datos sin eliminarlos del buffer 23

#include <sys/types.h> #include <sys/socket.h> sendto y recvfrom Se utilizan sobre sockets no conectados (UDP). Es necesario especificar la dirección del otro extremo. int recvfrom (int sd, void *buff, int len, int flags, struct sockaddr *from, int *fromlen); int sendto (int sd, void *buff, int len, int flags, struct sockaddr *to, int tolen); sd, buff, count y flags: Mismo significado que las anteriores. from/to : Direcciones de socket del otro extremo. fromlen/tolen: Tamaño en bytes de la dirección de socket. 24

Elimina un socket. #include <sys/unistd.h> int close (int sd); sd: Descriptor de socket que queremos eliminar. Llamada CLOSE Si el socket es de tipo SOCK_STREAM, se insta a TCP para iniciar el cierre de conexión. Si todavía quedan datos por enviar en los buffers, TCP trata de enviarlos antes de indicar el cierre. En cualquier caso, elimina el socket y todos los recursos asociados: Buffers, puerto asignado, etc. 25

#include <sys/socket.h> int shutdown (int sd, int howto); sd: Descriptor de socket que queremos cerrar. howto: 0 se cierra el stream de entrada. 1 se cierra el stream de salida. 2 se cierran los dos streams. Llamada SHUTDOWN Sólo para sockets de tipo SOCK_STREAM. Realiza un cierre de conexión más detallado: En un determinado sentido o en ambos. No elimina el socket. 26

Diferencias entre BSDSock y WinSockets Inicialización: WSAStartup(...) y WSACleanUp() Tipo SOCKET. Constantes predefinidas INVALID_SOCKET y SOCKET_ERROR Obtención de error: WSAGetLastErr () Algunas primitivas cambian su nombre: Closesocket() en vez de close(). Ioctlsocket() en vez de ioctl(). Otras no existen: read y write (en su lugar send y recv) 27

Asignación de puertos a procesos. Las aplicaciones tienen dos alternativas: Pedirle al sistema que asigne un puerto determinado al socket que va a utilizar (asignación estática). La usan los servidores (puertos bien-conocidos). Relegar la elección del puerto al sistema operativo (asignación dinámica). En general, la usan los clientes (BIND, port = 0) El sistema operativo dispone de un espacio de direcciones de puerto que asigna dinámicamente a los procesos que utilizan esta alternativa. Se disponen de 64K direcciones de puerto Los sistemas UNIX dividen el espacio de direcciones de puerto. 1 1024 5000 65535 Puertos bien-conocidos PUERTOS RESERVADOS Puertos asignados automáticamente por el S.O. Puertos libres 28

#include <sys/types.h> #include <sys/socket.h> Atributos de los sockets Son un conjunto de parámetros asociados a un socket que definen su comportamiento. Los atributos se agrupan en clases. Las aplicaciones pueden consultar o modificar los atributos de un socket a través de las llamadas: Getsockopt() y Setsockopt(). int getsockopt(int sd, int class, int optname, void *optval, int *optlen); int setsockopt(int sd, int class, int optname, void *optval, int optlen); 29

Clase Nombre Descripción Get Set Bool IPPROTO_IP IP_OPTIONS Opciones de la cabecera IP Si Si No IPPROTO_TCP SOL_SOCKET TCP_MAXSEG Tamaño máximo del segmento TCP Si No No TCP_NODELAY Envíos de segmentos sin retraso. Si Si Si SO_BROADCAST Permite el envío de difusiones Si Si Si SO_DEBUG Activa la recogida de datos estadísticos Si Si Si SO_ERROR Entrega el último código de error. Si No No SO_KEEPALIVE Mecanismo que mantiene la conexión. Si Si Si SO_LINGER Alternativa en el cierre de conexión. Si Si No SO_RCVBUF Tamaño del buffer de recepción. Si Si No SO_SNDBUF Tamaño del buffer de transmisión. Si Si No SO_TYPE Indica el tipo de socket. Si No No SO_REUSEADDR Permite reutilizar direcciones de puerto. Si Si Si SO_OOBINLINE Atributos de los sockets Deja los datos urgentes en el buffer principal. Si Si Si 30