Subido por Gaby Cruz

Presentación Sockets

Anuncio
Introducción
●
●
El día de hoy se usan computadoras
para:
–
Hacer llamadas telefónicas.
–
Ver televisión.
–
Enviar mensajes de texto, etc.
Cada día se crean aplicaciones que
demandan más ancho de banda y
acceso a internet, el impacto de
internet continuará creciendo en el
futuro visible.
37
¿Cómo un programa se
comunica con otro a través de la
red?
●
●
●
●
Canal de comunicacion
Computadoras
(hosts)
interconectadas
Routers
Programas
de
aplicación
(servidores y clientes, puertos)
38
¿Cómo un programa se
comunica con otro a través de la
red?
●
●
●
●
La información se transmite en la red son
secuencias de bits que se denominan paquetes
Un paquete contiene información de control
que la red usa para hacer su trabajo y algunas
veces incluye información del usuario.
Un protocolo es un acuerdo sobre el
intercambio de paquetes y el significado de
cada parte (estructura)
Para resolver distintos problemas se han
diseñado de forma modular distintos
protocolos (suite TCP/IP, continene los
protocolos TCP, IP, UDP)
39
¿Cómo un programa se
comunica con otro a través de la
red?
Morgan, Kaufman TCP/IP Sockets in java,
Segunda edición, 2008
40
Acerca de las direcciones
●
●
●
●
●
●
En TCP/IP, se requiere de dos piezas de información para
identificar un programa particular: una dirección de
internet (IP) y un número de puerto (dirección
interpretada por el protocolo TCP o UDP)
IP vienen en dos versiones IPv4 (32 bits) e IPv6 (128
bits).
Los puertos son direcciones de 16 bits sin signo, de 1 a
65,535 (0 es reservado)
La dirección de loopback es asignada a una interfaz
especial virtual que simplemente hace eco de los
paquetes transmitidos de regreso al emisor.
Dirección loopback IPv4 es 127.0.0.1 y para IPv6 es
0:0:0:0:0:0:0:1
Domain Name Service
41
Comunicaciones TCP/IP
Introducción
●
●
Un sistema de comunicaciones se
compone de una pila de niveles
encargados de distintas tareas.
A este modelo teórico se le llama el Modelo
de Referencia OSI.
42
Comunicaciones TCP/IP
Introducción
●
●
En una red TCP/IP (por ejemplo Internet) algunos
niveles se fusionan quedando la siguiente pila:
Cuando programamos en Java, solo nos
preocupamos del nivel de Aplicación. Java
y el Sistema Operativo ya se encargan del
resto.
43
Comunicaciones TCP/IP
Introducción
●
●
●
●
Las máquinas tienen habitualmente una
conexión a la red por la que le van a llegar
todos los datos.
Pero en una misma máquina puede haber n
aplicaciones esperando datos.
¿Cómo se sabe para que aplicación son los
datos? Gracias a los puertos.
Para enviar algo por una red TCP/IP se
direcciona mediante una dirección y un puerto:
–
Dirección: especifica la máquina destino.
–
Puerto: especifica la aplicación destino.
44
Comunicaciones TCP/IP
Introducción
●
Gráficamente
45
Comunicaciones TCP/IP
Introducción
●
●
Algunas direcciones especiales:
–
127.0.0.1: Conocida con el nombre de
LoopBack. Apunta a la propia máquina.
–
192.168.x.x (hay más): Utilizadas para las
redes locales privadas conectadas a Internet
(por ejemplo vía ADSL).
Algunos puertos conocidos:
–
21: Servidores FTP.
–
23: Servidores Telnet.
–
25: Servidores SMTP.
–
80: Servidores Web.
46
Clientes y Servidores
Introducción
●
●
Se refiere a Roles
–
Cliente, el programa que inicia la comunicación.
–
Servidor, el programa que espera pasivamente
para una petición y entonces responde al
cliente que lo constactó.
Juntos, el cliente y el servidor forman una
aplicación:
–
21: Servidores FTP.
–
23: Servidores Telnet.
–
25: Servidores SMTP.
–
80: Servidores Web.
47
Comunicaciones TCP/IP
Introducción
●
●
Siglas:
–
HTTP: HiperText Transport Protocol.
–
FTP: File Transport Protocol.
–
TCP: Transmission Control Protocol.
–
UDP: User Datagram Protocol.
–
IP: Internet Protocol.
–
URL: Uniform Resource Locator.
Todas las clases referentes a
comunicación
en
redes
TCP/IP
encuentran en java.net.*
la
se
48
URL
●
●
●
Una URL es el identificador unívoco de un
recurso en Internet.
Una URL consta de las siguientes partes:
–
Protocolo.
–
Dirección de la máquina (host).
–
Puerto.
–
Path.
Por ejemplo:
http://download.eclipse.org:80/downloads/in
dex.php
49
Creando una URL
●
●
En Java, la URL está implementada por la clase java.net.URL
Lo mas sencillo es utilizar el constructor donde se le pasa
la URL como un String:
URL aURL = new URL(“http://www.ibm.com/index.html”);
●
●
Esta es una URL absoluta.
Pero también podemos crear URLs relativas mediante otro
constructor:
URL base = new URL(“http://www.ibm.com/”);
URL final = new URL(base,“index.html”);
50
Creando una URL
●
●
Existen mas constructores donde se puede
especificar por separado el puerto, el path, etc....
Todos los constructores de la clase java.net.URL
tienen la siguiente cláusula throws:
public
URL(String
MalformedURLException;
●
spec)
throws
Por tanto, siempre tendremos que construir las
URLs en un bloque try & catch donde recojamos
la excepción java.net.MalformedURLException
51
Atributos de una URL
●
Podemos acceder a los atributos de una
URL mediante los siguientes métodos:
–
getProtocol(): Devuelve el protocolo de
la URL.
–
getHost(): Devuelve el host (dirección)
de la URL.
–
getPort(): Devuelve el puerto de la URL.
–
getFile(): Devuelve el path del recurso.
–
getRef(): Devuelve la referencia dentro
del recurso.
52
Ejemplo
53
Leyendo de una URL
●
●
●
La clase java.net.URL tiene un método para
poder acceder a su stream de entrada.
Este stream es una instancia de la clase
java.io.InputStream
El método es:
public final java.io.InputStream openStream()
throws java.io.IOExcpetion;
●
A partir del stream ya podremos leer
directamente o usar cualquier tipo de filtro
sobre este stream.
54
Ejemplo
55
Conectando con una URL
●
Una vez que hemos creado una URL, podemos establecer
una conexión con ella a través del método:
public java.net.URLConnection openConnection()
throws java.io.IOExcpetion;
●
●
●
Mediante una conexión podremos establecer un diálogo con
la URL: escribir y leer.
Nota: Una URL no tiene porque ser solo un recurso estático
como una página HTML o una imagen. También puede ser
un programa CGI, un script PHP, un Servlet Java, una Java
Server Page (JSP), etc......
Lo lograremos mediante los métodos getOutputStream y
getInputStream.
56
Socket
●
●
●
Habitualmente, tenemos una aplicación
servidora esperando conexiones de un
cliente en un puerto.
Y tenemos una aplicación cliente que quiere
conectar con ese servidor en ese puerto.
Un socket es el link entre una aplicación
servidora y un puerto.
57
Socket
●
●
●
●
Cuando un cliente conecta con el servidor se crea un
nuevo socket a un nuevo puerto.
De esta forma, el servidor puede seguir esperando
conexiones en el socket principal y comunicarse con el
cliente conectado.
De igual forma se establece un socket en el cliente en
un puerto local.
Por tanto, la comunicación se establece entre dos
sockets.
58
Socket vs URL
●
●
●
Las URLs son un caso específico del trabajo
con sockets. Las clases Java relacionadas
con las URLs utilizan por debajo sockets.
Para el desarrollador es más fácil usar las
clases URL, URLConnection, etc.... que los
sockets directamente.
Pero hay muchos casos donde se requieren
clases de comunicación de bajo nivel. Por
ejemplo, la implementación de un servidor,
el uso de un protocolo propietario, etc....
59
Socket
●
Las clases Java que implementan los sockets
son:
java.net.Socket
java.net.SocketServer
●
●
java.net.Socket sirve para establecer un
socket en un cliente. Establecer la conexión
con un socket servidor.
java.net.SocketServer sirve para establecer un
socket en un servidor. Poder escuchar
posibles conexiones desde sockets cliente.
60
Java.net.Socket
●
Trabajar con un socket cliente comprende los
siguientes pasos:
–
Abrir el socket: mediante uno de sus
constructores,
habitualmente
dándole
la
dirección y el puerto destino.
–
Abrir el stream de entrada y/o de salida: mediante
los
métodos
getInputStream()
y
getOutputStream().
–
Leer y/o escribir al socket: mediante los métodos
de los streams o los filtros que hayamos creado.
–
Cerrar los streams: mediante el método close().
–
Cerrar el socket: mediante el método close().
61
Atributos de un socket
●
Podemos acceder a los atributos de un
socket mediante los siguientes métodos:
–
getInetAddress():
Devuelve
dirección destino (remota).
la
–
getPort(): Devuelve el puerto destino
(remoto).
–
getLocalAddress():
Devuelve
dirección origen (local).
–
getLocalPort(): Devuelve el puerto
origen (local).
la
62
Ejemplo
63
Java.net.ServerSocket
Trabajar con un socket servidor comprende los
siguientes pasos:
●
–
Abrir el socket: mediante uno de sus constructores,
habitualmente dándole el puerto donde escuchar.
–
Esperar una petición cliente: mediante el método
accept() que devuelve el nuevo socket.
–
Abrir el stream de entrada y/o de salida: mediante
los
métodos
getInputStream()
y
getOutputStream().
–
Leer y/o escribir al socket: mediante los métodos
de los streams o los filtros que hayamos creado.
–
Cerrar los streams: mediante el método close().
–
Cerrar el socket: mediante el método close().
64
Ejemplo
65
Ejemplo
66
Aceptar múltiples clientes
●
Para desarrollar un servidor que pueda
gestionar mas de un cliente a la vez
debemos:
–
Introducir la ejecución del método
accept() en un bucle.
–
Este bucle podrá ser infinito o
controlado, dependiendo de como
queramos terminar el servidor.
–
Abrir un thread por cada conexión
recibida, pasándole como parámetro el
nuevo socket generado.
67
Ejemplo
68
Ejemplo
69
Ejemplo
70
Más acerca de las direcciones
InetAddress
●
boolean isAnyLocalAddress()
●
boolean isLinkLocalAddress()
●
boolean isLoopbackAddress()
●
boolean isMulticastAddress()
●
boolean isMCGlobal()
●
boolean isMCLinkLocal()
●
boolean isMCNodeLocal()
●
boolean isMCOrgLocal()
●
boolean isMCSiteLocal()
●
boolean isReacheable(int timeout)
●
boolean isReacheable(NetworkInterface netif,
int ttl, int timeout)
71
¿Cómo un programa se
comunica con otro a través de la
red?
●
●
●
●
Canal de comunicacion
Computadoras
(hosts)
interconectadas
Routers
Programas
de
aplicación
(servidores y clientes, puertos)
72
¿Cómo un programa se
comunica con otro a través de la
red?
●
●
●
●
La información se transmite en la red son
secuencias de bits que se denominan paquetes
Un paquete contiene información de control
que la red usa para hacer su trabajo y algunas
veces incluye información del usuario.
Un protocolo es un acuerdo sobre el
intercambio de paquetes y el significado de
cada parte (estructura)
Para resolver distintos problemas se han
diseñado de forma modular distintos
protocolos (suite TCP/IP, continene los
protocolos TCP, IP, UDP)
73
¿Cómo un programa se
comunica con otro a través de la
red?
Morgan, Kaufman TCP/IP Sockets in java,
Segunda edición, 2008
74
Acerca de las direcciones
●
●
●
●
●
●
En TCP/IP, se requiere de dos piezas de información para
identificar un programa particular: una dirección de
internet (IP) y un número de puerto (dirección
interpretada por el protocolo TCP o UDP)
IP vienen en dos versiones IPv4 (32 bits) e IPv6 (128
bits).
Los puertos son direcciones de 16 bits sin signo, de 1 a
65,535 (0 es reservado)
La dirección de loopback es asignada a una interfaz
especial virtual que simplemente hace eco de los
paquetes transmitidos de regreso al emisor.
Dirección loopback IPv4 es 127.0.0.1 y para IPv6 es
0:0:0:0:0:0:0:1
Domain Name Service
75
Operaciones a nivel de bits
●
●
●
●
●
●
En TCP/IP, se requiere de dos piezas de información para
identificar un programa particular: una dirección de
internet (IP) y un número de puerto (dirección
interpretada por el protocolo TCP o UDP)
IP vienen en dos versiones IPv4 (32 bits) e IPv6 (128
bits).
Los puertos son direcciones de 16 bits sin signo, de 1 a
65,535 (0 es reservado)
La dirección de loopback es asignada a una interfaz
especial virtual que simplemente hace eco de los
paquetes transmitidos de regreso al emisor.
Dirección loopback IPv4 es 127.0.0.1 y para IPv6 es
0:0:0:0:0:0:0:1
Domain Name Service
76
Operaciones a nivel de bits
(MASCARAS)
●
●
●
●
●
●
En TCP/IP, se requiere de dos piezas de información para
identificar un programa particular: una dirección de
internet (IP) y un número de puerto (dirección
interpretada por el protocolo TCP o UDP)
IP vienen en dos versiones IPv4 (32 bits) e IPv6 (128
bits).
Los puertos son direcciones de 16 bits sin signo, de 1 a
65,535 (0 es reservado)
La dirección de loopback es asignada a una interfaz
especial virtual que simplemente hace eco de los
paquetes transmitidos de regreso al emisor.
Dirección loopback IPv4 es 127.0.0.1 y para IPv6 es
0:0:0:0:0:0:0:1
Domain Name Service
77
Composición de I/O Streams
78
Composición de I/O Streams
79
Framing and Parsing
Framing se refiere a el problema de
habilitar al receptor para localizar el
inicio y el fin de un mensaje. Ya sea que
la información sea codificada como
texto,
como
numeros
binarios
representados en formato multibyte, o
alguna combinación de los dos, el
protocolo de la aplicación debe
especificar como el receptor de un
mensaje pueda determinar cuando ha
recibido todos los mensajes.
80
Framing and Parsing
Si un mensaje completo es enviado
como
el
payload
de
un
DatagramPacket, el problema es trivial:
el payload del DatagramPacket tiene
una longitud finita.
Para mensajes enviados sobre sockets
TCP,
puede ser más complicada
porque el mensaje TCP no tiene noción
de fronteras.
81
Framing and Parsing
Si los campos en un mensaje tienen tamaños
fijos y los mensajes estan compuestos de un
número fijo de campos, entonces el tamaño
del mensaje es conocido y el receptor puede
simplemente leer el número esperado de bytes
en un buffer de tipo byte[].
Sin embargo, cuando el mensaje varia en
longitud – por ejemplo, contiene algunos
campos de longitud arbitraria (cadenas de
texto) no sabriamos con antelación cuántos
bytes leer.
82
Framing and Parsing
Si un receptor trata de recibir mas bytes del socket que de los
que estan en el mensjaem una de dos cosas pueden pasar.
●
●
Si no hay otro mensaje en el canal, el receptor se bloqueará
evitando que el mensaje se procese. Si el emisor se bloquea
esperando una replica o respuesta al mensaje enviado,
entonces se crea un candado mortal.
Por otro lado, si un mensaje está en el canal, el receptor
podría leer alguna parte o todo el mensaje siguiente como
parte del mensaje anterior, llevando a errores del protocolo.
Por lo que framing es una importante consideración cuando se
usan sockets TCP.
83
Framing and Parsing
Las mismas consideraciónes se aplican para
encontrar las fronteras de los campos individuales
del mensaje.
●
●
El receptor necesita saber donde termina uno y
donde empieza otro.
Para mejor limpieza y simplicidad del código, se
deben abordar los dos problemas de forma
separada: primero localizar el fin de un mensaje, y
después analizar el mensaje como un todo.
84
Framing and Parsing
Técnicas generales para encontrar el fin de un mensaje:
●
●
Basado en delimitador: el fin del mensaje es indicado
por un marcador único, una secuencia explícita de
bytes que el emisor transmite inmediatamente después
de los datos. El delimitador no debe nunca aparecer
como parte de los datos.
Longitud explícita: Los mensajes o cmapos variables
deben ser precedidos por un campo de longitud fija
que diga cuantos bytes contiene.
85
Framing and Parsing
El esquema basado en delimitador, es usado con mensajes
codificados como texto:
●
●
●
●
Una secuencia específica de caracteres o caracter es definida
para marcar el fin de un mensaje.
El receptor simplemente explora los datos (como caracter)
buscando la secuencia que delimita el mensaje y regresa la
secuencia de caracteres que precede al delimitador.
El emisor debe asegurarse de que dentro del mensaje no vaya el
caracter de delimitación.
La desventaja es que tanto el emisor como el receptor deben
explorar el mensaje.
86
Framing and Parsing
El enfoque basado en longitud es mas simple, pero requiere conocer la
frontera superior del tamaño del mensaje.
●
●
●
●
El emisor primero determina la longitud del mensaje, lo codifica como
un entero y envia como prefijo el mensaje resultante.
La parte superior de la longitud del mensaje determina el numero de
bytes requeridos para codificar el mensaje: un byte si el mensaje
siempre contiene menos de 253 bytes, dos bytes si el mensaje es
siempre menor que 65,536 bytes, y así sucesivamente.
El emisor debe asegurarse de que dentro del mensaje no vaya el
caracter de delimitación.
La desventaja es que tanto el emisor como el receptor deben explorar
el mensaje.
87
Referencias
Copyright (c)
José M. Ordax
88
Descargar