Programación de sockets
Sockets: funcionamiento y programación
Los sockets de Unix
E i
Emisor
Receptor
Receptor
Funcionamiento y programación
Dr Roberto Gómez Cárdenas
Dr. Roberto Gómez Cárdenas
DCC del ITESM-CEM
[email protected]
http://webdia.cem.itesm.mx/ac/rogomez
Dr. Roberto Gomez C.
Diapo. No. 1
Sockets: funcionamiento y programación
La comunicación
- Comunicación ocurre a través de un puerto
Cliente y servidor comparten sistema de archivos
- Cliente y servidor comparten sistema de archivos,
y están en misma máquina:
puerto = memoria compartida, pipes, fifos.
- por otro lado en una red:
puerto = socket o conexión TLI
SERVIDOR
CLIENTE
Dr. Roberto Gomez C.
Diapo. No. 2
Dr. Roberto Gómez Cárdenas
1
Programación de sockets
Sockets: funcionamiento y programación
El concepto de puerto
- Cliente debe conocer la máquina a contactar:
i
b
nivel alto: máquina identificada por un nombre
nivel bajo: dirección red (IP: Internet Protocol)
id tifi d
á
l
lt
i
- Dentro máquina existen varios “puntos finales de
comunicación”, en los cuales los servidores están
escuchando para una conexión.
Puntos finales = número puerto
Puntos finales
número puerto
- Analogía:
IP = Número teléfono; Número Puerto = extensión
Dr. Roberto Gomez C.
Diapo. No. 3
Host cognac
Identificando un servidor
Host tequila
Sockets: funcionamiento y programación
sendmail
rexecd
Servidor
impresora
25
512
515
servidor
sendmail
rexed
id
S
Servidor
impresatora
Número
puerto
Transporte
punto-punto
25
512
515
dirección IP
203.6.18.6
La red
203.6.18.8
Dr. Roberto Gomez C.
Diapo. No. 4
Dr. Roberto Gómez Cárdenas
2
Programación de sockets
Ejemplo de Servicios y Números Puertos
Sockets: funcionamiento y programación
19/
daytime 13/ tcp
daytime 13/ udp
netstat 15/ tcp
h
chargen 19/ tcp ttytst source
chargen 19/ udp ttytst source
ftp-data 20/ tcp
ftp 21/ tcp
telnet 23/ tcp
smtp 25/ tcp mail
time 37/ tcp timserver
time
time 37/udp timserver
timserver
. . .
exec 512/ tcp
login 513/ tcp
shell 514/ tcp cmd
printer 515/ tcp spooler
37/udp
Dr. Roberto Gomez C.
Diapo. No. 5
¿Qué son los sockets?
Sockets: funcionamiento y programación
• Punto de comunicación por el cual un proceso puede emitir o recibir
información
• Es una interfaz con la entre capa de aplicación y el de transporte.
• En el interior de un proceso se identificará por un descriptor parecido al
• En el interior de un proceso se identificará por un descriptor, parecido al
usado para la identificación de archivos:
– permite re-dirección de la entrada y salida estándar
– permite utilización de aplicaciones estándar sobre la red
– todo nuevo proceso, (fork() ) hereda los descriptores de socket de su padre
• Permite, dado dos procesos que se comunican a través de ellos,
despreocuparse de:
– canal físico de comunicación, (capa física de la ISO-OSI)
ISO OSI)
– forma de codificación de señales para disminuir probabilidad error en la
ió (
l fí i
fí i
d l
d
i
transmisión (capa enlace)
– nodos red por los cuales tiene que pasar, (capa red)
– formar paquetes de la información a transmitir y buscar ruta que una la
computadora origen con la destino, (capa transporte)
Dr. Roberto Gomez C.
Diapo. No. 6
Dr. Roberto Gómez Cárdenas
3
Programación de sockets
Sockets: funcionamiento y programación
Los pasos en la comunicación
Servidor:
abre su puerto
espera por peticiones del cliente
Cliente:
abre su puerto
escribe su petición
Servidor:
realiza el servicio
Excelente mientras solo exista un cliente y el cliente no requiera de un reply
Dr. Roberto Gomez C.
Diapo. No. 7
Sockets: funcionamiento y programación
Comunicación un servidor varios clientes
Si existe más de un cliente
Peticiones clientes diferentes deben diferenciarse
Establecer convención para enviar id del proceso cliente
Cuidado con la seguridad: posibilidad un proceso se haga
pasar por otro.
SERVIDOR
CLIENTE
CLIENTE
Dr. Roberto Gomez C.
Diapo. No. 8
Dr. Roberto Gómez Cárdenas
4
Programación de sockets
Sockets: funcionamiento y programación
Solución en sockets
Llamadas sistema recvfrom( ) , listen() y accept() permiten al servidor
escuchar un socket conocido para verificar si hay peticiones
Cada petición identifica al emisor
Servidor usa la identificación para enviar respuesta usando sendto( )
recvfrom( ) y sendto( ) son la base del protocolo conectionless de
sockets
Dr. Roberto Gomez C.
Diapo. No. 9
Sockets: funcionamiento y programación
Canal de comunicación bidireccional
Si cliente y servidor requieren de interacción adicional durante
procesamiento de la petición:
i ió
útil contar con canal de comunicación de doble sentido
i
d l
canal privado que no requiere intercambio de id de los procesos
en cada envío de mensajes
SERVIDOR
SERVIDOR
petición cliente
p
CLIENTE
CLIENTE
canal comunicación bidireccional
Dr. Roberto Gomez C.
Diapo. No. 10
Dr. Roberto Gómez Cárdenas
5
Programación de sockets
Sockets: funcionamiento y programación
Canal privado de comunicación
Canal:
Ningún otro proceso puede aceptarlo
Protocolos orientados conexión:
mecanismo llamado hand off
Una vez que el canal fue establecido servidor debe decidir como
manejar la petición
1. Estrategia servidor-serial (serial server)
2. Estrategia servidor-padre (father server)
3. Estrategia servidor-thread (thread server)
Dr. Roberto Gomez C.
Diapo. No. 11
Sockets: funcionamiento y programación
Estrategia servidor serial
d
C
d di
Cuando servidor recibe una petición se dedica completamente
a atender la petición antes que cualquier otra
i ió
id
ib
l
SERVIDOR
SERVIDOR
petición cliente
CLIENTE
CLIENTE
canal comunicación bidireccional
Dr. Roberto Gomez C.
Diapo. No. 12
Dr. Roberto Gómez Cárdenas
6
Programación de sockets
Sockets: funcionamiento y programación
Pseudocódigo estrategia servidor serial
for ( ; ; ) {
escuchar petición cliente
crear canal comunicación privado bidireccional
while (no error en canal de comunicación ) {
leer petición cliente
atender petición
responder al cliente
}
}
cerrar canal de comunicación
}
Dr. Roberto Gomez C.
Diapo. No. 13
Sockets: funcionamiento y programación
Estrategia servidor padre
Servidor “forks” un hijo para que atienda la petición, mientras que
el servidor se queda escuchando otras posibles peticiones
el servidor se queda escuchando otras posibles peticiones
SERVIDOR
peticion cliente
CLIENTE
SERVIDOR
canal comunicacion bidireccional
Dr. Roberto Gomez C.
Diapo. No. 14
Dr. Roberto Gómez Cárdenas
7
Programación de sockets
Sockets: funcionamiento y programación
Pseudocódigo estrategia servidor padre
for ( ; ; ) {
escuchar petición cliente
crear canal comunicación privado bidireccional
fork un hijo que atienda la petición
cerrar el canal de comunicación
limpiar zombies
}
}
Dr. Roberto Gomez C.
Diapo. No. 15
Sockets: funcionamiento y programación
Estrategia servidor thread
Alternativa de la estrategia anterior de bajo overhead
En lugar de hacer un fork de un hijo para atender la petición, el servidor
p
p
crea un thread en su propio espacio de proceso
p p
Ventaja: menos overhead y tratamiento más eficiente
Desventaja: posible interferencia entre peticiones multiples debido al
espacio de direcciones compartido.
SERVIDOR
peticion cliente
CLIENTE
threads
Dr. Roberto Gomez C.
Diapo. No. 16
canal comunicacion bidireccional
Dr. Roberto Gómez Cárdenas
8
Programación de sockets
Sockets: funcionamiento y programación
Transfiriendo información entre máquinas heterogéneas
Para comunicar dos computadoras no basta con poder conectarlas lógicamente
Para comunicar dos computadoras no basta con poder conectarlas lógicamente
también se tienen que poner de acuerdo en diferentes aspectos.
Entre los más importantes encontramos:
• Orden representación de bytes
• Operaciones sobre bytes
• Obtención nombre máquina y otros datos de la misma
• Representación de direcciones
Dr. Roberto Gomez C.
Diapo. No. 17
Sockets: funcionamiento y programación
Rutinas de ordenamiento de bytes
Funciones que manejan posibles diferencias en el orden de la representación de bytes
entre diferentes arquitecturas de computadoras y diferentes protocolos.
#include <sys/types h>
#include <sys/types.h>
#include <netinet/in.h>
u_long htonl(u_long hostlong);
conversión entero largo de host a red
u_short htons(u_short hostshort);
conversión entero corto de host a red
u_long ntohl(u_long netlong);
conversión entero largo de red a host
u_short ntohs(u_short netshort);
conversión entero corto de red a host
Dr. Roberto Gomez C.
Diapo. No. 18
Dr. Roberto Gómez Cárdenas
9
Programación de sockets
Sockets: funcionamiento y programación
Operaciones sobre bytes
Sistema 4.3BSD define funciones que funcionan sobre user-defined byte strings.
user-defined = no son strings de caracteres standard de C (que terminan en caracter nulo);
pueden contener null-bytes dentro de ellos y no significan un fin de string;
por esto se debe especificar el tamaño de cada string como parámetro.
por esto se debe especificar el tamaño de cada string como parámetro.
bcopy( char *src, char *dest, int nbytes );
mueve el número de bytes especificado de src a dest
(difere del orden usado por la función strcpy() )
bzero(char *dest, int nbytes);
escribe el número especificado de null-bytes en dest
int bcmp(char *ptr1, char *ptr2, int nbytes);
compara dos bytes strings
regresa cero si los dos byte strings son identicos, sino regresa un valor no-cero
(difiere del resultado aportado por la función strcmp() )
NOTA: equivalente en sistema V: me
Comentarios de: Los Sockets de Unix (0)
No hay comentarios