La Interfaz Socket.

Anuncio
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 TCP/IP que se
compone de funciones o rutinas.
 Originalmente se construyó a principios de los 80 para el
sistema operativo UNIX , aunque hoy en día también la
utilizan otros sistemas operativos como Microsoft
Windows, Mac, OS2, etc...
La Interfaz Socket
2
Introducción - Origen de la INTERFAZ SOCKET
 Las llamadas al sistema de E/S en UNIX se basan en el
proceso de open-read-write-close (abrir-leer-escribircerrar), y esto se utiliza
 tanto con archivos como con dispositivos hardware.
 En este tipo de comunicación se basó el diseño de la
interfaz de sockets,
 con lo que para comunicarse con una red TCP/IP, se abre
primero una conexión con la red, se leen y escriben datos a
través de ella y una vez terminados los procesos se cierra la
conexión.
La Interfaz Socket
3
Introducción - SOCKETS
 Las aplicaciones desarrolladas en Sockets están basadas
en la arquitectura Cliente-Servidor.
 La aplicación necesita conocer el papel que va a
desempeñar (cliente o servidor), ya que la estructura del
sw y primitivas difieren.
La Interfaz Socket
4
Introducción - SOCKETS
 Permiten comunicaciones orientadas a conexión o sin
conexión.
 Un socket está completamente definido cuando consta de
dirección y puerto (ej. IP + puerto TCP).
 Para que se dé la comunicación en una red, el programa
requiere un socket en cada extremo del proceso de
comunicación.
La Interfaz Socket
5
Creación de un Socket
 Para crear un socket, se utiliza la función socket y se
deben especificar tres parámetros:
socket = socket(protocol_familiy, socket_type, protocol)
1. Familia de Protocolos (Protocol Family): Identifica a una
familia de protocolos relacionados, como TCP/IP.
2. Tipo de Socket (Socket_type): Si el programa utilizará el
socket para transmitir flujo de bytes o datagramas.
SOCK_DGRAM para datagramas y SOCK_STREAM
para flujo de bytes.
La Interfaz Socket
6
Creación de un Socket
3. Protocolo a utilizar: Permite especificar qué protocolo
utilizará el socket. IPPROTO_TCP , IPPROTO_UDP.
 Ej: socket_handle = socket(PF_INET, SOCK_STREAM,
IPPROTO_TCP);
 Cuando se llama a la función socket, la implementación
del socket lo crea y devuelve un identificador de socket
que identifica a un registro en la tabla de descripción. El
registro muestra la estructura de datos del socket.
La Interfaz Socket
7
Estructura de Datos del Socket
Familia de Protocolos
Tipo de Servicio
Dirección IP Local
Dirección IP Remota
Puerto de Protocolo Local
Puerto de Protocolo Remoto
Cada vez que la aplicación llama a la función socket,
la implementación de este reserva memoria para una
nueva estructura de datos y almacena la dirección de
la familia, el tipo de socket y el protocolo.
La Interfaz Socket
8
Configuración del Socket
 Una vez creado el socket, utilizando la función socket, se
pueden utilizar las funciones de configuración
dependiendo del uso que se le vaya a dar al socket:
 Si se trata de un cliente orientado a conexión, se deberá
llamar a la función connect que se encargará de almacenar
toda la información local y remota en la estructura de datos
del socket.
 Si se trata de un cliente sin conexión las funciones llamadas
son:

Máquina Local: bind - Máquina remota: send
La Interfaz Socket
9
Configuración del Socket
En el caso de un servidor orientado a conexión:
 Máquina Local: bind
 Máquina Remota: listen y accept
En el caso de un servidor sin conexión:
 Máquina Local: bind
 Máquina Remota: recvfrom
La Interfaz Socket
10
Primitivas Sockets Orientadas a Conexión (TCP)









Socket: Crea un descriptor de socket.
Close: Cierra socket
Bind: Asocia una dirección local con un socket
Listen: Crea cola de espera para almacenar
solicitudes de conexión
Accept: Espera una solicitud de conexión
Connect: Inicia conexión con conector remoto
Shutdown: Deshabilita al recepción y/o el envío de
datos por el socket
Send, Write: Envía mensaje
Recv, Read: Recibe mensaje
La Interfaz Socket
11
Primitivas Sockets Orientadas a Conexión (TCP)
La Interfaz Socket
12
Descripción del Proceso
 El programa servidor solicita a la implementación
del socket que le asigne una estructura de datos para
el socket y que le devuelva un descriptor de sockets
para utilizarlo en las siguientes llamadas a funciones
de la interfaz de sockets.
 Después el servidor une el socket a un puerto de
protocolo local.
 La función listen indica al socket que atienda las
conexiones entrantes y que confirme las solicitudes de
conexión y se encarga de poner al socket en modo de
atención pasiva.
La Interfaz Socket
13
Descripción del Proceso
 Result = listen(socket_handle, queue_length);
 Donde el segundo parámetro queue_length, nos
permite especificar el número máximo de solicitudes
que pueden acumularse en la cola.
 Después de configurar una cola de datos entrantes, el
programa servidor llamará a la función accept, cesa su
actividad y espera una solicitud de conexión de un
programa cliente.
 Result = accept (socket_handle, socket_address,
address_length);
La Interfaz Socket
14
Descripción del Proceso
 El programa cliente también crea un socket, pero no
necesita ocuparse de qué dirección local usará el
protocolo ya que utiliza un protocolo orientado a
conexión, por lo tanto no llama a la función bind.
 Lo que hace es iniciar la conversación en red llamando
a la función connect.
 Después de que el cliente y el servidor establecen la
conexión, pueden ocurrir comunicaciones adicionales
a través de las funciones write y read.
La Interfaz Socket
15
Primitivas Sockets No Orientadas a Conexión
(UDP)
 Socket: Crea un descriptor de socket.
 Close: Cierra socket.
 Bind: Asocia una dirección local con un socket.
 Sendto: Envía mensaje.
 Recvfrom: Recibe mensaje.
La Interfaz Socket
16
Primitivas Sockets No Orientadas a Conexión
(UDP)
La Interfaz Socket
17
Conexión de un Socket
 Un programa cliente orientado a conexión utiliza la
función connect para configurar un socket, y requiere
como parámetros,
 el identificador de socket, que es el valor del descriptor
del socket que devolvió la función socket,
 la dirección del socket remoto, es decir la dirección IP
del host remoto y el puerto de protocolo y
 la longitud de la dirección, el tamaño en bytes de la
dirección del socket remoto.

result = connect (socket_handle, remote_socket_address,
address_length);
La Interfaz Socket
18
Conexión de un Socket
 En el caso de clientes no orientados a conexión o
servidores en general tienen que atender a un puerto de
protocolo las solicitudes que les pueden llegar.
 La función de asignación de nombres, bind, en la API de
sockets permite a un programa asociar una dirección local
con un socket:
 Result = bind (socket_handle, local_socket_address,
address_lenght);
 De esta manera se le comunica a la implementación del
socket, qué puerto de protocolo utilizar para la entrega de
datos.
La Interfaz Socket
19
Transmisión de Datos
 Se proporcionan cinco funciones para transmitir
datos a través de un socket y se dividen en dos grupos.
 Existen
 dos funciones que requieren una dirección de destino
como parámetro,
 las restantes que son las utilizadas en los procesos
orientados a conexión, no lo precisan.
La Interfaz Socket
20
Transmisión de Datos – Orientadas a Conexión
FUNCION
DESCRIPCIÓN
send
Transmite datos a través de un socket de conexión.
write
Transmite datos a través de un socket de conexión
utilizando un buffer de datos simple.
writev
Transmite datos a través de un socket de conexión
utilizando bloques de memoria no contiguos.
sendto
Transmite datos a través de un socket sin conexión
utilizando un buffer de mensajes simple.
sendmsg
Transmite datos a través de un socket sin conexión,
utilizando una estructura de mensajes flexible como
buffer de mensajes.
La Interfaz Socket
21
Transmisión de Datos – Orientadas a Conexión
 Las funciones del API de sockets que hacen transmisiones
de datos orientadas a conexión no requieren que el
programa especifique una dirección destino como
parámetro.
 Las funciones send, write y writev sólo trabajan con sockets
conectados, y tiene la siguiente estructura:
 Result= write (socket_handle, message_buffer,
buffer_length);
 El primer parámetro es el identificador de socket, el
segundo es el búfer de mensajes, que apunta al búfer de
datos que contiene la información a transmitir. El tercer
parámetro es el tamaño del búfer de datos.
La Interfaz Socket
22
Transmisión de Datos – Orientadas a Conexión
 Por otro lado la función writev no requiere que los datos
ocupen bloques de memoria contiguos como si lo hace la
función write.
 Así writev permite que se especifique una tabla de direcciones que
contenga los datos.
 Result= writev (socket_handle, io_vector, vector_length);
 También requiere como primer parámetro, un identificador de
socket, el segundo parámetro especifica la dirección de una
tabla que contiene una secuencia de apuntadores.
 Cuando la función writev transmita los datos, enviará la
información contenida en cada localidad de memoria especificada
por el array de apuntadores, transmitiéndolos en el mismo orden
en que aparecen en el array.
La Interfaz Socket
23
Transmisión de Datos – Orientadas a Conexión
 La función send es otra función del interfaz de sockets
para utilizar con sockets orientados a conexión:
 Result= send (socket_handle, message_buffer, buffer_length,
special_flags);
 Con send se pueden especificar banderas opcionales para
controlar la transmisión, como la gestión de datos
urgentes (fuera de banda).
 Las tres funciones write, writev y send, devuelven un
valor entero, que es el número de bytes transmitidos por el
socket. En caso de que exista un error devuelven: -1.
La Interfaz Socket
24
Transmisión de Datos – No orientadas a Conexión
 Para enviar datos a través de un socket sin conexión
se dispone de las funciones, sendto y sendmsg:
 Result=sendto(socket_handle, message_buffer,
buffer_length, special_flags, socket_address_structure,
address_structure_length);
 Requiere 6 parámetros, entre los nuevos que aparecen
ahora,
 la dirección de destino (socket_address_structure) y
 la longitud de la misma en bytes
(address_structure_length).
La Interfaz Socket
25
Transmisión de Datos – No orientadas a Conexión
 La función sendmsg nos permite utilizar para la
transmisión una estructura de mensaje, en lugar de
un simple buffer de datos.
 Requiere como parámetros un identificador de socket,
un puntero a la estructura del mensaje
(message_structure) y banderas especiales
(special_flags).

Result= sendmsg(socket_handle, message_structure,
special_flags);
La Interfaz Socket
26
Recepción de Datos a través de un Socket
 La Interfaz de Sockets, incluye cinco funciones para la
recepción de datos, que se corresponden con las anteriores vistas
en la transmisión de datos:
Funciones de Transmisión
Funciones de Recepción
send
recv
write
read
writev
readv
sendto
recvfrom
sendmsg
recvmsg
• A parte de estas correspondencias, hay que tener en cuenta que no es
indispensable utilizarlas unas con otras, ya que una vez se han enviado
datos, para recibirlos se puede realizar con cualquiera de las funciones
correspondientes al tipo de servicio, orientado o no a conexión.
La Interfaz Socket
27
La API Windows Sockets
 El software llamado Windows Sockets o Winsock es
una API (Application Program Interface), Interfaz de
Programas de Aplicación para redes TCP/IP, y
especifica la familia de sistemas operativos de
Microsoft Windows en todas sus versiones.
 Windows Sockets implementa la interfaz de sockets
como una biblioteca de enlace dinámico, una DLL
(Dynamic Lynk Library),
 que no es más que un módulo ejecutable que el sistema
puede cargar en cualquier momento.
La Interfaz Socket
28
La API Windows Sockets
 La API Winsock proporciona una biblioteca de funciones
que se divide en tres grupos :
1. Funciones de los Berkeley Sockets.
2. Funciones de Bases de Datos que permiten obtener información
relacionada con el DNS, servicios de comunicaciones y protocolos.
3. Las extensiones específicas de Windows a las rutinas de los Sockets
de Berkeley.
 Distinguimos entre
 las funciones de bloqueo, que son aquellas que evitan que se llame
a cualquier otra función hasta que esta termine sus propias
operaciones de red.
 Y las de no bloqueo que terminan de inmediato o emiten un
mensaje de error.
La Interfaz Socket
29
Programación con Sockets en Internet
 La programación de sockets en Internet hace uso de
las direcciones IP y los puertos, tanto TCP como UDP
para identificar a los sockets.
 Una comunicación queda completamente definida
por un par de sockets, que en el caso de TCP
identificarán una conexión.
 TCP permite varias conexiones simultáneas en un
mismo número de puerto local siempre y cuando se
cumplan estas condiciones:
 Que la dirección IP local sea distinta.
 O que los números de puerto remotos sean distintos
para cada conexión.
La Interfaz Socket
30
Conclusión
 Como hemos dicho al principio, originalmente la Interfaz
Socket se construyó para UNIX aunque hoy en día la
utilizan otros Sistemas Operativos como Microsoft
Windows.
 Es necesario destacar que en UNIX la interfaz Socket se
implementa en el núcleo y Windows solo la implementa
como una biblioteca de enlace dinámico (DLL).
 La programación de aplicaciones en redes utilizando la
Interfaz de Sockets, constituye una herramienta simple de
utilizar y de mucha potencialidad.
 Con esta interfaz se pueden construir aplicaciones
distribuidas en redes del tipo cliente servidor,
especialmente diseñadas para trabajar en Internet.
La Interfaz Socket
31
Bibliografía
 “Interfaz Socket” - Dpto. de Ingeniería Electrónica, de
Telecomunicación y Automática - Área de Ingeniería
Telemática - Universidad de Jaén - España.
La Interfaz Socket
32
Muchas gracias por su atención!
La Interfaz Socket
33
Documentos relacionados
Descargar