Anda di halaman 1dari 24

TCP/IP

Programacin con sockets


UT- 1e

Objetivo
Desarrollar servicios simples de red en la capa
de aplicacin

Modelo Cliente Servidor


cliente, servidor, red (network)

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

Protocolos de la capa de transporte:


TCP
TCP (Transport Control
Protocol) es un servicio
orientado a la conexion, el
protocolo proporciona flujo
fiable de datos entre dos
computadoras (unicast).
Ejemplos de aplicaciones:
HTTP
FTP
Telnet

TCP/IP Stack
Application
(http,ftp,telnet,)
Transport
(TCP, UDP,..)

Network
(IP,..)
Link
(device driver,..)

Protocolos de la capa de transporte:


UDP
UDP (User Datagram
Protocol) es un protocolo
que envia paquetes de
datos independientes,
llamados datagramas, de
una computadora a otra sin
garant'ia de entrega
(servicio no orientado a la
conexion).
Ejemplos:
Video stream
Ping

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

Stream Socket(TCP): SOCK_STREAM


Orientado a la conexin

Datagram Socket(UDP): SOCK_DGRAM


No orientado a la conexin

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

Elementos de una cabecera UDP

Los elementos de una unidad de datos que


pasa por un socket son:
Protocolo
Direccin IP local
Nmero de puerto local
Direccin IP destino
Nmero de puerto destino

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);

La funcin Socket() retorna un entero que es un


descriptor de socket, similar a un descriptor de
archivo.

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*

gethostbyname(): retorna el IP en la estructura


hostent.
getservbyname():retorna informacin de
servicios conocidos: ftp, http, etc

Orden de Byte

Se usa para determinar un nico formato de


orden de bits.
Big endian vs. little endian
use funciones apropiadas: htonl(), htons(),
ntohl(), ntohs().

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

1. Crear el descriptor de socket: socket()


2. Enlazar el servidor con la direccin IP
local: bind()
3. Definir la capacidad de atencin (una o
mas conexiones simultneas) desde el
cliente: listen()
4. Aceptar una peticin de conexin en un
nuevo socket(): accept()
5. Comunicacin con el cliente:
read(), write() //implementar el servicio
6. Cerrar la conexin: close()
Los pasos 4 al 6 se repiten para que un servidor proporcione un servicio continuo.

Cliente

TCP

1. Crear el descriptor de socket: socket()


2. Contactar con un servidor:connect()

3. Comunicarse con el servidor: read(),


write() //usar el servicio
4. Cerrar la conexin con el servidor
(socket()): Close().

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
}

Anda mungkin juga menyukai