Departamento de Arquitectura y Tecnología de Computadores E.T.S. Ingeniería Informática Lección 2. La API de Sockets Julio Ortega Lopera. Curso 2004/2005.

Slides:



Advertisements
Presentaciones similares
Curso de Java Java – Redes Rogelio Ferreira Escutia.
Advertisements

TEMA1. Servicios de Red e Internet. Las Redes de Ordenadores.
TEMA1. Servicios de Red e Internet
Programación Interactiva Aplicaciones Cliente-Servidor
TEMA: SMTP – POP3 - IMAP.
I.T.E.S.R.C. Romina Tamez Andrea Martínez Ma. De Lourdes Solís
Trabajo Practico Grupo 1 NFS – TCP - UDP
INF 1400: Redes de Computadores
TEMA 2 Técnicas básicas de construcción de aplicaciones distribuidas
Sockets y Threads en JAVA
Sistemas Informáticos Distribuidos
SERVIDOR DNS Y WINS INTEGRANTES: Farroñan Beltran Brenher
SOCKETS INTRODUCCIÓN DEFINICIÓN TIPOS DE SOCKETS USO DE SOCKETS.
Ingeniería en Automática Industrial Software para Aplicaciones Industriales I Ingeniería en Automática Industrial Software para Aplicaciones Industriales.
Capa de transporte.
ARP Y RARP.
Servidor.pl #!/usr/local/bin/perl use Socket; ($port) $port = 2345 unless $port; Empleamos el módulo Socket, equivalente a las definiciones que.
MODELO TCP/IP Conectividad de extremo a extremo especificando como los datos deberian ser formateados,direccionados,transmitidos,enrutados y recibidos.
PROTOCOLOS Un protocolo es un conjunto de reglas que hacen que la comunicación en una red sea más eficiente.
Servidor de Batalla Naval.
Aspectos básicos de networking: Clase 5
TCP/IP V4 Redes de Computadoras uclv.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
INTEGRANTES: MARTINEZ MISHELL MEDINA ENID MENENDEZ EVELYN INTEGRANTES: MARTINEZ MISHELL MEDINA ENID MENENDEZ EVELYN.
Informática Ingeniería en Electrónica y Automática Industrial
Correo electrónico Internet
66.69 Criptografía y Seguridad Informática FIREWALL.
Teoría de Sistemas Operativos
Sockets.
Sistemas de Comunicación Magistral Nro. 8 Capa 4: Transporte Las funciones principales de la capa de transporte son transportar y regular el flujo de información.
Funciones Capa de Transporte
Conceptos avanzados Dr. Daniel Morató Area de Ingeniería Telemática Departamento de Automática y Computación Universidad Pública de Navarra
Introducción a los Sistemas Operativos
SOCKETS.
AXEL LATORRE GABRIEL VALENZUELA GIAN PAOLO ALMEIDA ROMMEL CHIFLA ISABEL VILLEGAS INTEGRANTES.
TCP/IP Introducción TCP/IP Introducción. TCP/IP vs OSI Aplicación Presentación Sesión Transporte Red Enlace Física Aplicación Acceso a la red Física TCP/IP.
CAPITULO 6 CAPA DE TRANSPORTE
En este capitulo se analizo la relación entre cliente y servidor de red habituales, como: HTTP FTP DNS DHCP Correo Electrónico INTRODUCCIÓN.
Javier Rodríguez Granados
ELO3091 Interfaz de Socket Agustín J. González ELO309.
Sockets programming. Tipos de datos. Tipos de datos mas usados en programas cliente-servidor: u-char Unsigned 8-bit character. u-short Unsigned 16-bit.
Universidad Autónoma de Colombia Comunicación de procesos Sockets Ingeniería de Sistemas Electiva Tecnológica.
MODELO TCP/IP Y EL MODELO OSI
CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO
Andres Marín L. Programación sockets en java.
Sistemas Operativos Comunicación de procesos a través de sockets.
LABORATORIO DE ESTRUCTURA DE COMPUTADORES II Desarrollo de aplicación Cliente-Servidor.
Conceptos de protocolos de red
Ing. Elizabeth Guerrero V.
4. Introducción a IP,TCP,UDP,ARP,ICMP
Protocolos de comunicación TCP/IP
Ing. Elizabeth Guerrero V.
Protocolos de Transporte y Aplicación. – TCP y UDP
Nivel de Transporte en Internet
PROTOCOLOS Modelo TCP/IP
Tipos de Redes y sus Topologias. ¿Qué es una red? Una red es la unión de dos o más ordenadores de manera que sean capaces de compartir recursos, ficheros,
Modelo OSI Para redes………
C1-Sistemas Distribuidos Concurrencia Varias componentes en una misma máquina-> Concurrencia Inteleaving (1 sola CPU, N procesos) Paralelo (N CPU, M procesos)
TECNOLOGIAS INTEGRADAS DE INTERNET. CIRLEY CASTILLO MÓNICA MANTILLA DERLY VARGAS Aprendices: ING. BLANCA NUBIA CHITIVA Instructora: CENTRO DE INDUSTRIA.
Comunicación a través de la red
MEMORIA DINÁMICA.
MODELO TCP/IP.
Protocolos de Transporte y Aplicación
Modelo OSI.
Planificación Curso UNIDAD 1. INTRODUCCIÓN A LOS SERVICIOS EN RED UNIDAD 2. SERVICIOS DHCP UNIDAD 3. SERVICIOS DNS UNIDAD 4. SERVICIOS DE ACCESO REMOTO.
¿Qué es una red? Una red es la unión de dos o más ordenadores de manera que sean capaces de compartir recursos, ficheros, directorios, discos, programas,
Protocolos de Transporte y Aplicación Javier Rodríguez Granados.
¿Qué es un socket? trab/satobigal/documentacion/beej/index.html Es una forma de comunicarse con otros programas usando.
Programación con sockets I
Transcripción de la presentación:

Departamento de Arquitectura y Tecnología de Computadores E.T.S. Ingeniería Informática Lección 2. La API de Sockets Julio Ortega Lopera. Curso 2004/2005 REDES DE ALTAS PRESTACIONES Y SUS APLICACIONES

INTRODUCCIÓN Los procesos UNIX pueden comunicarse. Si se dispone de una infraestructura de comunicaciones es posible la comunicación entre procesos UNIX en diferentes máquinas. Una posible infraestructura de comunicación puede ser una red TCP/IP sustentada sobre cualquier tecnología de red local, red de área amplia, o combinación de ambas. Se precisa una interfaz de programación de aplicaciones. Dos interfaces de programación de aplicaciones basadas en TCP/IP son los Sockets (UNIX de Berkeley, BSD), y TLI (Transport Level Interface, heredada de UNIX System V) Curso de Doctorado RAPyA (2004/05)

Aplicaciones Usuario Núcleo TCP/UDP IP PLIPSLIP Ethernet ARP API Sockets Capa de Transporte Capa de Red Capa de Enlace Sockets INET Sockets BSD Linux implementa los protocolos del conjunto TCP/IP. El acceso a los servicios de red se suele realizare a través de los sockets (es la interfaz entre entre el kernel y la capa de aplicación en las funciones de programación de red) Los sockets BSD son una interfaz de programación abstracta que se implementa sobre la capa de sockets INET, y ésta, a su vez, sobre la capa de transporte TCP/UDP (interfaz entre la capa de transporte TCP/IP y los protocolos que se definan por encima de ésta. Curso de Doctorado RAPyA (2004/05) SOCKETS SOBRE TCP/IP

COMUNICACIÓN MEDIANTE SOCKETS (I) La interfaz de Sockets es una interfaz de programación de aplicaciones (API) que permite la comunicación entre procesos en máquinas distintas a través de TCP/IP. Apareció dentro de la versión BSD de UNIX pero está disponible en otros UNIX (Linux) e incluso en los sistemas Windows de Microsoft (API Windows Sockets). Los sockets permiten la comunicación bidireccional, la gestión de las conexiones TCP y el control y ajuste de la pila TCP/IP. Son genéricos: pueden trabajar con otros protocolos distintos de la fanilia TCP/IP: Al definir un socket se puede distinguir entre dominios de comunicación (familia de protocolos utilizadas para intercambiar los datos), y familias de direcciones. Cada proceso, para comunicarse tiene un socket o conector, y cada conector está ligado a una dirección: un proceso puede enviar información a través de un socket propio al socket de otro proceso siempre que conozca la dirección del otro socket. La comunicación se realiza siempre entre una pareja de sockets gracias a una infraestructura de comunicaciones preexistente (constituida por dispositivos hardware y protocolos de comunicación implementados en software). Curso de Doctorado RAPyA (2004/05)

Un proceso puede crear un socket utilizando la función socket() #include int socket (int domain, int type, int protocol); Donde: domain = {PF_UNIX, PF_INET}; type = {SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_SEQPACKET}; SOCK_RAW = Sólo protocolos con privilegios de root para acceder directamente a la interfaz de red SOCK_SEQPACKET = Comunicación con datagramas fiable Protocol = Tipo de Protocolo. Si es 0 indica el protocolo por omisión (TCP para comunicación por omisión y UDP para comunicación con datagramas) Curso de Doctorado RAPyA (2004/05) COMUNICACIÓN MEDIANTE SOCKETS (II)

COMUNICACIÓN MEDIANTE SOCKETS (III) Dominios: Dominio UNIX (PF_UNIX): Comunicación de procesos en la misma máquina Dominio Internet (PF_INET): Comunicación entre computadores conectados mediante (TCP-UDP/IP) Direcciones Formato UNIX (AF_UNIX): Una dirección de socket es como un nombre de fichero Formato Internet (AF_INET): Una dirección de socket tiene tres campos -Dirección de red de la máquina (IP) -Protocolo TCP o UDP -Puerto correspondiente a TCP o UDP Estilo de Comunicación (comunicación con conexión o sin conexión): SOCK_STREAM (la comunicación pasa por las fases de apertura de conexión, intercambio de datos y cierre de conexión, el intercambio es fiable y orientado a octetos). Es como los pipes SOCK_DGRAM (no hay conexión, cada mensaje es autocontenido y no hay garantía de entrega). Curso de Doctorado RAPyA (2004/05)

COMUNICACIÓN MEDIANTE SOCKETS (IV) La API que definen los sockets tiene dos partes: -Un conjunto de funciones específicas de red. -Un procedimiento para hacer corresponder las operaciones de E/S estándar de Linux de forma uqe se pueda enviar y recibir datos con las mismas llamadas que se utilizan para los ficheros de E/S. El socket debe abrirse con la función socket() pero después pueden utilizarse las llamadas read() o write() para mover datos a través del socket abierto. Curso de Doctorado RAPyA (2004/05) Hay tres estructuras de datos importantes: - sk_buff (en /include/linux/skbuff.h) buffer que contiene el paquete de datos. En el código fuente de Linux se designan como skb (struct sk_buff *skb) - socket (en /include/linux/net.h) Estructura genérica (no específica de TCP/IP) que utiliza la capa de sockets para seguir la evolución de cada conexión abierta (hay una estructura socket por cada socket abierto con la llamada socket). Se designa usualmente como sock (struct socket *sock) - sock (en /include/net/sock.h) Estructura compleja que se accede desde el protocolo TCP (struct sock *sk)

COMUNICACIÓN MEDIANTE SOCKETS (IV) ReceptorEmisor Socket emisor Socket conocida ? El receptor asocia a su socket una dirección conocida. El emisor no necesita realizar esta asociación sendto(int s, const char *msg, int len, int flags, const struct sockaddr *to, int tolen) recfrom(int s, const char *buf, int len, int flags, const struct sockaddr *from, int fromlen) s (socket a través del que se lee o escribe); len (octetos a enviar o se desean recibir); flags (modo de recepción o envío, usualmente 0 para el modo normal); to (dirección del destinatario del datagrama); from (dirección del socket emisor, si no se conoce es NULL); tolen (longitud de la dirección de destino en octetos); fromlen (espacio de memoria reservado para la dirección del emisor). Devuelven el número de octetor enviados o recibidos, o –1 si ha habido error.

COMUNICACIÓN MEDIANTE SOCKETS (V) Curso de Doctorado RAPyA (2004/05) Cuando se utilizan los sockets como API, las direcciones de red se almacenan en una estructura sockaddr definida en el fichero linux/include/linux/in.h /* Structure describing an Internet (IP) socket address. */ #define __SOCK_SIZE__16/* sizeof(struct sockaddr)*/ struct sockaddr_in { sa_family_tsin_family;/* Address family*/ unsigned short intsin_port;/* Port number*/ struct in_addrsin_addr;/* Internet address*/ /* Pad to size of `struct sockaddr'. */ unsigned char__pad[__SOCK_SIZE__ - sizeof(short int) – sizeof(unsigned short int) - sizeof(struct in_addr)]; }; #define sin_zero__pad/* for BSD UNIX comp. -FvK*/

COMUNICACIÓN MEDIANTE SOCKETS (VI) Curso de Doctorado RAPyA (2004/05) TCP/IP considera que los bytes de los números de puerto y las direcciones de Internet se pasan en el orden de red (big endian). En Linux existen muchas funciones que facilitan la conversión de modos (man byteorder(3)) Direcciones de byte Little endian Big endian (orden de red) Dato: 4321

COMUNICACIÓN MEDIANTE SOCKETS (VII) Curso de Doctorado RAPyA (2004/05) int socket(int domain, int type, int protocol) Debe llamarse antes de que la apicación pueda utilizar las funciones de red y devuelve un identificador (socket) que puede utilizarse como un identificador de fichero (se puede utilizar read y write a ese descriptor) int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen) Permite asociar un puerto y una dirección (un punto de comunicación o endpoint) con un socket int listen(int s, int backlog) Especifica la longitud (backlog) de la cola de peticiones de conexión pendientes mientras el servidor espera que se complete accept

COMUNICACIÓN MEDIANTE SOCKETS (VIII) Curso de Doctorado RAPyA (2004/05) int accept(int s, struct sockaddr *addr, socklen_t addrlen) La llama la aplicación cuando está lista para aceptar una solicitus de conexión y devuelve un nuevo socket para cada conexiónl La dirección del que solicita la conexión se almacena en una estrructura sockaddr int connect(int s, const struct sockaddr *serv_addr, socklen_t addrlen) La utiliza una aplicación cliente para establecer una conexión TCP (SOCK_STREAM) con un servidor. La dirección y el puerto del servidor con el que se desea la conexión está en serv_addr int send(int s, const void *msg, size_t len, int flags), int sendto(int s, const void *msg, size_t len, int flags, const ……), int sendmsg(int s, const struct msghdr *msg, int flags) Funciones utilizadas para transmitir datos a través del socket s

COMUNICACIÓN MEDIANTE SOCKETS (IX) Curso de Doctorado RAPyA (2004/05) struct msghdr { void *msg_name; /* ptr to socket address structure */ socklen_t msg_namelen; /* size of socket address structure */ struct iovec *msg_iov; /* scatter/gather array */ size_t msg_iovlen; /* # elements in msg_iov */ void *msg_control; /* ancillary data */ socklen_t msg_controllen; /* ancillary data buffer length */ int msg_flags; /* flags on received message */ }; La estructura struct iovec está definida en linux/include/linux/uio.h msg_iov es un array de buffers de datos para ser enviados o para recibir datos, y msg_iovlen es el número de buffers a los que apunta msg_iov. Los otros campos se utilizan para pasar información de control a los protocolos de las capas inferiores

COMUNICACIÓN MEDIANTE SOCKETS (X) Curso de Doctorado RAPyA (2004/05) int recv(int s, void *buf, size_t len, int flags) int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) int recvmsg(int s, struct msghdr *msg, int flags) Son funciones utilizadas para recibir un mensaje del socket especificado. Se bloquean hasta los datos que se especifican están disponibles y devuelven la longitud de datos leídos del socket Al terminar recvfrom se tiene la dirección y longitud del emisor en from y fromlen int getsockopt(), int setsockopt() Se utilizan para determinar o fijar las opciones de los protocolos utilizados para la comunicación

EJEMPLO DE COMUNICACIÓN MEDIANTE SOCKETS (I) Ejecución del Ejemplo de Datagrama en Internet Se crean los ejecutables correspondientes al emisor y al receptor. Se lanza el receptor en background (nombre_receptor &) y escribirá en pantalla “puerto de receptor  ” y su número Se lanza el emisor después, facilitándole el nombre del computador del receptor y el número de puerto asignado a su socket El receptor debería escribir el mensaje “  Éste es el mensaje” Después, los dos programas terminan Curso de Doctorado RAPyA (2004/05)

Datagramas en Internet: Receptor Las direcciones AF_INET se almacenan en estructuras sockaddr_in struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr /* Dir. IP */ char sin_zero[8]; }; El primer campo es AF_INET, el segundo es el número de puerto (UDP por ser SOCK_DGRAM), el tercero es la dirección IP, y el último es relleno. La dirección IP del socket es INADDR_ANY corresponde a de la máquina (al ejecutar bind se asociará al socket). Al poner el puerto a 0 se indica que cualquier puerto libre es el que se asigna al socket. int bind (int s, const struct sockaddr *name, int namelen); Asocia un socket con un nombre (argumentos: un descriptor de socket; una estructura sockaddr; y el tamaño de la estructura con la dirección) getsockname() proporciona la dirección de socket en la estructura name Recepción EJEMPLO DE COMUNICACIÓN MEDIANTE SOCKETS (II)

Datagramas en Internet: Emisor #include El emisor consigue la dirección del receptor a partir de la línea de comandos: el nombre de la máquina (argv[1]) y el puerto por el que espera el receptor (argv[2]) (mecanismo poco elegante, otra posibilidad es utilizar un puerto fijo en el receptor) El nombre de la máquina se convierte a su dirección IP mediante gethostbyname() El emisor no tiene que asignar su dirección a un socket mediante bind(), ya que el sistema operativo se la asigna automáticamente (la dirección IP de la máquina local y un puerto libre) si no se le ha asignado Después se proceden a llemar todos los campos con los datos del receptor y se envía con sendto() EJEMPLO DE COMUNICACIÓN MEDIANTE SOCKETS (III)

REFERENCIAS Curso de Doctorado RAPyA (2004/05) Herbert, T.F.:”The Linux TCP/IP Stack: Networking for Embedded Systems”. Charles River Media, 2004 (Sección 5.6)