Documentos de Académico
Documentos de Profesional
Documentos de Cultura
OPERATIVOS
COMUNICACIÓN DE PROCESOS A TRAVÉS DE
SOCKETS
Comunicación de procesos a través de
sockets
• Estructura en capas del modelo OSI
• Protocolo TCP/IP
• Comunicación Cliente-Servidor
• Sockets
Estructura en capas del modelo OSI
(Interconexión de Sistemas Abiertos)
Protocolos de comunicación
• Protocolo: conjunto de reglas y formatos que permiten la
comunicación entre procesos.
• La definición de un protocolo tiene dos parte:
• Especificación de la secuencia de mensajes que deben
intercambiarse.
• Especificación del formato de mensajes.
• El software de red se organiza en niveles
Funciones de una pila de protocolos
• Segmentación y ensamblado de mensajes
• Encapsulado: incorporación de información de control a
los datos
• Dirección del emisor y receptor
• Código de detección de errores
• Control de conexión
• Protocolos orientados a conexión
• Protocolos no orientados a conexión:
• No se asegura el orden secuencial de los datos transmitidos
• La latencia del SO 35
30
ha crecido en términos 25
relativos 20
15
10
5
0
1985-1990 1990-1995 1995-2000 2000-20005
¿Dónde se pierde el tiempo?
• Códigos de corrección (Checksum)
• Sobre datos TCP y UDP
• Sobre cabeceras IP
• Copias de datos
• Entre usuario y kernel
• Estructura de datos
• Gestión de los buffers, colas de defragmentación de paquetes IP,
• Sistema Operativo
• Sobrecarga impuesta por las operaciones del SO
Sistema operativo en red (SOR)
Aplicaciones Aplicaciones
Lenguajes de programación Lenguajes de programación
Sistema operativo Sistema operativo
Hardware Hardware
Red de interconexión
Red de interconexión
hp = gethostbyname(argv[1]);
if (hp == NULL) {
printf(“Error en gethostbyname\n”);
exit(0);
}
memcpy(&in.s_addr,*(hp->h_addr_list),sizeof(in.s_addr));
printf(“%s es %s\n”, hp->h_name, inet_ntoa(in));
}
Direcciones de sockets II
• En TCP/IP los números se emplean con formato big-
endian.
• En computadores que no utilicen este formato es
necesario emplear funciones para traducir números entre
el formato que utiliza TCP/IP y el empleado por el propio
computador:
u_long htonl (u_long hostlong)
u_short htons (u_short hostshort)
u_long ntohl (u_long netlong)
u_short ntohs (u_short netshort)
• Las primera traduce un número de 32 bits representado
en el formato del computador al formato de red (TCP/IP).
Sockets
• Abstracción que representa un extremo en la
comunicación bidireccional entre dos procesos.
• Ofrecen una interfaz para acceder a los servicios de red
en el nivel de transporte de los protocolos TCP/IP.
• Prácticamente disponibles en todos los sistemas tipo
Unix/Linux, Windows…
Sockets (2)
• Comunicación con sockets
• Dominios de comunicación
• PF_UNIX (dentro de la misma computadora)
• PF_INET (procesos en computadoras diferentes)
• Tipos de sockets
• Orientados a conexión (SOCK_STREAM)
• No orientados a conexión (SOCK_DGRAM)
• Direcciones de sockets
• AF_UNIX para sockets del dominio UNIX.
• AF_INET para sockets del domino Internet.
Sockets (3)
• Escenario típico con sockets de tipo stream
Sockets (3)
• Ejemplo sencillo
• Aplicación servidor para sumar dos enteros
32
SERVIDOR:
Pide un socket al SO (punto o puerto de conexión a un proceso)
• Llamada al sistema:
s=socket(dominio, tipo, protocolo)
– Dominio: AF_UNIX rutas de ficheros (especifica conexión local en la misma
máquina) y AF_INET para direcciones de internet (en máquina remota)
– Tipo: para mandar datagramas SOCK_DGRAM o orientado a conexión
SOCK_STREAM
– Protocolo: 0 indica IP, SOCK_STREAM para TCP y SOCK_DGRAM UDP
SERVIDOR:
Tabla para guardar peticiones pendientes:
• Llamada al sistema:
estado=listen(descriptorsocket, longitud)
• Reserva de zona de memoria para guardar peticiones que llegan para
atenderlas posteriormente
Resumen: El proceso servidor
– Quiero recibir
– en tal puerto
– sino puedo atender guarda petición en memoria
• Además debe esperar que alguien se conecte para ello usa la llamada:
Nuevo socket=accept(antiguosocket, direccion, longitud)
– El descriptor nuevo socket (que es el usado para comunicar) es idéntico al
antiguosocket. Recibe la dirección del socket activo (el del cliente) en
direccion
– Si no conexiones pendientes antiguosocket bloquea al proceso hasta que
lleguen .Al acabar se debe cerrar nuevo socket close() para dar fin a
comunicación
CLIENTE: 34
Proceso cliente
bind()
socket() listen()
Abrir conexión
accept() Crear
connect()
thread
accept()
Petición
write() read()
Respuesta
read() write()
close() close()
Ejemplo (TCP)
Máquina A Máquina B
sumar(5,2)
cliente servidor
5+2
RED
Servidor (TCP)
void main(int argc, char *argv[])
{
struct sockaddr_in server_addr, client_addr;
int sd, sc;
int size, val;
int size;
int num[2], res;
close(sc);
}
close (sd);
exit(0);
}
Cliente (TCP)
void main(void)
{
int sd;
struct sockaddr_in server_addr;
struct hostent *hp;
int num[2], res;
sizeof(server_addr));
num[0]=5;
num[1]=2;
while (1)
{
recvfrom(s, (char *) num, 2* sizeof(int), 0,
(struct sockaddr *)&client_addr, &clilen);
}
Cliente (datagramas)
void main(int argc, char *argv[]){
struct sockaddr_in server_addr, client_addr;
struct hostent *hp;
int s, num[2], res;
if (argc != 2){
printf("Uso: client <direccion_servidor> \n");
exit(0);
}
num[0] = 2; num[1] = 5;