Sockets - People

Anuncio
Sistemas de Transportes de Datos (STD)
Tema III: UDP y TCP (Entrega 4)
___________________________________
Sockets
___________________________________
• Abstracción para las operaciones de E/S a través de la
red. Generalización de mecanismos de acceso a
ficheros para suministrar un punto a través del cual
realizar las comunicaciones.
• Operaciones:
– Crear un socket.
– Asociarlo a una dirección específica (diferencia con los
ficheros: la creación lleva implícita la asociación a un
archivo físico).
– Establecer una c1onexión con una aplicación remota ().
– Enviar y recibir datos.
– Cerrar la conexión.
Departamento
Arquitectura
Computadores
UPC
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
___________________________________
Aplicaciones, sockets y TCP/IP
Aplicación
Aplicación
___________________________________
___________________________________
___________________________________
Socket
Socket
___________________________________
___________________________________
TCP / UDP
___________________________________
IP
Driver
Departamento
Arquitectura
Computadores
UPC
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
___________________________________
Terminología y números de puertos
• Dirección de protocolo: Pareja formada por la @IP y
un número de puerto. Un socket siempre acaba
asociándose a una dirección de protocolo.
• Una conexión TCP conecta dos aplicaciones que
intercambian datos a través de sus correspondientes
sockets, cada uno de los cuales se asocia a la
correspondiente dirección de protocolo.
• En general, para las aplicaciones cliente, el módulo
TCP escoge un número de puerto temporal (efímero) y
variable cada vez que se invoca, y es él quien asocia la
dirección local al socket. 3
Departamento
Arquitectura
Computadores
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
UPC
Juan Carlos Cruellas Ibarz
1
Sistemas de Transportes de Datos (STD)
Tema III: UDP y TCP (Entrega 4)
___________________________________
Terminología ynúmeros de puertos
• Por el contrario, un servidor suele servir siempre en un
número de puerto elegido por dicho servidor, y es él
mismo quien solicita al kernel que asocie el socket a la
dirección de protocolo formado por la @IP local y el
número de puerto.
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
UPC
___________________________________
Operaciones
• Creación de un socket:
int socket (int family, int type, int protocol) ;
family: familia protocolos
AF_INET: IPv4
AF_INET6: IPv6
type: tipo de comunicación deseada
SOCK_STREAM: orientada a conexión.
SOCK_DGRAM: no orientada a conexión.
Departamento
Arquitectura
Computadores
UPC
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
___________________________________
Operaciones
• Asociar socket a una dirección de protocolo local
(para servidores)
int bind (int sockfd, const struct sockaddr *myaddr,
socklen_t addrlen) ;
sockfd: descriptor de socket -devuelto por socket()myaddr: dirección local de protocolo a la que se asocia
el socket (puntero a estructura específica con la
dirección de protocolo local).
addrlen: longitud de la estructura que contiene la
dirección de protocolo.
Departamento
Arquitectura
Computadores
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
UPC
Juan Carlos Cruellas Ibarz
2
Sistemas de Transportes de Datos (STD)
Tema III: UDP y TCP (Entrega 4)
___________________________________
Operaciones
• Solicitar conexión a una dirección de protocolo (@IP +
número de puerto) remota. Operación típicamente
invocada por la aplicación cliente.
int connect (int sockfd, const struct sockaddr
*servaddr, socklen_t addrlen) ;
sockfd: descriptor de socket -devuelto por socket()servaddr: dirección de protocolo remota con la que
desea conectarse la aplicación a través de su socket.
addrlen: longitud de la estructura que contiene la
dirección de protocolo antes mencionada.
Departamento
Arquitectura
Computadores
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
UPC
___________________________________
Operaciones
• Operación para convertir un socket activo (uno a través
del cual un cliente puede solicitar establecer una
conexión) en un socket pasivo (uno a través del cual
un servidor escucha si algún cliente le solicita
establecer una conexión).
• Invocada por un servidor despúes de invocar a socket()
y bind(). Lo coloca en el estado de LISTEN del grafo de
estados.
listen(int sockfd, int backlog) ;
sockfd: descriptor de socket -devuelto por socket()backlog: Número máximo de conexiones que el kernel
Departamento
Arquitectura
Computadores
UPC
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
___________________________________
Operaciones
de TCP encolará para este socket. TCP gestiona dos
colas por cada socket:
– Cola de conexiones incompletas (el 3-way handshake no
se ha completado -servidor en SYN_RCVD). Cuando se
recibe el SYN de un cliente, se le añade una entrada
correspondiente a esta conexión solicitada.
– Cola de conexiones completadas (la conexión se ha
establecido -servidor en ESTABLISHED). Cuando se
recibe el ack del SYN enviado al cliente, se quita la
anotación de la cola anterior y se le añade a ésta.
Contiene las entradas de las conexiones que han sido
establecidas y están a la espera de que el servidor
comience a trabajar para ellas.
Departamento
Arquitectura
Computadores
UPC
© J.C. Cruellas
Juan Carlos Cruellas Ibarz
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
3
Sistemas de Transportes de Datos (STD)
Tema III: UDP y TCP (Entrega 4)
___________________________________
Operaciones
• El proceso de llegar al estado ESTABLISHED es algo
transparente para el servidor.
• Cuando el servidor invoca la función accept(), TCP le
entrega la primera entrada de la última cola.
• Números variables, porque la propia definición del
backlog es algo confusa: desde un valor de 5 iniciales,
a valores de 64 o más.
• En los modernos sistemas operativos se permite
ajustar su valor mediante variables de entorno.
Departamento
Arquitectura
Computadores
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
UPC
___________________________________
Operaciones
• Aceptación por parte del servidor de una conexión
establecida por su módulo TCP. Esta operación le
devuelve al servidor la primera conexión que se
encuentra en la cola de conexiones establecidas por el
módulo TCP.
int accept(int sockfd, sotruct sockaddr *cliaddr,
socklen_t *addrlen) ;
sockfd: descriptor del socket -listening socketdevuelto por socket().
cliaddr: (out) dirección de protocolo remota del
proceso con el que se comunicará (típicamente una
aplicación cliente).
Departamento
Arquitectura
Computadores
UPC
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
___________________________________
Operaciones
valor devuelto: un descriptor correspondiente a la
nueva conexión -connected socket• Un servidor crea normalmente:
– Un solo “listening socket” por el que recibe las peticiones
de conexión, y que pervive mientras el servidor esté en
pie.
– Un “connected socket” por cada conexión que es
aceptada, y que desaparece cuando la correspondiente
conexión se cierra.
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
• Si no hay conexiones establecidas, accept() queda a la
espera del establecimiento de alguna (bloqueo).
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
UPC
Juan Carlos Cruellas Ibarz
4
Sistemas de Transportes de Datos (STD)
Tema III: UDP y TCP (Entrega 4)
___________________________________
Operaciones
• Envío de datos a la aplicación remota.
size_t write (int sockfd, const char *buffer, size_t
length);
buffer: dirección del buffer con los datos a enviar.
length: número de bytes a enviar.
Valor devuelto: código de error.
• Operación send: argumento para flags (datos
urgentes, pe)
Departamento
Arquitectura
Computadores
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
UPC
___________________________________
Operaciones
• Recepción de datos a través de un socket.
size_t read (int sockfd, const char *buffer, size_t
num);
buffer: dirección del buffer donde depositar los datos
recibidos.
num: número de bytes a leer.
Valor devuelto: código de error.
• Operación bloqueante: no devuelve valor hasta que lee
datos. La aplicación normalmente detiene su trabajo a
la espera de que read() devuelva algún valor.
Departamento
Arquitectura
Computadores
UPC
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
___________________________________
Operaciones
• Finalización de una conexión.
Int close(int sockfd);
• El descriptor no se utilizará más en esta conexión.
• El módulo TCP intenta enviar todos los datos que
todavía no ha enviado.
• Cuando lo ha hecho, inicia el intercambio de
segmentos para finalizar la conexión.
Departamento
Arquitectura
Computadores
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
UPC
Juan Carlos Cruellas Ibarz
5
Sistemas de Transportes de Datos (STD)
Tema III: UDP y TCP (Entrega 4)
___________________________________
Secuenciamiento de invocaciones
Aplicación Servidor
___________________________________
___________________________________
socket()
___________________________________
bind() -a puerto conocido-
___________________________________
listen()
Aplicación Cliente
___________________________________
socket()
accept()
___________________________________
Establecimiento conexión -3WH-
connect()
Datos
Bloqueo hasta
conexión con
cliente
read()
write()
Procesado
Datos
read()
write()
EOF
close()
Departamento
Arquitectura
Computadores
read()
close()
Grupo de Aplicaciones Telemáticas
© J.C. Cruellas
UPC
___________________________________
___________________________________
ack
CLOSED
close
LAST_ACK
___________________________________
___________________________________
___________________________________
___________________________________
TIME_WAIT
___________________________________
FIIN_WAIT 2
CLOSE_WAIT
ack
FIN
Close (act.)
FIN_WAIT 1
Retorno read
Read devuelve 0
Retorno de read
<serv. Procesa>
write
read -espera ret-
Retorno accept
read -espera ret-
ESTABLISHED
write
read -espera ret- Data (r
equ
est)
ESTABLISHED
Retorno Connect
SYN
SYN_SENT
Socket,
connect -espera ret-
FIN
© J.C. Cruellas
ack
Departamento
Arquitectura
Computadores
UPC
ply)
Data (re
ack
N,
SY
ack
SYN_RCVD
Socket,bind,
listen
LISTEN
Accept -espera ret-
Invocaciones, devoluciones y estados
Grupo de Aplicaciones Telemáticas
___________________________________
Servidores concurrentes
1. Cliente conecta con servidor
desde puerto 1300 a dirección
de protocolo 205.63.23.31.21
(*.21,*.*): Espera conexión por puerto
21 en cualquier interfaz (*.21) desde
cualquier @IP y cualquier puerto (*.*)
205.63.223.31 2.Servidor crea un proceso hijo
1
servidor
(fork) copia de él mismo, para
Pet. conexión
conexión con el cliente
{*.21,*.*}
“listening
socket”
cliente
n
ió
3.Cliente y servidor intercamx
2
ne
bian información a través de la
puerto 1300
co
3
t.
conexión formada por los
Pe
servidor
dos sockets en los extremos
4
Connected socket
cliente
4. Otro proceso cliente en
Con :{205.63.223.31.21,197.67.8.1.1300}
197.67.8.1 pide conexión a
puerto 1301
través de otro puerto efímero
6
5
1301
197.67.8.1
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
servidor Connected socket 5. Servidor crea otro proceso
hijo (connected socket) para
Con: {205.63.223.31.21,197.67.8.1.1301}
Departamento
Arquitectura
Computadores
© J.C. Cruellas
la nueva conexión
6. Intercambio en nueva
conexión
Grupo de Aplicaciones Telemáticas
UPC
Juan Carlos Cruellas Ibarz
6
Sistemas de Transportes de Datos (STD)
Tema III: UDP y TCP (Entrega 4)
___________________________________
Servidores concurrentes y sockets
Servidor: ha hecho socket(), connect(),bind(),listen()
-descriptor: listenfd-,y accept():éste NO hace return porque
no hay conexión de cliente: espera que lo haga.
{*.21,*.*}
servidor
listenfd “listening socket”
.
1 P. C
cliente
connfd
5
2
connect()
Co
3 fork()
ne
4 xió
n
Cliente: Inicialmente
ha invocado socket().
servidor
listenfd
connfd
Departamento
Arquitectura
Computadores
1. Cliente conecta con servidor
invocando a connect()
2.Función accept() devuelve un
valor. El kernel ha generado un
nuevo socket connfd -connected socket3.Servidor hace un fork y crea
un hijo copia de sí mismo
4.La conexión queda establecida entre el cliente y el connfd
del hijo.
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
5
5. Padre cierra su“connfd” y el
Connected socket hijo cierra su “listenfd”
6. El padre queda con su
socket de escucha y el hijo
con su socket conectado. Otra
petición de conexión volverá a
desencadenar un proceso
similar.
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
UPC
___________________________________
Supervisión de conexiones: netstat
• Aplicación netstat: informa de estado de diversos
aspectos del soft de red y el estado actual de las
comunicaciones.
• Opción -ni: información de los interfaces de red (lo,
eth0, etc)
• Opción -rn: información de tabla de encaminamiento
(idéntico a comando route).
• -a -f inet: estado de las conexiones en curso. Tabla:
Proto
Recv-Q Send-Q Loc. Add. For. Add. State
Departamento
Arquitectura
Computadores
UPC
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
___________________________________
Supervisión de conexiones: netstat
• Columna de protocolo: TCP, UDP, etc.
• Columna de estado: estado del kernel.
• Columnas Loc. Add. y For. Add. hacen referencia a
direcciones de protoclo (@IP.numero de puerto) local y
remota. Alguna notación:
– En un servidor: Loc. Add. *.21 en estado LISTEN indica
que escucha por todos los interfaces de red (@IP=*) máquina multihomed), pero por el puerto 21.
– En un servidor: For. Add. *.* en estado LISTEN indica
que espera conexiones desde cualquier @IP y desde
cualquier puerto.
Departamento
Arquitectura
Computadores
© J.C. Cruellas
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Grupo de Aplicaciones Telemáticas
UPC
Juan Carlos Cruellas Ibarz
7
Sistemas de Transportes de Datos (STD)
Tema III: UDP y TCP (Entrega 4)
___________________________________
Supervisión de conexiones: netstat
– En servidor: Loc Add. @IP.puerto, For Add @IP’.p’ y
estado ESTABLISHED: se ha establecido una conexión
entre el servidor, a través de su @IP, con un cliente con
@IP’ y a través del puerto remoto p’.
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
___________________________________
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
UPC
Juan Carlos Cruellas Ibarz
8
Descargar