You are on page 1of 10

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

Departamento Acadmico de Informtica


REDES Y TELEPROCESO 2

Lab 01: Programacin de Sockets en TCP


Ing Manuel Pealoza Figueroa
Dime y lo olvidar. Mustrame y lo recordar. Involcrame y lo entender
Proverbio chino

1.

OBJETIVOS:
1.1
1.2
1.3
1.4

2.

Entender lo bsico de la comunicacin por redes.


Programar aplicaciones de red usando sockets.
Aprender cmo construir aplicaciones cliente/servidor que se comunican usando
sockets
Aprender el uso de sockets en Java.

BASE TEORICA COMPLENTARIA


Capa de Transporte:
- Puede ofrecer a sus usuarios un sistema transparente de intercambio de datos confiable,
operando de extremo a extremo (end-to-end).

- La capa de transporte es la responsable por la entrega proceso-a-proceso la entrega


de un paquete, la parte de un mensaje, desde un proceso a otro.

TCP: Transmission Control Protocol


-

RFC 793
Transporte/Servicio orientado a la conexin
Protocolo de transporte de Internet
Transferencia de datos full-dplex
Transporte confiable:
Control:
o de transmisin
o de flujo
o de errores
o de congestin de red
o ...
Provee servicio a la capa de aplicacin
Adaptable a LAN/WAN
Transferencia de un stream de bytes entre sistemas finales (end-to-end)

Cuando 2 aplicaciones desean comunicarse el uno al otro confiablemente, ellos


establecen una conexin y envan datos de una parte a la otra sobre esa conexin.
TCP provee un canal punto-a-punto para aplicaciones que requieren comunicaciones
confiables.
o HTTP (HyperText Transfer Protocol), FTP (File Transfer Protocol), y Telnet son
algunos ejemplos de aplicaciones que requieren un canal de comunicacin
confiable.
o El orden en la cual los datos son enviados y recibidos sobre la red es crtico para
el xito de estas aplicaciones.
o Cuando HTTP es usado para leer desde un URL, los datos tienen que ser
recibidos en el orden en el cual fueron enviados. De otra manera, se acabara
con un archivo HTML revuelto, un archivo ZIP corrupto, alguna otra
informacin invlida.

Puertos:
- En general, una computadora tiene una simple conexin fsica a la red.
o Todos los datos destinados a una computadora en particular llega a travs de
esa conexin.
o Sin embargo, los datos puede ser pretendidos por diferentes aplicaciones

corriendo en el mismo computador.


As como la computadora sabe a cul aplicacin reexpedir los datos?

A travs del uso de los puertos


- Cada proceso que desea comunicarse con otro proceso se identifica a s mismo para
la suite de protocolos TCP/IP por 1 ms puertos.
- Los datos trasmitidos por el Internet estn acompaados por informacin de
direccionamiento que identifica a la computadora y al puerto para el cual estn
destinados.
o La computadora est identificada por su direccin IP de 32-bit.
o Los puertos son identificados por un nmero de 16-bit, los cuales TCP y UDP
usan para entregar los datos a la aplicacin correcta.
-

Hay 2 rangos de puertos:


o "Well-known" o bien-conocidos:
0: reservado
1 1023: usado por procesos servidor
o Efmeros:
1024 - 65535: usado por procesos cliente

- Sin embargo, el IETF IANA define 3 rangos de puertos:


o Puertos Well-Known (bien-conocidos) / Puertos de Sistema
rango: 0 1023
son asignados por el IANA
o Puertos Registrados / Puertos de Usuario,
rango: 1024 49151
no deberan ser usados sin el registro del IANA
o Puertos Dinmicos / Puertos Privados / Puertos efmeros
rango: 49152 65535
tpicamente usados como puerto fuente por clientes TCP UDP.

Socket:
- Una interface:
o en el host local
o creada por la aplicacin
o controlada por el SO
(Una estructura de datos) dentro de la cual el proceso de aplicacin puede tanto enviar
como recibir mensajes a/desde otro proceso de aplicacin

- Conexiones:
o Normalmente, un servidor corre sobre una computadora especfica y tiene un
socket que est LIGADO al nmero de puerto respectivo.
o El servidor justamente espera, escuchando al socket por un cliente haga una
peticin de conexin.

En el lado del cliente: el cliente sabe el nombre_de_host de la mquina en el


cual el servidor est corriendo y el nmero de puerto en el cual el servidor est
escuchando.
Para hacer una peticin de conexin, el cliente intenta citarse con el
servidor en la mquina y puerto del servidor.
El cliente tambin necesita identificar a si mismo al servidor as se liga
a un puerto local que usar durante la conexin (el nmero de puerto
es usualmente asignado por el sistema).

Si todo va bien, el servidor acepta la conexin.


A la aceptacin, el servidor obtiene un nuevo socket ligado a su mismo
puerto local y tambin tiene su socket seteado a la direccin y puerto
del cliente.
El servidor necesita este nuevo socket a fin de poder continuar
escuchando en el socket original por peticiones de conexin de otros
clientes mientras atiende sirve a las necesidades del cliente conectado.

En el lado del cliente, si la conexin es aceptada, un socket es

satisfactoriamente creado y el cliente puede usar este socket para comunicarse


con el servidor.
El cliente y el servidor pueden ahora comunicarse con escribir A leer DESDE
sus sockets.

- El par <direccin IP>, <N de puerto> brinda una identificacin nica para los servicios
de capa de aplicacin en un host, y sirve para identificar a un socket.
o Cada lado de una conexin TCP tiene un socket que puede ser identificado por:
la 3-tupla <TCP, direccin IP, # puerto>

la 2-tupla <direccin IP, # puerto>.


o Si 2 procesos estn comunicndose sobre TCP, ellos tienen una conexin lgica
que es de una manera nica identificable por los 2 sockets involucrados, esto
es, por:
una 5-tupla <TCP, direccin IP local, # puerto local, direccin IP remota,
# puerto remoto>

una 4-tupla <direccin IP local, # puerto local, direccin IP remota, #


puerto remoto>.
o Entonces, una conexin TCP est identificada por un par de sockets (el del
cliente y el del servidor) en ambos extremos.

3.

RECURSOS
Los recursos a utilizar en el trabajo de laboratorio son:
3.1 Java

4.

DESARROLLO DE LA PRACTICA:
En el presente trabajo de laboratorio se visualizar el estado de las conexiones TCP y se
implementar tanto un cliente que enva datos en minscula a un servidor, como un
servidor que recibe datos en minscula desde un cliente y lo devuelve de regreso pero en
maysculas haciendo uso del lenguaje Java.
4.1

Estado de las conexiones TCP:


netstat
o Muestra las conexiones, los puertos de escucha, estado de las conexiones,
estadsticas por protocolo, ...
o (Investigar las opciones de netstat).

- abrir una ventana DOS

- en el Prompt de comandos tipear:


netstat -an
Conexiones activas
Proto
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
UDP
UDP
UDP

4.2

Direccin local
Direccin remota
0.0.0.0:80
0.0.0.0:0
0.0.0.0:445
0.0.0.0:0
127.0.0.1:53
0.0.0.0:0
127.0.0.1:23401
0.0.0.0:0
192.168.1.6:53
0.0.0.0:0
192.168.1.6:139
0.0.0.0:0
192.168.1.6:6419
69.172.201.208:80
192.168.1.6:6420
16.58.219.130:443
192.168.56.1:138
*:*
192.168.56.1:1900 *:*
192.168.56.1:56284 *:*

Estado
LISTENING
LISTENING
LISTENING
LISTENING
LISTENING
LISTENING
ESTABLISHED
ESTABLISHED

Escribir una aplicacin cliente/servidor que implemente el servicio CAMBIAR


DATOS EN MINUSCULAS A MAYUSCULAS.

En la programacin de sockets, la estructura del programa es en mucho el


mismo:

Abrir un socket
Abrir un stream de entrada y un stream de salida para el socket.
Leer desde y escribir hacia el stream conforme al protocolo del servidor.
Cerrar los streams.
Cerrar el socket.
-

Ejemplo: aplicacin cliente-servidor:


APLICACIN CLIENTE:
1. Pre-condicin: El proceso servidor debe estar 1ro. en ejecucin
2. Cliente lee la lnea desde la entrada estndar (stream inDesdeUsuario), y
lo enva al server va socket (stream outAlServer)
3. El servidor lee la lnea desde el socket.
4. El server convierte la lnea a maysculas, lo enva de regreso al cliente
5. Cliente lee, imprime la lnea modificada desde el socket (inDesdeServer)

APLICACIN SERVIDOR Y CLIENTE:

APLICACIN CLIENTE:
ClienteTCP.java
/*
*/
import java.io.*;
import java.net.*;
class ClienteTCP {
public static void main(String argv[]) throws Exception
{
// variables
String sentencia;
String sentenciaModificada;
// crear un stream de entrada para la entrada del usuario
BufferedReader inDesdeUsuario =
new BufferedReader(new InputStreamReader(System.in));
// crear socket cliente y conectarse al server
Socket socketCliente = new Socket("id_Servidor", 6789);
// crear un stream de salida ligado al socket
DataOutputStream outAlServidor =
new DataOutputStream(socketCliente.getOutputStream());

// crear un stream de entrada ligado al socket


BufferedReader inDesdeServidor = new BufferedReader(new
InputStreamReader(socketCliente.getInputStream()));
// leer entrada
sentencia = inDesdeUsuario.readLine();
// enviar la entrada al server
outAlServidor.writeBytes(sentencia + '\n');
// leer paquete de rplica del server
sentenciaModificada = inDesdeServidor.readLine();
System.out.println("RESPUESTA DESDE EL SERVER: "
+ sentenciaModificada);
// cerrar
socketCliente.close();
}
}

APLICACIN SERVIDOR:
ServidorTCP.java
/*
*/
import java.io.*;
import java.net.*;
class ServidorTCP {
public static void main(String argv[]) throws Exception
{
String sentenciaCliente;
String sentenciaEnMay;
// crear el socket servidor (TCP) en el puerto 6789
ServerSocket socketServidor = new ServerSocket(6789);

while(true) {
// el socket servidor espera, escuchando por contacto por el cliente,
// si lo acepta un nuevo socket es creado y la conexin es hecha
Socket socketConexion = socketServidor.accept();

// crear un stream de entrada ligado al socket


BufferedReader inDesdeCliente = new BufferedReader(
new InputStreamReader(socketConexion.getInputStream()));
// crear un stream de salida ligado al socket
DataOutputStream outAlCliente =
new DataOutputStream(socketConexion.getOutputStream());
// leer el mensaje desde el socket
sentenciaCliente = inDesdeCliente.readLine();
// construir respuesta
sentenciaEnMay = sentenciaCliente.toUpperCase() + '\n';
// escribir el mensaje al socket
outAlCliente.writeBytes(sentenciaEnMay);
}
}
}

En Windows abrir 2 ventanas DOS, e ir al directorio donde se encuentran los


programas fuente.
Si necesario, en ambas ventanas, establecer la ruta al compilador y al intrprete
de Java

SET PATH=%PATH%;C:\Archivos de programa\Java\jdk1.6.0\bin


-

En cada ventana, compilar el correspondiente archivo de Java

javac ClienteTCP.java
javac ServidorTCP.java

En la ventana del servidor ejecutar la aplicacin servidor

java ServidorTCP
-

En la ventana del cliente ejecutar la aplicacin cliente.

java ClienteTCP

5.

CUESTIONARIO:
5.1 Completar el comando dado a continuacin, para que solo muestra las
transmisiones/conexiones asociados con un determinado Nmero de Puerto:
En Windows:
netstat -aon ____________________
En Linux
netstat -tuapn __________________

5.2 Cul de las siguientes combinaciones de parmetros de netstat muestra los nmeros
de puerto asociados y el identificador de procesos?
a. netstat -a -o n
b. netstat -b -e f
c. netstat -f -s p
d. netstat -m -o v
5.3 IANA: Nmeros de puerto en el rango de 0 a 1023 son conocidos como:
a. Puertos efmeros
b. Puertos bien-conocidos
c. Puertos del sistema
d. Puertos dinmicos
e. Puertos registrados
5.4 IANA: Los nmeros de puerto en el rango de 1024 al 49151 son referidos como:
a. Puertos privados
b. Puertos dinmicos
c. Puertos bien-conocidos
d. Puertos de usuario
e. Puertos registrados
5.5 IANA: Puertos referidos como puertos dinmicos, privados, o efmeros tienen
nmeros en el rango de:
a. 49152 65535
b. 0 1023
c. 1024 49151

You might also like