repos/TB067

Apuntes y resueltos de la materia Redes de Comunicaciones (TB067)
Commits Files Refs README
commit 1a122ad8c6a8606b8652b11dcca703232e51cd04
parent f9b2e483b824902937cbb2c15467ccd724764004
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Sat, 19 Oct 2024 23:16:06 -0300

update `guias/1`

Diffstat:
Mguias/1/1.md | 389+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
Mguias/1/1.pdf | 0
2 files changed, 332 insertions(+), 57 deletions(-)
diff --git a/guias/1/1.md b/guias/1/1.md
@@ -3,6 +3,8 @@
 Redes de Comunicaciones (TB067) - 2C2024 - FIUBA  
 Martin Klöckner - [mklockner@fi.uba.ar](mailto:mklockner@fi.uba.ar)
 
+\vspace{1em}
+
 > 1. Para una sesión de comunicación entre un par de procesos, ¿qué proceso es
 >    el cliente y cuál es el servidor?
 
@@ -23,13 +25,15 @@ comunicación con otro, o esperar a que otro proceso inicie la comunicación.
 
 Un "socket" es un conjunto de datos que permite la comunicación entre dos
 procesos. Cuando se establece una conexión entre dos procesos, cada proceso debe
-asignar un socket a esa comunicación.
+asignar un socket a esa comunicación. La estructura del socket queda
+determinada por los procesos que se intentan conectar.
 
 En el modelo TCP/IP, se habla de un socket de internet, el cual permite la
-comunicación entre dos procesos, por lo general pertenecientes a dos
-computadoras distintas. Los sockets de internet se identifican por su numero de
-socket, el cual se crea a partir de el protocolo de transporte utilizado en la
-comunicación, la dirección IP local y el número de puerto.
+comunicación entre dos procesos, por lo general pertenecientes a computadoras
+distintas. Los sockets de internet se identifican por su numero de socket, el
+cual se crea a partir de el protocolo de transporte utilizado en la
+comunicación, la dirección IP de fuente y destino y el el número de puerto local
+y de destino.
 
 > 4. Mencione una aplicación que requiera que no haya pérdida de datos y que
 >    también sea extremadamente sensible al tiempo.
@@ -54,7 +58,11 @@ iniciar una sesión, o el procedimiento
 > 6. ¿Por qué TCP y UDP no tienen mecanismos de cifrado?
 
 Porque son protocolos relativamente viejos, los cuales en un principio no
-estaban pensados en términos de seguridad.
+estaban pensados en términos de seguridad, y eran relativamente simples.
+
+Esta falencia se logró compensar con otro protocolo denominado Transport Layer
+Security (TLS) el cual permite el cifrado de la comunicación a través de una
+red. 
 
 > 7. ¿Por qué HTTP, SMTP e IMAP se ejecutan sobre TCP en lugar de UDP?
 
@@ -112,19 +120,23 @@ si no hubiera servidor caché.
 >     Connection:keep-alive<cr><lf><cr><lf>
 >     ```
 
-a. La URL del documento solicitado es `www.gaia.cs.umass.edu/cs453/index.html`
-ya que se indica en la sección del encabezado `Host:`.
+a. La URL del documento solicitado se compone de un protocolo junto con el
+   nombre de host completo, en este caso el protocolo es HTTP y el nombre del
+   host se puede obtner de la seccion `Host` del encabezado, teniendo todo esto
+   en cuenta la URL resultante es `http://gaia.cs.umass.edu/cs453/index.html`
 b. El navegador está ejecutando la version `1.1` de HTTP, esto se puede ver en
-la sección `GET /cs453/index.html HTTP/1.1`.
+   la sección `GET /cs453/index.html HTTP/1.1`. En esta version de HTTP es
+   obligatorio incluir el campo `Host` en el encabezado, como se puede ver.
 c. El navegador solicita una conexión de tipo persistente, la cual es la
-acción por defecto del protocolo HTTP. Esto se puede ver en la ultima linea del
-encabezado la cual indica: `Connection:keep-alive`.
+   acción por defecto del protocolo HTTP. Esto se puede ver en la ultima linea del
+   encabezado la cual indica: `Connection:keep-alive`.
 d. La dirección IP del host en que se esta ejecutan el navegador no se puede
-sabe ya que no se indica en el encabezado HTTP.
+   sabe ya que no se indica en el encabezado HTTP.
 e. El tipo de navegador se puede ver en la parte `User-Agent` del encabezado
-HTTP, en este caso es el navegador Netscape version 7.2 de escritorio, en
-particular corriendo sobre el sistema operativo Windows NT 5.1; `Mozilla/5.0`
-indica que es compatible con ese navegador, y se incluye por razones históricas.
+   HTTP, en este caso es el navegador Netscape version 7.2 de escritorio, en
+   particular corriendo sobre el sistema operativo Windows NT 5.1; `Mozilla/5.0`
+   indica que es compatible con ese navegador, y se incluye por razones
+   históricas.
 
 > 11. El siguiente texto muestra la respuesta devuelta por el servidor al mensaje
 >     de solicitud GET HTTP del problema anterior. Responda a las siguientes
@@ -152,18 +164,20 @@ indica que es compatible con ese navegador, y se incluye por razones históricas
 >     ```
 
 a. Si lo ha podido encontrar ya que el codigo de respuesta es `200 OK`, el
-moemnto en que se suministro la respuesta fue en la fecha `Tue, 07 Mar 2008
-12:39:45 GMT`.
+   moemnto en que se suministro la respuesta fue en la fecha `Tue, 07 Mar 2008
+   12:39:45 GMT`.
 b. El documento recibido por el servidor fue modificado por utilma vez en la
-fecha `Sat, 10 Dec 2005 18:27:46 GMT`, como se puede ver en la seccion
-`Last-Modified` del encabezado.
+   fecha `Sat, 10 Dec 2005 18:27:46 GMT`, como se puede ver en la seccion
+   `Last-Modified` del encabezado.
 c. El documento devuelto contiene `3874` bytes, esto se puede ver en la etiqueta
-`Length` del encabezado.
-d. Los primeros 5 bytes son `<!doc`, la secuencia `<cr><lf><cr><lf>` indica el
-termino del encabezado HTTP y luego comienza el documento devuelto (recordemos
-que cada caracter ocupa 1 byte).
+   `Length` del encabezado.
+d. Los primeros 5 bytes son `<!doc`, la secuencia `<cr><lf><cr><lf>`` indica el
+   termino del encabezado HTTP y luego comienza el documento devuelto
+   (recordemos que cada caracter ocupa 1 byte).
 e. Si, se puede ver en la etiqueta `Connection:` del encabezado HTTP, la cual
-indica `Keep-Alive`.
+   indica `Keep-Alive`.
+
+<!-- `fix vim syntax -->
 
 > 12. Haga Telnet a un servidor web y envíe un mensaje de solicitud multilínea.
 >     Incluya en el mensaje de solicitud la línea de encabezado
@@ -216,6 +230,33 @@ HTTP versión 1.1 y en esa version es obligatorio este campo.
 >        inmediato?¿Qué porcentaje de solicitudes serán satisfechas por los
 >        servidores de origen?
 
+a. Por enunciado cada paquete es de `1 Mbit`, y ademas cada solicitud
+   corresponde con un pquete, por lo tanto la velocidad emdia resulta:
+   \vspace{0.25em}
+   $$V_{media} = 1 \nicefrac{Mbit}{paquete}\cdot 20
+   \nicefrac{paquetes}{s}\Rightarrow \boxed{V_{media} = 20 \nicefrac{Mbit}{s} =
+   20 Mbps}$$
+b. La intensidad de trafico se puede calcular mediante la siguiente expresión:
+   $$I = \frac{L\cdot a}{V_{trans}} = \frac{V_{media}}{V_trans}$$
+   \vspace{0.25em}
+   Donde $L$ es la longitud de un paquete, $a$, la velocidad media de un
+   paquete, $V_{media}$ la velocidad media de los paquetes y $V_{trans}$ la
+   velocidad de transmisión de la red LAN. Reemplazando con los valores resulta:
+   $$I = \frac{20\ Mbps}{100\ Mbps} \Rightarrow\boxed{I = 0.2}$$
+   \vspace{0.25em}
+c. Reutilizando la expresion anterior pero reemplazando la velocidad de
+   transmisión de la red LAN por la red de acceso resulta:
+   $$I = \frac{20\ Mbps}{10\ Mbps} \Rightarrow\boxed{I = 2}$$
+d. En el primer caso es menor a 1, mientra que en el segundo caso es mayor. Que
+   sea mayor a 1 implica que va a haver un retardo en la transmision de paquetes
+   ya que la red no da abasto.
+e. Una solución puede ser incrementar la velocidad de transmisión, otra solucion
+   puede ser decrementar la longitud de los paquetes, otra solucion tambien
+   puede ser implementar un servidor caché.
+f. El porcentaje de las solicitudes que serán satisfechas casi de inmediato será
+   el 45\% de las solicitudes, el 55\% restante tendran que ser satisfechas por
+   los servidores de origen.
+
 > 14. Un cliente HTTP desea recuperar un documento web que se encuentra en un
 >     URL dado. Inicialmente, la dirección IP del servidor HTTP es desconocida.
 >     ¿Qué protocolos de la capa de aplicación y de la capa de transporte además
@@ -232,15 +273,13 @@ los archivos del servidor.
 >     centralizado.
 
 En principio porque un servidor DNS es critico para resolver la URL de otros
-servidores de internet, por lo que ser centralizado implicaria la dependencia
-de una sola organizacion o servidor central.
-
-Otro motivo seria la enorme cantidad de tráfico que este servidor centralizado
-tendria que manejar.
-
-Por ultimo que un servidor sea centralizado implicaria una enorme perdida de
-rendimiento, ya que cualquier region que quiera acceder a internet deberia pasar
-por este servidor centralizado, que puede que esté a una distancia muy  lejana.
+servidores de internet, por lo que ser centralizado implicaria la
+**dependencia** de una sola organizacion o servidor central. Otro motivo es la
+enorme cantidad de **tráfico** que este servidor centralizado tendria que
+manejar. Por ultimo que un servidor sea centralizado implicaria una enorme
+perdida de **rendimiento**, ya que cualquier region que quiera acceder a
+internet deberia pasar por este servidor centralizado, que puede que esté a una
+distancia muy lejana.
 
 > 16. Dada la jerarquía de servidores DNS (Servidores DNS raíz, Servidores de
 >     dominio de nivel superior y servidores autoritativos) se pide
@@ -256,29 +295,65 @@ por este servidor centralizado, que puede que esté a una distancia muy  lejana.
 >        letra siguiente y así sucesivamente.
 >     d. ¿Cuántos mensajes DNS se necesitan enviar para obtener la dirección
 >        correspondiente a un nombre de host si no se encuentra en el proxy del
->        servidor local y servidor TLD conoce el servidor DNS autoritativo
+>        servidor local y el servidor TLD conoce el servidor DNS autoritativo
 >        correspondiente al nombre del host consultado?
 
+a. Supongamos el host `www.example.com`, para resolver la dirección IP de este
+   host se comienza a resolver la dirección IP de cada campo separado por punto
+   `.` de derecha a izquierda.
+   En primer lugar el cliente quien desea hallar la dirección IP del host, hace
+   una petición a un servidor DNS raíz por la dirección IP del campo `com`, el
+   DNS devuelve las direccionen IP de los servidores DNS de dominio de nivel
+   superior (TLD) correspondientes a `com`, luego el cliente hace una nueva
+   petición a uno de estos servidores TLD, el cual responde con la dirección IP
+   de un servidor DNS autoritativo para el dominio `example.com`, finalmente
+   este servidor DNS autoritativo es quien resuelve la dirección IP del host
+   `www.example.com`.
+b. Cuando un host realiza una consulta DNS, esta se envía al servidor DNS local,
+   el cual actúa como proxy. Este servidor DNS local, no pertenece a la
+   jerarquía de servidores DNS, si no que cada proveedor de internet (ISP)
+   dispone de servidor DNS local.
+c. Suponiendo que el servidor TLD conoce el servidor DNS autoritativo
+   correspondiente al nombre de host, entonces el mensaje de consulta sigue el
+   siguiente trayecto: `H -> L -> R -> T -> A`
+d. Se requiere un total de 8 mensajes 4 de petición y 4 respuestas, las
+
 > 17. ¿Cuál es la diferencia entre consultas de DNS iterativas y consultas
 >     recursivas?
 
 Una consulta DNS recursiva ocurre cuando un servidor DNS se comunica con otros
-servidores DNS para intentar resolver una direccion URL y devolverla al cliente,
+servidores DNS para intentar resolver una dirección URL y devolverla al cliente,
 en cambio, una consulta DNS iterativa ocurre cuando el cliente se comunica
-directamente con cada servidor DNS involucrado en la resolucion de la direccion
+directamente con cada servidor DNS involucrado en la resolución de la dirección
 URL[^1].
 
+Por lo general los clientes realizan consultas iterativas a los servidores DNS y
+estos si realizan consultas recursivas para resolver la dirección IP solicitada
+por el cliente.
+
 [^1]: [https://www.cloudflare.com/learning/dns/what-is-recursive-dns/](https://www.cloudflare.com/learning/dns/what-is-recursive-dns/)
 
 > 18. Dado que la correspondencia entre el nombre de un host y su dirección IP
 >     puede cambiar, ¿cuál es el comportamiento de un servidor de DNS respecto
 >     de la información almacenada en su caché DNS para prevenir esto?
 
+Para prevenir esto los servidores DNS descartan la información almacenada en
+cache pasado un cierto tiempo, por lo general un par de días.
+
 > 19. Un cliente se conecta a una aplicación de home banking basada en la web
 >     mediante protocolo HTTP, el cual no tiene memoria del estado de la
 >     conexión. Una vez que inició sesión, ¿cómo identifica el servidor al
 >     cliente?
 
+El servidor identifica al cliente mediante el uso de Cookies. Para que un sitio
+pueda utilizar Cookies se necesitan 4 cosas:
+
+* Una linea de cabecera de la cookie en el mensaje de respuesta.
+* Una línea de cabecera de la cookie en el mensaje de solicitud HTTP.
+* El archivo de cookies almacenado en el sistema terminal del usuario y
+* gestionado por el navegador del usuario.
+* Una base de datos back-end en el sitio web.
+
 > 20. Supongamos que estás realizando un análisis de tráfico de red y te
 >     encuentras con la siguiente captura de dos paquetes DNS relacionados con
 >     la resolución de nombres de dominio para "wireshark.org".
@@ -295,6 +370,21 @@ URL[^1].
 >        paquete?
 >     ![\ ](ej20.png)
 
+a. En el primer paquete se envía una petición de resolución del dominio
+   `wireshark.org`. La consulta es de tipo A, por lo que se espera la dirección
+   IPv4 de ese dominio.
+b. El servidor DNS al que se realiza la consulta tiene la dirección IP
+   `205.152.37.23`.
+c. Se recibe una respuesta exitosa del servidor DNS con la dirección IP
+   `128.121.50.122`. La respuesta que se recibe una entrada de tipo A, la cual
+   corresponde con una dirección IPv4.
+d. Las dirección MAC del paquete que realiza la consulta y la del paquete que
+   envía la respuesta es `00:16:ce:6e:8b:24` y `00:05:5d:21:99:4c`
+   respectivamente.
+e. Puede que sea debido a que el servidor DNS al que se hace la consulta no
+   dispone de la entrada correspondiente a esa dirección IP, por lo que debe
+   realizar peticiones recursivas a otros servidores DNS.
+
 > 21. Descargar, analizar mediante Wireshark y contestar las preguntas sobre la
 >     transmisión de datos HTTP relacionada con la descarga de un archivo de
 >     imagen desde un servidor web a partir de la captura de paquetes de
@@ -313,57 +403,241 @@ URL[^1].
 >     f. ¿Cuál es la fecha y hora en que se envió la respuesta del servidor al
 >        cliente según los datos proporcionados en la captura?
 
+Teniendo en cuenta que el contenido, cuya URL es la del enunciado, ya no está
+disponible, se utiliza el contenido brindado por el sitio web
+[http://www.columbia.edu/~fdc/sample.html](http://www.columbia.edu/~fdc/sample.html),
+en particular se utiliza la imagen cuyo link es el siguiente
+[http://www.columbia.edu/~fdc/picture-of-something.jpg](http://www.columbia.edu/~fdc/picture-of-something.jpg).
+
+Para la descarga de la imagen se utiliza la herramienta de linea de comandos
+[wget](https://linux.die.net/man/1/wget) proporcionando el link de la imagen a
+descargar como único argumento, como se muestra a continuación:
+
+```console
+$ wget http://www.columbia.edu/~fdc/picture-of-something.jpg
+```
+
+a. Descartando las consultas DNS, y luego de establecida la sesión TCP
+   (protocolo correspondiente al nivel de transporte), el encabezado HTTP del
+   primer mensaje HTTP contiene lo siguiente:
+   
+   ```
+   GET /~fdc/picture-of-something.jpg
+   HTTP/1.1 Host: www.columbia.edu
+   User-Agent: Wget/1.21.3
+   Accept: */* Accept-Encoding: identity Connection:
+   Keep-Alive
+   ```
+   
+   Se puede ver que realiza una consulta HTTP version 1.1 por el archivo cuya
+   ruta es `/~fdc/picture-of-something.jpg`, luego se incluye el Host, el cual
+   es obligatorio en esta version de HTTP y también se puede ver que la conexión
+   es de tipo `Keep-Alive`
+b. La primer linea del encabezado del mensaje HTTP que responde el servidor,
+   contiene `HTTP/1.1 200 OK` por lo tanto, el servidor responde con código de
+   respuesta `200 OK`.
+c. El archivo que se esta transfiriendo es de formato `image/jpeg`, se puede ver
+   el campo `Content-Type` de la cabecera de respuesta.
+d. El campo `Content-Length` indica el tamaño en bytes del archivo transferido,
+   en este caso el campo en la cabecera indica `44566` bytes.
+e. En total, contando la cabecera HTTP, la cual ocupa `1605` bytes y el archivo
+   enviado, cuyo tamaño es `44566` bytes, el tamaño en bytes de la respuesta del
+   servidor resulta de `46205` bytes, 
+f. Según el campo `Date` del encabezado del mensaje de respuesta, la fecha en la
+   que se envió es `Sat, 19 Oct 2024 22:18:03 GMT`.
+
 > 22. Enviar un mensaje de consulta DNS directamente desde el host en el que
->     está trabajando al servidor google.com.ar mediante nslookup.
+>     está trabajando al servidor `google.com.ar` mediante el comando
+>     `nslookup`.
 >     a. ¿Qué información devuelve este comando?
 >     b. ¿Cuál es la dirección IP del servidor web de google.com.ar?
 >     c. ¿Cuál es la dirección IP del servidor DNS que proporcionó la respuesta
->        al comando nslookup?
+>        al comando `nslookup`?
 >     d. La respuesta de este comando proporciona dos datos, ¿Que representa
 >        cada uno?
 >     e. Existen tres clases de servidores DNS: los servidores DNS raíz, los
 >        servidores DNS de dominio de nivel superior (TLD, Top-Level Domain) y
->        los servidores DNS autoritativos. Los servidores de nombres raíz
->        proporcionan las direcciones IP de los servidores TLD. Los servidores
->        TLD proporcionan las direcciones IP para los servidores DNS
->        autoritativos. Los servidores autoritativos contienen las direcciones
->        IP y sus nombres correspondientes de cada página web. ¿Qué servidor,
->        según el esquema de la figura siguiente, devuelve esta información?
-> 
->     ![\ ](ej22.png){ width=50% }
+>        los servidores DNS autoritativos.  ¿Qué servidor, según el esquema de
+>        la figura siguiente, devuelve esta información?  
+>        ![](ej22.png){ width=45% }
+
+a. Al ejecutar el comando, se obtiene la salida que se muestra a continuación:
+
+   ```console
+   $ nslookup google.com.ar
+   ;; Got recursion not available from 186.130.128.250, trying next server
+   ;; Got recursion not available from 186.130.129.250
+   Server:         186.130.129.250
+   Address:        186.130.129.250#53
+
+   Non-authoritative answer:
+   Name:   google.com.ar
+   Address: 172.217.173.227
+   ;; Got recursion not available from 186.130.128.250, trying next server
+   Name:   google.com.ar
+   Address: 2800:3f0:4002:80f::2003
+   ```
+   Se puede ver que el comando hace una consulta DNS de la dirección pasada como
+   argumento.
+b. Según la salida del comando anterior la dirección IPv4 es `172.217.173.227`,
+   mientras que la dirección IPv6 es `2800:3f0:4002:80f::2003`.
+c. Se puede ver que la salida del comando sugiere que se realiza una consulta
+   recursive del servidor cuya dirección IPv4 es `186.130.128.250` al servidor
+   cuya dirección IPv4 es `186.130.129.250`, siendo esta ultima la que
+   proporciona una respuesta al cliente quien ejecuta el comando `nslookup`.
+d. La respuesta del comando proporciona dos direcciones IP correspondientes a
+   las dos versiones del protocolo: IPv4 e IPv6.
+e. Según el esquema quien proporciona la respuesta es un servidor Local
 
 > 23. Para el comando `nslookup -type=NS fi.uba.ar` se pide:
 >     a. ¿Qué información devuelve el comando?
->     b. ¿La respuesta al comando nslookup provino de un servidor autorizado o no
->        autorizado?
+>     b. ¿La respuesta al comando `nslookup` provino de un servidor autorizado o
+>        no autorizado?
 >     c. ¿Qué significa “Respuesta no autoritativa” en la respuesta?
 >     d. ¿De qué tipo es el archivo de recursos que contiene la información
 >        devuelta?
 >     e. ¿Por qué hay dos tipos diferentes de direcciones IP?
 
-> 24. ¿Qué respuesta aparece en la pantalla con el comando nslookup 157.92.1.1?
+a. Al ejecutar el comando se obtiene los siguiente:
+
+   ```console
+   $ nslookup -type=NS fi.uba.ar
+   Server:         186.130.128.250
+   Address:        186.130.128.250#53
+
+   Non-authoritative answer:
+   fi.uba.ar       nameserver = ns1.fi.uba.ar.
+   fi.uba.ar       nameserver = ns4.fi.uba.ar.
+   fi.uba.ar       nameserver = ns1.uba.ar.
+   fi.uba.ar       nameserver = ns2.fi.uba.ar.
+
+   Authoritative answers can be found from:
+   ```
+
+   Lo cual corresponde con todos los servidores autoritativos de la dirección de
+   host `fi.uba.ar`.
+b. La salida del comando sugiere que la respuesta provino de un servidor no
+   autorizado.
+c. Respuesta no autoritativa significa que el servidor tenia almacenada la
+   información porque provino de otro servidor, es decir, no es información que
+   alguien haya grabado manualmente en los archivos de ese servidor.
+
+> 24. ¿Qué respuesta aparece en la pantalla con el comando `nslookup 157.92.1.1`?
+
+La respuesta que aparece es la siguiente
+
+```console
+$ nslookup 157.92.1.1
+1.1.92.157.in-addr.arpa    name = ns1.uba.ar.
+
+Authoritative answers can be found from:
+```
  
 > 25. DNS usa UDP en vez de TCP. Si se pierde un paquete DNS, no hay
 >     recuperación automática. ¿Provoca esto un problema y, de ser así, cómo se
 >     resuelve?
+
+Provoca un problema ya que la consulta DNS obtiene un retardo, pero no es un
+problema ya que en caso de falla el cliente que realiza la consulta DNS puede
+realizar otra petición DNS a un servidor diferente.
  
-> 26. Suponga que en UDPCliente.py, después de crear el socket, añadimos esta
->     línea: clientSocket.bind((’’, 5432))
->     a. ¿Será necesario modificar el programa UDPServidor.py?
->     b. ¿Cuáles son los números de puerto para los sockets en UDPCliente y
->        UDPServidor luego del cambio?
+> 26. Suponga que en `UDPCliente.py`[^2], después de crear el socket, añadimos esta
+>     línea: `clientSocket.bind((’’, 5432))`
+>     a. ¿Será necesario modificar el programa `UDPServidor.py`[^3]?
+>     b. ¿Cuáles son los números de puerto para los sockets en `UDPCliente.py` y
+>        `UDPServidor.py` luego del cambio?
 >     c. ¿Cuáles eran antes de realizar este cambio?
- 
+
+[^2]: Kurose, J. F. (2017). Redes de computadoras. Pearson. (p. 133)
+[^3]: Kurose, J. F. (2017). Redes de computadoras. Pearson. (p. 134)
+
+El archivo `UDPCliente.py` contiene lo siguiente:
+
+```python
+from socket import *
+serverName = 'hostname'
+serverPort = 12000
+clientSocket = socket(AF_INET, SOCK_DGRAM)
+message = raw_input('Escriba una frase en minúsculas: ')
+clientSocket.sendto(message.encode(), (serverName, serverPort))
+modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
+print(modifiedMessage.decode())
+clientSocket.close()
+```
+Mientras que el archivo `UDPServidor.py` contiene lo siguiente:
+
+```python
+from socket import *
+serverPort = 12000
+serverSocket = socket(AF_INET, SOCK_DGRAM)
+serverSocket.bind(('', serverPort))
+print("El servidor está listo para recibir")
+while True:
+    message, clientAddress = serverSocket.recvfrom(2048)
+    modifiedMessage = message.decode().upper()
+    serverSocket.sendto(modifiedMessage.encode(), clientAddress)
+```
+
+Agregar la linea `clientSocket.bind((’’, 5432))` al archivo `UDPCliente.py`
+luego de crear el socket resulta en el archivo de la siguiente manera:
+
+```python
+from socket import *
+serverName = 'localhost'
+serverPort = 12000
+clientSocket = socket(AF_INET, SOCK_DGRAM)
+clientSocket.bind(('', 5432))
+message = raw_input(’Escriba una frase en minúsculas:’)
+clientSocket.sendto(message.encode(),(serverName, serverPort))
+modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
+print(modifiedMessage.decode())
+clientSocket.close()
+```
+
+Esta linea que se agrega luego de crear el socket provoca que el cliente intente
+asociar el socket con el numero de puerto `5432` a la dirección IP de host, en
+este caso se utiliza `localhost` (alias a `127.0.0.1`).
+
+<!--
+El resultado de ejecutar el nuevo script tiene dos resultados los cuales
+dependen de si el servidor se ejecuta primero o el cliente. En el primer caso,
+el servidor se ejecuta primer asociando el socket creado a la dirección IP, esto
+provoca un error en el cliente ya que al intentar asociar su socket a la
+dirección IP se produce un error ya que la dirección IP ya tiene un socket
+asociado; en el segundo caso, el cliente se ejecuta primero asociando su socket
+a la dirección IP, esto provoca un error en el servidor ya que al intentar
+asociar su socket a la dirección IP se produce el mismo error que en el caso
+anterior para el cliente, error de que la dirección IP ya tiene u socket
+asociado.
+
+a. Una solución puede ser crear otro socket en el cliente con un nuevo puerto y
+   asociar este nuevo puerto con la linea agregada, de esta manera tanto el
+   servidor como cliente escucharían en la dirección IP utilizada.
+-->
+
+a. No es necesario modificar el archivo `UDPServidor.py` ya que el numero de
+   puerto es diferente al utilizado en el servidor, en caso de que sea el mismo
+   si se produce un error ya que el socket solo puede estar asociado a un solo
+   extremo de la comunicación.
+b. Luego del cambio tanto el cliente como el servidor escuchan en la dirección
+   IP del host, siendo la única diferencia el numero de puerto, para el servidor
+   el numero de puerto que escucha es el `12000`, mientras que el cliente
+   escucha en el numero de puerto `5432`.
+c. Antes de agregar la linea, el cliente no tenía un numero de puerto asociado,
+   simplemente enviaba los mensajes al puerto `12000` que ya estaba asociado al
+   socket del servidor.
+
+<!--
 > 27. Análisis de captura de paquetes del protocolo DNS.
 >     a. Mediante el comando `ipconfig /all` obtener
 >        * Dirección IPv4 e IPv6 la placa de red o de WiFi según corresponda.
 >        * Dirección MAC
 >        * Dirección IP de la puerta de enlace predeterminada
->        * Direcciónes IP del servidor DNS  
+>        * Direcciones IP del servidor DNS  
 >
 >     b. En Wireshark, en Interface List (captura-opciones-entrada) elija la
 >        asociada a la IP y MAC registrada en a. Guardar la captura en un archivo
->        llamado ejercicio30.pcap (captura-opciones-salida)
+>        llamado `ejercicio30.pcap` (captura-opciones-salida)
 >     c. Comience a capturar paquetes.
 >     d. Ir a www.google.com en un navegador.
 >     e. Al ver la página de Google detenga la captura de paquetes.
@@ -382,3 +656,4 @@ URL[^1].
 >         Dirección IP registrada en a):  
 >         Dirección IP de destino:  
 >         Dirección IP de la puerta de enlace predeterminada registrada en a)  
+-->
diff --git a/guias/1/1.pdf b/guias/1/1.pdf
Binary files differ.