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) Proveer servicios de clientes y servidores? 2
Esquema 3
Máquina que ofrece un servicio que puede ser accedido a través de la la red Esquema 3
Máquina que ofrece un servicio que puede ser accedido a través de la la red Esquema Programa que pide información a un servidor y espera por la la respuesta 3
Funciones necesarias Especificación de comunicaciones locales y remotas de los endpoints Inicio de conexión Espera por conexión, entrante Envío y recepción de data Termino de la conexión, adecuadamente Manejo de errores 4
Esquema Espera la la conexión de un cliente (espera pasiva) Iniciador de la la conexión 5
TCP/IP TCP/IP no especifica una API específica Hay varias APIs para usar con TCP/IP: Sockets TLI, XTI Winsock MacTCP 6
p.e. FTP, e-mail, etc. (Aplics. /) TCP/IP p.e. TCP/UDP p.e. Ethernet Capa de Aplicación Capa de Transporte Capa de Red Capa de Enlace de Datos Capa Física p.e. IP 7
Por ejemplo: Aplicación cliente o servidora Dirección hacia donde se transmite Puerto por donde se recibe, etc. TCP/IP Datos Capa de Aplicación Capa de Transporte Capa de Red Capa de Enlace de Datos Capa Física 8
Network Application Programming Interface (API) Los servicios que provee el sistema operativo para servir de interfaz entre las aplicaciones y los softwares de protocolo Application Network API Protocol A Protocol B Protocol C 9
Network API Generic Programming Interface. Soporte de mensajes y conexiones orientadas a la conexión Trabajo con servicios I/O (cuando esto tiene sentido) Independencia del sistema operativo 10
Network API Network API Application Programme Interface Capa de Aplicación Network API Capa de Transporte Capa de Red Capa de Enlace de Datos Capa Física 11
Berkeley Sockets Genéricos Soporte de múltiples familias de protocolos Representación independiente de direcciones Uso de interfaces I/O existentes, lo más posible 12
Socket Un socket es una representación abstracta de un endpoint de comunicación Los sockets UNIX trabajan con servicios I/O tal como los archivos, pipes y FIFOs Sockets (claramente) necesitan: establecer una conexión especificar las direcciones de los endpoints 13
Socket La mayoría de los sistemas han adoptado Socket API (disponible en la mayoría de los S.O., p.e. Linux, UNIX, Windows) Capa de Aplicación Network API Capa de Transporte Capa de Red Capa de Enlace de Datos Capa Física 14
Socket Capa de Aplicación Socket API Capa de Transporte En algunos S.O. las funciones de Socket API están integradas en el S.O. (p.e. BSD UNIX) 15
Unix Descriptor Table Descriptor Table 0 1 2 3 4 Data structure for file 0 Data structure for file 1 Data structure for file 2 16
Socket Descriptor Data Structure Descriptor Table 0 1 2 3 4 Family: PF_INET Service: SOCK_STREAM Local IP: 111.22.3.4 Remote IP: 123.45.6.78 Local Port: 2249 Remote Port: 3726 17
Socket API (sockets) Los sockets operan según el paradigma open-read-write-close (UNIX I/O). open Se crea el socket Análogamente al trabajo con archivos, open retorna un descriptor a un socket. 18
Creando un Socket int socket(int family,int type,int proto); family especifica la familia de protocolos (PF_INET para TCP/IP). type especifica el tipo de servicio (SOCK_STREAM, SOCK_DGRAM). protocol especifica el tipo de protocolo (0 usualmente significa default). 19
Socket API (sockets) Los sockets operan según el paradigma openread-write-close (UNIX I/O). read Se leen los datos entrantes al al socket 20
Socket API (sockets) Los sockets operan según el paradigma openread-write-close (UNIX I/O). read Análogamente al trabajo con archivos, read lee los datos que llegan al socket. 20
Socket API (sockets) Los sockets operan según el paradigma open-read-write-close (UNIX I/O). write Se escriben datos en el el socket 21
Socket API (sockets) Los sockets operan según el paradigma open-read-write-close (UNIX I/O). write Análogamente al trabajo con archivos, write escribe datos en el socket. 21
Socket API (sockets) Los sockets operan según el paradigma openread-write-close (UNIX I/O). close Análogamente al trabajo con archivos, close indica que se ha terminado de usar el socket. 22
Ambos crean un socket para comunicarse a través de la red 24
Ambos crean un socket para comunicarse a través de la red descriptor = socket (protofamily, type, protocol) 24
Familia de protocolos a usar en la comunicación Ambos crean un socket para comunicarse a través de la red descriptor = socket (protofamily, type, protocol) 24
Ambos crean un socket para comunicarse a través de la red Familia de protocolos a usar en la comunicación AF_UNIX: Comunicación interna AF_INET: TCP/IP AF_APPLETALK: Apple Talk AF_NS: Xerox NS AF_CCITT: Protocolos CCITT, X25, etc. AF_SNA: IBM SNA AF_DECnet: DECnet descriptor = socket (protofamily, type, protocol) 24
Ambos crean un socket para comunicarse a través de la red Tipo de comunicación que usará el socket descriptor = socket (protofamily, type, protocol) 25
Ambos crean un socket para comunicarse a través de la red Tipo de comunicación que usará el socket SOCK_DGRAM: Modo no conectado SOCK_STREAM :: Modo conectado SOCK_RAW :: Acceso a protocolos de más bajo nivel (p.e. IP). Superusuario. SOCK_SEQPACKET: Para comunicaciones con Xerox NS. descriptor = socket (protofamily, type, protocol) 25
Ambos crean un socket para comunicarse a través de la red Protocolo de transporte que usará el socket descriptor = socket (protofamily, type, protocol) 26
Ambos crean un socket para comunicarse a través de la red descriptor = socket (protofamily, type, protocol) 0: 0: protocolo por defecto Protocolo de transporte que usará el socket 26
Ambos crean un socket para comunicarse a través de la red descriptor = socket (protofamily, type, protocol) Por ejemplo: sock=socket(pf_inet,sock_stream,0) 27
Ambos crean un socket para comunicarse a través de la red descriptor = socket (protofamily, type, protocol) Familia TCP/IP Por ejemplo: sock=socket(pf_inet,sock_stream,0) 27
Ambos crean un socket para comunicarse a través de la red descriptor = socket (protofamily, type, protocol) Familia TCP/IP Modo conectado Por ejemplo: sock=socket(pf_inet,sock_stream,0) 27
Ambos crean un socket para comunicarse a través de la red descriptor = socket (protofamily, type, protocol) Familia TCP/IP Por ejemplo: Modo conectado Protocolo de transporte por defecto (TCP) sock=socket(pf_inet,sock_stream,0) 27
bind (descriptor, dir_local, largo_dir_local) 28
Descriptor del socket retornado por la función socket bind (descriptor, dir_local, largo_dir_local) 28
El El servidor asocia el el descriptor del socket al al puerto por el el que recibirá las peticiones y a la la dirección local Descriptor del socket retornado por la función socket bind (descriptor, dir_local, largo_dir_local) 28
El El servidor asocia el el descriptor Estructura que del contiene socket la al al dirección puerto por el el que local: recibirá las peticiones y a la la 0 16 dirección 31 local Familia de Dirs. Dir_Octetos 0-1 Dir_Octetos 2-5 Dir_Octetos 6-9 Dir_Octetos 10-13 bind (descriptor, dir_local, largo_dir_local) 29
El El servidor asocia el el descriptor Estructura que del contiene socket la al al dirección puerto por el el que local: recibirá las peticiones y a la la 0 16 dirección 31 local Familia de Dirs. Dir_Octetos 0-1 Dir_Octetos 10-13 struct sockaddr { u_short sa_family; char sa_data[14]; Dir_Octetos 2-5 Dir_Octetos 6-9 bind (descriptor, dir_local, largo_dir_local) }; }; 29
Comunicación usando sockets El El servidor asocia el el descriptor del socket al al puerto por el el que recibirá las peticiones y a la la dirección local Largo de la dirección local (medido en bytes) bind (descriptor, dir_local, largo_dir_local) 30
El El servidor queda en espera... listen(descriptor, largo_cola) 31
El El servidor queda en espera... Descriptor del socket listen(descriptor, largo_cola) 31
El El servidor queda en espera... Especifica el largo de la fila de peticiones de clientes esperando ser atendidas listen(descriptor, largo_cola) 31
Resumen actividades hechas por el servidor (hasta ahora): Crea un socket (socket) Le asocia un puerto y una dirección local (bind) Queda en espera (listen) 32
Y el cliente... una vez creado el socket... 33
Se conecta (sólo si si se trata de un servicio SOCK_STREAM) al al servidor a través de su socket. Para esto le le asocia el el puerto del servidor y su dirección.. connect (descriptor, dir_destino, largo_dir_destino) 34
Se conecta (sólo si si se trata de un servicio SOCK_STREAM) al al servidor a través de su socket. Para esto le le asocia el el puerto del servidor y su dirección.. Descriptor del socket retornado por la función socket connect (descriptor, dir_destino, largo_dir_destino) 34
Estructura que Se contiene conecta la dirección (sólo si si se trata de destino: un servicio SOCK_STREAM) al al 0 servidor 16 a través de 31 su socket. Familia de Dirs. Para Dir_Octetos esto le le asocia 0-1el el puerto del Dir_Octetos servidor 2-5 y su dirección. Dir_Octetos 6-9 Dir_Octetos 10-13 connect (descriptor, dir_destino, largo_dir_destino) 35
Se conecta (sólo si si se trata de un servicio SOCK_STREAM) al al servidor a través de su socket. Para esto le le asocia el el puerto del servidor y su dirección. Largo de la dirección destino(medido en bytes) connect (descriptor, dir_destino, largo_dir_destino) 36
Resumen actividades hechas por el cliente (hasta ahora): Crea un socket (socket) Le asocia un puerto y una dirección destino (connect, sólo en caso de un servicio con conexión) 37
Se inicia la la transferencia de información read, readv, recv, recvfrom, recvmsg write, writev, send, sendto, sendmsg 38
Se inicia la la transferencia de información write, writev, send, sendto, sendmsg read, readv, recv, recvfrom, recvmsg 39
RESUMEN socket bind listen SERVIDOR socket connect CLIENTE write 40
RESUMEN socket bind listen read SERVIDOR socket connect write CLIENTE 40
RESUMEN socket bind listen read SERVIDOR socket connect write CLIENTE write read 40
RESUMEN socket bind listen SERVIDOR socket connect CLIENTE read write write read close close 40
./etc/services (primeras líneas) tcpmux 1/tcp echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp chargen 19/tcp ttytst source chargen 19/udp ttytst source ftp-data 20/tcp ftp 21/tcp telnet 23/tcp smtp 25/tcp mail 41