Holada asdasf
Catedra #7: Programación de socket en C
Profesor Patricio Galdames
Departamento de Sistemas de Información,
Universidad del Bío-Bío, Concepción
pgaldames@ubiobio.cl
Horario de Consulta:
10-09-2013
Catedra #7
Programación de Socket
Objetivo: aprender a construir aplicaciones
cliente/servidor que se comuniquen usando de
sockets
socket: puertaentre el proceso que corre una
aplicación y el protocolo de transporte de extremo a
extremo
aplicacion
proceso
socket
red
red
Internet
controlado por
El desarrollador
de la app
enlace
controlado
por el SO
fisicol
fisico
10-09-2013
proceso
transporte
transporte
enlace
aplicacion
Catedra #7
1
Servidor y Cliente
Servidor y clienteintercambian mensajes sobre la red
a través de una API común de manejo de sockets
Clientes
Servidor
TCP/UDP
Espacio
del usuario
puertos
TCP/UDP
API Socket
Espacio
kernel
IP
IP
Adaptador de red
Adaptador de red
10-09-2013
hardware
Catedra #7
Concepto: Números de Puerto
– Números de puerto son usados para
identificar “entidades” en un host
– Numero depuertos pueden ser
• “Bien conocidos (puerto 0-1023)
• Dinámico or privado (puerto 1024-65535)
– Servidores/daemons usualmente usan los
puertos bien conocidos
• Clientes pueden identificar un servicio de un
servidor
• HTTP = 80, FTP = 21, Telnet = 23, ...
• /etc/service define puertos bien conocidos
• Clientes usan usualmente puertos
dinámicos
NTP Servidor
daemon Web
Puerto 123Puerto 80
TCP/UDP
IP
Adaptador de Red
• Asignados por el kernel en tiempo de ejecución
10-09-2013
Catedra #7
2
Nombres y Direcciones
• A cada punto de acceso a la Internet se le
da una única dirección
– Basado en la ubicación dentro de la red – idea similar se
usa para asignar números telefónicos
– Las personas prefieren tratar con nombres y no con
direcciones
– DNS proveemapeo de nombres a direcciones
10-09-2013
Catedra #7
Especificando una dirección de
un terminal
• API de Sockets es genérico
• Debe haber una forma genérica de
especificar la dirección de un terminal
• TCP/IP requiere una dirección IP y un
numero de puerto para terminal (cliente y
servidor)
• Otras familias de protocolos podrían usar
otro tipo de esquema.
10-09-2013
Catedra #73
Conocimiento previo: tipos de datos
POSIX1
int8_t
signed 8bit int
uint8_t
unsigned 8 bit int
int16_t
signed 16 bit int
uint16_t
unsigned 16 bit int
int32_t
signed 32 bit int
uint32_t
unsigned 32 bit int
u_char, u_short, u_int, u_long
Obsoleto
1Familia de
estándares especificados por la IEEE para definir APIs para la compatibilidad
desoftware entre los diferentes sistemas operativos Unix
Mas tipo de datos POSIX
sa_family_t
dirección familia
socklen_t
largo de la estructura
in_addr_t
dirección IPv4
in_port_t
Numero de puerto IP
10-09-2013
Catedra #7
4
Direcciones de socket genéricas
• struct sockaddr {
Usado por el kernel
uint8_t
sa_len;
sa_family_t
sa_family;
charsa_data[14];
};
• sa_family especifica el tipo de dirección.
• sa_data especifica el valor de la dirección
10-09-2013
Catedra #7
Otros tipos de familias de
protocolos
#define AF_UNIX
1
/* local a host (pipes, portals) */
#define AF_INET
2
/* internetwork: UDP, TCP, etc. */
#define AF_IMPLINK 3
/* protocolos direcciones arpanet imp */
#define AF_PUP
4
/* pup :e.g. BSP */
#define AF_CHAOS
5
/* protocolos mit CHAOS */
#define AF_NS
6
/* protocolos XEROX NS */
#define AF_IPX
AF_NS /* protocolos IPX : IPX, SPX, etc. */
#define AF_ISO
7
#define AF_OSI
AF_ISO /* OSI es ISO */
10-09-2013
/* protocolos ISO */
Catedra #7
5
struct sockaddr_in (IPv4)
Largo
struct sockaddr_in {
estructura (16)
uint8_t...
Regístrate para leer el documento completo.