Escolar Documentos
Profissional Documentos
Cultura Documentos
Prcticas 4 y 5
(versin 2012-2013)
Universidad de Valencia
Redes Sockets-1
Rogelio Montaana
Protocolos de transporte de
Internet
Se encargan del transporte de los datos extremo a
extremo (host a host).
Hay dos protocolos para dos tipos de servicio:
TCP (Transmission Control Protocol): orientado a conexin.
Garantiza la entrega sin prdidas, descarte de duplicados, etc.
UDP (User Datagram Protocol) : no orientado a conexin. No
garantiza la entrega, equivale en el nivel de transporte al
servicio que ofrece IP en el nivel de red.
Redes Sockets-2
Rogelio Montaana
Lon. Cab.
DS (DiffServ)
Identificacin
Tiempo de vida (TTL)
Longitud Total
Res. DF MF
Protocolo
Desplazam. de Fragmento
Checksum
Direccin de origen
Direccin de destino
Opciones (de 0 a 40 octetos)
Universidad de Valencia
Valor
Protocolo
ICMP
IP
TCP
17
UDP
89
OSPF
Redes Sockets-3
Protocolos de transporte
Rogelio Montaana
Puerto de origen
Puerto de destino
Checksum (opcional)
Puerto de origen
Puerto de destino
Nmero de secuencia
Nmero de acuse de recibo
Cabecera
TCP
L. Cab. Resv.
(4 bits) (4 bits)
Flags
(8 bits)
Checksum
Opciones
Flags:
Universidad de Valencia
Tamao ventana
Puntero datos urgentes
Relleno
Rogelio Montaana
Puertos y Servidores
Los puertos se identifican por un nmero entero de 16
bits (rango de 0 a 65535)
Cada paquete lleva un puerto de origen y uno de destino
(como las direcciones IP)
Los puertos 0 a 1023 estn reservados para los
servicios bien conocidos, por ejemplo:
puerto 80 servicio web (HTTP)
de esta forma los clientes web (o lo que sea) saben a
que puerto han de dirigir sus peticiones
Algunas aplicaciones usan TCP, otras UDP. Algunas
usan ambos, dependiendo del tipo de operacin
Universidad de Valencia
Redes Sockets-5
Rogelio Montaana
Universidad de Valencia
Servicio
Puerto
TCP
UDP
DayTime
13
FTP
21
SSH
22
TelNet
23
SMTP
25
Domain (DNS)
53
BOOTP
67
HTTP
80
POP3
110
NTP
123
SNMP
161
HTTPS
443
Redes Sockets-6
X
X
Rogelio Montaana
Multiplexacin
Nivel de aplicacin
Mltiples instancias
(una o varias por
protocolo)
FTP
HTTP
(Puerto 21)
(Puerto 80)
Nivel de transporte
Dos instancias
(TCP y UDP)
HTTP
(Puerto 400)
Servicio no
estndar
Telnet
SMTP
(Puerto 23)
(Puerto 25)
Checksum
P. dest. (23)
DATOS APLICACIN
Cabecera TCP
Una instancia IP
(puede haber otros
protocolos)
Checksum
Nivel de red
Prot. (6)
SEGMENTO TCP
Cabecera IP
Nivel de enlace
Mltiples instancias
(una por interfaz)
Ethertype (0800)
DATAGRAMA IP
CRC
Redes Sockets-7
Rogelio Montaana
Puertos de Clientes
A diferencia de los servidores, los clientes usan
nmeros de puerto elegidos arbitrariamente por el
sistema operativo, pero siempre con valores superiores
al 1023, para no coincidir con los servidores que pueda
haber en ese host
A los puertos elegidos por los clientes se les suele
llamar puertos efmeros ya que, a diferencia de
puertos de servidores, suelen tener una vida muy corta
(la de la conexin)
La mayora de los sistemas operativos no utilizan para
los puertos efmeros todo el rango posible (102465535) sino slo una parte
Universidad de Valencia
Redes Sockets-8
Rogelio Montaana
Sockets
La combinacin de una direccin IP y un nmero de
puerto identifica un punto de conexin del nivel de
transporte. Es lo que llamamos un socket
Ejemplo de socket: 10.0.1.25 : 80
Direccin IP
Puerto
Socket
Puerto
Socket
Universidad de Valencia
Redes Sockets-9
Rogelio Montaana
Socket: 10.0.2.47.1038
Conexin TCP
10.0.1.25.80-10.0.2.47.1038
Puerto
80
Puerto
1038
El ordenador ejecuta
el programa Explorer
IP 10.0.1.25
IP 10.0.2.47
Servidor Web
Cliente
Universidad de Valencia
Redes Sockets-10
Rogelio Montaana
Universidad de Valencia
Redes Sockets-11
Rogelio Montaana
TCP Cliente
Funcin
CLOSED
LISTEN
SYN-SENT
Conexin
ESTABLISHED
ESTABLISHED
connect
(fecha-hora)
Tiempo
SYN-RECEIVED
Intercambio
de datos
FIN-WAIT-1
CLOSE-WAIT
LAST-ACK
TIME-WAIT
..
..
.
LISTEN
close
CLOSED
Universidad de Valencia
Redes Sockets-12
Desconexin
2- 4
min.
Rogelio Montaana
Redes Sockets-13
Rogelio Montaana
Puerto local
IP remota
Direccin local
Direccin remota
Estado
10.0.1.25:3719
10.0.1.25:4111
10.0.1.25:4113
10.0.1.25:80
10.0.1.25:80
10.0.1.25:80
10.0.1.60:21
10.0.1.50:110
10.0.1.50:110
10.0.1.40:1056
10.0.1.30:2312
*:*
ESTABLISHED
TIME_WAIT
TIME_WAIT
ESTABLISHED
ESTABLISHED
LISTEN
Puerto remoto
IP local
Redes Sockets-14
Rogelio Montaana
Redes Sockets-15
Rogelio Montaana
Protocolos e Interfaces
Interfaz
Protocolo
HTTP
A
Sockets BSD
Sockets BSD
TCP
T
IP
IP
IP
Cliente
Universidad de Valencia
Router
Redes Sockets-16
Router
Servidor
Rogelio Montaana
Indica
protocolo IP
Indica
protocolo TCP
1: Creamos el socket
close ( n )
Redes Sockets-17
Rogelio Montaana
Estructura sockaddr_in
Campos:
struct in_addr
{
unsigned long int s_addr;
};
struct sockaddr_in
{
int sin_family;
unsigned short int sin_port;
struct in_addr sin_addr;
};
La direccin IP se guarda
en un entero largo (32 bits)
en todas las arquitecturas
Ejemplo
de uso:
struct sockaddr_in s;
...
Funciones de conversin
s.sin_family=PF_INET;
s.sin_port= htons (13);
if ( inet_aton (147.156.13.25,&s.sin_addr)==0) error(sock,"inet_aton");
Uso TCP:
Uso UDP:
Universidad de Valencia
Redes Sockets-18
Rogelio Montaana
El entero que devuelve la funcin socket no tiene nada que ver con el
nmero de puerto del cliente y del servidor. Es un identificador de ese
socket elegido por el sistema de ficheros (normalmente el 3).
socket no establece ninguna conexin ni transmite ningn paquete, solo
prepara el socket local para la conexin
connect establece la conexin TCP. Para ello ha de indicar la direccin IP
y puerto, es decir el socket remoto con el que queremos conectar.
Si connect no da error podemos estar seguros de que la conexin ha
funcionado.
El programa elige el socket remoto (IP y pueto) pero no el local. La IP es la
de la interfaz y el puerto (efmero) lo elige el sistema operativo.
connect provoca el intercambio de 6 paquetes (de SYN a FIN).
read no transmite nada, su efecto es puramente local.
close provoca el envo del FIN por parte del cliente y la confirmacin del
servidor. Cierra la conexin liberando los recursos reservados en socket.
Si en el mismo programa quisiramos hacer una segunda conexin
deberamos llamar a socket de nuevo
Universidad de Valencia
Redes Sockets-19
Rogelio Montaana
Universidad de Valencia
Redes Sockets-20
Rogelio Montaana
UDP Cliente
Tiempo
LISTEN
Universidad de Valencia
(fecha-hora)
Redes Sockets-21
Rogelio Montaana
1: Crear el socket
2: Enviar
datagrama
vaco
Indica
protocolo IP
Dir. IP y puerto
de destino
3: Esperar respuesta
5: Cerrar el socket
Universidad de Valencia
Tiempo de espera
4: Leer la
respuesta
Indica
protocolo UDP
close ( n )
Redes Sockets-22
Rogelio Montaana
Universidad de Valencia
Redes Sockets-23
Rogelio Montaana
struct timeval
{
unsigned long int tv_sec; /* Segundos */
unsigned long int tv_usec; /* Millonesimas de segundo */
};
Ejemplo
de uso:
timeout.tv_sec=1;
timeout.tv_usec=0;
Uso en la select:
Universidad de Valencia
Timeout 1 segundo
Redes Sockets-24
Rogelio Montaana
Arquitecturas
big-endian y little-endian
Los procesadores big-endian representan los enteros
colocando primero el byte ms significativo. Los
procesadores little-endian lo hacen al revs. Ejemplo:
Un short int (16 bits) con valor 13 en big-endian es 0x000D
Un short int con el valor 13 en little-endian es 0x0D00
Internet utiliza siempre formato big-endian
Las funciones htons, htonl, ntohs y ntohl se encargan de
convertir los datos en caso necesario. De este modo los
programas son independientes de la arquitectura utilizada
En un sistema big-endian estas funciones no hacen nada,
pero debemos usarlas siempre para que los programas
funcionen en todos los casos de forma transparente
Universidad de Valencia
Redes Sockets-25
Rogelio Montaana
Universidad de Valencia
Redes Sockets-26
Rogelio Montaana
Funciones de conversin
Nombre largo
Nombre corto
Ejemplo
htons
ntohs
htonl
ntohl
inet_aton
inet_aton (147.156.12.21,&s.sin_addr)
inet_ntoa
Universidad de Valencia
Redes Sockets-27
Rogelio Montaana
Universidad de Valencia
Redes Sockets-28
Rogelio Montaana
2: Asociarle un puerto
listen( n ,5)
Redes Sockets-29
Rogelio Montaana
Universidad de Valencia
Redes Sockets-30
Rogelio Montaana
Socket creado
para el cliente
i=0;
while (i<*num)
{
if ( FD_ISSET ( ncon[i] , &conjunto ))
cod=read(ncon[i],buffer[cont],TAM_TEXTO)
}
i++;
Redes Sockets-31
Rogelio Montaana
Inicializa el conjunto
Aade un socket al conjunto
Borra un socket del conjunto
Comprueba si un socket ha sido afectado por la select
fd_set conjunto;
struct timeval t;
FD_ZERO(&conjunto);
for(i=0;i<num;i++)
{
FD_SET(ncon[i],&conjunto);
}
Universidad de Valencia
Redes Sockets-32
Rogelio Montaana
Tarea:
9: Escribir (en
todos los clientes)
i=0;
while (i<*num)
{
if (FD_ISSET(ncon[i],&conjunto))
cod= write ( ncon[i] , buffer ,strlen)
}
i++;
close ( ncon[i] )
Redes Sockets-33
Rogelio Montaana
Universidad de Valencia
Redes Sockets-34
Rogelio Montaana
Universidad de Valencia
Redes Sockets-35
Rogelio Montaana