PRÁCTICO TCP - UDP CON PYTHON Laborda Sebastian
PRÁCTICO TCP - UDP CON PYTHON Laborda Sebastian
Ejercicios
1. ¿Qué puerto usa el servidor UDP?, ¿y el servidor TCP?
Servidor TCP: Puerto 7000 (establecido en el script para realizar la conexión)
Prueba UDP
Se aprecia que cuando se envía con UDP no llegan todos los mensajes.
- sudo tc qdisc del dev lo root (eliminar la configuracion)
5.¿Por qué en UDP, en cada mensaje recibido en el servidor, se vuelve a decir: “Se Rx
xx bytes del cliente xx”?
El mensaje "Se Rx xx bytes del cliente xx" en cada recepción en un servidor UDP
proporciona una manera sencilla y efectiva de rastrear la actividad de red, identificar a los
clientes, verificar la cantidad de datos recibidos y garantizar que se gestionen
adecuadamente los datagramas en este protocolo sin conexión.
Podemos ver mensajes de respuesta ya que TCP envia un mensaje del tipo ACK
para confirmar la llegada de ellos y el tamaño de ventana disponible.
En la transmisión UDP no existen mensajes ACK ya que no es un protocolo
orientado a asegurar la conexión, solo envía datos utilizando el máximo ancho de banda
disponible y no reconoce si los datos se enviaron y llegaron correctamente o no.
7. En lugar de Wireshark, use la herramienta tcpdump, que es un sniffer de línea de
comandos (se ejecuta en la consola, sin entorno gráfico). Usando tcpdump compare
en líneas generales los escenarios UDP vs TCP y los mensajes que se generan en
cada caso. Compare desde el enfoque del cliente (el alumno que ejecuta
client_udp.py y client_tcp.py) y desde el enfoque servidor (el alumno que ejecuta
server_udp.py y server_tcp.py).Se utilizó el software multipass.
Cliente UDP:
Servidor UDP:
Cliente TCP:
Servidor TCP:
Para realizar una verificación analizamos el mensaje n°2 del protocolo UDP desde el lado
del servidor:
MAC origen:
MAC destino:
Las MAC involucradas son las de las PC cliente y servidor ya que ambas se
encuentran en la red local, y no debe intervenir la MAC del router.
En este caso, se realiza la fragmentación del mensaje por la capa 3. UDP no se encarga de
segmentar.
11 - Compare el largo de los mensajes TCP y UDP, donde la carga útil es la misma (el
mensaje crudo es del mismo largo). ¿Cuál es más largo?, ¿por qué?
12. Realice un diagrama de estado de una visión simplificada de una sesión TCP
típica, con los datos que observa en Wireshark y basado en la filmina 27 del teórico.
Puede realizarlo en papel y lápiz y luego adjuntar una foto. Distinga los paquetes
[SYN], [PSH] y [ACK]. ¿Cada cuántos paquetes se manda un ACK de parte del
servidor? ¿Qué significa que sean PSH?, ¿Quién es responsable de este
comportamiento?
Ejercicios de complemento
13. ¿Cuánto tiempo mantiene el servidor TCP una conexión con un cliente, sin haber
tráfico de datos?
Teóricamente, según los visto en clase, el tiempo que el servidor TCP mantiene
conexión con su cliente debería ser de 2 minutos, pero igualmente es un parámetro que
depende del sistema operativo, como se muestra a continuación.
Revisando en la PC, tiempo de ‘keep alive’ es de 2 horas.
14. ¿Qué cambios (generales) encuentra entre los scripts servidor de TCP y UDP?
Dentro de los cambios generales entre los scripts podemos encontrar que:
UDP crea el tipo de socket SOCK_DGRAM, y TCP utiliza SOCK_STREAM. Esto es
por características propias de los protocolos, para poder utilizarlos.
UDP no posee conexión, mientras que TCP si tiene aceptación de conexiones.
UDP recibe los datos con recvfrom mientras que TCP utiliza recv pero recién
después de aceptar la conexión.
16. ¿Por qué hemos levantado el servidor en un puerto >1023?, ¿qué pasa si
queremos usar un puerto menor a 1023, cuando ejecutamos el script como usuario
(no como root)?
Los puertos menores a 1023 son los denominados “puertos bien conocidos” que ya
están asignados para determinados procesos, como por ej. puerto 22 para SSH o puerto 80
para Web, entre otros.
Debido a esto, al ejecutar el servidor en un puerto menor al 1023 obtenemos este
mensaje de error.
17. ¿Qué pasa cuando, en nuestra implementación en python, dos clientes quieren
conectarse simultáneamente?
Cuando dos clientes quieren conectarse al mismo tiempo al mismo servidor, lo que
ocurre es que se asignan dos puertos diferentes de destino, generandose de esta manera
tres sockets. Como se puede apreciar en la siguiente imagen.
Realizando la implementación en la misma PC, se observa que al cliente se le asignan
también dos puertos diferentes.
18. Produzca (usando tc qdisc) un escenario que fuerce a que se deban re-transmitir
paquetes TCP. Intente comparar este comportamiento con la secuencia mostrada en
el teórico (filminas 59-62) COASSOLO
- sudo tc qdisc add dev lo root netem loss 30%
- Ver el comportamiento
- sudo tc qdisc del dev lo root
En un funcionamiento normal luego de cada mensaje, hay un [ACK].
20. Usando el campo Time, que ofrece Wireshark, ¿podría calcular el RTT (round trip
time)? Se condice con el RTT de un ping? Gallardo y Biscay
El RTT se calcula como la diferencia entre el tiempo en que se envía el paquete y el
tiempo en que se recibe la respuesta. El campo Time en Wireshark te muestra las marcas
de tiempo para cada paquete.
En TCP podríamos compararlo entre el mensaje SYN y el mensaje de respuesta
SYN-ACK, o entre cualquier mensaje enviado y su correspondiente ACK de respuesta.
Comparando entre el mensaje numero 1 y su correspondiente ACK:
Mensaje del cliente: