Objetivo
Desarrollar servicios simples de red en la capa
de aplicacin
Client
Server
Network
Cliente
Servidor
3
TCP/IP
Applications Layer
TCP/IP Stack
Standard apps
HTTP
FTP
Telnet
User apps
Transport Layer
TCP
UDP
Programming Interface:
Sockets
Network Layer
IP
Link Layer
Application
(http,ftp,telnet,)
Transport
(TCP, UDP,..)
Network
(IP,..)
Link
(device driver,..)
Device drivers
TCP/IP Stack
Application
(http,ftp,telnet,)
Transport
(TCP, UDP,..)
Network
(IP,..)
Link
(device driver,..)
TCP/IP Stack
Application
(http,ftp,telnet,)
Transport
(TCP, UDP,..)
Network
(IP,..)
Link
(device driver,..)
Puertos
The TCP and UDP
usan puertos para
entregar los datos
que llegan a un
proceso particular
corriendo en una
computadora.
P
o
r
t
server
app
app
app
app
port
port
port
port
TCP
Client
TCP | UDP
Packet
Data
port#
data
Puertos
Valor entero positivo (16-bit)
Algunos puertos estan reservados/well known
services:
ftp 21/tcp
telnet 23/tcp
smtp 25/tcp
login 513/tcp
Communicacin Cliente/servidor
Socket a-- Socket
Puerto: usado para diferenciar diferentes aplicaciones en el mismo
Representado
como integer16-bit
Client Program
Server Program
Puertos reservados para el sistema: 0 1023
Registrados:
1024 49151
socket
socket
Puertos dinmicos: 49152 - 65535
Puertos
Puertos
TCP/UDP
TCP/UDP
IP
IP
Sockets
Sockets son una interfaz en la capa de
transporte
Application Programming Interface (API)para
la capa de transporte
Tipos de Sockets
DARPA Internet addresses (Internet Sockets)
Unix interprocess communication (Unix Sockets)
Los SOCKETS
Que es un Socket ?. Es un punto de comunicacin por el cual se puede emitir o recibir informacin.
Un socket se caracteriza por tener un protocolo, direcin IP y nmero de puerto.
Es similar a la programacin con archivos en C pr las operaciones permitidas: open, close, read,
write.
Dominio de un socket.
La estructura genrica, que est contenida en una librera <socket.h>, para el manejo de
direcciones es:
Struct sockaddr {
u_short sa_family; /*familia de direcin*/
char
sa_data[14]; /*14 bytes de direccin (mximo)*/
};
UNIX (AF_UNIX). Permiten la comunicacin interna de proecesos.
Internet (AF_INET).
struct sockaddr_un {
short sun_family; /*dominio UNIX: AF_UNIX*/
char sun_data[108]; /*referencia de direccin*/
};
Sockets de Internet
Soporta paquetes Stream y Datagram
Internet (AF_INET).
struct in_addr {
u_long s_addr;
};
struct sockaddr_in {
short
sin_family; /*dominio UNIX: AF_INET*/
u_short sin_port; /*numero de puerto*/
struct in_addr sin_addr; /*direccin internet*/
char
sin_zero[8]; /*un campo de ceros*/
};
Dominios:
AF_NS
AF_CCITT
AF_SNA
AF_DECnet
AF_APPLETALK
X.25
Creacin de un socket
Dos tipos de servicio(protocolos):
Con conexin-TCP (byte stream)
Sin conexin- UDP (datagramas)
TCP: int enchufe = socket(AF_INET, SOCK_STREAM,
0);
UDP: int enchufe = socket(AF_INET, SOCK_DGRAM,
0);
Estructuras en C
struct sockaddr {
u_short sa_family;
char sa_data[14];
}; /* /usr/include/sys/socket.h */
struct in_addr {
u_long s_addr;
}; // <netinet/in.h>
struct sockaddr_in {
u_short sa_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}; /* <netinet/in.h> */
Estructura hostent*
Orden de Byte
Modelo Cliente/Servidor
Servidor
Cliente
Socket()
Socket()
Nivel deTransporte
Nivel deTransporte
Nivel de Internet
Nivel de Internet
Nivel de acceso
a la red
Nivel de acceso
a la red
Red fsica
Servidor
TCP
Cliente
TCP
SERVICIO UDP
Servidor
1. Crear: socket()
2. Activar el servidor: bind()
3. Esperar mensaje: recvfrom()
4. Responder (dar servicio):
sendto()
5. Cerrar socket: close()
Cliente
1. Crear: socket()
2. Enlazar con servicio (opcional):
bind()
3. Determinar direccin
Del servidor
4. Pedir servicio: sendto()
5. Recibir servicio: recvfrom()
6. Cerrar socket: close()
Creacin de socket
#include <sys/types.h>
#include <sys/socket.h>
int sockfd;
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
// ERROR
}
Ejemplo
#include <sys/types.h>
#include <sys/socket.h>
int sockfd;
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) <
0) {
// ERROR
}
myaddr.sin_family= AF_INET;
myaddr.sin_port = htons(5100);
myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
if ( bind(sockfd,(struct sockaddr *)&myaddr,
sizeof (myaddr)) < 0) {
// ERROR
}