TB067

Apuntes y resueltos de la materia Redes de Comunicaciones (TB067)
Index Commits Files Refs README
resumen/resumen.md (113778B)
   1 # Resumen
   2 
   3 Redes de Comunicaciones (TB067) - FIUBA  
   4 
   5 ## Introducción
   6 
   7 Una **red** es un sistema de nodos interconectados mediante enlaces de
   8 comunicación, que utilizan protocolos para el intercambio de datos. La conexión
   9 puede darse a través de un único cable trenzado entre los extremos o a través de
  10 redes mas grandes, por ejemplo internet, que es una red de redes.
  11 
  12 Un **protocolo** es un conjunto de reglas o convenciones utilizadas para
  13 controlar la transferencia de datos en una red.
  14 
  15 Los enlaces físicos vinculan transmisor con receptor y la información se propaga
  16 a través de medios, estos medios pueden ser **guiados** o **no guiados**. Los
  17 medios guiados son aquellos que propagan las señales por medios sólidos como
  18 cables de cobre, mientras que los medios no guiados son aquellos que propagan
  19 las señales a través del espacio libre, haciendo uso de antenas, por ejemplo
  20 microondas.
  21 
  22 Existen dos métodos fundamentales para transportar información a través de
  23 redes, la **conmutación de circuitos** y la **conmutación de paquetes**. En la
  24 conmutación de circuitos se establece un camino dedicado entre emisor y receptor
  25 antes de comenzar la transmisión, y ese camino permanece reservado durante toda
  26 la comunicación, un ejemplo de este método de comunicación es la red telefónica
  27 tradicional. En la conmutación de paquetes los datos se dividen en paquetes que
  28 se envían de forma independiente a través de la red sin haber reservado recursos
  29 previamente, estos paquetes comparten dinámicamente los recursos de la red, por
  30 ejemplo internet.
  31 
  32 En la conmutación de paquetes los nodos intermedios típicamente utilizan un
  33 método de transmisión llamado **Store-and-Forward**, en el cual el nodo no
  34 retransmite la unidad de datos (trama o paquete) hasta que no disponga de la
  35 totalidad de los bits correspondientes a esa unidad. Este nodo intermedio
  36 almacena temporalmente la unidad de datos incompleta en un buffer hasta no
  37 recibirla por completo. Puede ocurrir que la tasa de arribo de unidades de datos
  38 exceda la tasa de transmisión (esto puede ocurrir por ejemplo si se tienen
  39 enlaces con diferentes características) en cuyo caso, si el nodo dispone de
  40 memoria libre se encola, produciendo un retardo de encolamiento, o si el nodo no
  41 dispone de memoria libre se descarta esa unidad, provocando una perdida de
  42 datos. Además del retardo de encolamiento existen otros retardos que
  43 caracterizan lo que se denomina **retardo extremo a extremo** o **latencia**,
  44 que es el tiempo total que tarda un paquete en ir desde el origen hasta el
  45 destino. Los retardos son: el retardo de procesamiento, el retardo de
  46 propagación y el retardo de transmisión. El retardo de procesamiento es el
  47 tiempo que se tarda un nodo en examinar el encabezado del paquete. El retardo de
  48 transmisión es el tiempo necesario para poner todos los bits del paquete en el
  49 enlace y resulta del cociente entre el tamaño del paquete $L$ (en bits) y la
  50 tasa de transmisión del enlace $R$ (en bits por segundo o bps). El retardo de
  51 propagación es el tiempo que tarda la señal en viajar físicamente por el medio,
  52 resulta del cociente entre la distancia del enlace $d$ (en metros) y la
  53 velocidad de propagación del medio $v$ (en metros por segundo).
  54 
  55 El **throughput** es la tasa a la que se envían los bits de la fuente a
  56 destino, en otras palabras, es la cantidad real de datos útiles que una red
  57 transmite por unidad de tiempo. El throughput extremo a extremo queda
  58 determinado por el enlace de menor tasa de transmisión $R$ (en bits por
  59 segundo). Se mide típicamente en bits por segundo (bps). Por ejemplo un enlace
  60 de 1 Gbps puede tener un throughput real de 940 Mbps debido al overhead
  61 Ethernet/IP/TCP. También se dice en TCP que el throughput es la cantidad de
  62 datos que se pueden estar en el enlace sin recibir validacion ACK.
  63 
  64 <!--
  65 Un modelo de comunicaciones es una representación conceptual que describe como
  66 se comunican los sistemas de una red, separando el proceso de comunicación en
  67 funciones bien definidas. Estos modelos resultan de una abstracción realizada
  68 sobre los componentes de las redes y facilitan el análisis y diseño de las
  69 mismas. Por lo general se representan en capas, en los que a cada capa
  70 corresponde una serie de componentes del sistema, puede ser software, hardware o
  71 protocolos de red. 
  72 -->
  73 
  74 Un modelo de comunicaciones organiza las funciones necesarias para la
  75 comunicación de sistemas en una red en capas, de modo que cada capa cumple un
  76 rol específico. Los modelos tradicionales son el modelo TCP/IP (por los
  77 protocolos utilizados) y el modelo OSI (por Open Standard Institute) los cuales
  78 se muestran en las tablas \ref{tab:modelos}a y \ref{tab:modelos}b,
  79 respectivamente.
  80 
  81 \begin{table}[h]
  82 \centering\normalsize
  83 \setlength{\arrayrulewidth}{0.5pt}
  84 \begin{minipage}{0.48\columnwidth}
  85 \begin{tabularx}{\linewidth} {|>{\centering\arraybackslash}X|}
  86   \hline
  87   Aplicación \\ \hline
  88   Transporte \\ \hline
  89   Red \\ \hline
  90   Enlace \\ \hline
  91   Física \\ \hline 
  92 \end{tabularx}
  93 \subcaption{Modelo TCP/IP}
  94 \end{minipage}%
  95 \hfill
  96 \begin{minipage}{0.48\columnwidth}
  97 \begin{tabularx}{\linewidth} {|>{\centering\arraybackslash}X|}
  98   \hline
  99   Aplicación \\ \hline
 100   Presentación \\ \hline
 101   Sesión \\ \hline
 102   Transporte \\ \hline
 103   Red \\ \hline
 104   Enlace \\ \hline
 105   Física \\ \hline 
 106 \end{tabularx}
 107 \subcaption{Modelo OSI}
 108 \end{minipage}
 109 \vspace{-0.5em}
 110 \caption{Modelos de comunicaciones}
 111 \label{tab:modelos}
 112 \end{table}
 113 
 114 ## Nivel de aplicación
 115 
 116 El nivel de aplicación es el mas alto en cuanto a nivel de abstracción, permite
 117 que las aplicaciones de los usuarios se comunique a través de la red, ocultando
 118 los detalles de transporte y de la red subyacente, por ejemplo aplicaciones de
 119 transferencia de archivos (FTP), de correo electrónico (SMTP), de resolución de
 120 direcciones IP (DNS) o servidores Web (HTTP), entre otras. El software del nivel
 121 de aplicación solo se ejecuta en los dispositivos terminales, ya que en los
 122 dispositivos intermedios, como son los switches y routers, solo se ejecuta
 123 software del nivel de red y enlace.
 124 
 125 Existen dos paradigmas principales de la comunicación entre terminales: el
 126 paradigma cliente-servidor y el peer-to-peer (abreviado P2P). El paradigma
 127 cliente-servidor involucra la comunicación entre: un cliente, que realiza una
 128 petición por un servicio, y un servidor, que siempre debe estar disponible para
 129 responder a esa petición. En el paradigma peer-to-peer los dispositivos de una
 130 red intercambian recursos entre sí, compartiendo carga, control y datos, no hay
 131 un servidor siempre disponible para satisfacer las peticiones si no que cada
 132 nodo ofrece y solicita recursos.
 133 
 134 Un proceso (o aplicación si se quiere) ejecutándose en una terminal, envía y
 135 recibe mensajes de la red a través de una interfaz de software denominada
 136 **socket**. Un socket es la interfaz entre la capa de aplicación y la capa de
 137 transporte de un host. El socket se compone de la dirección IP del dispositivo,
 138 el protocolo de transporte y el numero de **puerto**, el puerto identifica un
 139 servicio o aplicación especifica dentro del dispositivo, por convención se
 140 asignan diferentes números de puerto a diferentes aplicaciones[^1], siendo las
 141 más comunes el puerto 80 para HTTP, el puerto 443 para HTTPS, el puerto 22 para
 142 SSH, etc. Los puertos pueden ser bien conocidos (Well-Known Ports), registrados
 143 (Registered Ports) o dinamicos/privados/efímeros (Ephemeral Ports). Los puertos 
 144 bien conocidos están en el rango 0-1023 y se reservan para servicios de red
 145 estándar (como HTTP, SSH, etc); los puertos registrados son utilizados por
 146 aplicaciones específicas, empresas o protocolos registrados para evitar
 147 conflictos, están en el rango (1024-49151); los puertos efímeros están en el
 148 rango 49141-65535 y son utilizados por las aplicaciones cliente para iniciar
 149 conexiones hacia servidores. Se llaman "efímeros" porque son temporales; el
 150 sistema operativo asigna uno al azar cuando una aplicación lo necesita y lo
 151 libera al cerrar la conexión. A continuación se muestran ejemplos de sockets:
 152 
 153 [^1]: List of TCP and UDP port numbers, [https://en.wikipedia.org/w/index.php?title=List_of_TCP_and_UDP_port_numbers](https://en.wikipedia.org/w/index.php?title=List_of_TCP_and_UDP_port_numbers)
 154 
 155 ```text
 156 TCP; 157.92.49.38; 80
 157 TCP; 122.36.99.208; 9887
 158 ```
 159 
 160 Una **sesión** es la conexión de sockets entre extremos, sea punto-a.punto o
 161 cliente-servidor. Es un canal de comunicación estable y temporal entre dos
 162 dispositivos y se compone de camps correspondiente al nivel de transporte y red,
 163 en primer lugar el protocolo de transporte, luego la dirección IP y el numero de
 164 puerto del cliente y la dirección IP y el numero de puerto del servidor. Por
 165 ejemplo:
 166 
 167 ```text
 168 (UDP; 208.67.22.22; 23; 10.99.1.33; 23054)
 169 ```
 170 
 171 ### WWW
 172 
 173 La World Wide Web es un conjunto de protocolos y aplicaciones que se utilizan
 174 para transferir recursos sobre internet. Estos recursos pueden ser documentos
 175 HTML, texto plano, imágenes, entre otros, y se obtienen mediante enlaces
 176 (hipervínculos) accesibles mediante navegadores web, que utilizan los protocolos
 177 HTTP/HTTPS.
 178 
 179 Un hipervínculo es una referencia activa que utiliza una URL (Uniform Resource
 180 Locator) para localizar el recurso al que apunta. Una URL es un identificador
 181 que indica dónde está un recurso y cómo acceder a él. Por ejemplo en la URL
 182 `http://www.ejemplo.com/img/meme.jpeg` el nombre de host es `www.ejemplo.com`
 183 mientras que la ruta es `/img/meme.jpeg`
 184 
 185 #### HTTP
 186 
 187 El protocolo HTTP (HyperText Transfer Protocol) o su version segura HTTPS
 188 (HyperText Transfer Protocol Secure) definen la estructura de los mensajes entre
 189 aplicaciones del cliente y el servidor en la Web. HTTP/HTTPS utiliza TCP como
 190 protocolo de transporte (por lo menos hasta la version HTTP/2) y se asigna por
 191 convención el puerto 80. Dado que se utiliza TCP como protocolo de transporte
 192 previo a realizar peticiones a un servidor el cliente HTTP debe establecer una
 193 conexión TCP con el servidor, una vez que se ha establecido la conexión entre el
 194 cliente y el servidor, a nivel de aplicación, se comunican mediante sockets.
 195 
 196 El servidor envía los archivos solicitados a los clientes sin almacenar ninguna
 197 información acerca del estado del cliente. Si un determinado cliente pide el
 198 mismo objeto dos veces en un espacio de tiempo de unos pocos segundos, el
 199 servidor reenvía el objeto, ya que ha olvidado por completo que ya lo había
 200 hecho anteriormente. Dado que un servidor HTTP no mantiene ninguna información
 201 acerca de los clientes, se dice que HTTP es un protocolo **sin memoria del
 202 estado**.
 203 
 204 Las conexiones HTTP entre cliente-servidor pueden ser **persistentes** o **no
 205 persistentes**, cuando la conexión es persistente se mantiene la misma conexión
 206 TCP para multiples solicitudes y respuestas entre el cliente y el servidor, si
 207 la conexión es no persistente, se utilizan conexiones TCP separadas para una
 208 petición y para otra.
 209 
 210 El tiempo de ida y vuelta (Round-Trip Time, RTT) es el tiempo que tarda un
 211 paquete pequeño en viajar desde el cliente al servidor y volver de nuevo al
 212 cliente. El RTT incluye los retardos de propagación de los paquetes, los
 213 retardos de cola en los routers y switches intermedios y los retardos de
 214 procesamiento de los paquetes.
 215 
 216 Como se mencionó previamente el protocolo HTTP define una estructura que deben
 217 tener los mensajes de solicitud y respuesta, a continuación se muestra un
 218 mensaje de solicitud típico.
 219 
 220 
 221 ```console
 222 GET /index.html HTTP/1.1
 223 Host: www.ejemplo.com
 224 Connection: close
 225 User-agent: Mozilla/5.0
 226 Accept-language: es
 227 ```
 228 
 229 Un mensaje de respuesta al mensaje de solicitud previo puede ser el que se
 230 muestra a continuación.
 231 
 232 ```console
 233 HTTP/1.1 200 OK
 234 Date: Tue, 06 Feb 2026 12:30:00 GMT
 235 Server: Apache/2.4.57
 236 Content-Type: text/html
 237 Content-Length: 137
 238 
 239 <!DOCTYPE html>
 240 <html>
 241   <head>
 242     <title>Ejemplo</title>
 243   </head>
 244   <body>
 245     <h1>Hola, mundo!</h1>
 246   </body>
 247 </html>
 248 ```
 249 
 250 ##### HTTP/1.0 (1996)
 251 
 252 Esta es una mejora de la primera version del protocolo (HTTP/0.9 de 1991) en
 253 esta version se introdujo el concepto de cabeceras HTTP, lo que permitió
 254 transportar distintos tipos de contenido además de HTML, indicar metadatos y
 255 devolver códigos de estado.
 256 
 257 ##### HTTP/1.1 (1997-1999)
 258 
 259 En esta versión se mejoró significativamente la eficiencia al definir conexiones
 260 persistentes por defecto, permitiendo reutilizar una misma conexión TCP para
 261 varias solicitudes. También se añadió soporte para hosts virtuales, mejores
 262 mecanismos de caché y control de errores. Se introdujo el concepto de pipelining
 263 lo cual permite enviar varias solicitudes sin esperar respuestas, pero esto no
 264 tuvo mucho éxito debido a problemas de bloqueo.
 265 
 266 ##### HTTP/2 (2015)
 267 
 268 En esta version se cambió completamente la forma de transmitir los datos, aunque
 269 la semántica sigue siendo la misma que en versiones anteriores. Se utiliza un
 270 formato binario y multiplexa múltiples flujos de datos sobre una sola conexión
 271 TCP, reduciendo la latencia y mejorando el rendimiento. Además, incorpora
 272 compresión de cabeceras y la posibilidad de envío proactivo de recursos por
 273 parte del servidor, aunque sigue afectado por el bloqueo de cabeza de línea
 274 propio de TCP.
 275 
 276 ##### HTTP/3 (2022)
 277 
 278 Esta es la versión más reciente y funciona sobre QUIC en lugar de TCP,
 279 utilizando UDP como protocolo subyacente. Esto permite evitar el bloqueo de
 280 cabeza de línea entre flujos, reducir el tiempo de establecimiento de conexión y
 281 soportar la migración de conexiones cuando cambia la dirección IP del cliente.
 282 
 283 #### Cookies
 284 
 285 Como se menciono previamente un servidor HTTP no tiene memoria del estado de la
 286 conexión, sin embargo existe el concepto de **cookie** que permite a los sitios
 287 seguir la pista de los usuarios, almacenando un numero de identificador en la
 288 terminal del cliente e información relacionada a ese identificador en el
 289 servidor. El sistema de cookies utiliza cuatro componentes: una linea de
 290 cabecera de la cookie en el mensaje de solicitud HTTP, `Cookie: 1234`; una linea
 291 de cabecera en el mensaje de respuesta HTTP, `Set-cookie: 1234`; el archivo de
 292 cookies almacenado en el sistema terminal del usuario y gestionado por el
 293 navegador; y una base de datos en el sitio-web.
 294 
 295 #### Cache web
 296 
 297 Un cache web o también denominado servidor **proxy** guarda temporalmente
 298 respuestas HTTP para poder servirlas directamente a los clientes cuando el
 299 recurso no ha cambiado.
 300 
 301 Aunque el almacenamiento en caché puede reducir los tiempos de respuesta
 302 percibidos por el usuario, introduce un nuevo problema: la copia de un objeto
 303 que reside en la caché puede estar desactualizada. En otras palabras, el objeto
 304 almacenado en el servidor web puede haber sido modificado desde que la copia fue
 305 almacenada en la caché del cliente. HTTP dispone de un mecanismo que permite a
 306 la caché verificar que sus objetos están actualizados. Este mecanismo se
 307 denomina GET condicional. Un mensaje de solicitud HTTP se denomina también
 308 mensaje GET condicional si el mensaje de solicitud utiliza el método GET y
 309 ademan se incluye una línea de cabecera `If-Modified-Since`. Por ejemplo un
 310 servidor cache desea saber si su versión del archivo `/fruit/kiwi.jpeg` esta
 311 desactualizada con respecto al servidor web, por lo que envía el siguiente
 312 mensaje HTTP al servidor.
 313 
 314 ```console
 315 GET /fruit/kiwi.gif HTTP/1.1
 316 Host: www.exotiquecuisine.com
 317 If-modified-since: Wed, 9 Sep 2015 09:23:24
 318 ```
 319 
 320 El servidor puede responder con el archivo actualizado o con un mensaje HTTP con
 321 código 304 que no ha sido modificado, como se muestra a continuación.
 322 
 323 ```console
 324 HTTP/1.1 304 Not Modified
 325 Date: Sat, 10 Oct 2015 15:39:29
 326 Server: Apache/1.3.0 (Unix) 
 327 (cuerpo de entidad vacío)
 328 ```
 329 
 330 ### SMTP
 331 
 332 El protocolo simple de transferencia de correo (Simple Mail Transfer Protocol, o
 333 SMTP) es el principal protocolo de transferencia de correo de la capa de
 334 aplicación, utiliza el protocolo de transporte TCP y por convención se asigna el
 335 puerto 25.
 336 
 337 A diferencia del protocolo HTTP, el cual es un protocolo principalmente de tipo
 338 **pull** (o extracción) en el cual alguien carga los datos a un servidor web y
 339 los usuarios mediante HTTP extraen la información cuando desean, SMTP es un
 340 protocolo principalmente de tipo **push** (o inserción), en este caso el
 341 servidor de correo emisor introduce el archivo en el servidor de correo
 342 receptor. La máquina que desea enviar el archivo inicia la conexión TCP.
 343 
 344 Cuando una persona envía un mensaje de correo electrónico a otra, existe una
 345 cabecera que contiene información administrativa y antecede al cuerpo del
 346 mensaje, análogo a la cabecera de HTTP. Toda cabecera tiene que estar formada
 347 por una línea de cabecera `From:` y una línea de cabecera `To:`; también puede
 348 incluir una línea `Subject:`, así como otras líneas de cabecera opcionales. Por
 349 ejemplo la siguiente cabecera
 350 
 351 ```text
 352 From: alicia@crepes.fr
 353 To: benito@hamburger.edu
 354 Subject: Hello, World!
 355 ```
 356 
 357 #### Mail User Agent
 358 
 359 El agente de usuario de mail es la aplicación que un usuario utiliza para
 360 conectarse con el servidor de correo. En los orígenes del correo electrónico
 361 cada usuario típicamente tenia un servidor de correo ejecutándose en su estación
 362 y el agente de usuario se conectaba a este de manera directa. Hoy en día es más
 363 común que el servidor de correo esté ejecutándose en algún host de la red, y el
 364 agente de usuario de mail se conecte a este también a través de la red.
 365 
 366 #### Protocolos de acceso de correo
 367 
 368 Un destinatario que ejecuta un agente de usuario en su PC local obtiene sus
 369 mensajes, que se encuentran en un servidor de correo de su ISP por ejemplo,
 370 mediante un protocolo especial de acceso al correo que permita transferir los
 371 mensajes del servidor de correo a su PC local, hay que tener en cuenta que no se
 372 puede utilizar el protocolo SMTP ya que seria una operación de extracción
 373 (*pull*). Actualmente existen varios protocolos de extracción de correo como ser
 374 POP3 (Post Office Protocol Version 3, Protocolo de oficina de correos versión 3)
 375 el Protocolo de acceso de correo de Internet (IMAP, Internet Mail Access
 376 Protocol) y también se puede utilizar HTTP.
 377 
 378 ### DNS
 379 
 380 El sistema de nombres de dominio (Domain Name System, DNS) es un servicio de la
 381 capa de aplicación que se utiliza para hallar la dirección IP de un host
 382 solicitado por un cliente. DNS utiliza el protocolo de transporte UDP y se
 383 asigna por convención el puerto 53.
 384 
 385 <!--
 386 Otros protocolos de la capa de aplicación, como HTTP y SMTP, emplean
 387 habitualmente DNS para obtener la dirección IP de algún host suministrados por
 388 el usuario. 
 389 -->
 390 
 391 Por ejemplo, un navegador solicita el URL `www.unaescuela.edu/index.html`, para
 392 que el host del usuario pueda enviar un mensaje de solicitud HTTP al servidor
 393 web `www.unaescuela.edu` debe obtener primero la dirección IP de
 394 `www.unaescuela.edu`, por lo que realiza los siguientes pasos:
 395 
 396  1. La máquina del cliente ejecuta el lado cliente de la aplicación DNS.
 397  2. El navegador extrae el nombre de host `www.unaescuela.edu` del URL y lo pasa
 398     al lado cliente de la aplicación DNS.
 399  3. El cliente DNS envía una consulta que contiene el nombre de host a un
 400     servidor DNS.
 401  4. El cliente DNS recibe como respuesta la dirección IP correspondiente al
 402     nombre del host.
 403  5. Teniendo la dirección IP del servidor, el navegador puede iniciar una
 404     conexión TCP.
 405 
 406 Los servidores DNS se organizan de forma jerárquica y se distribuyen alrededor
 407 de todo el mundo. Ningún servidor DNS dispone de todas las correspondencias de
 408 todos los hosts de Internet. En una primera aproximación, podemos decir que
 409 existen tres clases de servidores DNS: los servidores DNS raíz, los servidores
 410 DNS de dominio de nivel superior (Top-Level Domain, TLD) y los servidores DNS
 411 autoritativos. Un servidor DNS **autoritativo** mantiene los registros oficiales
 412 de una zona DNS, mientras que un servidor **no autoritativo** resuelve consultas
 413 usando caché o consultando a otros servidores, los cuales en ultima instancia
 414 pueden ser servidores DNS autoritativos si no existe ningún cache.
 415 
 416 Suponga que un cliente DNS desea determinar la dirección IP correspondiente al
 417 nombre de host `www.amazon.com`. En una primera aproximación tienen lugar los
 418 siguientes sucesos: primero, el cliente contacta con uno de los servidores raíz,
 419 el cual devuelve las direcciones IP para los servidores TLD del dominio de
 420 nivel superior `com`. A continuación, el cliente contacta con uno de estos
 421 servidores TLD, que devuelve la dirección IP de un servidor autoritativo para
 422 `amazon.com`. Por último, el cliente contacta con uno de los servidores
 423 autoritativos de `amazon.com`, el cual devuelve la dirección IP correspondiente al
 424 nombre de host `www.amazon.com`.
 425 
 426 <!--
 427 Existen 3 tipos de servidores DNS organizados de forma jerárquica: servidores
 428 DNS raíz, servidores DNS de dominio de nivel superior y servidores DNS
 429 autoritativos
 430 -->
 431 
 432 Las consultas DNS pueden ser **recursivas** o **iterativas**. Una consulta
 433 recursiva exige una respuesta final, por lo que de no tener una respuesta
 434 el servidor DNS consulta a otros servidores DNS; en una consulta DNS iterativa
 435 el servidor devuelve la mejor información disponible, de no tener una entrada
 436 para la dirección de host solicitada responde con una referencia a otro servidor
 437 DNS.
 438 
 439 La resolución de la dirección IP para un host dado, agrega un retardo cuando se
 440 quiera establecer una conexión entre un cliente y un servidor, es por eso que
 441 los servidores DNS utilizan exhaustivamente el **almacenamiento en cache**.
 442 Cuando un servidor DNS local, es decir, no dispone de la entrada DNS para un
 443 host pedido y debe recurrir a otro servidor DNS, recibe una respuesta DNS de
 444 resolución para ese host, almacena la respuesta, de manera tal que si en un
 445 futuro otro cliente realiza una petición de resolución DNS para ese host el
 446 servidor local disponga de la respuesta inmediatamente. Dado que los hosts y las
 447 correspondencias entre nombres de host y direcciones IP no son permanentes, los
 448 servidores DNS descartan la información almacenada en caché pasado un cierto
 449 período de tiempo (normalmente, unos dos días).
 450 
 451 Los servidores DNS almacenan la información en tablas o **registros de recursos
 452 (RR)**, que es básicamente una base de datos. Los mensajes de respuesta DNS
 453 pueden contener uno o mas registros de recursos. Los registros de recursos están
 454 formados por cuatro campos Nombre, Valor, Tipo y TTL y se organizan de
 455 la siguiente forma (conceptual, en la practica el formato es distinto):
 456 
 457 ```text
 458 (Nombre, Valor, Tipo, TTL)
 459 ```
 460 
 461 El campo TTL es el tiempo de vida del registro de recurso; determina cuándo un
 462 recurso debería ser eliminado de una caché DNS. El significado de Nombre y
 463 Valor depende del campo Tipo, el cual puede ser A, AAAA, NS, CNAME o MX. 
 464 
 465 En los registros A y AAAA, el campo Nombre es una dirección de host y el campo
 466 Valor es una dirección IP, IP version 4 en el caso del tipo A e IP version 6 en
 467 el caso de tipo AAAA. Por ejemplo el siguiente registro tipo A (en el cual se
 468 omite el campo TTL):
 469 
 470 ```text
 471 (relay1.bar.foo.com, 145.37.93.126, A)
 472 ```
 473 
 474 En los registros de tipo NS el campo Nombre es un dominio (como `ejemplo.com`) y
 475 el campo Valor es el nombre de host de un servidor DNS autoritativo que sabe
 476 cómo obtener las direcciones IP de los hosts de ese dominio. Este registro se
 477 utiliza para enrutar las consultas DNS a lo largo de la cadena de consultas.
 478 A continuación se muestra un ejemplo de registro de tipo NS:
 479 
 480 ```text
 481 (foo.com, dns.foo.com, NS)
 482 ```
 483 
 484 En los registros de tipo CNAME el campo Valor es un nombre de **host canónico**,
 485 esto es un identificador único para un host dado, y el campo Nombre es un alias
 486 que apunta a ese host. Por ejemplo un alias puede ser `ejemplo.com` que
 487 "apunta" al nombre canónico `relay1.bar.ejemplo.com`.
 488 
 489 <!--
 490 ```text
 491 (blog.example.com, www.example.com, CNAME)
 492 ```
 493 -->
 494 
 495 En los registros de tipo MX, el campo Valor es un nombre canónico de un servidor
 496 de correo con un alias dado por el campo Nombre. Por ejemplo el registro
 497 `(foo.com, mail.bar.foo.com, MX)` es un registro MX. Los registros MX permiten a
 498 los nombres de host de los servidores de correo tener alias simples.
 499 
 500 ### ping
 501 
 502 El comando ping envía mensajes ICMP (capa de red) de tipo **echo request** a un
 503 host dado, si el host esta activo y le llegan estos mensajes, puede responder
 504 con el mismo tipo de mensajes ICMP pero con tipo **echo reply**. En base a estos
 505 mensajes se elabora la salida del comando.
 506 
 507 ```console
 508 root@redes:~# ping -4 -c 2 google.com
 509 PING google.com (172.217.28.14) 56(84) bytes of data.
 510 64 bytes from lcezea-af-in-f14.1e100.net (172.217.28.14): icmp_seq=1 ttl=119 time=4.11 ms
 511 64 bytes from lcezea-af-in-f14.1e100.net (172.217.28.14): icmp_seq=2 ttl=119 time=3.96 ms
 512 
 513 --- google.com ping statistics ---
 514 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
 515 rtt min/avg/max/mdev = 3.955/4.032/4.109/0.077 ms
 516 ```
 517 
 518 ### traceroute
 519 
 520 El comando traceroute es una herramienta de diagnóstico que sirve para mostrar
 521 la ruta que sigue un paquete de datos desde la estación donde se ejecuta el
 522 comando hasta un destino. Funciona enviando mensajes de la capa de red,
 523 típicamente utilizando el protocolo UDP, con TTL (Time-to Live) creciente, es
 524 decir, comienza por el primer paquete con TTL 1, este TTL se decrementa en los
 525 routers por los que pasa el datagrama, por lo que en el primer router se
 526 decrementa y dado que es cero se descarta, el router envía al host desde donde
 527 se originó el datagrama un mensaje ICMP de tipo 11, time exceeded, y código 0,
 528 Time to Live exceeded in Transit, luego se envía otro datagrama con TTL 2 y así
 529 sucesivamente hasta llegar al host destino.
 530 
 531 ```console
 532 root@redes:~# traceroute fi.uba.ar
 533 traceroute to fi.uba.ar (186.33.219.219), 30 hops max, 60 byte packets
 534  1  _gateway (192.168.1.1)  0.354 ms  0.547 ms  0.724 ms
 535  2  200.51.241.1 (200.51.241.1)  4.797 ms  4.849 ms *
 536  3  * IPCUY03-Valan-573.mrse.com.ar (200.63.152.13)  4.894 ms *
 537  4  ARSAT-NAC.mrse.com.ar (200.63.152.14)  6.617 ms * *
 538  5  73.254.33.186.in-addr.arpa (186.33.254.73)  7.991 ms * *
 539  6  74.254.33.186.in-addr.arpa (186.33.254.74)  7.905 ms  6.933 ms  7.026 ms
 540  7  49.254.33.186.in-addr.arpa (186.33.254.49)  7.729 ms * *
 541  8  217.219.33.186.in-addr.arpa (186.33.219.217)  5.664 ms * *
 542  9  219.219.33.186.in-addr.arpa (186.33.219.219)  7.260 ms * *
 543 ```
 544 
 545 ### dig
 546 
 547 ```console
 548 ; <<>> DiG 9.20.18 <<>> example.com
 549 ;; global options: +cmd
 550 ;; Got answer:
 551 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44701
 552 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
 553 
 554 ;; OPT PSEUDOSECTION:
 555 ; EDNS: version: 0, flags:; udp: 512
 556 ;; QUESTION SECTION:
 557 ;example.com.            IN    A
 558 
 559 ;; ANSWER SECTION:
 560 example.com.        300    IN    A    104.18.27.120
 561 example.com.        300    IN    A    104.18.26.120
 562 
 563 ;; Query time: 28 msec
 564 ;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP)
 565 ;; WHEN: Mon Feb 16 02:29:31 -03 2026
 566 ;; MSG SIZE  rcvd: 72
 567 ```
 568 
 569 ## Nivel de transporte
 570 
 571 Un protocolo de la capa de transporte proporciona una comunicación lógica entre
 572 procesos de aplicación que se ejecutan en hosts diferentes. Por comunicación
 573 lógica se dice que, desde la perspectiva de la aplicación, es como si los hosts
 574 que ejecutan los procesos estuvieran conectados directamente; en realidad, los
 575 hosts pueden encontrarse en puntos opuestos del planeta, conectados mediante
 576 numerosos routers y a través de un amplio rango de tipos de enlace. Los procesos
 577 de aplicación utilizan la comunicación lógica proporcionada por la capa de
 578 transporte para enviarse mensajes entre sí, sin preocuparse por los detalles de
 579 la infraestructura física utilizada para transportar estos mensajes.
 580 
 581 Los protocolos de la capa de transporte están implementados en los sistemas
 582 terminales, pero no en los routers de la red. En el lado emisor, la capa de
 583 transporte convierte los mensajes que recibe procedentes de un proceso de
 584 aplicación emisor en paquetes de la capa de transporte, conocidos como
 585 **segmentos**, esto se hace dividiendo los mensajes de la aplicación en
 586 fragmentos más pequeños y añadiendo una cabecera de la capa de transporte a cada
 587 fragmento, con el fin de crear el segmento de la capa de transporte. Luego, la
 588 capa de transporte pasa el segmento a la capa de red del sistema terminal
 589 emisor, donde el segmento se encapsula dentro de un paquete de la capa de red
 590 (un **datagrama**) y se envía al destino. En el lado receptor, la capa de red
 591 extrae el segmento de la capa de transporte del datagrama y lo sube a la capa de
 592 transporte. A continuación, esta capa procesa el segmento recibido, poniendo los
 593 datos del segmento a disposición de la aplicación de recepción.
 594 
 595 Para aplicaciones de red puede haber más de un protocolo de la capa de
 596 transporte disponible como el Protocolo de datagramas de usuario (User Datagram
 597 Protocol, **UDP**) y el Protocolo de control de transmisión (Transmission
 598 Control Protocol, **TCP**).
 599 
 600 Un protocolo de la capa de transporte proporciona una comunicación lógica entre
 601 procesos que se ejecutan en hosts diferentes, un protocolo de la capa de red
 602 proporciona una comunicación lógica entre hosts
 603 
 604 ### Multiplexación y demultiplexación
 605 
 606 La multiplexación y la demultiplexación son las funciones fundamentales que
 607 permiten que la capa de transporte extienda el servicio de entrega de datos de
 608 host a host a un servicio de entrega de proceso a proceso. Aunque la capa de red
 609 (mediante el protocolo IP) entrega datos a un dispositivo específico, es la capa
 610 de transporte la que decide a qué aplicación o servicio concreto pertenecen esos
 611 datos dentro de dicho dispositivo.
 612 
 613 La multiplexación ocurre en el host de origen. Su función consiste en reunir
 614 fragmentos de datos provenientes de diferentes procesos de aplicación, añadirles
 615 un encabezado de transporte con identificadores específicos como el número de
 616 puerto y pasar los segmentos resultantes a la capa de red. Gracias a esto,
 617 múltiples aplicaciones como un navegador web, un cliente de correo y una
 618 videollamada pueden enviar datos simultáneamente a través de una única conexión
 619 física de red sin que la información se mezcle de forma irrecuperable.
 620 
 621 La demultiplexación es el proceso inverso y ocurre en el host de destino. Cuando
 622 la capa de transporte recibe un segmento de datos de la capa de red, examina el
 623 número de puerto de destino en el encabezado. Luego, dirige esos datos al socket
 624 o punto de acceso correspondiente a la aplicación que los está esperando. De
 625 esta manera, el sistema operativo asegura que los datos del servidor web lleguen
 626 al navegador y no al programa de correo electrónico, por dar un ejemplo.
 627 
 628 Existen diferencias en cómo se realiza este proceso dependiendo del protocolo
 629 de trasporte utilizado. En el caso de UDP, la demultiplexación se basa
 630 únicamente en la dirección IP de destino y el número de puerto de destino. Esto
 631 significa que si dos segmentos tienen el mismo puerto de destino pero vienen de
 632 diferentes orígenes, serán dirigidos al mismo socket. Por el contrario, en TCP
 633 la demultiplexación es más específica ya que utiliza una tupla de cuatro
 634 valores: dirección IP de origen, número de puerto de origen, dirección IP de
 635 destino y número de puerto de destino. Esto permite que un servidor mantenga
 636 múltiples conexiones simultáneas con diferentes clientes en el mismo puerto,
 637 como el puerto 80 o 443, manteniendo cada flujo de datos totalmente
 638 independiente del otro.
 639 
 640 ### TCP
 641 
 642 El protocolo de control de transmisión (Transmission Control Protocol, TCP) es
 643 un protocolo de transporte del modelo TCP/IP cuya función es permitir la
 644 comunicación confiable y ordenada entre aplicaciones que se ejecutan en
 645 distintos dispositivos de una red.
 646 
 647 A diferencia de protocolos más simples como UDP, TCP es un protocolo orientado a
 648 la conexión. Esto significa que antes de que los datos comiencen a fluir, los
 649 dos dispositivos deben realizar un procedimiento de apertura llamado
 650 acuerdo de tres pasos o "three-way handshake". Durante este proceso, ambos
 651 extremos sincronizan sus números de secuencia y confirman que están listos para
 652 intercambiar información. Cuando se desea terminar la comunicación, los
 653 dispositivos también deben realizar un procedimiento para terminar la conexión.
 654 
 655 Una de las características más críticas de TCP es la fiabilidad mediante la
 656 detección de errores y la retransmisión. Cada segmento de datos que se envía
 657 lleva un número de secuencia único. Cuando el receptor recibe un paquete,
 658 devuelve un mensaje de confirmación llamado ACK. Si el emisor no recibe esta
 659 confirmación en un tiempo determinado, asume que el paquete se perdió o se dañó
 660 y lo reenvía automáticamente. Esto asegura que la aplicación de destino reciba
 661 una copia exacta de los datos originales, sin importar las condiciones de la
 662 red. Además de la fiabilidad, TCP gestiona el control de flujo y el control de
 663 congestión. El control de flujo evita que un emisor rápido abrume a un receptor
 664 lento mediante el uso de una ventana deslizante, que indica cuánto espacio tiene
 665 disponible el receptor en su memoria temporal. El control de congestión, por su
 666 parte, permite que TCP reduzca la velocidad de envío si detecta que la red está
 667 saturada, evitando así un colapso del tráfico. Finalmente, TCP garantiza la
 668 entrega en orden. Debido a que Internet es una red de conmutación de paquetes,
 669 es común que diferentes fragmentos de un archivo sigan rutas distintas y lleguen
 670 al destino en desorden. TCP utiliza los números de secuencia mencionados
 671 previamente para reensamblar los segmentos en la posición correcta antes de
 672 entregarlos a la capa de aplicación, de modo que se reciba la información tal
 673 como fue enviada originalmente.
 674 
 675 #### Inicio y cierre de sesión
 676 
 677 Como se mencionó previamente, al iniciar una sesión TCP se sigue un acuerdo de 3
 678 pasos ("three-way handshake"), esto comienza cuando un cliente desea establecer
 679 una conexión con un servidor, para esto envía un segmento TCP con la bandera (o
 680 campo, en el encabezado) SYN activada e incluye su numero de secuencia (el cual
 681 elige el sistema operativo mediante un algoritmo), si el servidor esta
 682 disponible responde con un segmento con las banderas SYN y ACK activas y también
 683 devuelve su numero de secuencia el cual es elegido de la misma forma (por el
 684 sistema operativo) además el servidor asigna a su campo ACK el numero de
 685 secuencia que el cliente envió en el primer segmento +1 ya que el primer
 686 segmento ocupa 1 byte. Por ultimo el cliente envía un segmento con la bandera
 687 ACK activa y con numero de ACK igual al numero de secuencia que el servidor
 688 envío en su respuesta +1, debido a que el segmento enviado por el servidor ocupa
 689 1 byte.
 690 
 691 
 692 \begin{figure}[h]
 693 \centering
 694 \begin{tikzpicture}[
 695     >=Stealth,
 696     line width=1.0pt,
 697     every node/.style={font=\small}
 698 ]
 699 
 700 % Títulos
 701 \node[font=\small] (cLabel) at (0, 0.5) {Cliente};
 702 \node[font=\small] (sLabel) at (6, 0.5) {Servidor};
 703 
 704 % Líneas de vida (coordenadas)
 705 \draw[dashed] (0, 0.0) -- (0,-2.55);
 706 \draw[dashed] (6, 0.0) -- (6,-2.55);
 707 
 708 % Mensajes
 709 \draw[->] (0, -0.25) -- node[above, sloped, yshift=-2pt]{SYN; S=1000} (6,-0.75);
 710 \draw[->, green!60!black] (6, -1.00) -- node[above, sloped, yshift=-2pt]{SYN, ACK; S=5000 A=1001} (0,-1.50);
 711 \draw[->] (0, -1.75) -- node[above, sloped, yshift=-2pt]{ACK; A=5001} (6,-2.25);
 712 
 713 \end{tikzpicture}
 714 \caption{Inicio de una conexión TCP}
 715 \label{fig:tcp-handshake}
 716 \end{figure}
 717 
 718 El cierre de sesión TCP se da en 2 pasos, como se muestra en la figura
 719 \ref{fig:tcp-fin} quien inicia el cierre de conexión envía un segmento TCP con
 720 el bit FIN activado, cuando recibe reconocimiento del otro extremo de la
 721 conexión espera a recibir un segmento separado con el bit FIN activado, cuando
 722 llega este segmento envía un segmento de reconocimiento y se da por finalizada
 723 la sesión en ambos extremos.
 724 
 725 \begin{figure}[h]
 726 \centering
 727 \begin{tikzpicture}[
 728     >=Stealth,
 729     line width=1.0pt,
 730     every node/.style={font=\small}
 731 ]
 732 
 733 % Títulos
 734 \node[font=\small] (cLabel) at (0, 0.5) {Cliente};
 735 \node[font=\small] (sLabel) at (6, 0.5) {Servidor};
 736 
 737 % Líneas de vida (coordenadas)
 738 \draw[dashed] (0, 0.0) -- (0,-3.90);
 739 \draw[dashed] (6, 0.0) -- (6,-3.90);
 740 
 741 % Mensajes
 742 \draw[->] (0,-0.25) -- node[above, sloped, yshift=-2pt]{FIN} (6,-0.75);
 743 \draw[->, green!60!black] (6,-0.95) -- node[above, sloped, yshift=-2pt]{ACK} (0,-1.45);
 744 \draw[->] (6,-2.45) -- node[above, sloped, yshift=-2pt]{FIN} (0,-2.95);
 745 \draw[->, green!60!black] (0,-3.15) -- node[above, sloped, yshift=-2pt]{ACK} (6,-3.65);
 746 
 747 \end{tikzpicture}
 748 \caption{Cierre limpio de una conexión TCP}
 749 \label{fig:tcp-fin}
 750 \end{figure}
 751 
 752 #### Control de flujo y congestion
 753 
 754 El control de flujo controla el flujo de datos que se envía a la aplicación, ya
 755 que en aplicaciones lentas puede que el emisor desborde el buffer de recepción.
 756 
 757 El control de congestión controla que no haya congestión en la red, esto puede
 758 provocarse debido a los protocolos subyacentes al nivel de transporte, como el
 759 protocolo IP.
 760 
 761 En ambos casos se regula la velocidad de transmisión del emisor para mitigar los
 762 efectos y lograr una conexión segura.
 763 
 764 ##### Ventana deslizante
 765 
 766 La ventana deslizante (sliding window) en TCP es el mecanismo de control de
 767 flujo que regula cuántos bytes puede enviar un emisor sin recibir confirmación
 768 (ACK) del receptor.
 769 
 770 La ventana deslizante permite que el emisor envié multiples segmentos seguidos
 771 sin esperar el segmento de validación de receptor instantáneamente.
 772 
 773 Se puede determinar la ventana TCP mediante el producto de el throughput y el
 774 RTT del enlace (o Bandwidth-delay product, BDP).
 775 
 776 $$\text{Ventana TCP } = \text{Throughput}\cdot\text{RTT}$$
 777 
 778 Si la ventana es menor que el BDP el emisor se queda sin datos para enviar y el
 779 enlace queda parcialmente ocioso, por lo que no resulta eficiente.
 780 
 781 El throughput queda limitado
 782 
 783 Si la ventana es mayor o igual al BDP, entonces el enlace se mantiene lleno y se
 784 alcanza el máximo throughput posible.
 785 
 786 <!-- ##### Slow start -->
 787 
 788 ##### Fast retransmit
 789 
 790 En el caso de que se reciban tres ACK con igual numero de reconocimiento, el
 791 emisor TCP realiza una retransmisión rápida lo cual permite retransmitir un
 792 segmento perdido sin esperar a que expire el temporizador de retransmisión
 793 (RTO). Un ejemplo de esto se muestra en la figura
 794 \ref{fig:tcp-fast-retransmit}.
 795 
 796 Cuando TCP detecta los ACK duplicados guarda esos segmentos en un buffer ya que
 797 detecta que los segmentos recibidos no están en orden y debe esperar a que el
 798 emisor retransmita el segmento perdido.
 799 
 800 \begin{figure}[h]
 801 \centering
 802 \begin{tikzpicture}[
 803     >=Stealth,
 804     line width=1.0pt,
 805     every node/.style={font=\small}
 806 ]
 807 
 808 % Títulos
 809 \node (cLabel) at (0,-0.25) {Cliente};
 810 \node (sLabel) at (6,-0.25) {Servidor};
 811 
 812 % Líneas de vida
 813 \draw[dashed] (0,-0.75) -- (0,-5.0);
 814 \draw[dashed] (6,-0.75) -- (6,-5.0);
 815 
 816 % Segmentos enviados
 817 \draw[->] (0,-1.0) -- node[pos=0.2, above, sloped, yshift=-2pt]{S=1000} (6,-1.5);
 818 \draw[-, red!70!black]  (0,-1.5) -- node[pos=0.4, above, sloped, yshift=-2pt]{S=2000} (3,-1.75);
 819 \draw[->] (0,-2.0) -- node[pos=0.2, above, sloped, yshift=-2pt]{S=3000} (6,-2.5);
 820 \draw[->] (0,-2.5) -- node[pos=0.2, above, sloped, yshift=-2pt]{S=4000} (6,-3.0);
 821 
 822 % ACKs duplicados
 823 \draw[->, green!60!black] (6,-1.6) -- node[pos=0.35, above, sloped, yshift=-2pt]{A=2000} (0,-2.1);
 824 % \draw[-, green!60!black]  (6,-2.0) -- node[pos=0.35, above, sloped, yshift=-2pt]{A=2000} (0,-1.75);
 825 \draw[->, green!60!black] (6,-2.6) -- node[pos=0.35, above, sloped, yshift=-2pt]{A=2000} (0,-3.1);
 826 \draw[->, green!60!black] (6,-3.1) -- node[pos=0.35, above, sloped, yshift=-2pt]{A=2000} (0,-3.6);
 827 
 828 % Retransmisión rápida
 829 \draw[->, thick] (0,-3.7) -- node[above, sloped, yshift=-2pt]{Retransmisión S=2000} (6,-4.2);
 830 
 831 % ACK acumulativo final
 832 \draw[->, green!60!black] (6,-4.3) -- node[pos=0.5, above, sloped, yshift=-2pt]{A=5000} (0,-4.8);
 833 
 834 \end{tikzpicture}
 835 \caption{Ejemplo de Fast Retransmit en TCP}
 836 \label{fig:tcp-fast-retransmit}
 837 \end{figure}
 838 
 839 
 840 #### Transmisión de datos
 841 
 842 La flag PSH indica al receptor que debe enviar los datos recibidos
 843 inmediatamente a la aplicación, sin almacenarlos en un buffer. Esto se utiliza
 844 cuando en un segmento se envía la totalidad de la petición, por lo que no hace
 845 falta que el receptor espere a más datos.
 846 
 847 #### Maximum segment size
 848 
 849 El tamaño máximo de segmento (Maximum Segment Size, MSS) es un parámetro del
 850 protocolo TCP que indica la cantidad máxima de bytes de datos útiles de la
 851 aplicación (payload) que puede transportar un segmento TCP, sin incluir
 852 cabeceras TCP ni IP.
 853 
 854 Se define durante el three-way handshake al inicio de la conexión TCP y esta
 855 relacionado con el MTU del enlace. Por ejemplo, para un enlace Ethernet con MTU
 856 de 1500 bytes, y tomando una cabecera TCP e IPv4 de 20 bytes cada una se tiene
 857 un MSS de 1460 bytes.
 858 
 859 \vspace{-1em}
 860 $$MSS = 1500 \text{ B} − 20 \text{ B} − 20 \text{ B} = 1460\text{ B}$$
 861 
 862 #### Segmentación
 863 
 864 Cuando la aplicación desea transmitir una cierta cantidad de bytes el protocolo
 865 TCP divide esos bytes en segmentos de acuerdo al tamaño máximo de segmento (MSS)
 866 del enlace por el cual se va a realizar la transmisión. Por ejemplo para
 867 transmitir 5000 bytes de datos con un MSS de 1460 bytes, se necesitaran 4
 868 segmentos TCP, 3 segmentos de 1460 bytes y un segmento de 620 bytes. A cada
 869 segmento de datos se agrega una cabecera TCP, en este ejemplo sin opciones de
 870 20 bytes, y una cabecera IP, también sin opciones en este ejemplo también
 871 ocupando 20 bytes, de esta forma se llega a los 1500 bytes de segmento máximo.
 872 
 873 ### UDP
 874 
 875 El Protocolo de datagramas de usuario (User Datagram Protocol, UDP) es un
 876 protocolo de transporte cuya función es enviar datagramas de forma rápida y
 877 simple, sin establecer conexión previa y sin garantizar entrega, orden ni
 878 control de errores. Solo se verifica si el datagrama llego bien con un checksum.
 879 
 880 <!-- ### QUIC -->
 881 
 882 ## Nivel de red
 883 
 884 La función principal de la capa de red es la de transportar paquetes desde un
 885 host emisor a un host receptor. Esta capa es muy amplia y se puede dividir
 886 conceptualmente en un **plano de control** y un **plano de datos**. El plano de
 887 datos (o forwarding plane) se encarga de reenviar un paquete que entra por una
 888 interfaz a otra interfaz apropiada, basándose en la tabla de forwarding o
 889 reenvío (o Forwarding Information Base, FIB) la cual ya ha sido previamente
 890 completada por el plano de control. El plano de control se encarga justamente de
 891 completar la tabla de reenvío para que así el plano de datos reenvíe los
 892 paquetes por la interfaz apropiada. Para completar la tabla de reenvío el
 893 enfoque tradicional, o más común, es elegir de acuerdo a la dirección de destino
 894 del paquete y basarse en la tabla de ruteo (o Routing Information Base, RIB)
 895 para elegir la interfaz de salida. En otros enfoques no tradicionales, como
 896 enrutamiento basado en políticas (Policy Based Routeing, PBR) puede que se tenga
 897 en cuenta otros parámetros del paquete ademas de la dirección de destino, como
 898 la dirección de origen, y en ese caso la tabla de reenvío no dependería
 899 solamente de la tabla de ruteo. 
 900 
 901 <!--
 902 Esta tabla de ruteo en el plano de control puede ser completada por un
 903 administrador de redes manualmente, pero típicamente se completa automáticamente
 904 mediante algoritmos más eficiente, por ejemplo algoritmos que eligen la ruta más
 905 corta.
 906 
 907 En la realización de esta tarea podemos identificar dos importantes funciones de
 908 la capa de red: el reenvío (*forwarding*) y el enrutamiento (*routing*). El
 909 **reenvío** hace referencia a la acción local que realiza un router al
 910 transferir un paquete desde una interfaz de un enlace de entrada a una interfaz
 911 del enlace de salida apropiado. El reenvío tiene lugar en escalas de tiempo muy
 912 cortas (típicamente de unos pocos nanosegundos) y se implementa normalmente en
 913 hardware. El **enrutamiento** hace referencia al proceso que realiza la red en
 914 conjunto para determinar las rutas extremo a extremo que los paquetes siguen
 915 desde el origen al destino. El enrutamiento tiene lugar con escalas de tiempo
 916 mucho más largas (normalmente de segundos) y, como veremos, suele implementarse
 917 en software.
 918 
 919 Un elemento crucial en todo router de una red es su **tabla de reenvío** (o
 920 **routing table**). Un router reenvía un paquete examinando el valor de uno o
 921 más campos de la cabecera del paquete entrante y utilizando después esos valores
 922 de la cabecera para realizar una indexación dentro de su tabla de reenvío. El
 923 valor almacenado en la entrada de la tabla de reenvío correspondiente a esos
 924 valores indica cuál es la interfaz del enlace de salida del router a la que hay
 925 que reenviar el paquete. Un ejemplo de una tabla de enrutamiento (o ruteo) se
 926 muestra en la tabla \ref{tab:ej-tabla-enrutamiento}.
 927 -->
 928 
 929 En la tabla \ref{tab:ej-tabla-ruteo} se muestra un ejemplo de tabla de ruteo.
 930 En el enfoque tradicional, en el cual el reenvío se basa solo en la dirección de
 931 destino del paquete, se realiza la operación binaría AND entre la mascara de la
 932 entrada en la tabla y la dirección de destino del paquete entrante, luego se
 933 compara con la dirección de destino de la tabla y se reenvía de acuerdo a la
 934 interface de esa entrada en la tabla.
 935 
 936 Una entrada particular de la tabla es lo que se conoce como **default gateway**,
 937 el cual típicamente es la entrada con todos ceros y mascara cero: 0.0.0.0/0, esta
 938 entrada es aquella por la cual debe salir el paquete si no coincide con ningún
 939 otra entrada en la tabla, de no estar esta entrada el paquete se descartaría ya
 940 que no existiría destino conocido por el cual reenviar el paquete.
 941 
 942 \begin{table}[h]
 943 \centering\small
 944 \setlength{\arrayrulewidth}{0.5pt}
 945 \begin{tabularx}{\linewidth}
 946     {|>{\centering\arraybackslash}p{48pt}|
 947       >{\centering\arraybackslash}p{38pt}|
 948       >{\centering\arraybackslash}p{45pt}|
 949       >{\centering\arraybackslash}X|}
 950   \hline
 951 \textbf{Destino} & \textbf{Mascara} & \textbf{Próximo salto} & \textbf{Interface} \\ \hline
 952      123.0.0.0   & /8               & 123.0.0.99             & eth0               \\ \hline
 953     190.4.28.0   & /16              & 190.4.28.1             & eth0               \\ \hline
 954    200.10.20.0   & /24              & 200.10.20.2            & eth0               \\ \hline
 955        0.0.0.0   & /0               & 200.10.20.1            & eth0               \\ \hline
 956 \end{tabularx}
 957 \caption{Ejemplo de tabla de ruteo}
 958 \label{tab:ej-tabla-ruteo}
 959 \end{table}
 960 
 961 Puede ocurrir que una dirección IP coincida con una o más entradas de la tabla
 962 de ruteo, en cuyo caso, la entrada que tenga más campos en común con la
 963 dirección será la elegida. Por ejemplo, una dirección coincide con una entrada
 964 de la tabla con mascara /24 y también con una entrada con mascara /26, entonces
 965 el datagrama se reenvía por la interfaz correspondiente a la entrada de la tabla
 966 con la mascara /26.
 967 
 968 ### Protocolo IP
 969 
 970 El protocolo de internet (Internet Protocol, IP) es el componente principal de
 971 la capa de red y la principal función es la de actuar como un sistema de
 972 direccionamiento y enrutamiento universal, permitiendo que los datos viajen
 973 desde un origen hasta un destino a través de múltiples redes interconectadas.
 974 Se puede decir que el protocolo IP pertenece al plano de datos aunque depende
 975 de la información brindada por plano de control para direccionar los datagramas.
 976 
 977 A diferencia de protocolos de capas superiores que se encargan de la fiabilidad,
 978 IP es un protocolo de entrega de mejor esfuerzo (*best-effort*) y no orientado a
 979 la conexión. Esto significa que no garantiza que los datos lleguen a su destino
 980 ni que lo hagan en el orden correcto; simplemente se encarga de empaquetar la
 981 información en unidades denominadas datagramas y enviarlas a través de la
 982 infraestructura de red basándose en las direcciones de los encabezados.
 983 
 984 Cada datagrama IP contiene una sección de encabezado que incluye información
 985 vital para el transporte, siendo las direcciones IP de origen y de destino los
 986 campos más importantes. Estas direcciones identificando de forma única a cada
 987 dispositivo conectado a la red. Existen dos versiones del protocolo IP la
 988 version 4 y la version 6. La version 4 (o IPv4) utiliza direcciones de 32 bits
 989 representadas por cuatro bytes separados por punto, por ejemplo 192.168.1.1. La
 990 versión 6 (o IPv6) utiliza direcciones de 128 bits, con una representación en
 991 hexadecimal de ocho grupos de 16 bits separados por dos puntos, con reglas de
 992 compresión para los ceros, por ejemplo 2001:0db8:85a3:0000:0000:8a2e:0370:7334.
 993 
 994 #### Versión 4
 995 
 996 El formato de los datagramas de IPv4 se muestra en la tabla
 997 \ref{tab:ipv4-header}. Un datagrama IP tiene un total de 20 bytes de cabecera
 998 cuando no se utilicen opciones. Por lo general no se utilizan opciones en el
 999 encabezado IP ya que la mayoría de estas opciones son obsoletas. Si el datagrama
1000 transporta un segmento TCP, entonces cada datagrama (no fragmentado) transporta
1001 un total como mínimo de 40 bytes de cabecera (20 bytes de la cabecera IP más 20
1002 bytes de la cabecera TCP, sin opciones en los dos casos) junto con el mensaje de
1003 la capa de aplicación.
1004 
1005 <!--
1006 ```text
1007  0                   1                   2                   3
1008  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1009 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1010 |Version|  IHL  |Type of Service|          Total Length         |
1011 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1012 |         Identification        |Flags|      Fragment Offset    |
1013 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1014 |  Time to Live |    Protocol   |         Header Checksum       |
1015 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1016 |                       Source Address                          |
1017 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1018 |                    Destination Address                        |
1019 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1020 |                    Options                    |    Padding    |
1021 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1022 ```
1023 -->
1024 
1025 \begin{table}[h]
1026 \centering\small
1027 \setlength{\arrayrulewidth}{0.5pt}
1028 \setlength{\extrarowheight}{2.5pt} % Da un poco de aire vertical
1029 \setlength{\tabcolsep}{2pt}   % default is 6pt
1030 \begin{tabular}{|*{32}{>{\centering\arraybackslash}c|}}
1031 
1032 \multicolumn{4}{c}{0-3} &
1033 \multicolumn{4}{c}{4-7} &
1034 \multicolumn{8}{c}{8-15} &
1035 \multicolumn{16}{c}{16-32} \\ \hline
1036 
1037 \multicolumn{4}{|c}{Version} & 
1038 \multicolumn{4}{|c}{\makecell{Header\\length}} & 
1039 \multicolumn{8}{|c}{ToS} & 
1040 \multicolumn{16}{|p{0.5\linewidth}|}{\centering Total length} \\ \hline
1041 
1042 \multicolumn{16}{|c}{Identification} & 
1043 \multicolumn{3}{|c}{\centering Flags} & 
1044 \multicolumn{13}{|c|}{Fragment Offset} \\ \hline
1045 
1046 \multicolumn{8}{|c}{TTL} & 
1047 \multicolumn{8}{|c}{Protocol} & 
1048 \multicolumn{16}{|c|}{Header checksum} \\ \hline
1049 
1050 \multicolumn{32}{|c|}{Source address} \\ \hline
1051 
1052 \multicolumn{32}{|c|}{Destination address} \\ \hline
1053 
1054 \multicolumn{32}{|c|}{Options} \\ \hline
1055 
1056 \multicolumn{32}{|c|}{Padding} \\ \hline
1057 
1058 \end{tabular}
1059 \caption{Formato encabezado IPv4}
1060 \label{tab:ipv4-header}
1061 \end{table}
1062 
1063 Los campos de los datagramas IP version 4 son:
1064 
1065 1. Número de versión: Ocupa 4 bits del encabezado y especifica la versión del
1066    protocolo IP del datagrama. A partir del número de versión, el router puede
1067    determinar cómo interpretar el resto del datagrama IP.
1068 2. Longitud de cabecera: Un datagrama IPv4 puede contener un número variable de
1069    opciones, estos 4 bits son necesarios para determinar dónde comienzan
1070    realmente los datos (o carga útil) en el datagrama IP. La mayoría de los
1071    datagramas IP no contienen opciones, por lo que el datagrama IP típico tiene
1072    una cabecera de 20 bytes.
1073 3. Tipo de servicio: Los bits del tipo de servicio (Type Of Service, ToS) se
1074    incluyeron en la cabecera con el fin de poder diferenciar entre los distintos
1075    tipos de datagramas IP. Por ejemplo, para diferenciar datagramas en tiempo
1076    real (como los utilizados en aplicaciones de telefonía IP) del tráfico que no
1077    es en tiempo real (como por ejemplo el tráfico FTP).
1078 4. Longitud del datagrama: Es la longitud total del datagrama IP (la cabecera
1079    más los datos) en bytes. Puesto que este campo tiene una longitud de 16 bits,
1080    el tamaño máximo teórico del datagrama IP es de 65535 bytes. Aunque rara vez
1081    tienen una longitud mayor a 1500 bytes.
1082 5. Identificador, flags, offset: Estos campos se utilizan cuando hay
1083    fragmentación de IP.
1084 6. Tiempo de vida (Time-To-Live, TTL): se incluye con el fin de garantizar que
1085    los datagramas no estarán eternamente en circulación a través de la red
1086    (debido, por ejemplo, a un bucle de enrutamiento de larga duración). Este
1087    campo se decrementa en una unidad cada vez que un router procesa un
1088    datagrama. Si el campo TTL alcanza el valor 0, el datagrama tiene que ser
1089    descartado por el router.
1090 7. Protocolo: Este campo solo se utiliza cuando el datagrama IP alcanza su
1091    destino final. El valor de este campo indica el protocolo específico de la
1092    capa de transporte al que se pasarán los datos. Por ejemplo, un valor de 6
1093    indica que los datos se pasan a TCP, mientras que un valor igual a 17 indica
1094    que los datos se pasan a UDP.
1095 8. Suma de comprobación de cabecera: La suma de comprobación de cabecera ayuda a
1096    los routers a detectar errores de bit en un datagrama dado. Un router calcula
1097    la suma de comprobación de cabecera para cada datagrama IP recibido y detecta
1098    una condición de error si la suma de comprobación incluida en la cabecera del
1099    datagrama no coincide con la suma de comprobación calculada. Normalmente, los
1100    routers descartan los datagramas en los que se ha detectado que existe un
1101    error. La suma de comprobación tiene que volver a calcularse y almacenarse en
1102    cada router, ya que el campo TTL, y posiblemente también el campo de
1103    opciones, cambian.
1104 9. Direcciones IP de origen y de destino: Cuando un origen crea un datagrama,
1105    inserta su dirección IP en el campo de dirección IP de origen e inserta la
1106    dirección del destino final en el campo de dirección IP de destino. A menudo,
1107    el host de origen determina la dirección de destino mediante una búsqueda DNS
1108 10. Datos (carga útil): En la mayoría de las circunstancias, el campo de datos
1109     del datagrama IP contiene el segmento de la capa de transporte (TCP o UDP)
1110     que va a entregarse al destino. Sin embargo, el campo de datos puede
1111     transportar otros tipos de datos, como por ejemplo mensajes ICMP.
1112 
1113 ##### Fragmentación
1114 
1115 La cantidad máxima de datos que una trama de la capa de enlace puede transportar
1116 se conoce como **unidad máxima de transmisión** (Maximum Transmission Unit,
1117 MTU). Dado que cada datagrama IP se encapsula dentro de una trama de la capa
1118 de enlace para ir de un router al siguiente, la MTU del protocolo de la capa de
1119 enlace impone un límite estricto a la longitud de un datagrama IP. Además en
1120 cada enlace a lo largo de la ruta entre el emisor y el receptor puede utilizar
1121 diferentes protocolos, los cuales imponen MTU diferentes.
1122 
1123 <!--
1124 Esta limitación del tamaño de un datagrama IP no supone un problema importante.
1125 Lo que realmente es un problema es que cada uno de los enlaces existentes a lo
1126 largo de la ruta entre el emisor y el destino pueden utilizar diferentes
1127 protocolos de la capa de enlace y cada uno de estos protocolos puede emplear una
1128 MTU diferente.
1129 -->
1130 
1131 Si el datagrama no cabe en una trama de la capa de enlace entonces se debe
1132 fragmentar la carga útil del datagrama IP en dos o más datagramas IP más
1133 pequeños, esto es encapsular cada uno de los datagramas IP más pequeños en una
1134 trama de la capa de enlace distinta y enviar dichas tramas a través del enlace
1135 de salida. Cada uno de estos datagramas más pequeños se conocen como
1136 **fragmentos**. Cuando un host de destino recibe una serie de datagramas
1137 procedentes del mismo origen, tiene que determinar si algunos de esos datagramas
1138 son fragmentos de algún otro datagrama original más grande. Si algunos
1139 datagramas son fragmentos, tiene que determinar además cuándo ha recibido el
1140 último fragmento y cómo debe ensamblar los fragmentos que ha recibido para
1141 formar el datagrama original. Para que el host de destino pueda reensamblar los
1142 fragmentos, en la cabecera de IPv4 se incluye los campos identificación,
1143 indicadores y offset. Cuando se crea un datagrama, el host emisor marca el
1144 datagrama con un número de identificación, así como con las direcciones de
1145 origen y de destino. Normalmente, el host emisor incrementa el número de
1146 identificación para cada datagrama que envía. Cuando un router necesita
1147 fragmentar un datagrama, cada datagrama resultante (es decir, cada fragmento) se
1148 marca con la dirección de origen, la dirección de destino y el número de
1149 identificación del datagrama original. Cuando el destino recibe una serie de
1150 datagramas procedentes del mismo host emisor, puede examinar los números de
1151 identificación de los datagramas para determinar cuáles de ellos son fragmentos
1152 de un mismo datagrama más largo. Puesto que IP es un servicio no fiable, es
1153 posible que uno o más de los fragmentos nunca lleguen a su destino. Por esta
1154 razón, con el fin de que el host de destino esté absolutamente seguro de que ha
1155 recibido el último fragmento del datagrama original, ese último fragmento tiene
1156 un bit indicador de más fragmentos (More Fragments, MF) puesto a 0, mientras que
1157 los demás fragmentos tienen el bit MF puesto a 1. Además, para que el
1158 host de destino determine si falta un fragmento (y también para que pueda
1159 reensamblar los fragmentos en el orden apropiado), se utiliza el campo offset
1160 para especificar en qué posición dentro del datagrama IP original encaja el
1161 fragmento.
1162 
1163 #### Direccionamiento
1164 
1165 Las direcciones IPv4 tienen una longitud de 32 bits (lo que equivale a 4 bytes),
1166 por lo que existen un total de 232 (unos 4.000 millones) direcciones IP
1167 posibles. Estas direcciones normalmente se expresan utilizando la denominada
1168 notación decimal con puntos, en la que cada byte de la dirección se escribe en
1169 formato decimal y se separa mediante un punto del resto de los bytes de la
1170 dirección. Por ejemplo, la dirección IP 193.32.216.9. El 193 es el número
1171 decimal equivalente a los 8 primeros bits de la dirección; el 32 es el
1172 equivalente decimal de los segundos 8 bits de la dirección, y así sucesivamente.
1173 Por tanto, la dirección 193.32.216.9 en notación binaria se expresa como sigue:
1174 
1175 ```text
1176 11000001.00100000.11011000.00001001
1177 ```
1178 
1179 <!--
1180 **************************revisar*****************************
1181 En términos de IP, esta red que interconecta tres interfaces de host y
1182 una interfaz de router forma una subred. El direccionamiento IP asigna una
1183 dirección a esta **subred**: 223.1.1.0/24, donde la notación /24, que en
1184 ocasiones se denomina **máscara de subred**, indica que los 24 bits más a la
1185 izquierda de ese número de 32 bits definen la dirección de subred. Por tanto, la
1186 subred 223.1.1.0/24 consta de tres interfaces de host (223.1.1.1, 223.1.1.2 y
1187 223.1.1.3) y de una interfaz del router (223.1.1.4). Cualquier host adicional
1188 conectado a la subred 223.1.1.0/24 requeriría una dirección de la forma
1189 223.1.1.XXX.
1190 -->
1191 
1192 #### Subnetting y Supernetting
1193 
1194 Subnetting es el proceso de dividir una red IP en subredes más pequeñas mediante
1195 la extensión del prefijo del campo de red, para mejorar la eficiencia y
1196 administración del direccionamiento. Por cada bit tomado se divide la red en dos
1197 subredes con la mitad de capacidad de hosts. Por ejemplo se tiene la red
1198 192.168.1.0/24 la cual tiene capacidad para 253 hosts (debido a que la dirección
1199 0 representa la red y la dirección 255 se usa para broadcast). Tomando un bit
1200 más de mascara se tienen dos subredes 192.168.1.0/25 y 192.168.1.128/25  ambas
1201 con capacidad para 126 hosts. El subnetting se puede hacer tomando mascaras
1202 fijas (Fixed Length Subnet Mask, FLSM) o tomando mascaras variables (Variable
1203 Length Subnet Mask, VLSM) la diferencia radica en que con FLSM la mascara es
1204 fija para toda la subred, mientras que con VLSM se puede tomar diferentes
1205 longitudes de mascara para diferentes porciones de la subred creada.
1206 
1207 Supernetting es el proceso inverso al Subnetting, es reducir el numero de
1208 bits que ocupa la mascara agrupando multiples redes. Por ejemplo se tienen las
1209 subredes 192.168.0.0/24 y 192.168.1.0/24 estas subredes ambas tienen capacidad
1210 para 253 hosts, haciendo supernetting tomando un bit menos de mascara, resulta
1211 en la red 192.168.0.0/23 lo cual tiene capacidad para 510 hosts.
1212 
1213 ##### Direccionamiento con y sin clases
1214 
1215 En el direccionamiento **con clases** se establece una longitud fija para la
1216 parte de red de las direcciones IP (la mascara), esta longitud fija puede ser de
1217 8, 16 y 24 bits correspondiente con la clase A, B y C, respectivamente (también
1218 existen las clases D y E pero no es común utilizarlas). Dada una dirección IP y
1219 sabiendo que se utiliza direccionamiento con clases se puede determinar la
1220 mascara de red observando el primer octeto de la dirección IP, como se muestra
1221 en la tabla \ref{tab:ipv4-classful}.
1222 
1223 \begin{table}[h]
1224 \centering
1225 \begin{tabular}{|c|c|c|c|}
1226 \hline
1227 \textbf{Clase} & \textbf{Primer octeto} & \textbf{Máscara} \\
1228 \hline
1229 A & 0xxxxxxx (0 -- 127) & /8 \\
1230 \hline
1231 B & 10xxxxxx (128 -- 191) & /16 \\
1232 \hline
1233 C & 110xxxxx (192 -- 223) & /24 \\
1234 \hline
1235 D & 1110xxxx (224 -- 239) & No aplica \\
1236 \hline
1237 E & 1111xxxx (240 -- 255) & No aplica \\
1238 \hline
1239 \end{tabular}
1240 \caption{Clases IPv4}
1241 \label{tab:ipv4-classful}
1242 \end{table}
1243 
1244 Esta forma de particionar las direcciones, utilizando clases es ineficiente
1245 debido a que en muchos casos, como organizaciones pequeñas, una red con
1246 direccionamiento clase C es muy pequeña (254 hosts) y una red clase B es muy
1247 grande (65634 hosts). En el direccionamiento **sin clases** (Classless
1248 Interdomain Routing, CIDR) se utilizan prefijos de longitud variable, eliminando
1249 las clases y mejorando la eficiencia, ya que se pueden tener subredes de tamaño
1250 arbitrario, este ultimo método es el que se usa en la actualidad, la única
1251 desventaja con el método con clases es que se debe especificar siempre con que
1252 longitud de mascara se esta trabajando.
1253 
1254 Al igual que sucede con el direccionamiento de subredes, la dirección IPv4 de 32
1255 bits se divide en dos partes y de nuevo se expresa en notación decimal con
1256 puntos como a.b.c.d/x, donde x indica el número de bits de la primera parte de
1257 la dirección. Los x bits más significativos de una dirección en el formato
1258 a.b.c.d/x constituyen la parte de red de la dirección IP y a menudo se los
1259 denomina prefijo (o prefijo de red) de la dirección.
1260 
1261 La dirección IPv4 255.255.255.255 (en binario todos los campos en 1) se denomina
1262 dirección de difusión (o broadcast) y cuando un host envía un datagrama cuya
1263 dirección de destino es 255.255.255.255, el mensaje se entrega a todos los hosts
1264 existentes en la misma subred.
1265 
1266 Por ejemplo se tiene la siguiente red de la cual se tiene 255 direcciones de
1267 host disponibles y una única red, pero se desea particionar la red en 4
1268 subredes. 
1269 
1270 ```text
1271 192.168.1.0/24
1272 ```
1273 
1274 Para esto se hace una subred tomando los primero 26 bits de la dirección,
1275 resultando en una mascara /26 (en lugar de los primeros 24 bits de dirección
1276 para la clase, como indica la masca /24). El resultado son 4 subredes con
1277 espacio para 62 host cada subred.
1278 
1279 ```text
1280 192.168.1.0/26
1281 192.168.1.64/26
1282 192.168.1.128/26
1283 192.168.1.192/26
1284 ```
1285 
1286 ##### DHCP
1287 
1288 Las direcciones de host también se pueden configurar manualmente, pero
1289 frecuentemente esta tarea se lleva cabo utilizando el Protocolo de configuración
1290 dinámica de host (DHCP, Dynamic Host Configuration Protocol). DHCP permite a un
1291 host obtener (permite que se le asigne) automáticamente una dirección IP. Un
1292 administrador de red puede configurar DHCP de modo que un host dado reciba la
1293 misma dirección IP cada vez que se conecte a la red, o bien a un host puede
1294 asignársele una dirección IP temporal que será diferente cada vez que el host se
1295 conecte a la red. Además de la asignación de direcciones IP de host, DHCP
1296 también permite que un host obtenga información adicional, como por ejemplo su
1297 máscara de subred, la dirección de su router del primer salto [a menudo
1298 denominado pasarela (gateway) predeterminada] y la dirección de su servidor DNS
1299 local
1300 
1301 #### Versión 6
1302 
1303 En la tabla \ref{tab:ipv6-header} se muestra el formato de un datagrama IP de
1304 versión 6. Esta versión aumenta el tamaño de la dirección IP, de 32 a 128 bits.
1305 Además de las direcciones de unidifusión y de multidifusión, IPv6 ha introducido
1306 un nuevo tipo de dirección, denominado dirección **anycast**, que permite que
1307 múltiples nodos tengan la misma dirección IPv6 y que el tráfico llegue
1308 automáticamente al nodo más cercano o más óptimo. También se eliminan algunos de
1309 los campos de la version anterior, o se han hecho opcionales, de cualquier forma
1310 la cabecera IPv6 es de longitud fija de 40 bytes a diferencia de la version
1311 anterior.
1312 
1313 A diferencia de la version anterior no se permite ni la fragmentación ni el
1314 reensamblado en routers intermedios; estas operaciones solo pueden ser
1315 realizadas por el origen y el destino. Si un router recibe un datagrama IPv6 y
1316 es demasiado largo para ser reenviado por el enlace de salida, el router
1317 simplemente lo descarta y envía de vuelta al emisor un mensaje de error ICMPv6
1318 "Paquete demasiado grande". El emisor puede entonces reenviar los datos
1319 utilizando un tamaño de datagrama IP más pequeño.
1320 
1321 \begin{table}[h]
1322 \centering\small
1323 \setlength{\arrayrulewidth}{0.5pt}
1324 \setlength{\extrarowheight}{2.5pt} % Da un poco de aire vertical
1325 \setlength{\tabcolsep}{2pt}   % default is 6pt
1326 \begin{tabular}{|*{32}{>{\centering\arraybackslash}c|}}
1327 
1328 % \multicolumn{4}{c}{0-3} &
1329 % \multicolumn{4}{c}{4-7} &
1330 % \multicolumn{8}{c}{8-15} &
1331 % \multicolumn{16}{c}{16-32} \\
1332 
1333 \hline
1334 \multicolumn{4}{|c}{Version} & 
1335 \multicolumn{8}{|c}{Traffic class} & 
1336 \multicolumn{20}{|p{0.6\linewidth}|}{\centering Flow label} \\ \hline
1337 
1338 \multicolumn{16}{|p{0.5\linewidth}}{\centering Payload length} & 
1339 \multicolumn{8}{|c}{Next header} & 
1340 \multicolumn{8}{|c|}{Hop limit} \\ \hline
1341 
1342 \multicolumn{32}{|c|}{\makecell[c]{\\Source address\\{}\\{}}} \\ \hline
1343 \multicolumn{32}{|c|}{\makecell[c]{\\Destination address\\{}\\{}}} \\ \hline
1344 
1345 
1346 
1347 \end{tabular}
1348 \caption{Formato encabezado IPv6}
1349 \label{tab:ipv6-header}
1350 \end{table}
1351 
1352 La cabecera IPv6 dispone de los siguientes campos:
1353 
1354 1. Versión (4 bits): Identifica el número de versión del protocolo IP utilizado.
1355 2. Clase de tráfico (8 bits): Al igual que el campo ToS de IPv4, el campo de
1356    clase de tráfico, se utiliza para dar prioridad a ciertos
1357    datagramas dentro de un flujo, o para dar prioridad a los datagramas de
1358    determinadas aplicaciones (por ejemplo, VoIP) frente a los datagramas
1359    de otras aplicaciones (como SMTP).
1360 3. Etiqueta de flujo (20 bits): Este campo se utiliza para identificar un flujo
1361    de datagramas.
1362 4. Longitud de la carga útil (16 bits): Este valor se trata como un entero sin
1363    signo que proporciona el número de bytes del datagrama IPv6 incluidos a
1364    continuación de la cabecera del datagrama.
1365 5. Siguiente cabecera (8 bits): Este campo identifica el protocolo (por ejemplo,
1366    TCP o UDP) al que se entregará el contenido (el campo de datos) de este
1367    datagrama. El campo utiliza los mismos valores que el campo de protocolo de
1368    la cabecera IPv4.
1369 6. Límite de saltos (8 bits): Cada router que reenvía un datagrama decrementa el
1370    contenido de este campo en una unidad. Si el límite de saltos alcanza el
1371    valor cero, el datagrama se descarta.
1372 7. Direcciones de origen y de destino (128 bits cada una): se usan para
1373    identificar quién envía el paquete y a quién debe llegar
1374 
1375 ##### Neightbor Discovery Protocol
1376 
1377 El Neighbor Discovery Protocol (NDP) es un protocolo de la suite IPv6 que
1378 sustituye y mejora funciones que en IPv4 realizaban protocolos como ARP, ICMP
1379 Router Discovery y Redirect.
1380 
1381 En lugar de usar broadcast (que satura la red), NDP utiliza mensajes multicast
1382 más eficientes para que los nodos se comuniquen con sus vecinos en el mismo
1383 enlace. NDP opera mediante cinco tipos de mensajes ICMPv6: Router Solicitation
1384 (RS), Router Advertisement (RA), Neighbor Solicitation (NS), Neighbor
1385 Advertisement (NA) y Redirect.
1386 
1387 ### Protocolo ICMP
1388 
1389 El Protocolo de Mensajes de Control de Internet (Internet Control Message
1390 Protocol, ICMP) es un protocolo de control y diagnóstico de la capa de red que
1391 se utiliza para informar errores y condiciones de funcionamiento de la red. Los
1392 mensajes ICMP si bien corresponden a la capa de red se encapsulan dentro de
1393 datagramas IP. Existen dos versiones de ICMP, uno para IPv4, ICMP y otro para
1394 IPv6, ICMPv6.
1395 
1396 
1397 <!--
1398 ```text
1399 0        8        16
1400 +--------+--------+----------------+
1401 | Tipo   | Código |    Checksum    |
1402 +--------+--------+----------------+
1403 |           Datos ICMP             |
1404 +----------------------------------+
1405 ```
1406 -->
1407 
1408 Los hosts y los routers utilizan ICMP para intercambiarse información acerca de
1409 la capa de red. El uso más típico de ICMP es la generación de informes de error.
1410 Por ejemplo, al ejecutar una sesión HTTP podemos encontrarnos con un mensaje de
1411 error como "Red de destino inalcanzable". Este mensaje tiene su origen en ICMP.
1412 En algún punto, un router IP no ha podido encontrar una ruta hasta el host
1413 especificado en la solicitud HTTP, y dicho router ha creado y enviado un mensaje
1414 ICMP a nuestro host para informarle del error.
1415 
1416 Los mensajes ICMP tienen un campo de tipo y un campo de código, y contienen la
1417 cabecera y los 8 primeros bytes del datagrama IP que ha dado lugar a la
1418 generación del mensaje ICMP (para que el emisor pueda determinar qué datagrama
1419 ha producido el error)
1420 
1421 ### NAT
1422 
1423 El protocolo de traducción de direcciones de red (Network Address Translation,
1424 NAT) es un protocolo que permite que varios dispositivos en una red privada
1425 compartan una única dirección IP pública.
1426 
1427 Una dirección **IP pública** es única y accesible mundialmente, mientras que una
1428 dirección **IP privada** se usa solo dentro de una red local y no es accesible fuera
1429 de esa red. Las redes publicas son accesibles por los proveedores de internet,
1430 mientras que las redes privadas son asignadas mediante los administradores de la
1431 red privada o mediante servidores DHCP, por ejemplo.
1432 
1433 ### Ruteo
1434 
1435 <!--
1436 Como se mencionó previamente el ruteo es el proceso de completar las
1437 tablas de  de forma tal que luego los datagramas se reenvíen en la interfaz
1438 adecuada. El enrutamiento ocurre en el plano de control.
1439 -->
1440 
1441 El ruteo es el proceso de calculo y selección de rutas optimas hacia los
1442 destinos. El proceso de ruteo ocurre en el plano de control. El ruteo puede ser
1443 estático, dinámico o predeterminado. En el ruteo estático las rutas se
1444 configuran manualmente y no cambian a menos que un administrador de red lo haga.
1445 En el ruteo dinámico las rutas se ajustan automáticamente según el estado de la
1446 red, para esto se utilizan protocolos de ruteo que modifican las rutas basándose
1447 por ejemplo en el camino más corto. El ruteo predeterminado se usa cuando no hay
1448 una ruta especifica hacia un destino y se envía por ese camino por defecto.
1449 
1450 Un **sistema autónomo** (Autonomous System, AS) es un conjunto de redes IP que
1451 están bajo un mismo control administrativo y que comparten una política de ruteo
1452 común.
1453 
1454 El ruteo se puede dividir en **ruteo interno** y **ruteo externo** de acuerdo al
1455 alcance y tipos de protocolos que se utilizan para establecer las rutas. El
1456 ruteo interno se realiza dentro de un mismo sistema autónomo, por ejemplo dentro
1457 de una empresa u organización. El ruteo externo se usa para intercambiar rutas
1458 entre diferentes sistemas autónomos, es decir, entre redes diferentes,
1459 generalmente a través de internet.
1460 
1461 Los protocolos de ruteo definen como se deben intercambiar los mensajes con los
1462 nodos adyacentes, el formato del mensaje, cada cuanto se intercambian los
1463 mensajes, etc. con la información recolectada sobre la red el protocolo ejecuta
1464 un algoritmo, denominado **algoritmo de ruteo**, el cual decide cual será la
1465 ruta más optima para cada destino.
1466 
1467 #### Algoritmos de ruteo
1468 
1469 Los algoritmos de ruteo tienen como objetivo determinar buenas rutas desde los
1470 emisores a los receptores, a través de la red de routers de manera tal de
1471 calcular la tabla de enrutamiento más optima. Normalmente, una "buena ruta" es
1472 aquella que tiene el coste mínimo. El **coste mínimo** es la ruta cuyo valor
1473 total de métrica acumulada es el más bajo entre todas las posibles rutas hacia
1474 un destino, generalmente se toma la sumatoria del costo de todos los enlaces de
1475 la ruta. El costo de un enlace se asigna de acuerdo al protocolo de ruteo
1476 utilizado.
1477 
1478 <!--
1479 Los algoritmos de ruteo más comunes son estado de enlace (Link State, LS) y
1480 vector distancia (Distance Vector, DV). Los algoritmos de tipo vector distancia
1481 son más antiguos, o primitivos, el mas conocido de este tipo es RIP y su version
1482 actualizada RIPv2. Los algoritmos link state son más modernos y utilizan
1483 algoritmos más avanzados, por ejemplo el algoritmo de Dijkstra para determinar
1484 la ruta más corta.
1485 -->
1486 
1487 #### Protocolos de ruteo
1488 
1489 Los protocolos de ruteo, como se mencionó previamente, definen como se
1490 intercambian los mensajes entre los nodos, cada cuanto tiempo, el formato del
1491 mensaje, etc., recolectan información de la red y ejecutan algoritmos sobre la
1492 información recolectada para determinar la ruta más optima. Los protocolos de
1493 ruteo se diferencian principalmente en internos y externos, los protocolos de
1494 ruteo interno (Interior Gateway Protocols, IGP) se utilizan dentro de un sistema
1495 autónomo mientras que los protocolos de ruteo externo (Exterior Gateway
1496 Protocols, EGP)[^2] se utilizan entre sistemas autónomos. Los protocolos de
1497 ruteo interno se pueden clasificar según el tipo de algoritmo que ejecutan,
1498 siendo los más conocidos los protocolos de distancia vectorial y los protocolos
1499 de estado de enlace.
1500 
1501 [^2]: Hay que tener en cuenta que también existe un protocolo de ruteo externo
1502     obsoleto con las mismas siglas y un nombre parecido: Exterior Gateway
1503     Protocol, EGP.
1504 
1505 Los protocolos de tipo vector distancia son más antiguos, o primitivos, el más
1506 conocido de este tipo es RIPv1 y la version actualizada RIPv2 (también existe
1507 para direcciones IPv6). Los algoritmos link state son más modernos y utilizan
1508 algoritmos más avanzados, por ejemplo el algoritmo de Dijkstra, para determinar
1509 la ruta más corta. El protocolo más conocido de tipo link state es SPF y su
1510 version abierta OSPF.
1511 
1512 #### Vector distancia
1513 
1514 <!--
1515 Contra: se pueden generar lazos ya que solo se conoce la información (tabla de
1516 ruteo) de los nodos adyacentes.
1517 -->
1518 
1519 En los protocolos de ruteo de vector distancia (Distance Vector, DV) la mejor
1520 ruta se determina aplicando el algoritmo de Bellman-Ford. Este algoritmo calcula
1521 los caminos mínimos desde un router origen hacia todos los demás routers, para
1522 esto cada router debe mantener una tabla con destino, costo y next-hop. La tabla
1523 de cada nodo se actualiza de acuerdo a actualizaciones periódicas que recibe de
1524 sus nodos adyacentes. Esta tabla de ruteo en cada router no contiene informacion
1525 de toda la red, si no mas bien de los routers adyacentes.
1526 
1527 \begin{figure}[H]
1528   \centering
1529   \begin{subfigure}[t]{0.65\columnwidth}
1530     \centering
1531     \includegraphics[width=\linewidth]{img/tabla-de-ruteo.png}
1532     \label{fig:tabla-ruteo-dv}
1533   \end{subfigure}
1534   \vspace{-1em}
1535   \caption{Tabla de ruteo de un nodo}
1536   \label{fig:ej-arboles}
1537 \end{figure}
1538 
1539 El mejor camino desde un punto a otro se determina de manera iterativa por la
1540 ecuación de Bellman-Ford, la cual se muestra en (\ref{eq:bellman-ford}) y dice
1541 que la mejor ruta desde $x$ hasta $y$ es aquella que pasa por el vecino $v$ que
1542 minimiza la suma, es decir, la mejor ruta es aquella que minimiza el costo hacia
1543 el vecino sumado el menor costo del vecino hacia el destino. Dado que la
1544 ecuación de Bellman-Ford es recursiva, ya que depende del costo del nodo
1545 adyacente y este de su adyacente, etc. es posible que se formen lazos y la
1546 ecuación resulte infinita.
1547 
1548 \vspace{-2em}
1549 \begin{align}
1550 D_{x}(y) = \min_{v\ \in\ vecinos} \left\{\ c(x,v) + D_{v}(y)\ \right\}
1551 \label{eq:bellman-ford}
1552 \end{align}
1553 \vspace{-1.5em}
1554 
1555 La métrica (o costo del enlace, también llamado distancia) se mide teniendo en
1556 cuenta parámetros como la velocidad del enlace, la latencia o condiciones de la
1557 red. En muchos casos simplemente se toma la métrica como la cantidad de saltos
1558 (o distancia) de un punto a otro, por ejemplo para un enlace punto a punto la
1559 métrica es 1.
1560 
1561 <!--
1562 El costo de cada salto depende de la implementacion del algoritmo, por ejemplo
1563 en RIP el costo es la cantidad de saltos, pero en
1564 
1565 Este proceso de intercambio ocurre continuamente cada un período de
1566 tiempo determinado por el protocolo, por ejemplo para RIPv1 es de 30 segundos.
1567 -->
1568 
1569 ##### RIP
1570 
1571 El protocolo de información de rutas (Routing Information Protocol, RIP) fue uno
1572 de los primeros protocolos de ruteo interno dinámico basado en vector distancia.
1573 Utiliza como métrica la cantidad de saltos y se limita a 15 para prevenir el
1574 problema de lazos infinitos, esto pone un limita el tamaño de la red. Si la
1575 distancia entre un punto y otro en la red es mayor a 15, entonces se considera
1576 distancia **infinita** y por tanto ese punto es inalcanzable. El protocolo RIP
1577 implementa también los mecanismos de horizonte dividido (Split Horizon) y
1578 envenenamiento de ruta (Route Poisoning) para prevenir lazos.
1579 
1580 Por ser un algoritmo de distancia vectorial los routers comparten su tabla de
1581 ruteo con los routers adyacentes mediante actualizaciones periódicas. En RIP las
1582 actualizaciones por defecto ocurren cada 30 segundos, aunque este es un
1583 parámetro que en muchos casos es configurable.
1584 
1585 En la primer version de RIP, RIPv1, los routers realizan peticiones a los
1586 routers adyacentes mediante mensajes RIP de tipo request con la dirección de
1587 broadcast 255.255.255.255, estos mensajes se encapsulan en paquetes UDP y se
1588 utiliza el puerto 520. Si bien los mensajes llevan la dirección de broadcast,
1589 los routers adyacentes no reenvían este tipo de mensajes. Un router que recibe
1590 un mensaje de petición del protocolo RIPv1 responde con su tabla de ruteo, con
1591 esta información el router que hizo la petición originalmente actualiza su
1592 tabla. Estos mensajes se originan en cada router de la red al momento de
1593 intercambiar información, lo que causa trafico en la red periódicamente.
1594 
1595 En la segunda version del protocolo, RIPv2, se agrega soporte para la mascara de
1596 red (CIDR) ya que en la primer version solo soporta direccionamiento con clases.
1597 También se cambia la dirección de broadcast 255.255.255.255 por una multicast
1598 224.0.0.9, esto provoca que solo los routers que ejecuten el protocolo RIPv2
1599 escuchen esa dirección, reduciendo la carga innecesaria en otros dispositivos de
1600 la red. La segunda version añadió soporte para autenticación (mediante texto
1601 plano o MD5) esto previene que alguien conecte un router malicioso y "envenene"
1602 las tablas de ruteo de tu red.
1603 
1604 El protocolo RIP en general tiene un tiempo de convergencia lento, ya que la
1605 información se actualiza en intervalos relativamente grandes (30 segundos). Por
1606 ejemplo si un enlace se cae se debe esperar ese tiempo hasta que se actualicen
1607 las tablas de ruteo. Además si pasan 180 segundos sin recibir actualizaciones de
1608 un router adyacente se marca la ruta como dudosa y si pasan 240 segundos se
1609 elimina por completo esa ruta de la tabla de ruteo.
1610 
1611 <!--
1612 La primer versión del protocolo RIP, RIPv1, se publicó en 1988. Un router luego
1613 de configurarse el protocolo y pasados 30 segundos (el timer por defecto) emite
1614 un datagrama de petición RIPv1 a la dirección broadcast (dirección
1615 255.255.255.255) a todas las interfaces con RIPv1 habilitado. Luego los
1616 dispositivos corriendo el mismo protocolo responde con su tabla de ruteo. El
1617 router que hace la peticion es quien actualiza su tabla de ruteo con las
1618 respuestas que obtiene de los nodos adyacentes.
1619 -->
1620 
1621 ###### Split horizon
1622 
1623 Compensa los efectos de la cuenta a infinito, o lazos, prohibiendo a los routers
1624 enviar información a través de una ruta por la que aprendieron esa ruta, por
1625 ejemplo un router A aprende una ruta debido a información que le llega del
1626 router adyacente B, entonces si el router adyacente B realiza una petición a A,
1627 este no le enviara esa ruta que aprendió previamente de B.
1628 
1629 En split horizon con poison reverse si un enlace se cae las rutas comparten de
1630 todas formas pero con métrica infinita (por convención 16), sin poison reverse
1631 simplemente no se compartían las rutas.
1632 
1633 #### Estado de enlace
1634 
1635 En los algoritmos de estado de enlace (Link State, LS) cada nodo dispone de un
1636 mapa completo de la red en forma de grafo (se pueden representar como tablas) y
1637 entre nodos adyacentes se intercambian sus mapas completos. Cada router luego
1638 independientemente ejecuta un algoritmo de ruteo para determinar las rutas
1639 optimas entre ese router y todos los posibles destinos de la red. La colección
1640 de rutas optimas determinada por el algoritmo formará la tabla de ruteo.
1641 
1642 #### SPF/OSPF
1643 
1644 El camino más corto primero (Shortest Path First, SPF) es un protocolo de
1645 ruteo interno de tipo link state que calcula el coste mínimo desde un router
1646 hacia todos los demás nodos en la red. En la practica es el algoritmo de
1647 Dijkstra aplicado a enrutamiento.
1648 
1649 <!--
1650 El coste mínimo se asigna por el protocolo de enrutamiento y un protocolo muy
1651 conocido es el proceso abierto del camino más corto primero (Open Shortest Path
1652 First, OSPF). OSPF es un protocolo de enrutamiento interior (IGP) de tipo estado
1653 de enlace (link-state), utilizado dentro de un Sistema Autónomo (AS).
1654 -->
1655 
1656 #### BGP
1657 
1658 El protocolo de puerta de enlace de frontera (Border Gateway Protocol, BGP) es
1659 un protocolo de ruteo externo que se utiliza entre sistemas autónomas para
1660 intercambiar información de ruteo garantizando que estas estén libres de bucles.
1661 Es el protocolo principal de publicación de rutas utilizado por las compañías
1662 más importantes de ISP en Internet.
1663 
1664 A diferencia de los protocolos de ruteo internos (IGP), como RIP u OSPF, no se
1665 usan métricas como número de saltos, ancho de banda o retardos. En cambio, BGP
1666 toma decisiones de encaminamiento basándose en políticas de la red (**Policy
1667 Based Routing, PBR**), o reglas que utilizan varios atributos de ruta. Los
1668 protocolos de ruteo basados en políticas, PBR, permiten seleccionar la ruta de
1669 un paquete según criterios como origen, protocolo, puerto, tipo de tráfico o
1670 marca, en lugar de usar solo la tabla de ruteo tradicional.
1671 
1672 ### SDN
1673 
1674 En las Redes definidas por software (Software-defined Networks, SDN) los
1675 dispositivos de red (switches, routers, etc) no tienen funciones asignadas como
1676 en las redes tradicionales, si no que un controlador centralizado les asigna una
1677 función. En términos conceptuales, se puede decir que en una red definida por
1678 software el plano de control de una red esta administrado por un solo
1679 controlador.
1680 
1681 Por definición una red se dice definida por software si el plano de control esta
1682 separado físicamente del plano de datos, y se tiene un único plano de control
1683 para controlar todos los dispositivos de forwarding.
1684 
1685 Un flujo describe un conjunto de paquetes transferidos desde un dispositivo de
1686 la red a otro dispositivo.
1687 
1688 Policy-Based Routing (PBR) es un mecanismo de configuración en dispositivos
1689 tradicionales, mientras que SDN (Software-Defined Networking) es una
1690 arquitectura completa de red con separación explícita entre control y datos.
1691 
1692 PBR permite que el router tome decisiones de encaminamiento basadas en políticas
1693 distintas a la tabla de ruteo normal.
1694 
1695 #### Interfaz norte
1696 
1697 La interfaz norte es una API que permite tener acceso a información de la
1698 topología de bajo nivel de red (dispositivos, enlaces y hosts), y proporcionan
1699 una variedad de abstracciones para afectar el estado de la red.
1700 
1701 <!--
1702 Es la interfaz norte (Northbound Interface) que comunica el Controlador SDN con
1703 las Aplicaciones de Red.
1704 
1705 Función: Permite que los desarrolladores "le digan" a la red qué quieren que
1706 pase, sin saber nada del hardware. Es como el panel de control donde el
1707 administrador programa políticas de seguridad, balanceo de carga o calidad de
1708 servicio (QoS).
1709 
1710 Protocolos comunes: Generalmente utiliza REST APIs (JSON/XML).
1711 
1712 La interfaz norte es una API que permite tener acceso a información de la
1713 topología de bajo nivel de red (dispositivos, enlaces y hosts), y proporcionan
1714 una variedad de abstracciones para afectar el estado de la red. 
1715 -->
1716 
1717 #### Interfaz sur
1718 
1719 La interfaz sur es una API a través de la cual el núcleo del controlador
1720 interactúa con el entorno de red. Ejemplos de esta interacción son por ejemplo
1721 la obtención de estadísticas y la modificación del comportamiento de los
1722 switches. Los dos protocolos que pueden realizar esta función son OpenFlow y P4.
1723 
1724 <!--
1725 Es la interfaz sur (Southbound Interface) que comunica el Controlador SDN con
1726 los Dispositivos Físicos (Switches y Routers).
1727 
1728 Función: Traduce las políticas generales del controlador en instrucciones
1729 técnicas que el hardware entiende para mover los paquetes. Aquí es donde se
1730 "empujan" las reglas a las tablas de flujo.
1731 
1732 Protocolos comunes: OpenFlow, NETCONF, P4Runtime, SNMP o BGP.
1733 
1734 Analogía: Es el gerente bajando a la fábrica para decirle a cada máquina
1735 exactamente qué tornillo apretar.
1736 
1737 Es una API a través de la cual el núcleo del controlador interactúa con el
1738 entorno de la red. Ejemplos de esta interacción son por ejemplo la obtención de
1739 estadísticas y la modificación del comportamiento de los switches. Los dos
1740 protocolos que pueden realizar esta función son OpenFlow y P4.
1741 -->
1742 
1743 ### OpenFlow
1744 
1745 El protocolo OpenFlow opera entre un controlador SDN y un conmutador controlado
1746 por SDN u otro dispositivo que implemente la API OpenFlow. El protocolo OpenFlow
1747 funciona sobre TCP, siendo su número de puerto predeterminado el 6653.
1748 
1749 ### P4
1750 
1751 P4 es un lenguaje de programacion diseñado especificamente para controlar planos
1752 de reenvío de paquetes en dispositivos de red, como routers y switches.
1753 
1754 La API P4Runtime es una especificación del plano de control para controlar los
1755 elementos del plano de datos de un dispositivo definido o descrito por un
1756 programa P4.
1757 
1758 ### Tablas de flujos
1759 
1760 La Tabla de Flujos (Flow Table) es el componente fundamental dentro de un switch
1761 (como uno que soporte OpenFlow) que le dice exactamente qué hacer con cada
1762 paquete que llega.
1763 
1764 Si en una red tradicional el switch decide por su cuenta basándose en la
1765 dirección MAC o IP, en SDN el switch lo hace basandose en las reglas que el
1766 controlador ha instalado en estas tablas. En la tabla \ref{tab:ej-tabla-flujo}
1767 se muestra un ejemplo de tabla de flujo.
1768 
1769 \begin{table}[h]
1770 \centering\small
1771 \setlength{\arrayrulewidth}{0.5pt}
1772 \begin{tabularx}{\linewidth}
1773     {|>{\centering\arraybackslash}p{55pt}|
1774       >{\centering\arraybackslash}p{53pt}|
1775       >{\centering\arraybackslash}p{30pt}|
1776       >{\centering\arraybackslash}X|}
1777   \hline
1778   \textbf{Match}   & \textbf{Action} & \textbf{Priority} & \textbf{Counter} \\ \hline
1779  ip\_src=10.*.*.*           & forward(eth1)   & 100               &                  \\ \hline
1780  in\_port=eth0 & drop            & 100               &                  \\ \hline
1781 \end{tabularx}
1782 \caption{Ejemplo de tabla de flujo}
1783 \label{tab:ej-tabla-flujo}
1784 \end{table}
1785 
1786 ## Nivel de enlace
1787 
1788 Para que un datagrama pueda ser transferido desde el host de origen al de
1789 destino, debe moverse a través de cada uno de los enlaces individuales que
1790 forman la ruta extremo a extremo. En un determinado enlace, un nodo transmisor
1791 encapsula el datagrama en una trama de la capa de enlace y transmite la trama a
1792 través del enlace. En su mayor parte, la capa de enlace se implementa en un
1793 adaptador de red, también denominado a veces tarjeta de interfaz de red (Network
1794 Interface Card, NIC). A los adaptadores de red se les asigna una dirección de la
1795 capa de enlace, un host o un router con múltiples interfaces de red tendrá
1796 asociadas, por tanto, múltiples direcciones de la capa de enlace.
1797 
1798 A las direcciones de la capa de enlace se las denomina de multiples formas, como
1799 **dirección LAN**, **dirección física** o **dirección MAC**, siendo esta ultima
1800 la mas utilizada. En la mayoría de las redes LAN la dirección MAC tiene 6 bytes
1801 de longitud y se suelen expresar en notación hexadecimal, indicándose cada byte
1802 mediante una pareja de números hexadecimales y cada pareja separada por dos
1803 puntos o guiones, por ejemplo `00:1A:2B:3C:4D:5E` o `1A-23-F9-CD-06-9B`, pero
1804 existen otros formatos validos.
1805 
1806 ### ARP
1807 
1808 Dado que existen tanto direcciones de la capa de red (por ejemplo, direcciones
1809 IP de Internet) como direcciones de la capa de enlace (es decir, direcciones
1810 MAC), surge la necesidad de una traducción entre ellas. En Internet, esta tarea
1811 la lleva a cabo el protocolo ARP (Address Resolution Protocol, Protocolo de
1812 resolución de direcciones)
1813 
1814 Un módulo ARP en el host emisor toma como entrada cualquier dirección IP de la
1815 misma LAN y devuelve la dirección MAC correspondiente. En nuestro ejemplo, el
1816 host emisor 222.222.222.220 proporciona a su módulo ARP la dirección IP
1817 222.222.222.222 y el módulo ARP devuelve la correspondiente dirección MAC
1818 49:BD:D2:C7:56:2A.
1819 
1820 Un mensaje ARP de consulta se envía dentro de una trama de difusión, la cual a
1821 nivel de enlace es, FF:FF:FF:FF:FF:FF, esto hace que la reciban todas las
1822 interfaces dentro de esa misma red, el mensaje ARP de respuesta se envía dentro
1823 de una trama estándar.
1824 
1825 Un paquete ARP se encapsula dentro de una trama de la capa de enlace y así se
1826 sitúa, arquitectónicamente, encima de la capa de enlace. Sin embargo, un paquete
1827 ARP dispone de campos que contienen direcciones de la capa de enlace, por lo que
1828 se podría decir que es un protocolo de la capa de enlace, pero también contiene
1829 direcciones de la capa de red y, por tanto, podría también argumentarse que es
1830 un protocolo de la capa de red.
1831 
1832 <!--
1833 ### Comprobación de errores
1834 
1835 Quizá la forma más simple de detección de errores sea el uso de un único bit de
1836 paridad.
1837 -->
1838 
1839 ### Redes LAN
1840 
1841 Las redes de area local (Local Area Network, LAN) son redes de computadoras que
1842 históricamente cubren un área geográfica pequeña, como una habitación, una casa,
1843 un edificio o un campus reducido y utiliza tecnologías de alta velocidad como
1844 Ethernet o Wi-Fi.
1845 
1846 Para acceder al medio en una red alámbrica existe un mecanismo denominado
1847 mecanismo de acceso múltiple por detección de portadora con detección de
1848 colisiones (Carrier Sense Multiple Access with Collision Detection, CSMA/CD)
1849 
1850 Una **colisión** puede ocurrir al comienzo de la transmisión, cuando dos estaciones
1851 desean transmitir al mismo tiempo, censan el medio y detectan que el canal
1852 no esta ocupado, comienza a transmitir y se produce la colisión. Es por esto que
1853 por convención se considera que solo puedo ocurrir una colisión de este estilo
1854 durante la transmisión de los primeros 512 bits de la trama, ya que si no
1855 ocurrió una colisión en esos bits es correcto asegurar que no habrá colisión al
1856 transmitir los siguientes bits. Tomar por convención los primeros 512 bits de la
1857 trama fija una distancia maxima de enlace, la cual esta determinada por la
1858 velocidad de propagación de los bits por el enlace. Un host debe estar censando
1859 el medio por el tiempo que tarda la propagación de los 512 bits hasta el otro
1860 extremo de la red y vuelta.
1861 
1862 Una retransmisión (algoritmo de back-off) solo ocurre si se detecta una
1863 colisión. Si un receptor detecta algún error en la trama **no** se retransmite,
1864 si no que se descarta esa trama.
1865 
1866 Redes LAN como dominio de broadcast y red LAN de medio compartido son dos
1867 conceptos diferentes, el primero hace referencia a una misma red en la que tiene
1868 alcance una misma trama de broadcast, mientras que en la red de medio compartido
1869 se hacer referencias a las redes que acceden al mismo medio, por ejemplo
1870 mediante un Hub o porque están conectados mediante cable coaxial. La red LAN
1871 de medio compartido también se conoce como dominio de colisión.
1872 
1873 #### Ethernet 802.3
1874 
1875 Para transmitir en el protocolo Ethernet 802.3 half-duplex se siguen los
1876 siguientes pasos:
1877 
1878 1. Se censa la red, si la red no esta disponible se espera a que lo esté.
1879 2. Luego de detectar que la red esta disponible se espera un Interframe Gap
1880    (IFG) el cual por convención es una transmisión de 96 bits, este tiempo esta
1881    determinado por la velocidad de la red, por ejemplo para 100 Mbps se tiene
1882    0.96 microsegundos $\frac{96\ bits}{100\ bits/s}$
1883 3. Se deshabilita la detección de colisiones.
1884 4. Se transmite el preámbulo y delimitador de inicio de trama (start of frame
1885    delimiter, SFD). El preámbulo son 7 bytes de la forma 10101010 repetidos y
1886    el SFD es 10101011.
1887 5. Se habilita la detección de colisiones.
1888 6. Se transmiten los primeros 512 bits de la trama y durante este tiempo se
1889    detectan colisiones. Si ocurre una colisión se detiene la transmisión y se
1890    transmite una señal de Jam (señal de 32 bits) lo que hace que todas las
1891    estaciones en la red detecten la colisión y descarten la trama. Si no se
1892    detecta colisión durante estos primeros 512 bits, se deshabilita la detección
1893    de colisiones y se transmite el resto de la trama.
1894 
1895 
1896 Si la red es full-duplex, el comportamiento cambia de forma fundamental respecto
1897 a Ethernet half-duplex.
1898 
1899 1. No existe CSMA/CD:
1900     En full-duplex:
1901     No hay detección de portadora previa obligatoria.
1902     No existen colisiones.
1903     No se usa señal de jam.
1904     No hay backoff exponencial.
1905     CSMA/CD solo aplica a medios compartidos (bus o hubs).
1906 
1907 2. Por qué no hay colisiones:
1908    En full-duplex el enlace es:
1909    Punto a punto (host ↔ switch).
1910    Con canales físicos separados:
1911    Un par para transmisión (TX).
1912    Un par para recepción (RX).
1913    Ambos dispositivos pueden transmitir simultáneamente sin interferencia eléctrica.
1914    No hay dominio de colisión.
1915 
1916 En los switches modernos todas las interfaces trabajan en modo full-duplex.
1917 
1918 La longitud de la trama minima en Ethernet es de 64 bytes (o 512 bits) esto se
1919 impuso históricamente en medios con CSMA/CD para prevenir colisiones y aun
1920 hoy en día en redes modernas sin CSMA/CD se sigue utilizando para mantener
1921 compatibilidad con redes antiguas. La longitud de trama minima esta fijado para
1922 las longitud de redes y velocidades convencionales pero puede cambiar (siempre
1923 que se utilice CSMA/CD en half-duplex) para grandes extinciones de enlace. Lo
1924 que se debe asegurar es que el tiempo de transmisión de la trama $T_{trama}$
1925 debe ser mayor o igual al tiempo de ida y vuelta de propagación (RTT). Entonces
1926 la condición fija lo siguiente para un enlace de longitud $L$ y velocidad de
1927 propagación $v$.
1928 
1929 \vspace{-1em}
1930 $$T_{trama} \ge T_{RTT} = 2\cdot \frac{L}{v}
1931 \Rightarrow T_{trama} \ge 2\cdot \frac{L}{v}$$
1932 
1933 Si la trama tiene $N$ bits y el enlace tiene velocidad $R$ (en bits por
1934 segundo), entonces el tiempo de la trama en el cable resulta:
1935 
1936 \vspace{-1em}
1937 $$\text{si } T_{trama} = \frac{N}{R}\quad \Rightarrow N_{min} = \frac{NRL}{v}$$
1938 
1939 ### VLAN
1940 
1941 Las redes de area local virtuales (Virtual Local Area Network, VLAN) permiten
1942 usar la infraestructura existente para dar servicio a multiples redes (o
1943 dominios de broadcast). Se pueden implementar en uno o más switches aunque
1944 existen routers que también permiten implementarlas. Estas redes virtuales
1945 permiten crear redes aisladas utilizando la misma infraestructura e incluso los
1946 mismos enlaces. Las redes VLAN crean dominios de broadcast separados y si se
1947 desean interconectar dos redes VLAN diferentes se debe recurrir a dispositivos
1948 de nivel de red, routers, ya que es la única manera de conectar redes de acceso.
1949 
1950 Las redes VLAN se identifican entre switches (dispositivos de la capa de enlace)
1951 para esto utilizan un formato especifico de trama Ethernet. Los puertos entre
1952 switches pueden ser de tipo troncal (trunk) o de acceso (access). A través de
1953 los enlaces de tipo troncal los switches se comunican utilizando tramas Ethernet
1954 con un campo especifico de VLAN, mientras que a través de los enlaces de acceso
1955 se comunican utilizando tramas Ethernet convencionales (sin un campo para VLAN).
1956 
1957 ### Spanning Tree Protocol
1958 
1959 Spanning Tree Protocol (STP) y la version más moderna Rapid Spanning Tree
1960 Protocol (RSTP) sirven para evitar enlaces redundantes en redes Ethernet 802.3.
1961 Si se detecta un ciclo extra entre switches se ejecuta un algoritmo que
1962 deshabilita ese enlace redundante. Los bridges o switches que ejecutan el
1963 algoritmo intercambian información con mensajes de control denominados Bridge
1964 Protocol Data Unit (o BPDU). El BPDU siempre tiene dirección de destino
1965 01:80:C2:00:00:00.
1966 
1967 * Detectan posibles ciclos entre switches.
1968 * Construyen una topología lógica sin bucles (en forma de árbol).
1969 * Bloquean enlaces redundantes.
1970 * Reactivan enlaces alternativos si falla el principal.
1971 
1972 La diferencia principal entre ambas versiones es que la version RSTP converge
1973 mucho más rápido a la topología sin bucles que STP, ya que es más eficiente.
1974 
1975 El **bridge identifier** (BID) es un identificador de cada bridge (o switch) que
1976 ocupa 8 bytes y se determina por la dirección MAC del bridge (6 bytes) y un
1977 numero de prioridad (2 bytes) configurable.
1978 
1979 El **root bridge** (o switch) es el switch con el menor BID (aquel con el valor más
1980 bajo) y puede haber solo un root bridge por dominio broadcast.
1981 
1982 El **root path cost** es el camino con menor costo desde un switch, o segmento
1983 de red, hasta el root bridge. Se calcula sumando el costo de cada enlace. Todos
1984 los switches y enlaces de red tienen un root path cost asociado, y por
1985 convención el del root bridge es cero.
1986 
1987 #### Estados de los puertos
1988 
1989 El algoritmo RSTP asigna a cada puerto uno de tres estados:
1990 
1991 * Discarding (D): no participa en la topología de la red y no aprende direcciones
1992   MAC.
1993 * Learning (L): se aprenden las direcciones MAC pero no envía ni recibe tramas.
1994 * Forwarding (F): aprende direcciones MAC y envía y recibe tramas.
1995 
1996 #### Roles de los puertos
1997 
1998 El algoritmo RSTP asigna a cada puerto un rol:
1999 
2000 * Root port (RP): es el puerto donde se enviarán y recibirán tramas en dirección
2001   al root bridge.
2002 * Designated port (DP): es el puerto que envía el mejor BPDU al segmento donde
2003   esta conectado, en otras palabras, es el puerto que tiene el mejor camino
2004   hacia el Root Bridge dentro de ese segmento.
2005 * Alternate port (AP): provee un camino alternativo al provisto por el RP en
2006   dirección al root bridge.
2007 * Backup port  (BP): provee un camino alternativo al provisto por el DP en
2008   dirección al root bridge.
2009 * Disabled port (DP): no se utiliza en la operación de RSTP. No recibe ni
2010   transmite BPDUs. 
2011 
2012 ### Redes inalámbricas
2013 
2014 En redes inalámbricas los estándares que predominan son los del Instituto de
2015 Ingenieros Eléctricos y Electrónicos (Institute of Electrical and Electronics
2016 Engineers, IEEE). En particular el estándar 802.11 de 1997 y todas sus
2017 modificaciones, como 802.11a, 802.11b, 802.11g, 802.11n, 802.11ac, etc. Por lo
2018 general los medios de transmisión inalámbricos son de naturaleza half-duplex.
2019 
2020 #### Puntos de acceso
2021 
2022 Un punto de acceso (Access Point, AP, o también Wireless Access Point, WAP) es
2023 un dispositivo de red que actúa como puente entre dispositivos inalámbricos
2024 (como celulares, laptops, etc.) y una red cableada, por lo general una red
2025 Ethernet.
2026 
2027 Para que un dispositivo inalámbrico pueda transmitir datos en una red
2028 debe haber sido asociado y autenticado en la red por el AP.
2029 
2030 En primer lugar el dispositivo sin autenticar y sin estar asociado comienza a
2031 mandar tramas de gestión (o probe requests) los cuales se envían en todos los
2032 canales y en todas las bandas un canal y una banda a la vez, de esta forma se
2033 descubren las redes inalámbricas.
2034 
2035 Cuando un Access Point (AP) está en modo **infraestructura**, significa que
2036 opera como punto central de comunicación y permite que los dispositivos
2037 inalámbricos se conecten a una red cableada o a otros dispositivos a través de
2038 él. Los clientes inalámbricos no se comunican directamente entre sí. Todo el
2039 tráfico pasa por el AP. El AP normalmente está conectado a un switch o router.
2040 
2041 Otros modos incluyen, bridge, repetidor, mesh y monitor. En el modo **bridge**
2042 se interconectan redes cableadas mediante un enlace inalámbrico, y no se acepta
2043 la conexión de otros clientes inalámbricos (es una conexión punto a punto). En
2044 el modo **repetidor**, dos puntos de acceso se conectan de manera inalámbrica de
2045 manera tal de extender el rango del enlace inalámbrico, es decir, se retransmite
2046 la señal del AP original. El modo **mesh** es similar al modo repetidor pero se
2047 pueden interconectar más de un AP, y no se tiene un AP principal si no que las
2048 rutas entre diferentes APs inalámbricos es dinámica. Por ultimo en el modo
2049 **monitor** el AP solo escucha el trafico inalámbrico de la red.
2050 
2051 #### Sistema distribuido
2052 
2053 En el estándar 802.11, el sistema distribuido (o Distributed System, DS) es el
2054 sistema que interconecta múltiples puntos de acceso (APs) y permite que las
2055 distintas redes inalámbricas funcionen como una sola red.
2056 
2057 #### MAC 802.11
2058 
2059 El estándar MAC 802.11 impone un mecanismo de acceso al medio que permite el
2060 acceso justo y equitativo a todas las estaciones que lo deseen. En este estándar
2061 se utiliza acceso múltiple por detección de portadora con evitación de
2062 colisiones (Carrier Sense Multiple Access with Collision Avoidance, CSMA/CA) en
2063 lugar de CSMA/CD para acceder al medio, esto porque los puntos de acceso (Access
2064 Point, AP) no tienen la posibilidad de detectar colisiones como si ocurre en los
2065 medios por cable. Puesto que no se pueden detectar las colisiones, el mecanismo
2066 CSMA/CA implementa un sistema en el que cada AP debe transmitir una trama de
2067 reconocimiento (Acknowledge, ACK) cuando recibe una trama.
2068 
2069 Los principales mecanismos que hacen al estándar 802.11 son: el censado de
2070 portadora (Carrier Sense, CS), la función de coordinación distribuida
2071 (Distributed Coordination Function, DCF), las tramas de reconocimiento
2072 (Acknowledgment Frames, ACK) y las peticiones de envió y recepción (Request to
2073 Send/Clear to Send, RTS/CTS).
2074 
2075 El mecanismo de **acceso múltiple por detección de portadora** con **evitación
2076 de colisiones** (Carrier Sense Multiple Access with Collision Avoidance,
2077 **CSMA/CA**) es un mecanismo que permite a un dispositivo inalámbrico verificar
2078 si el medio de transmisión esta libre antes de enviar datos. La principal
2079 diferencia con CSMA/CD utilizado en Ethernet 802.3 es que con CSMA/CA se
2080 verifica el estado de la red previo a enviar información, mientras que en
2081 CSMA/CD se envían los datos y se detecta si hubo colisión durante la
2082 transmisión.
2083 
2084 Además del mecanismo CSMA/CA para acceder al medio se utiliza otro mecanismo de
2085 "censado virtual" el cual se denomina **vector de asignación de red** (Network
2086 Allocation Vector, **NAV**) con este mecanismo las tramas MAC 802.11 llevan un
2087 campo de duración en el que se especifica cuanto tiempo se necesitará para
2088 transmitirla y por consiguiente por cuanto tiempo el medio estará ocupado. Las
2089 estaciones escuchando el medio inalámbrico leen también ese campo de duración y
2090 actualizan su timer interno de NAV el cual les indica por cuanto tiempo deberán
2091 esperar al medio.
2092 
2093 El **problema del nodo oculto** ocurre cuando dos nodos en una misma red no se
2094 escuchan entre si y por tanto no pueden actualizar el timer NAV.
2095 
2096 ##### DCF
2097 
2098 La **función de coordinación distribuida** (Distributed Coordination Function,
2099 **DCF**) es un método de acceso al medio que utiliza los mecanismos de CSMA/CA y
2100 NAV para regular como dispositivos acceden a una red inalámbrica de manera tal
2101 que no haya colisiones.
2102 
2103 En DCF cada estación que desee transmitir una trama debe esperar un intervalo
2104 especifico de tiempo antes de que el medio este disponible. Este intervalo de
2105 tiempo se conoce como espacio de inter-frame distribuido (Distributed
2106 Inter-Frame Space, **DIFS**).
2107 
2108 \begin{table}[h]
2109 \centering\small
2110 \setlength{\arrayrulewidth}{0.5pt}
2111 \begin{tabularx}{\linewidth}
2112     {|>{\centering\arraybackslash}p{75pt}|
2113       >{\centering\arraybackslash}p{60pt}|
2114       >{\centering\arraybackslash}X|}
2115   \hline
2116 \textbf{Standard} & \textbf{Slot Time ($\mu$s)} & \textbf{DIFS ($\mu$s)} \\ \hline
2117       802.11b           & 20        & 50       \\ \hline
2118       802.11a           & 9         & 34       \\ \hline
2119       802.11g           & 9 or 20   & 28 or 50 \\ \hline
2120       802.11n (2.4 GHz) & 9 or 20   & 28 or 50 \\ \hline
2121       802.11n (5 GHz)   & 9         & 34       \\ \hline
2122       802.11ac          & 9         & 34       \\ \hline
2123 \end{tabularx}
2124 \caption{Valores de tiempo de slots y DIFS de acuerdo al estandar 802.11}
2125 \label{tab:ieee-80211-times}
2126 \end{table}
2127 
2128 Luego de que termine el DIFS todas las estaciones que deseen transmitir deben
2129 competir por el medio, para competir cada estación selecciona una cantidad de
2130 slots de tiempo aleatorio entre 0 y el valor de **la ventan de contención**
2131 (Contention Window, CW). El valor de la ventana de contención es dinámico, y
2132 cambia según el éxito o fracaso de las transmisiones. Se fijan dos limites para
2133 la ventana de contención el mínimo y el máximo, estos limites dependen del
2134 estándar, pero típicamente se fijan en 15 slots y 1033 slots, respectivamente.
2135 La ventana crece mediante un algoritmo denominado **retroceso exponencial
2136 binario** (Binary Exponential Backoff, BEB) en el cual si al terminar los slots
2137 de tiempo se transmite y no se recibe un ACK por parte del AP se duplica el
2138 valor de la ventana, se vuelven a elegir slots de tiempo aleatorios y se vuelve
2139 a retransmitir. Esto puede ocurrir por ejemplo si dos estaciones obtienen el
2140 mismo numero de slots, o si dos estaciones terminan sus slots al mismo tiempo.
2141 
2142 \begin{figure}[ht]
2143 \centering
2144 
2145 \begin{tikzpicture}[
2146     box/.style={draw, very thick, minimum height=0.6cm, minimum width=0.65cm},
2147     sifs/.style={draw, very thick, minimum height=0.6cm, minimum width=1.20cm},
2148     pifs/.style={draw, very thick, minimum height=0.6cm, minimum width=1.85cm},
2149     difs/.style={draw, very thick, minimum height=0.6cm, minimum width=2.50cm}
2150 ]
2151 
2152 % Parámetros de separación
2153 \def\hsep{0.3}
2154 \def\vsep{1.0}
2155 
2156 % --- Slot Time ---
2157 \node[box, anchor=west] (slot) at (0,0) {};
2158 \node at (2.0,0) (slottxt) {\textbf{Slot}};
2159 \draw[->, very thick] (slottxt.west) -- ($(slot.east)+(0.20,0)$);
2160 
2161 % --- SIFS ---
2162 \node[sifs, anchor=west] at (0,-\vsep) {\textbf{SIFS}};
2163 
2164 % --- SIFS + Slot = PIFS ---
2165 \node[sifs, anchor=west] (sifs2) at (0,-2*\vsep) {\textbf{SIFS}};
2166 \node at ($(sifs2.east)+(\hsep,0)$) {\Large\textbf{+}};
2167 \node[box] at ($(sifs2.east)+(0.9,0)$) {};
2168 \node at ($(sifs2.east)+(1.5,0)$) {\Large\textbf{=}};
2169 \node[pifs] at ($(sifs2.east)+(3.0,0)$) {\textbf{PIFS}};
2170 
2171 % --- SIFS + 2 Slots = DIFS ---
2172 \node[sifs, anchor=west] (sifs3) at (0,-3*\vsep) {\textbf{SIFS}};
2173 \node at ($(sifs3.east)+(\hsep,0)$) {\Large\textbf{+}};
2174 \node[box] at ($(sifs3.east)+(0.9,0)$) {};
2175 \node at ($(sifs3.east)+(1.5,0)$) {\Large\textbf{+}};
2176 \node[box] at ($(sifs3.east)+(2.1,0)$) {};
2177 \node at ($(sifs3.east)+(2.7,0)$) {\Large\textbf{=}};
2178 \node[difs] at ($(sifs3.east)+(4.2,0)$) {\textbf{DIFS}};
2179 
2180 \end{tikzpicture}
2181 
2182 \caption{Relacion entre slots de tiempo}
2183 \label{fig:fig-slots}
2184 \end{figure}
2185 
2186 
2187 ##### RTS/CTS
2188 
2189 Según el estándar no es obligatorio implementarlo en el AP, pero en ciertos
2190 casos, como en el problema del nodo oculto, resulta útil para evitar colisiones.
2191 
2192 Básicamente el procedimiento sigue siendo el mismo hasta llegado el momento de
2193 transmitir los datos, es decir, luego de censar el medio esta libre, habiendo
2194 esperado un DIFS y consumido los slots; en este punto teniendo este mecanismo
2195 habilitado se debe enviar una pequeña trama de control al AP
2196 
2197 ##### PCF
2198 
2199 La **función de coordinación de punto** (Point Coordination Function, **PCF**)
2200 es un modo libre de contienda, esto es, las estaciones no compiten por el medio
2201 para transmitir, si no que es el AP quien decide quien transmite y quien no,
2202 esto lo hace mediante la interrogación periódica (Polling) a todos los
2203 dispositivos de la red por si deseen trasmitir.
2204 
2205 En este modo no hay colisiones ya que el AP interroga uno por uno a las
2206 estaciones de la red.
2207 
2208 ##### Fragmentación
2209 
2210 La fragmentación también es posible en el estándar 802.11 pero al igual que
2211 ocurría con RTS/CTS no es obligatorio su implementación.
2212 
2213 La fragmentación tiene la desventaja que cada fragmento tiene su cabecera
2214 propia, lo que implica una carga adicional de bytes. También entre fragmentos se
2215 debe esperar un SIFS y un ACK, por lo que también se agrega tiempo muerto que no
2216 se puede usar para transmitir datos útiles.
2217 
2218 Cuando se desea enviar una trama MAC 802.11 fragmentada, solo el primer
2219 fragmento debe competir por el medio, una vez que se tiene acceso al medio los
2220 datos se envían en ráfagas de segmentos uno atrás de otros, solamente separados
2221 por segmentos de validación y los respectivos intervalos de tiempo SIFS.
2222 
2223 La fragmentación solo se aplica a tramas unicast, las tramas broadcast o
2224 multicast no se fragmentan.
2225 
2226 ## Nivel físico
2227 
2228 ### Modulación
2229 
2230 La modulación es la modificación de uno o varios parámetros de la señal
2231 portadora, esta señal portadora (o también llamada Carrier) típicamente es una
2232 señal periódica, sinusoidal, que se utiliza como base sobre la cual se modula
2233 información mediante la variación controlada de alguno de sus parámetros
2234 (amplitud, frecuencia o fase). La señal portadora permite que la señal
2235 resultante sea adecuada para propagarse eficientemente en el medio, y la
2236 elección de la frecuencia no es arbitraria si no que depende del medio, alcance
2237 deseado, capacidad de penetración y regulaciones del espectro.
2238 
2239 Algunos ejemplos de modulación incluyen modulación en amplitud (AM), modulación
2240 en frecuencia (FM), modulación digital de amplitud (ASK), fase (PSK) y
2241 frecuencia (FSK), modulación de amplitud en cuadratura (QAM), entre otros.
2242 
2243 ### Multiplexación
2244 
2245 La multiplexación se utiliza para compartir un enlace que no esta siendo
2246 utilizado en su totalidad para aumentar su eficiencia.
2247 
2248 ### Teoremas de Nyquist y Shannon
2249 
2250 El teorema de Nyquist establece el límite máximo de tasa de transmisión en un
2251 canal sin ruido y con ancho de banda limitado. Para un canal sin ruido con ancho
2252 de banda B (en Hz) se define como la maxima tasa de símbolos (en Baud) como:
2253 
2254 \vspace{-1em}
2255 $$C \le 2B$$
2256 \vspace{-1em}
2257 
2258 Y ademas si cada símbolo puede representar M niveles (o símbolos) distintos,
2259 entonces la velocidad de transmisión en bits resulta:
2260 
2261 \vspace{-1em}
2262 $$C = 2\ B\ log_{2}\left(M \right)$$
2263 \vspace{-1em}
2264 
2265 Por ejemplo para un modem telefónico con ancho de banda 4 KHz la velocidad de
2266 transmisión maxima (para niveles lógicos 0 y 1) resulta:
2267 
2268 \vspace{-1em}
2269 $$C = 2\cdot 4KHz\ log_{2}\left(2 \right) = 8 Kbps$$
2270 \vspace{-1em}
2271 
2272 Mientras que para 32 niveles resulta:
2273 
2274 \vspace{-1em}
2275 $$C = 2\cdot 4KHz\ log_{2}\left(32 \right) = 8 Kbps$$
2276 \vspace{-1em}
2277 
2278 El teorema de Shannon amplía el teorema de Nyquist a canales con ruido, y dice
2279 que la capacidad máxima (C) de un canal depende de su ancho de banda (B) y de
2280 cuanto influye el ruido en la señal (Signal to Noise Ratio, SNR; en veces, no en
2281 dB). Es la capacidad máxima para el receptor, luego de pasar por el canal con
2282 ruido.
2283 
2284 \vspace{-1em}
2285 $$C=B\ log_{2}(1+SNR) = B\ log_{2}\left(1+\frac{S}{R}\right)$$
2286 \vspace{-1em}
2287 
2288 ### Ruido térmico
2289 
2290 El ruido térmico (también llamado ruido Johnson-Nyquist) es el ruido eléctrico
2291 generado por la agitación térmica de los electrones en cualquier conductor o
2292 dispositivo físico que tenga una temperatura mayor que 0 K. Es un fenómeno
2293 fundamental, inevitable y presente en todos los sistemas electrónicos.
2294 
2295 La potencia de ruido medida en Watts ($W$) en un ancho de banda ($B$) es:
2296 
2297 \vspace{-1em}
2298 $$N = kTB$$
2299 \vspace{-1em}
2300 
2301 Donde $k$ es la constante de Boltzmann $1.38*10^{-23}\nicefrac{J}{K}$, $T$
2302 la temperatura absoluta en Kelvin.
2303 
2304 ### Diagrama de constelación
2305 
2306 Un diagrama de constelación (o también llamado diagrama de símbolos) es una
2307 representación gráfica que muestra los símbolos posibles de una señal digital
2308 modulada en un plano complejo. En el eje horizontal se representa la componente
2309 I (In-phase) y en el vertical la componente Q (Quadrature).
2310 
2311 La distancia al origen representa la amplitud. El ángulo con respecto al eje
2312 real representa la fase. Cada símbolo corresponde a una combinación específica
2313 de I y Q.
2314 
2315 \begin{figure}[H]
2316   \centering
2317   \includegraphics[width=0.60\columnwidth]{img/diagrama_constelacion_8PSK_gray.png}
2318   \caption{Diagrama de constelación}
2319   \label{fig:ej-diagrama-de-constelacion}
2320 \end{figure}
2321 
2322 
2323 ### Decibeles
2324 
2325 Para potencia se toma
2326 
2327 \vspace{-1em}
2328 $$G_{dB} = 10 * log\left(\frac{P_{out}}{P_{in}}\right);\qquad
2329 \frac{P_{out}}{P_{in}} = 10^{\textstyle \frac{G_{dB}}{10}}$$
2330 
2331 Para tensión, corriente, campo eléctrico, etc:
2332 
2333 \vspace{-1em}
2334 $$G_{dB} = 20 * log\left(\frac{V_{out}}{V_{in}}\right);\qquad
2335 \frac{V_{out}}{V_{in}} = 10^{\textstyle \frac{G_{dB}}{20}}$$
2336 
2337 Al medir una potencia en decibeles, se debe adoptar una referencia de potencia
2338 para indicar respecto de qué potencia se mide. Para expresarlo se le agrega una
2339 letra a las unidades dB.
2340 
2341 Si la potencia de referencia es 1W se emplea el dBw:
2342 
2343 \vspace{-1em}
2344 $$G_{\text{dBW}} = 10 \cdot \log \left( \frac{P}{1\text{ W}} \right); \qquad
2345 \frac{P}{1\text{ W}} = 10^{\textstyle \frac{G_{\text{dBW}}}{10}}$$
2346 
2347 Si la referencia es 1 mW la unidad es el dBm:
2348 
2349 \vspace{-1em}
2350 $$G_{\text{dBm}} = 10 \cdot \log \left( \frac{P}{1\text{ mW}} \right); \qquad 
2351 \frac{P}{1\text{ mW}} = 10^{\textstyle \frac{G_{\text{dBm}}}{10}}$$
2352