Escolar Documentos
Profissional Documentos
Cultura Documentos
Internet
Protocolos en Internet
TCP/UDP
IP
Protocolo de
Acceso a Red
1
Internet
Opciones hardware típicas
• Ethernet
➫ tecnología CSMA a 10Mbps, limitada a paquetes de 1400 bytes.
Usa cable coaxial.
• Bridged Ethernet
➫ común en redes locales grandes, anillo con varios segmentos
Ethernet
• Fast Ethernet
➫ versión de Ethernet a 100Mbps
• FDDI (Fiber Distributed Data Interface) y DQDB
(Distributed Queue Dual Bus)
➫ para unir LANs en un campus o un área metropolitana
• ATM
➫ tecnología de conmutación para fibra óptica. Las interfaces de
usuario se definen a 155Mbps o 600 Mbps
© Juan Pavón Mestras, UCM, 1999 Programación con sockets 3
Internet
Internet Protocol (IP)
• Parte superior del nivel de red
• Protocolo datagrama, no orientado a conexión y no fiable
➫ No hay recuperación de errores
➫ Hay comprobación de errores, y los paquetes IP erróneos se tiran,
sin notificar al emisor
➫ Soporta fragmentación de datos en paquetes IP (<1400 bytes)
• Direcciones IP
➫ Cada máquina tiene una dirección única
➫ 4 clases de direcciones IP: A, B, C (network ID+host ID) y D
(grupos multicast)
➫ Los IP gateways encaminan los paquetes IP según su network ID
© Juan Pavón Mestras, UCM, 1999 Programación con sockets 4
2
Internet
Internet Protocol (IP)
• Problemas con IP:
➫ Los paquetes IP no se autentifican: El emisor puede mentir sobre
su identidad, y puede enviar paquetes a cualquier máquina o puerto
en la red
➫ Un sistema puede mentir sobre su dirección de máquina
➫ Los mensajes IP no son fiables: Pueden ser retirados en cualquier
lugar
➫ El encaminamiento IP es básicamente estático (hoy día)
Internet
Protocolos de nivel de transporte
• TCP (Transmission Control Protocol)
➫ Protocolo orientado a conexión, fiable (recuperación de errores), y
con control de flujo
➫ Establece un camino de bytes (byte stream)
• UDP (User Datagram Protocol)
➫ Protocolo no orientado a conexión y no fiable
➫ Si se recibe un paquete sin errores se pasa al proceso de usuario
destinatario, si no, se descarta silenciosamente
➫ Límite de tamaño de datagrama: 64 KB
➫ UDP Multicast
3
Internet
Protocolo de ventana deslizante en TCP
El emisor pone datos
La ventana tiene k ÒsegmentosÓ
Internet
DNS (Domain Name System)
Correspondencia entre nombres de máquinas y direcciones IP
java
GenŽricos Pa’ses
4
Internet
Protocolos de nivel de aplicación
• FTP: File Transport Protocol
• Telnet: Terminal Remoto
• Email: Simple Mail Transfer Protocol (SMTP)
• News: Network News Transfer Protocol (NNTP)
• DNS: Domain name service protocol
• NIS: Network information service ( “Yellow Pages”)
• NFS: Network file system protocol
• X11: X-server display protocol
• Web: HyperText Transfer Protocol (HTTP)
Puertos
Cada servicio está asociado a un puerto
inetd
/etc/services
5
Sockets
• Abstracción programable de canal de comunicación
➫ dirección de socket = dirección IP + número de puerto
• Dos procesos se pueden intercambiar información usando
un par de sockets:
➫ Los mensajes van entre un socket de un proceso y otro socket en
otro proceso
➫ Cuando los mensajes son enviados, se encolan en el socket hasta
que el protocolo de red los haya transmitido
➫ Cuando llegan, los mensajes son encolados en el socket de
recepción hasta que el proceso receptor los recoja
• Ciclo de vida igual al sistema de E/S Unix:
➫ Creación: apertura del socket
➫ Lectura y Escritura: recepción y envío de datos por el socket
➫ Destrucción: cierre del socket
© Juan Pavón Mestras, UCM, 1999 Programación con sockets 11
Sockets
Tipos de sockets
• Socket Stream (TCP)
➫ Servicio de transporte orientado a conexión:
m En el servidor un socket atiende peticiones de conexión
m En el cliente un socket solicita una conexión
m Una vez conectados, se pueden usar para transmitir datos en ambas
direcciones
• Socket Datagrama (UDP)
➫ Servicio de transporte no orientado a conexión:
m En cada datagrama es necesario enviar el descriptor del socket local y
la dirección del socket que debe recibir el datagrama
• Socket Raw
➫ Permite acceder a la capa de software de red subyacente o a
protocolos de más bajo nivel
m Se utiliza para depuración de código de los protocolos
© Juan Pavón Mestras, UCM, 1999 Programación con sockets 12
6
Socket streams
Establecimiento de conexi—n
puerto puerto
conexión
7
Programación de sockets con Java
Ejemplo: cliente de eco
import java.net.*;
import java.io.*; if (eco != null && entrada != null && salida != null) {
while ((texto = stdin.readLine()) != null) {
class ClienteEco { salida.println(texto);
public static void main( String args[] ) { System.out.println("echo: " + entrada.readLine());
final int PUERTOECO = 7; }
String maquina= ”localhost";
salida.close();
Socket eco = null; entrada.close();
BufferedReader entrada; eco.close();
PrintWriter salida; stdin.close();
}
BufferedReader stdin = new BufferedReader } catch (UnknownHostException e) {
(new InputStreamReader (System.in)); System.err.println("Máquina desconocida: maquina");
String texto; } catch (IOException e) {
System.err.println("Fallo en la conexión: "+e);
try { }
eco = new Socket ( maquina, PUERTOECO ); } // main
salida = new PrintWriter( new OutputStreamWriter } // ServidorEco
(eco.getOutputStream()), true );
entrada = new BufferedReader( new InputStreamReader
(eco.getInputStream()) );
8
Programación de sockets con Java
Ejemplo: servidor de eco
import java.net.*;
import java.io.*; if (cliente != null && entrada != null && salida != null) {
while ( true ) {
class ServidorEco { texto = entrada.readLine();
public static void main( String args[] ) { salida.println(texto);
final int PUERTOECO = 10007; System.out.println("echo: " + texto);
}
ServerSocket s = null;
Socket cliente = null; }
BufferedReader entrada; } catch (IOException e) {
PrintWriter salida; System.err.println("Fallo en la conexion: "+e);
}
String texto; } // main
} // ServidorEco
try {
s = new ServerSocket (PUERTOECO);
cliente = s.accept();
salida = new PrintWriter( new OutputStreamWriter(
cliente.getOutputStream()), true );
entrada = new BufferedReader( new InputStreamReader
(cliente.getInputStream()) );
petición de conexión
Servidor Eco MT Cliente
crea
puerto
puerto
Hebra Eco
conexión
9
Programación de sockets con Java
Ejemplo: servidor de eco con múltiples clientes
import java.net.*;
import java.io.*;
class ServidorEcoMT {
public static void main( String args[] ) {
final int PUERTOECO = 10007;
ServerSocket s = null;
try {
s = new ServerSocket (PUERTOECO);
while ( true )
new HebraEco ( s.accept() ).start();
} catch (IOException e) {
System.err.println("Fallo en la conexion: "+e);
}
} // main
} // ServidorEco
© Juan Pavón Mestras, UCM, 1999 Programación con sockets 19
10
Programación de datagramas con Java
Cliente de Eco con datagrama
import java.net.*;
import java.io.*; // recibe la respuesta:
paquete = new DatagramPacket(buf, buf.length);
class ClienteEcoDatagrama { eco.receive(paquete);
public static void main( String args[] ) { recibido = new String(paquete.getData());
final int PUERTOECO = 7; System.out.println("echo: " + recibido);
}
BufferedReader stdIn = new BufferedReader
(new InputStreamReader (System.in)); eco.close();
String texto, recibido;
byte[] buf = new byte[256]; }
catch (UnknownHostException e) {System.err.println(e); }
try { catch (SocketException e) {System.err.println(e); }
InetAddress direccion = catch (IOException e) {System.err.println(e); }
InetAddress.getByName("localhost");
DatagramSocket eco = new DatagramSocket(); } // main
DatagramPacket paquete; } // ServidorEcoDatagrama
URL
• URL (Universal Resource Locator)
➫ Representa un objeto o servicio en Internet
http://maquina/directorio/fichero.html
nombre de recurso (p.ej., un fichero)
Identificador de protocolo
• Clase URL
URL javasoft = new URL(“http://www.javasoft.com/”);
URL javadownload = new URL(javasoft, “download.html”);
➫ Métodos para manipular el URL:
m getProtocol
m getHost
m getPort
m getFile
m getRef
m openStream
© Juan Pavón Mestras, UCM, 1999 Programación con sockets 22
11
URL
Lectura de un URL
class EjemploLecturaURL {
public static void main(String[] args) {
try {
URL yahoo = new URL("http://www.yahoo.com/");
DataInputStream dis = new DataInputStream(yahoo.openStream());
String inputLine;
12