Upload
luis-miguel-de-bello
View
121
Download
14
Tags:
Embed Size (px)
Citation preview
Networking
Cuando hablamos de networking nos estamos refiriendo a la posibilidad de
trabajar con diversas aplicación ubicadas físicamente en distintas
estaciones de trabajo y permitir que se conecten vía una red, para trabajar
de manera cooperativa o simplemente enviar y recibir información.
Java advanced programming
Socket
Un Socket es una representación abstracta del extremo (Endpoint) en un
proceso de comunicación. Para que se dé la comunicación en una Red, el
proceso de comunicación requiere un Socket a cada extremo
Emisor/Receptor y viceversa.
Java advanced programming
Protocolos (Capa 4 - Nivel de Transporte)
Cuando conectamos dos sockets en medio existe algo que se conoce
como protocolo de transporte, aquí estaremos hablando de TCP o UDP.
Java advanced programming
TCP
TCP (Transmission Control Protocol)
- Protocolo de transporte “orientado a conexión”
- Garantiza un servicio extremo a extremo fiable
- Detectar/retransmitir segmentos de datos perdidos o erróneos
- Detectar y descartar segmentos duplicados
- Ordenar los segmentos en el destino y pasarlos de forma ordenada a la capa
de aplicación
- Utilizado en aplicaciones en las que la seguridad en la entrega es más
importante que la rapidez
- Ejemplos: FTP, HTTP, Telnet, SMTP, etc.
Java advanced programming
UDP
UDP(User Datagram Protocol)
- Protocolo de transporte sin conexión
- No garantiza un servicio extremo a extremo fiable
- No controla la pérdida de paquetes, los errores o la duplicidad
- Utilizado en aplicaciones en las que la rapidez en la entrega es más importante
que la seguridad
- Ejemplos: DNS, SNMP, RIP, RTP, etc
Java advanced programming
Cliente/Servidor
Modelo cliente-servidor
- Es el patrón de comunicación usado por la mayoría de las aplicaciones TCP/UDP
- El funcionamiento básico se emplea en otro modelos (Ejemplo: peer-to-peer)
Cliente
- Es la aplicación que inicia la conexión o el intercambio de datos con la máquina
remota (servidor)
- La aplicación cliente normalmente la arranca un usuario cuando quiere utilizar un
servicio de la red
- Ejemplos: Navegador web (TCP), cliente de e-mail (TCP), consulta al servidor DNS
(UDP)
Servidor
- Es la aplicación que recibe y acepta la solicitud de conexión o intercambio de datos
del cliente
- Esta aplicación normalmente está ejecutándose continuamente en la máquina
remota y está a la espera de solicitudes de clientes
- Ejemplos: Servidor Web (TCP), Servidor de correo electrónico (TCP), Servidor DNS
(UDP) Java advanced programming
Sockets y Puertos
Sockets y Puertos
- El canal de comunicación establecido entre el cliente y el servidor se denomina
“socket” (enchufe)
- El socket permite el intercambio de datos bidireccional entre cliente y servidor
- Cada aplicación servidor o cliente está identificada por un número de puerto
Parámetros en una comunicación TCP o UDP
- Dirección IP del cliente: Identifica a la máquina cliente (la que inicia la conexión o
intercambio de datos)
- Puerto del cliente: Identifica al proceso cliente en la máquina cliente
- Dirección IP del servidor: Identifica a la máquina servidora (la que acepta la
solicitud de conexión o intercambio de datos)
- Puerto del servidor: Identifica al proceso servidor en la máquina servidora
Java advanced programming
Direccion IP
Una dirección IP es un número que identifica de manera lógica y jerárquica a
una interfaz de un dispositivo (habitualmente una computadora) dentro de
una red que utilice el protocolo IP (Internet Protocol), que corresponde al
nivel de red del protocolo TCP/IP.
Dicho número no se ha de confundir con la dirección MAC que es un número
hexadecimal fijo que es asignado a la tarjeta o dispositivo de red por el
fabricante, mientras que la dirección IP se puede cambiar.
Es habitual que un usuario que se conecta desde su hogar a Internet utilice
una dirección IP. Esta dirección puede cambiar cada vez que se conecta; y a
esta forma de asignación de dirección IP se denomina una dirección IP
dinámica.
Los sitios de Internet que por su naturaleza necesitan estar
permanentemente conectados, generalmente tienen una dirección IP fija, es
decir, no cambia con el tiempo. Los servidores de correo, DNS, FTP
públicos, y servidores de páginas web necesariamente deben contar con una
dirección IP fija o estática, ya que de esta forma se permite su localización
en la red.
Java advanced programming
Puerto
Un puerto es una dirección numérica a través de la cual se procesa un
servicio, es decir, no son puertos físicos semejantes al puerto paralelo para
conectar la impresora, sino que son direcciones lógicas proporcionadas por
el sistema operativo para poder responder.
Las comunicaciones de información relacionada con Web tienen lugar a
través del puerto 80 mediante protocolo TCP. Para emular esto en Java, se
utiliza la clase Socket.
Teóricamente hay 65535 puertos disponibles, aunque los puertos del 1 al
1023 están reservados al uso de servicios estándar proporcionados por el
sistema, quedando el resto libre para utilización por las aplicaciones de
usuario. De no existir los puertos, solamente se podría ofrecer un servicio
por máquina. Nótese que el protocolo IP no sabe nada al respecto de los
números de puerto.
Java advanced programming
URL (Uniform Resource Locator)
Una URL, o dirección, es en realidad un puntero a un determinado recurso. Al
especificar una URL, se está indicando:
- El protocolo utilizado para acceder al servidor (HTTP, por ejemplo)
- El nombre del servidor
- El puerto de conexión (Opcional)
- El path al recurso
- El nombre de un archivo determinado (Opcional a veces)
- Un punto de referencia dentro del archivo (Opcional)
La sintaxis general, para una dirección URL, sería:
protocolo://nombre_servidor[:puerto]/directorio/archivo#referencia
Java advanced programming
ServerSocket
Esta clase es la encargada de definir un puerto de escucha y actuar de
servidor, iniciamos el ServerSocket en un puerto y nos quedamos aceptando
peticiones.
Java advanced programming
Socket
Cuando implementamos el lado Cliente debemos usar un socket e indicarle a
donde nos vamos a conectar.
Java advanced programming
Entrada/Salida
La API de Java diferencia entre los streams de caracteres y streams de bytes.
Streams de bytes (InputStream y OutputStream)
- Diseñados para operar a nivel de byte.
- Hay ciertos dispositivos que sólo pueden trabajar a este nivel.
Streams de caracteres (Reader y Writer)
- Diseñados para optimizar las operaciones con cadenas de caracteres.
- Posteriores a las anteriores.
- Soportan codificaciones Unicode-16.
- Cualquier fichero de texto puede ser accedido directamente a través de este tipo de
stream.
- Existen dispositivos, que aunque están preparados para enviar/recibir información
de esta naturaleza, no pueden tratarse directamente con este stream. En estos
casos, se deberá envolver el stream de bytes con un stream de caracteres.
- InputStreamReader
- OutputStreamReader Java advanced programming
Java advanced programming
Errores tipicos Intentar usar un puerto que esta siendo usado por otra aplicación
- Obtendremos la exception " java.net.BindException: Address already in use:
connect "
Si dejamos el stream abierto y seguimos creando streams en algún
momento obtenemos el siguiente error.
- No buffer space available (maximum connections reached?):