Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Una red es un conjunto de dispositivos interconectados entre sí, a fin de poder establecer
comunicaciones entre ellos. El objetivo de lograr esta comunicación, es poder compartir
recursos, información y servicios. Estos beneficios que traen las redes permiten, en muchos
casos, una importante reducción de tiempo (por ejemplo, podemos comparar el sistema de
correo electrónico con el envío de cartas tradicional), como así también mayor confianza en
que las acciones solicitadas se podrán llevar a cabo.
- Fuente (Software).
- Emisor/Transmisor (Hardware).
- Medio de transmisión y dispositivos intermedios (Hardware).
- Procesos intermedios que tratan la información (Software y Hardware).
- Receptor (Hardware).
- Destino (Software).
- Otros: Protocolos (Software), Información, mensaje transmitido (Software).
- Señal de Información, materialización del mensaje sobre el medio (Hardware).
Cuando un usuario quiere tener acceso a internet, normalmente contacta a un ISP (Internet
Service Provider). Estos proveedores de internet suelen entregar Módems, el cual es un
aparato que convierte señales digitales que salen de la computadora a analógicas,
permitiendo el uso de redes telefónicas o de cable para lograr comunicación entre
dispositivos.
Hay dos tipos de acceso residencial a banda ancha: Línea de suscriptor digital (DSL) y
Cable híbrido de fibra y coaxial (HFC).
DLS es un servicio que usa el cableado telefónico, que básicamente nos brinda un canal de
subida de datos, un canal de bajada de datos, y el propio servicio telefónico. Ofrece un
canal punto a punto entre el módem y el ISP, y por ende su velocidad no se ve afectada por
otros usuarios de la red.
La conmutación de paquetes es una técnica en la cual, los distintos paquetes que viajan
desde un host emisor a un destino no tienen porqué seguir una misma ruta. Cada paquete
va a tener información de origen y destino (entre otras cosas), la cual es usada por cada
dispositivo de la red para poder guiar el paquete hacia su destino final.
En esta técnica, el camino no está reservado para una única comunicación entre host (a
diferencia de conmutación de circuitos), lo cual permite que el camino sea usado mas
eficientemente, y el procesamiento que debe hacer cada dispositivo de la red para decidir
qué camino debe seguir la información influye en la performance de la comunicación. Por
esta razón, este tipo de técnica no es la ideal para servicios que requieren comunicación en
tiempo real, como videoconferencias o llamadas telefónicas.
Sin embargo, como ventaja tenemos que esta técnica responde mejor a problemas en el
canal de comunicación, simplemente derivando los paquetes en otra dirección hacia su
destino final.
La conmutación de circuitos por su parte es una técnica que se basa en la reserva de canal
entre dispositivos origen y destino. De esta forma, se establece una comunicación previa al
envío del primer “trozo” de información, para que todos los dispositivos intermedios se
pongan “de acuerdo” respecto a la ruta que va a seguir la información. Con el canal
reservado, la información fluye más rápidamente, beneficiando a las aplicaciones de tiempo
real, porque se reduce el retardo en cada nodo de la red. Sin embargo, el camino no está
aprovechado en todo momento, y al tener una ruta en específico, es mas difícil responder a
problemas como caída de algún nodo.
Un protocolo nos puede especificar el tamaño máximo de información que se puede enviar
por vez, el orden de los mensajes intercambiados, la sintaxis y semántica de cada mensaje,
y otras ventajas como por ejemplo control de errores, control de congestión.
Los distintos protocolos están implementados en las distintas componentes que forman
parte de una comunicación.
Las computadoras que ejecutan distintos sistemas operativos pueden comunicarse entre sí
porque siguen los mismos protocolos.
Esto dió como resultado que las redes se empiecen a interconectar entre sí. Sin embargo,
este fue un punto de conflicto, y punto clave finalmente para el desarrollo de internet: las
redes de distintas empresas o universidades no eran compatibles entre sí, lo cual llevó a
pensar en la idea de especificar protocolos en común, que todo aquel que quiera acceder a
la red deba respetar.
El modelo OSI
El modelo TCP/IP
Es el modelo en capas que se usa actualmente en internet. Está basado en el modelo OSI y
por ende, cada capa tiene asociado un conjunto de protocolos y tiene una función
específica, tal como se describe en el modelo OSI.
P2P
Clasificación de redes
Las redes se pueden clasificar por cobertura, abiertas o privadas, topología física, medio de
conexión, entre otros.
La capa de aplicación es la primera capa del protocolo TCP/IP (de arriba hacia abajo), o
también llamada “capa 5”. Su función es brindar a las aplicaciones (de usuario o no) la
posibilidad de acceder a los servicios de la red, comunicándose con las demás capas y
usando sus servicios para tal fin. La capa de aplicación dispone de una serie de protocolos
ampliamente usados, como son HTTP, DNS, protocolos de correo electrónico, entre otros.
Es importante aclarar que los usuarios de aplicaciones no interactúan directamente con el
nivel de aplicación, sino que es la propia aplicación la que interactúa con los servicios de
esta capa.
Cada protocolo de capa de aplicación ofrece distintos servicios, que pueden tomarse como
parte de las aplicaciones que los utilizan.
El desarrollo de aplicaciones de red implica escribir programas que se ejecuten en distintas
máquinas pero que puedan comunicarse entre sí para resolver un problema.
Es importante notar, que en un host puede haber múltiples aplicaciones que tienen la
necesidad de comunicarse con procesos que corren en otras máquinas. Para esto, cada
proceso que tiene la posibilidad de usar la red va a tener asignados “Sockets”. Los sockets
pueden verse como puertas a través de las cuales, las aplicaciones envían y reciben
información. Por ejemplo, una aplicación que desea enviar información a la red, deja dicha
información en su socket, y confía en la infraestructura del otro lado, la cual se debería
encargar de transportar dicha información hasta su destino.
El direccionamiento entre procesos se da gracias a que los equipos en los que corren los
procesos están identificados con una dirección IP, la cual es una dirección que identifica
unívocamente un dispositivo en la red. Sin embargo, como fue dicho antes, podríamos tener
varios procesos corriendo en la misma máquina. Para esto es que se usan los números de
puerto, con los cuales finalmente se identifican los sockets.
Agente de usuario
Las aplicaciones suelen necesitar de ciertos servicios básicos, aunque algunas necesitan
más servicios que otras. Básicamente podemos hablar de:
- Entrega fiable: el servicio debería poder garantizar que la información enviada llegue
a destino, completa y sin errores. Las aplicaciones de tiempo real suelen tolerar
cierta pérdida, ya que, por ejemplo, no es relevante para una aplicación de
videoconferencias retransmitir un píxel de una imagen que ya se mostró y
lógicamente no se volverá a mostrar.
- Ancho de banda: se refiere a que un servicios brinde un mínimo de ancho de banda.
Las aplicaciones mas exigentes en este aspecto suelen ser las de tiempo real.
- Temporización: las aplicaciones deberían brindar su servicio en el menor tiempo
posible. Otra vez, las aplicaciones de tiempo real son las mas exigentes, dado que
requieren que la información fluya rápidamente y poder ser reflejadas en el equipo
destino casi instantáneamente.
- Seguridad: cuestiones de cifrado de información, para asegurar que ningún agente
malintencionado capte e interprete la información. También se puede necesitar
autenticación.
La capa de transporte tiene dos protocolos ampliamente conocidos: TCP y UDP. Ambos
ofrecen la posibilidad de transportar la información de un host a otro, pero cada uno ofrece
distintos servicios y prestaciones, y es decisión del programador de la aplicación cuál de
estos dos protocolos utilizar.
La web y HTTP
HTTP sigue una arquitectura cliente servidor, donde los clientes son los navegadores, y los
servidores se esforzarán por atender solicitudes de muchos clientes. Hay dos tipos de
mensajes HTTP: request y response.
HTTP está muy relacionado con HTML (lenguaje de marcas de hipertexto) el cual presenta
documentos de texto plano con una cierta estructura que es fácilmente entendida por los
navegadores, y por eso, las páginas web suelen tener este formato. Normalmente cuando
uno realiza una solicitud HTTP en el contexto de una página web, está solicitando un objeto
HTML, aunque también pueden solicitarse otros objetos, como imágenes, archivos XML,
entre otros.
Estos objetos solicitados por HTTP están identificados en la web por una dirección URI, la
cual se divide en dos partes:
HTTP por defecto trabaja con el puerto 80 del lado del servidor. Cada vez que un cliente va
a establecer una conexión, crea un socket con un número de puerto origen mayor a 1023 y
puerto destino 80. El servidor tendrá que tener un socket escuchando en el puerto 80, y al
llegar la petición tendrá que hacer una ramificación, para poder atender al nuevo cliente,
pero también dejando el puerto 80 libre para atender otras solicitudes.
HTML trabaja con el protocolo TCP de la capa de transporte, el cual es capaz de usar
conexiones persistentes.
Como dijimos, HTTP tiene distintas versiones, y cada una de ellas trabaja de una manera
específica.
HTTP 1.0 por defecto trabaja con conexiones no persistentes (a menos que se le
especifique la opción “keep-alive”), lo cual puede ser engorroso para páginas con muchos
objetos a descargar. Es importante notar en este punto, que el uso mas común de HTTP es
a través de un navegador web. Cuando un navegador web vé etiquetas <link> o <img> en
un documento HTML, sabe que son referencias a otro objeto y que sin ese objeto, la página
se vería “incompleta”. Por eso, los navegadores suelen realizar peticiones HTTP de forma
automática al ver ese tipo de referencias. El problema radica en que si un navegador tiene
que establecer muchas veces la conexión, la performance termina viéndose perjudicada.
Teniendo eso en mente, podemos afirmar que una conexión HTTP 1.0 consume:
- 1 RTT para establecer la conexión.
- 1 RTT para realizar la petición.
- El tiempo total sería entonces: 2 RTT + tiempo necesario para que viaje el elemento.
Con HTTP 1.1 este problema fue solucionado. Las conexiones por defecto son persistentes,
de manera que no es necesario establecer la conexión cada vez que se quiere descargar
otro objeto. Sin embargo esto también tiene sus contras: es inseguro dejar abierta la
conexión, y si se deja abierta de manera innecesaria consume recursos. Mas allá de eso, la
ventaja en tiempo suele ser mucha. Por ejemplo, para descargar 10 objetos de una página
será necesaria solo una conexión TCP (se utiliza solo 1 RTT). Varias páginas web que
residan en el mismo servidor se pueden enviar al mismo cliente. La conexión normalmente
es cerrada por el servidor si no se usó durante un cierto tiempo. Para aumentar la velocidad
se puede usar pipelining.
Si un cliente y servidor ejecutan distintas versiones de HTTP, uno la 1.0 y otro la 1.1, la
conexión se podrá lograr como conexión no persistente.
DNS es un protocolo de capa de aplicación que, entre otras tareas, se encarga de realizar la
correspondencia entre un nombre de dominio y su respectiva dirección IP. Esta función
principal de DNS está alentada por el simple hecho de que para una persona es mas fácil
recordar “google.com” que “192.273.5.67” (por ejemplo). El protocolo DNS será explicado
con mayor detalle mas adelante.
Como HTTP se usa normalmente respondiendo a solicitudes de usuario, donde por ejemplo
tenemos un usuario que quiere consultar la página “google.com”, es muy importante la
relación entre HTTP y DNS. El agente de usuario (el navegador) solicitará al módulo DNS
que nos devuelva la IP donde se aloja la página solicitada por el cliente. Una vez obtenida
dicha dirección, sí es posible realizar las peticiones por los objetos en particular.
El problema de las direcciones IP crece al saber que hay muchísimas páginas web que los
usuarios frecuentan, con lo cual recordar todas esas IP se hace bastante difícil, pero mas
difícil aún si agregamos que las IP no son estáticas: cada cierto tiempo suelen cambiar, con
lo cual todo lo memorizado no sirve.
Comandos HTTP
HTTP tiene distintos comandos que sirven para solicitar distintas funciones del protocolo. El
formato es:
- GET: nos sirve para hacer solicitudes por un recurso. No debería ser usado para
enviar información.
- POST: trabaja de igual forma que GET, pero envía la información en el cuerpo de la
solicitud.
- HEAD: trabaja de igual manera que el GET, pero sólo devuelve las líneas de
encabezado.
- PUT: sirve para subir contenido. Normalmente los servidores de hosting no lo tienen
habilitado, por seguridad.
- DELETE: elimina el recurso especificado. Tampoco suele estar habilitado en los
servidores de hosting.
Autorización y Cookies
Hoy en dia es muy común encontrar sistemas que requieran un nombre de usuario y
contraseña para acceder a una página, y poder navegar a través de ella. Esto básicamente
es: el servidor solo responde solicitudes a usuarios (agentes de usuario) que puedan
demostrar que están autorizados para realizar dichas solicitudes.
Sin embargo, como fue dicho antes, HTTP es un protocolo sin estado: no conserva ninguna
información entre distintas solicitudes y por ende, a priori si un usuario inicia sesión, en la
próxima petición que haga, el servidor va a desconocer que dicho usuario ya inició su
sesión. Para solucionar esto, se utilizan las cookies.
La idea sería que por ejemplo, un usuario inicie una sesión en un sistema. Dicho sistema va
a crear en su memoria información asociada, como una relación entre nombre de usuario y
un identificador único (cookie). En la HTTP response, el servidor añade una línea “set-
cookie: cookie1” lo cual indica al navegador que tiene que almacenar dicha información. El
mensaje completo de “set-cookie” sería:
“Set-Cookie:”
“Nombre=valor;” -> Nombre de la cookie y valor
“Expires=fecha;” -> Fecha de caducidad
“Path=camino;” -> Camino
“Domain=dominio;” -> Dominio
“Secure” -> sólo se transmite sobre canales seguros (HTTPS).
Con dicha información el navegador cuando haga una HTTP request por una URL en
particular, va a ver si tiene alguna cookie
que en su “path” tenga dicha URL. Si hay
coincidencia, incluye el valor de cookie en
la petición. Cuando llega al servidor, el
servidor va a comparar dicho valor de
cookie con los valores que tiene
almacenados, y si hay coincidencia,
responde satisfactoriamente.
Web caching - Servidores proxy
Por segundo puede haber infinidad de solicitudes HTTP, lo cual de alguna manera afecta a
la red, por la sobrecarga de información viajando en un momento dado. Para solucionar
esto, se pensó en la posibilidad de que existan servidores que almacenen información que
pasa por ellos, de manera que puedan responder a solicitudes sin que lleguen éstas a hacer
gran recorrido en la red.
Típicamente un usuario tiene su servidor proxy en su ISP, y las solicitudes viajan hacia él
inicialmente. Si este servidor tiene la información que está siendo solicitada, podrá
responder él la petición y de esta forma se ahorran tiempo y recursos. Es importante notar
que el servidor web actúa como cliente y como servidor. Actúa como servidor en el caso
anteriormente visto, pero en caso de no poder responder la solicitud, actúa como cliente,
buscando en la web el recurso solicitado. Una vez que lo obtiene, es común que lo
almacene en su propia memoria, para poder responder él por dicho recurso en un futuro
cercano.
HTTPS
Como se dijo antes, SSL es un protocolo por si mismo y se lo podría ubicar en la “Capa de
Presentación” del modelo OSI. Puede combinarse su uso con otros protocolos, como FTPS,
IMAPS, entre otros.
El protocolo históricamente usado para transferencia de archivos es FTP. Sin embargo, vale
aclarar que actualmente FTP es usado solo para transferencia de archivos grandes y está
empezando a perder terreno hace tiempo contra HTTP (si bien HTTP se usa en mayor
medida para contenido web, es un protocolo de transferencia de archivos en general). Las
mayores diferencias entre HTTP y FTP es que HTTP no mantiene estado en el servidor, y
que FTP envía la información de control por un canal aparte, mientras que HTTP lo manda
como cabeceras.
Ahora, hablando de FTP específicamente, tenemos que decir que tenemos dos protocolos
que tienen una misma idea como base: FTP y TFTP.
FTP
Cuando un usuario quiere iniciar una conexión FTP, establece la conexión de control hacia
el puerto 21 del servidor, y envía su información de autenticación. En caso de ser válida
dicha información, el servidor va a dar la conexión como establecida. Otra diferencia con
HTTP es que FTP mantiene estado de usuario (HTTP necesita de cookies).
- Modo activo: luego de que se estableció la conexión de control, el cliente la usa para
especificarle al servidor en que puerto va a escuchar la conexión de datos.
Básicamente, le envía un mensaje con el comando “PORT”, donde indica dicho
número de puerto. Al llegar esta información al servidor, el servidor establecerá la
conexión de datos, desde su puerto 20 hacia el puerto indicado por el cliente. El uso
de este modo está desalentado porque tiene grandes problemas de seguridad para
el cliente, al dejarlo con un puerto abierto a la espera de recibir conexiones. Por
esto, los firewall suelen evitar este tipo de conexiones, lo cual representó un
problema para FTP.
- Modo pasivo: para solucionar el problema anterior, se creó este modo. Una vez
establecida la conexión de control, el cliente la usa para enviar un comando PASV al
servidor, indicando que usará el modo pasivo. Como respuesta, el servidor le indica
en qué número de puerto (mayor a 1023) lo escuchará, y será responsabilidad del
cliente iniciar la conexión.
Los comandos son enviados como texto ASCII vía el canal de control, los puertos utilizados
son (servidor 21, cliente > 1023).
Suele usarse para transferir archivos pequeños. A diferencia de TFTP usa UDP (en el
puerto 69). Debido a esto, no hay definición formal de sesión, cliente y servidor, aunque se
considera servidor a quien abre el puerto 69 y cliente a quien se conecta.
Tiene 5 comandos: Read, Write, ACK (necesario porque usa UDP), Error y Data. Tiene
muchas menos funciones que FTP (por ejemplo, no puede listar archivos almacenados en
el servidor).
No tiene sistema de seguridad.
Usa una única conexión, a diferencia de FTP que utiliza dos.
Los tres componentes básicos de este servicio son: SMTP, agentes de usuario y servidores
de correo. La estructura básica es la siguiente:
Cuando un usuario usa un MUA (agente de usuario de correo electrónico) con el fin de
enviar un correo, este agente de usuario normalmente conoce a los servidores de correo
para su dominio. En este momento, el agente de usuario de correo realiza una consulta
DNS por el registro A del servidor de correo. Una vez obtenida dicha dirección IP, se usa su
LMTA (Local Mail Transport Agent), quien usa a su vez el protocolo SMTP para enviar el
correo hasta su servidor destino.
Los servidores SMTP son comúnmente conocidos como MTA (Agente de transporte de
correo). Cuando un correo llega a un servidor MTA, éste lo almacena en su buffer hasta que
llegue la oportunidad de poder enviarlo. Cuando llega dicho momento, el servidor lee la
dirección destino del correo, y en caso de no ser el mismo nombre de dominio, realiza una
consulta DNS por el registro MX para el nombre de dominio en cuestión (por ejemplo, si el
mail se envía a “hola@gmail.com”, consultará por los servidores de correo de gmail. Una
vez obtenida la lista de servidores de correo, elegirá el servidor de correo de mayor
prioridad, y establecerá la conexión TCP con dicho servidor. Una vez establecida la
conexión con el MTA del receptor del email, el mail será enviado.
Una vez que el correo llega al MTA destino, éste le delega la tarea al MDA (Mail Delivery
Agent) de que eventualmente el mail pueda ser leído por el destinatario. Básicamente el
MTA entrega el mail al MDA (será un servidor POP3 o IMAP).
Los protocolos de correo electrónico fueron nombrados anteriormente, pero ahora serán
explicados en profundidad. Son SMTP, POP3 e IMAP.
SMTP
Es un protocolo muy antiguo, que tiene una restricción que afecta claramente hoy en día: el
formato del email tiene que respetar ASCII de 7 bits. Esto en su momento fue lógico, en la
década de los 80, porque no se pensaba en enviar video o voz por un mail, pero hoy en día
es una restricción que tuvo que ser solucionada con MIME. Vale aclarar que los datos
multimedia hoy en día están en formato binario, y tienen que ser transformados a ASCII de
7 bits para ser transmitidos.
Es importante observar que SMTP normalmente no usa servidores intermedios entre MTAs.
La conexión entre estos servidores es “punto a punto”.
SMTP usa conexiones persistentes: si el servidor SMTP origen tiene mas de un correo que
enviar al mismo servidor SMTP destino, los enviará por la misma conexión TCP. Para cada
mensaje, el cliente comienza cada proceso con un nuevo MAIL FROM: crepes.fr, que
delimita el final del mensaje con un punto y realiza QUIT solo después de que todos los
mensajes hayan sido enviados.
Puede o no requerir autenticación, y puede o no trabajar de forma segura.
IMAP
Es un protocolo que ofrece muchas mas funcionalidades que POP. Sin embargo, también
es bastante mas costoso. IMAP como principal ventaja es que mantiene el estado en el
servidor, por lo que es posible organizar los mails en carpeta, marcarlos o desmarcarlos
como “leídos”, entre otras ventajas.
Otra ventaja es que se puede usar desde dispositivos diferentes, ya que no descarga los
mails al host del usuario. También permite al agente de usuario de correo obtener partes de
mensajes (por ejemplo, solo el encabezado), a fin de ahorrar ancho de banda (al leer el
encabezado, el usuario puede decidir no leer el mail y por ende no solicitará todo el correo).
Como desventajas, es un servicio mucho mas pesado que POP, obligando a mantener la
conexión abierta hasta que se termine de consultar, y además siempre requiere internet
para acceder a leer los correos. También hay que tener en cuenta que el espacio en el
servidor es limitado, por lo cual tendríamos que eliminar correos con cierta frecuencia.
La decisión sobre usar IMAP o POP3 dependen de cada usuario. Ambos cumplen la tarea
básica de forma correcta.
Son una serie de convenciones dirigidas al intercambio a través de internet de todo tipo de
archivos (texto, audio, video, etc) de forma transparente para el usuario. Una parte
importante de MIME está dedicada a mejorar las posibilidades de transferencia de texto en
distintos alfabetos.
Los mensajes de correo electrónico usan MIME para solucionar la restricción de ASCII de 7
bits como formato de transporte de información. Dos ejemplos son:
Es importante aclarar que MIME puede ser usado en HTTP, SMTP, POP3 e IMAP.
Ambos se usan para transferir archivos de un host a otro. También ofrecen la posibilidad de
conexiones persistentes (desde HTTP 1.1).
Las diferencias son:
- HTTP es un protocolo de demanda. La conexión es iniciada por la máquina que
quiere recibir el archivo. SMTP es un protocolo de oferta.
- SMTP requiere que cada mensaje esté en ASCII de 7 bits. En HTTP no existe tal
restricción.
- HTTP encapsula cada objeto en su propio mensaje HTTP de respuesta. SMTP
reúne todos los objetos en un mensaje.
El protocolo DNS se ejecuta sobre UDP, en el puerto 53 de los servidores. También usa
TCP en casos en donde la respuesta consume más de 512 bytes, y en la transferencia de
zona (AXFR).
Como característica de DNS podemos decir que no es un protocolo que se use
“directamente” por el usuario, sino que es usado por otros protocolos, por ejemplo HTTP.
El funcionamiento básico y mas común consiste en que la aplicación cliente invocará DNS,
especificando el nombre de host que debe ser traducido a dirección IP. La solicitud DNS
será atendida por distintos servidores DNS en la jerarquía de servidores, y en caso de éxito,
se le devolverá al cliente la información solicitada.
Delegación de subdominios/zonas
Los nombres de dominio tienen una estructura jerárquica. Tienen la forma
“www.redes.unlp.edu.ar.”, y de derecha a izquierda se puede ir desglosando la red,
encontrando delegaciones para ciertas zonas.
Analizando dicha dirección, vemos que un DNS local tendría que consultar a un root server
(en caso de no tener la información cacheada) por toda la dirección. Probablemente el root
server conozca el servidor autoritario para el dominio “.ar”, y nos responderá la dirección de
éste. A su vez, dicho servidor (o alguno de una lista devuelta, en caso de obtener mas de un
resultado), el servidor DNS local le consultará por toda la dirección, y como respuesta mas
básica nos podría responder la dirección del servidor autoritario para el dominio “.edu” (o
nada en caso de no conocerla). Así se seguiría desglosando la información hasta llegar a
dar con el servidor autoritario para dicho nombre de dominio.
Con este sencillo ejemplo podemos ver que los servidores DNS van delegando ciertas
zonas (por ejemplo, “.ar” es una zona, y “.edu” es otra). La delegación consiste en
seleccionar un servidor como autorizado para dicha zona, y conocer ahora la dirección IP de
dicho servidor, para poder responder en caso de alguna solicitud que nos llegue (sería algo
como “para una dirección “.ar”, preguntale a este servidor: direccionEjemplo”).
El resolver
Es un conjunto de rutinas (un módulo) que se encarga de solucionar las consultas DNS, a
solicitud del cliente. Por ende este módulo no es un servicio activo, sino que es una
biblioteca de funciones que se usan conjuntamente con la aplicación.
Existen dos tipos de resolver: los que no realizan ninguna función de catching (llamado Stub
Resolver), que usan para cacheo el servidor DNS local, y los que sí realizan función de
cacheo (llamados Smart Resolver), que funciona en cada equipo como si fuera un servidor
local y permite realizar algunas funciones extra.
Los servidores DNS almacenan la información con la que trabajan en una base de datos
local. Estas bases de datos pueden tener distintos tipos de información, organizados en
registros RR. Dentro de internet, el tipo de registro que nos interesa es el de clase “Internet”
(IN).
carga.
Registros CNAME: son registros que se utilizan cuando un nombre de dominio se vuelve
engorroso de recordar, por ser complicados. El CNAME funciona como un alias, que da un
nuevo nombre, con intención de que sea mas simple y fácil de recordar por las personas.
Si no existiera el CNAME, se podría lograr el mismo efecto con varios registros A:
Registros MX: Son registros utilizados para almacenar los servidores de correo para un
nombre dado. Al decir esto hablamos de servidores SMTP, encargados de recibir correo.
Gracias a esto, las direcciones de correo no necesitan contener especificación del servidor
completo de mail, sino que alcanza con indicar solo el dominio. Al consultar por el registro
MX podría retornar una lista, que básicamente hará distribución de carga. Cada servidor
tendrá asociado un número que se conoce como prioridad (menor número, mayor
prioridad), y los agentes de correo eligen siempre el servidor de correo de mayor prioridad
para enviar el mail. Una curiosidad sobre esto, es que si el servidor primario está fuera de
servicio, un servidor secundario lo almacenará y esperará hasta poder entregarle él mismo
el correo al servidor primario. Si pasara un cierto tiempo en el cual el correo no puede ser
enviado porque el servidor primario sigue sin responder, se le responde al cliente un
mensaje que indica que el correo no pudo ser enviado.
Registros NS: son los registros nameserver. Nos dicen que servidores están autorizados a
responder para una determinada zona. Pueden existir varios servidores, pero no tienen
asociado ningún tipo de prioridad: cualquiera puede responder. En estos casos, donde hay
varios, es donde se usan servidores primarios y secundarios. Típicamente ante algún
cambio en los registros, el servidor primario informará a los secundarios del cambio, y se
realizará la transferencia de zona a todos los secundarios, usando el protocolo TCP. Junto
con el registro NS se recomienda tener asociado un registro A que nos informe la IP de
dicho servidor autoritario. Estos registros se conocen como GLUE RECORDS y se usan con
el fin de ahorrar consultas DNS (si recibimos un nombre de servidor autoritario,
normalmente después haremos una consulta para saber su dirección IP (registro A)).
Registros SOA: son para indicar comienzo de autoridad. Existe uno por cada zona o
subzona. Especifica los parámetros globales para todos los registros del dominio o zona.
Registros SRV: “servicio”. Se utiliza para la definición de un servicio TPC en el que opera el
dominio.
Registros TXT: significa “texto”. Esta sintaxis de DNS permite que los administradores
inserten texto en el registro DNS. A menudo se utiliza para denotar hechos o información
sobre el dominio.
Por ejemplo, cuando un usuario usa indirectamente HTTP para poder visitar una página
web, podría usar DNS para consultar los registros A, CNAME y NS. Así mismo, cuando un
servidor SMTP desea enviar un correo a otro servidor SMTP, podría usar DNS para
consultar registros MX, A y NS.
Archivo hosts
Con el crecimiento de internet este archivo se volvió inviable, de manera que hubo que
pensar en una solución (esa solución fue DNS).
Sin embargo, el archivo sigue existiendo. Normalmente se usa para restringir visitas a
ciertas páginas web.
El término “datagrama” para la capa de transporte se usa cuando usamos UDP. El término
“segmento” se usa cuando usamos TCP. Para evitar confusiones, se dice que el PDU de
esta capa es el segmento.
Los protocolos de capa de transporte trabajan sobre el protocolo de capa de red IP, el cual
no ofrece un servicio de transferencia de datos fiable, no garantiza integridad de los datos,
ni tampoco que lleguen en orden.
Los protocolos de capa de transporte pueden usar distintas alternativas para crear un
servicio fiable. UDP opta por no ser un servicio fiable, buscando mayor performance. En
lugar de eso TCP sí busca ser un servicio fiable.
Ser un servicio fiable implica asegurar que la información llegue a destino correctamente, en
orden, sin pérdidas ni datos corrompidos. Existen 3 elementos principales en la transmisión
y retransmisión de un emisor TCP: la recepción de datos desde la aplicación que se
encuentra por encima, el final del tiempo marcado por el temporizador, y la recepción de un
ACK.
Tras la ocurrencia del primer evento principal, TCP recibe datos de aplicación, los
encapsula en un segmento y lo pasa a la siguiente capa. En este momento puede poner a
correr un temporizador, si es que no hay ninguno ya corriendo.
En caso de que un temporizador finalice sin la llegada de un acuse de recibo, TCP volverá a
transmitir el segmento. En este caso TCP vuelve a arrancar el temporizador.
Cuando llega un ACK, TCP compara el valor del ACK con una variable propia llamada
“BaseEnvio”, la cual representa el número de byte mas antiguo por reconocer. Como TCP
usa reconocimientos acumulados, con la llegada del ACK se pueden estar reconociendo
varios segmentos que han sido transmitidos y aún no reconocidos. En este punto, si todavía
existen segmentos no reconocidos, reinicia el timer.
Algunos protocolos ARQ muy conocidos son Stop-And-Wait, Go-Back-N y Selective Repeat.
STOP-AND-WAIT
GO-BACK-N
SELECTIVE REPEAT
Resuelve el problema de GO-BACK-N de tener que retransmitir
paquetes que han llegado correctamente de manera
innecesaria (si la ventana en GBN es muy grande, un simple
error causa la retransmisión de un gran número de paquetes).
Para esto, va a requerir un reconocimiento por cada paquete
que llega correctamente, en lugar de usar ACK acumulativos. A
su vez, usa buffers en los cuales la información puede ser
almacenada hasta ser leída por la aplicación. Utiliza pipelining.
UDP
Es el protocolo de capa de transporte mas elemental. Cumple con la tarea básica de lograr
la comunicación lógica entre procesos anteriormente descrita (lo hace con la multiplexación
y demultiplexación), y se asegura de brindar la posibilidad (a la aplicación) de realizar un
chequeo de errores. Podemos afirmar entonces que UDP no añade prácticamente nada a
IP.
Características destacables:
- Se dice que UDP es un servicio sin conexión, debido a que no hay acuerdo entre los
host previo al envío del segmento. Muchos servicios, como DNS ven esto como una
ventaja en performance, y por eso deciden utilizarlo.
- No es un servicio confiable. No garantiza que los paquetes lleguen en orden, no
corrompidos, ni tampoco garantiza que efectivamente lleguen. Esto hace además
que se lo considere un protocolo sin estado, y la razón mas especifica es que como
no proporciona ninguno de los servicios previamente dichos, no requiere almacenar
variables en ninguno de los host que participan en la comunicación. Por esta razón,
UDP puede soportar mas clientes activos que los servidores TCP.
- Tiene poca sobrecarga en la cabecera. Al añadir poca información (puertos origen y
destino, longitud y checksum), la cabecera UDP pesa solo 8 bytes.
- Mas control a nivel de aplicación sobre cuándo y qué datos son enviados. Al no
proporcionar mecanismos de retransmisión en caso de error, y otros servicios
ofrecidos por TCP, el resultado es que la aplicación tiene el control total de la
información que viaja por la red. Esto es por que el protocolo UDP no toma
decisiones sobre información a enviar: lo único que UDP envía a la red es lo que la
aplicación dejó en la capa de aplicación.
Las aplicaciones de tiempo real se basan en esas características para elegir a UDP como
protocolo a utilizar de la capa de transporte. Esto es porque por ejemplo, no es relevante
retransmitir un píxel en una conversación por videollamada, para un cuadro de video que ya
fué transmitido. Es decir, las aplicaciones que requieren mayor velocidad y soportan cierta
pérdida, eligen UDP por su performance superior.
Las conexiones multicast utilizan UDP, ya que no es un servicio punto a punto, ni tampoco
orientado a la conexión.
TCP
Una conexión TCP proporciona una conexión full-duplex, lo cual quiere decir que dados dos
host A y B que tienen una conexión TCP establecida, los datos pueden viajar de A a B, o de
B a A. La conexión es punto a punto.
- Paso 1. Un cliente TCP comienza el enlace de tres vías enviando un segmento con
el señalizador de control SYN (Sincronizar números de secuencia) establecido,
indicando un valor inicial en el campo de número de secuencia del encabezado. Este
valor inicial para el número de secuencia, conocido como número de secuencia
inicial (ISN), se elige de manera aleatoria y se utiliza para comenzar a rastrear el
flujo de datos desde el cliente al servidor para esta sesión. Este segmento no tiene
carga útil.
- Paso 2. El servidor TCP necesita reconocer la recepción del segmento SYN del
cliente para establecer la sesión de cliente a servidor. Para hacerlo, el servidor envía
un segmento al cliente con el señalizador ACK establecido indicando que el número
de acuse de recibo es significativo. El valor del campo número de acuse de recibo
contiene uno más que el número de secuencia inicial (es decir, ACK = SEQ_SV + 1)
recibido del cliente. Con este señalizador establecido en el segmento, el cliente
interpreta esto como acuse de recibo de que el servidor ha recibido el SYN del
cliente TCP. El servidor manda su propio SYN. Este segmento no tiene carga útil.
- Paso 3. Por último, el cliente TCP responde con un segmento que contiene un ACK
que actúa como respuesta al SYN de TCP enviado por el servidor. Pueden no existir
datos de usuario en este segmento. El valor del campo número de acuse de recibo
contiene uno más que el número de secuencia inicial (es decir, ACK = SEQ_SV + 1)
recibido del servidor. Una vez establecidas ambas sesiones entre el cliente y el
servidor, todos los segmentos adicionales que se intercambien en la comunicación
tendrán establecido el señalizador ACK. Este segmento podría tener carga útil.
Además de establecer variables de estado durante el saludo de tres vías, TCP destina
buffers. Luego, por ejemplo, el buffer de salida es usado cuando la capa de aplicación deja
datos que deben salir a la red en su socket: TCP toma los datos y los deja en el buffer de
salida. Luego, de tiempo en tiempo, TCP toma trozos de información del buffer para
encapsularlos y enviarlos. La cantidad máxima de datos que puede ser tomada y colocada
en un segmento está limitada por el MSS (máximo tamaño del segmento, haciendo
referencia solo a los datos (no a la cabecera)). El valor de MSS depende de la
implementación de TCP.
Los segmentos pasan hacia abajo en la capa de red, donde son encapsulados por
datagramas IP.
Cuando llega un segmento del otro extremo, los datos son depositados en el buffer de
recepción de la conexión. La aplicación lee el flujo de datos desde este buffer.
Los campos puerto origen y destino identifican a los puntos terminales locales de la
conexión. El campo longitud de cabecera indica la cantidad de palabras de 32 bits
contenidas en el header TCP. Esta información es necesaria porque el campo opciones es
de longitud variable y por ende, la cabecera es de longitud variable. Los 6 flags son:
- URG: vale 1 cuando hay datos urgentes. Está asociado con el “Urg data pointer”, el
cual indica un desplazamiento hasta el comienzo de los datos urgentes.
- SYN: es el flag que se usa en el establecimiento de la conexión.
- ACK: se usa para indicar que el campo de acuse de recibo es válido.
- FYN: se usa para liberar una conexión, especificando que el transmisor no tiene mas
información que transmitir. Aún después de usar este flag, la conexión puede quedar
abierta para que, quien mandó FYN, pueda seguir recibiendo información.
- PSH: indica datos empujados. Se solicita atentamente al receptor que por favor pase
de inmediato el segmento a la aplicación. Se usa en conjunto con URG.
- RST: se usa para restablecer la conexión que se ha confundido debido a caída de
host u otra razón. También se usa para rechazar segmentos no válidos. Por último,
cuando un emisor envía un mensaje con TCP hacia un puerto que no está
escuchando, recibirá un segmento con este flag puesto a 1.
El tamaño de ventana indica cuántos bytes se pueden mandar después del byte de acuse
de recibo. El valor 0 es legal.
El checksum es una suma de comprobación similar a UDP.
Los campos “sequence number” y “acknowledgement number” (indica próximo byte
esperado) desempeñan su función normal.
CONTROL DE FLUJO
TCP proporciona el control de flujo haciendo que el emisor mantenga una variable llamada
“VentanaRecepcion”, la cual representa la cantidad de espacio disponible en el buffer del
receptor. Recordar que la conexión es full duplex y por ende, ambos lados de la conexión
disponen de esta variable para este fin.
La idea entonces es que, como TCP tiene que, al menos, confirmar los datos que le han
llegado de manera correcta realice un cálculo del espacio disponible de su ventana de
recepción y se la informe al host emisor.
Dicho cálculo se realiza usando las variables “UltimoByteLeido” y “UltimoByteRecibido”,
donde la primera hace referencia a datos ya leídos por la aplicación y la segunda se refiere
al último byte que ha llegado.
Notar que: UltimoByteRecibido - UltimoByteLeido <= BufferRecepcion. En este caso el
buffer no será desbordado.
El valor de la ventana será:
VentanaRecepcion = BufferRecepcion - (UltimoByteRecibido - UltimoByteLeido).
Como dijimos, el valor de ventana de recepción será enviado al emisor. Pero el emisor
también tiene que hacer cálculos, los cuales son justamente para no desbordar el buffer.
Para esto, el emisor cuenta con las variables “UltimoByteEnviado” y
“UltimoByteReconocido”, cuyos usos son obvios por sus nombres.
La idea es que UltimoByteEnviado - UltimoByteReconocido <= VentanaRecepcion.
Vale aclarar que siempre el receptor puede hacer disminuir o incrementar el valor de
VentanaRecepcion.
Puede darse el caso de que la ventana de recepción sea 0. En tal caso, el emisor no podría
enviar más información al receptor. Pero dado esto, podría darse el caso que el emisor
tenga mas información para enviar, y como el receptor no tiene ningún paquete que
enviarle, nunca se entere que el valor de VentanaRecepcion cambió. Por esto, TCP exige al
emisor seguir enviando segmentos al receptor. El segmento enviado será de 1 byte de
cuerpo, y la idea es que sea descartado por el receptor hasta que haya espacio en el buffer
y pueda recibir dicho segmento. Una vez que lo puede recibir, va a enviar un ACK por dicho
segmento, y con un valor de ventana actualizado, lo cual va a provocar que el emisor pueda
seguir enviando los datos que habían quedado pendientes.
Cada emisor limita la tasa a la que envía tráfico en su conexión en función de la congestión
de red que percibe. Si un emisor ve que existe poca congestión entre él y el destino, puede
incrementar su tasa de emisión. Por el contrario, si el emisor vé que hay congestión, debe
disminuir su tasa de emisión.
Para esto, además de las variables descritas que usa TCP para control de flujo, usa una
variable llamada “VentanaCongestion”, donde la idea de la misma es imponer una
restricción sobre la tasa de emisión de TCP.
ARRANQUE LENTO
Inicialmente TCP restringe la cantidad de información que puede enviar por cada RTT a
1MSS. Es decir, VentanaCongestion = 1 MSS. La idea es que con cada RTT que pase, el
valor de VentanaCongestion se vaya duplicando por cada RTT. Vale aclarar, que el RTT se
da entre el envío de un segmento, y la recepción de su respectivo ACK.
Este crecimiento exponencial puede frenar por tres motivos:
1. Si se produce una pérdida de paquete, señalado por un fin de temporización, se
establece la ventana en 1 MSS y se vuelve a iniciar la fase de arranque lento.
También se define una segunda variable llamada umbral, cuyo valor será setteado
como umbral = VentanaCongestion / 2. Es decir, el valor de umbral será igual al
valor anterior de VentanaCongestion, para la cual no hubo pérdida de paquete.
2. Si el valor de VentanaCongestion llega a ser igual a umbral, se pasa al modo de
“evitación de la congestión”.
3. Si se reciben 3 ACK duplicados, TCP resuelve esto con una retransmisión rápida y
entra en “recuperación rápida”. El valor de umbral pasa a ser VentanaCongestion/2,
y VentanaCongestion = umbral + 3.
EVITACIÓN DE LA CONGESTIÓN
En este estado, en lugar de duplicar el valor de VentanaCongestion por cada RTT, lo que se
hace es aumentar en 1 el valor de la ventana por cada RTT.
El crecimiento lineal debe terminar cuando:
1. Se produce una pérdida de paquete, indicada por un fin de temporización. En este
caso se establece el valor de la ventana en 1 MSS, el valor de umbral =
VentanaCongestion / 2, y se pasa a “arranque lento”.
2. Si se reciben 3 ACK duplicados, TCP realiza una retransmisión rápida y entra en
“recuperación rápida”. El valor de umbral pasa a ser VentanaCongestion/2, y
VentanaCongestion = umbral + 3.
RECUPERACIÓN RÁPIDA
En esta fase, TCP aumenta en 1 MSS por cada ACK duplicado del paquete que obligó a
TCP a entrar en este estado. Se sale de este modo si:
1. Llega un ACK para el paquete que se había perdido. En este caso, se pasa a
“evitación de la congestión”.
2. Si se produce un fin de temporización, se pasa al modo de “arranque lento”. umbral
= VentanaCongestion / 2 y VentanaCongestion = 1 MSS.
CIERRE DE CONEXIÓN TCP
Además de establecer conexión para enviar los datos, después hay que cerrar la conexión.
Para esto, en lugar de usar los flags SYN / ACK, se usan los flags FIN / ACK. FIN y SYN no
llevan datos. A modo de reconocimiento se toma como si fuera un byte.
Podemos observar que en este caso también se utiliza el flag ACK para confirmar.
Es importante aclarar que la conexión es full-duplex y por ende debe cerrarse de ambos
lados. Por ende, podemos decir que cada lado tiene que hacer una “half-close” (media
finalización). Si un proceso cierra la conexión, aún puede seguir recibiendo información, lo
cual justamente se usa para cerrar la sesión del otro lado también. Cuando el otro lado
envíe una señal de FIN, la conexión se cerrará totalmente.
El fin lo puede arrancar tanto el sv como el cliente. Si el cliente manda FIN, cuando llega el
mensaje, la capa de transporte lo desempaqueta, ve que hay un pedido de cierre de
conexión, entonces pasa la información a la aplicación subyacente. Cuando la aplicación
está lista, recién ahí le dice a la capa de transporte que también solicite el fin de conexión.
Va a depender de la aplicación (que tan rápido actúe), ver si en el segundo paso se manda
solo ACK o también se manda FIN.
Un socket se lo puede ver como una interfaz entre la capa de aplicación y la capa de
transporte.
Los sockets tienen que ser programados explícitamente por el usuario. Tienen que ser
creados por el usuario. Al momento de la creación se puede asociar un puerto aleatorio (va
a ser mayor a 1024), o puede ser uno especificado por el programador (si el puerto ya está
reservado, entonces no se va a poder).
Cuando una persona crea un socket, puede crear distintos tipos de sockets: TCP y UDP.
En UDP el socket se identifica por IP del receptor y puerto destino. Hacia un mismo socket,
UDP puede recibir distintos paquetes que provienen de distintos orígenes.
En TCP un socket receptor va a estar definida tanto por IP del emisor y receptor y número
de puerto emisor y receptor. Cuando se intenta crear una conexión TCP, durante el
segundo paso del saludo de tres vías, el servidor crea un nuevo socket (un nuevo hilo) para
que este socket mantenga la conexión establecida que se está pidiendo, y el puerto que
estaba en estado “LISTEN” pueda seguir escuchando por nuevas conexiones.
La manera de trabajar de TCP resulta mucho mas “pesada” para el servidor. Sobretodo si
se establecen 10 conexiones no persistentes, donde la cantidad de sockets creados para
una comunicación, es 1 por cada objeto que se va a transmitir. Por esta razón es mucho
mejor usar conexiones persistentes.
INFORMACIÓN ADICIONAL
- Información que sirve para el control de flujo (RcvWindow o Ventana de Recepción). Que
representa el tamaño en bytes que el receptor está dispuesto a recibir sin que se produzcan
desbordamiento de buffers.
- Buffer y los tamaños de segmentos máximos (MMS) son otras de las opciones que se
pueden negociar en una conexión TCP. Este tamaño depende de la implementación de
TCP que hagan los sistemas operativos de los host que intervienen en la comunicación.
La capa de red es la tercera capa de la pila de protocolos TCP/IP. Su tarea es mover los
paquetes de host a host. Podemos afirmar que tiene dos funciones básicas:
Si bien esas son las funciones principales que podemos ver en internet, la capa de red tiene
una tercer función principal, la cual se denomina “establecimiento de llamada”. Se usa para
las redes de circuitos virtuales, y la idea es que se reserve el camino antes de que
empiecen a fluir los paquetes desde su origen a su destino.
El protocolo usado por internet es IP. Cada componente de internet que tenga capa de red,
tiene que saber trabajar con el protocolo IP. Vale aclarar que no solo los host emisor y
destino implementan dicha capa, otro elemento importante es el router (sobre quien recae la
tarea de reenviar los datagramas que llegan desde un enlace de entrada, hacia un enlace
de salida, usando su tabla de reenvío) y switches.
Así como los protocolos de capa de transporte agregan información de cabecera, donde lo
mas destacado es las direcciones de puerto, lo mas destacado de la información agregada
por IP es las direcciones IP origen y destino.
Consideremos ahora algunos de los posibles servicios que podría garantizar la capa de red:
- Entrega garantizada.
- Entrega garantizada con retardo limitado: No solo garantiza la entrega del paquete,
sino que tendrá un límite de retardo especificado de host a host.
- Entrega de los paquetes en orden.
- Ancho de banda mínimo garantizado.
- Fluctuación máxima garantizada.
- Servicios de seguridad.
Ahora, hay que afirmar que la capa de red proporciona un único servicio de mejor esfuerzo.
Esto quiere decir que la temporización no está garantizada, tampoco está garantizado que
los paquetes se reciban en el orden en que fueron enviados y tampoco se garantiza la
entrega de paquetes transmitidos.
Una red de circuito virtual se comporta al estilo de una red telefónica. Hay 3 fases:
- Establecimiento del CV: el emisor contacta con la capa de red, especifica la
dirección del receptor y espera que se establezca el CV. La capa de red determina la
ruta completa entre ambos host, lo cual suele implicar la actualización de las tablas
de ruteo de los routers del camino. También durante esta fase es que el camino
queda reservado.
- Transferencia del dato: con el camino establecido, la información fluye entre los host.
- Descarte del CV: una vez que terminó de fluir la información, ya no es necesario que
el camino siga reservado. En este momento la capa de red informa al otro extremo
de la conexión sobre el final de la conexión, y se vuelven a actualizar las tablas de
ruteo de los routers del camino.
Vale destacar que a diferencia del establecimiento de conexión TCP, en el caso de los CV,
los routers son conscientes de la existencia la conexión. Los mensajes enviados para el
establecimiento o cierre de conexión se denominan “mensajes de señalización”.
Por otro lado, con una red de datagramas, cada vez que un host desea enviar un paquete a
un host destino, tiene que establecer la dirección destino y depositarlo en la red, sin
necesidad de establecer ningún tipo de conexión previa. Los routers no guardan ningún tipo
de información asociada al camino, sino que cada router, al recibir un paquete, debe
examinar su tabla de ruteo y decidir porque puerta de enlace lo envía. Además, en la
conmutación de paquetes los distintos paquetes que tienen un mismo origen y destino
pueden no seguir el mismo camino y es por eso que todos requieren tener la información de
destino.
Los routers utilizan la tabla de reenvío usando la coincidencia de prefijo. La idea básica es
que un router va a tener distintas redes en cada uno de sus enlaces, que básicamente son
las entradas en su tabla, y el paquete que llega va a tener una dirección destino. El router
usa esa dirección de destino y lo compara con las entradas de su tabla. En caso de
coincidencia de los primeros K bits entre alguna red directamente conectada y la dirección
destino del paquete, entonces envía el paquete por dicho enlace de salida.
Puede ser que varias entradas en la tabla tengan coincidencia en el prefijo de las
direcciones y en tal caso, se aplica la regla de coincidencia con el prefijo mas largo.
La tabla de enrutamiento crece a medida que pasan nuevos paquetes por la entrada del
router. Si la dirección de red destino era hasta el momento desconocida, se agrega una
entrada en la tabla. Vale aclarar que esta tabla está en cada puerto de entrada, en lugar de
ser una tabla general para el router. De esta forma la decisión de reenvío puede tomarse
localmente en cada puerto.
Una última aclaración sobre los routers, es que cada enlace tiene asociada un buffer de
recepción. A medida que estas colas crecen, el espacio disponible en el buffer del router
terminará agotándose y se producirá una pérdida de paquetes, debido a que al no haber
lugar disponible para almacenamiento, los mismos debe ser descartado.
Las direcciones IPv4 tienen 32 bits de longitud, lo cual nos da un total de 2^32 direcciones
IP posibles. Como se dijo antes, una parte de la dirección se puede destinar a identificar
red, y una parte a host. Para identificar qué bits son de red y qué bits son de host, se usa el
concepto de máscara de subred. La máscara indica cuántos bits se toman como dirección
de red.
Algunos protocolos de capa de enlace pueden transportar mas información que otros
(Ethernet por ejemplo puede transportar hasta 1500 bytes de datos). La cantidad de datos
que una trama de la capa de enlace puede transportar se conoce como unidad máxima de
transmisión (MTU).
Puesto que cada datagrama IP se encapsula dentro de una trama de la capa de enlace para
ir de un router al siguiente, la MTU del protocolo de la capa de enlace impone un límite
estricto a la longitud del datagrama IP. El problema de esto es que cada uno de los enlaces
existentes a lo largo de la ruta entre el emisor y el destino pueden usar diferentes protocolos
de capa de enlace, y por ende, tener MTU distintos.
Para la fragmentación, son importantes: ID, corrimiento y bit indicador de fin. Con el número
de identificación, identificamos todos los fragmentos que eran parte de un mismo
datagrama. Con el corrimiento podemos ir viendo en qué posición del datagrama IP original
encaja el fragmento. Con el bit indicador, si está puesto a 0 y los anteriores están en 1,
significa que ese fragmento es el último.
DIRECCIONAMIENTO IP Y CLASES
Inicialmente se asignaban direcciones basadas en clases a las redes. Sin embargo, esto
agotó rápidamente tanto a las redes de clase A como a las redes de clase B. También es
destacable la diferencia entre la cantidad de host direccionables entre las distintas redes, lo
cual implica que por ejemplo, para una red, una dirección de red de clase C puede ser
chica, pero una de clase B puede ser extremadamente grande, desperdiciando así muchas
direcciones.
MOTIVACIÓN PARA SUBNETTING
Se hizo evidente que la asignación basada en clases era ineficiente para la asignación de
direcciones de red. Por ello se pensó una estrategia para reducir al mínimo el desperdicio
de direcciones IP y fue así como se creó el concepto de subnetting.
Básicamente, la división en subredes plantea que si una red de clase desperdicia muchas
direcciones IP entonces la misma sea dividida en N subredes más pequeñas que
aprovechen mejor el espacio de direccionamiento.
Con el uso de redes con clases, la máscara estaba implícita en la dirección de clase, pues
se conocía a priori los bits para red y los bits para host. Cuando se creó el concepto de
subredes también se les asoció una máscara de subred, que resultó de utilizar algunos bits
de hosts para crear subredes y de esta manera obtener varias subredes con menos hosts
cada una.
El concepto de CIDR (classless inter-domain routing) se definió en la RFC 1519 como una
estrategia para frenar algunos problemas que se habían comenzado a manifestar con el
crecimiento de Internet. Los mismos son:
- Agotamiento del espacio de direcciones de clase B.
- Crecimiento de las tablas de enrutamiento más allá de la capacidad del software y
hardware disponibles.
- Eventual agotamiento de las direcciones IP en general.
El uso típico de este protocolo es en redes donde los host se conectan y desconectan con
mucha frecuencia. A medida que los host se unen a la red y salen de ella, el servidor DHCP
necesita actualizar su lista de direcciones IP disponibles. Cada vez que un host se une a la
red, el servidor DHCP asigna una dirección arbitraria de su conjunto actual de direcciones
disponibles; cada vez que un host abandona la red, su dirección es devuelta al conjunto.
En el caso mas simple, cada subred tendrá un servidor DHCP (puede tener mas). Si no hay
ningún servidor DHCP, es necesario un agente de retransmisión DHCP (normalmente el
router) que conozca la dirección de un servidor DHCP para dicha red.
El cliente tiene asignada ahora la dirección IP en cuestión. Antes de que el tiempo se venza,
puede solicitar una extensión de este tiempo.
El problema es que las direcciones IPv4 se están agotando, y como parte de la solución a
este problema, se puede usar NAT. ¿Para qué sirve?
Entonces, el router NAT oculta los detalles de la red doméstica al mundo exterior.
Vale aclarar, que el router NAT obtiene su dirección del servidor DHCP y a su vez, la red
privada obtiene sus direcciones gracias a que el router NAT ejecuta un servidor DHCP.
La RFC 1918 se relaciona con NAT, porque NAT permite transformar direcciones privadas
en públicas. Esta RFC especifica rangos de direcciones privadas por clases (IPv4):
PROTOCOLO DE MENSAJES DE CONTROL EN INTERNET (ICMP)
ICMP suele considerarse parte de IP, pero arquitectónicamente se halla justo sobre IP,
dado que los paquetes ICMP viajan en el interior de los paquetes IP. Cuando un host recibe
un paquete IP donde se especifica ICMP como protocolo de capa superior, este
demultiplexa el paquete a ICMP, de la misma forma que demultiplexaría un paquete a TCP
o UDP.
Los mensajes ICMP tienen un campo tipo y un campo de código. También cuentan con los
8 primeros bytes del datagrama IP que provocó el envío del mensaje ICMP en primer lugar.
Con el comando traceroute podemos trazar una ruta desde un host a cualquier otro host del
mundo. Usa UDP, y un número de puerto destino poco probable. La idea es usar el TTL, el
cual nos indica la cantidad de saltos que puede realizar un paquete. El cliente enviará
muchos paquetes, cada cual con un valor de TTL mayor al anterior, con la idea de que el
paquete esté un paso mas cerca del destino. Cada vez que el paquete pasa por un router,
el router decrementa el valor de TTL. Si llega a 0, entonces el router descarta el datagrama
y envía un mensaje al cliente con un mensaje ICMP tipo 11, código 0. Cuando el paquete
llegue a destino, tendrá su TTL en 0, y es esperable que el puerto destino no coincida con
un puerto UDP en estado Listen. En ese caso, el host destino enviará un mensaje ICMP tipo
3, código 3, y el host cliente sabrá que efectivamente el paquete llegó a destino.
IPv6
En el documento RFC 4443 se ha definido una nueva versión de ICMP para IPv6. Además de
reorganizar las definiciones de tipos y códigos ICMP existentes, ICMPv6 también añadió nuevos tipos
y códigos requeridos por la nueva funcionalidad de IPv6, entre los que se incluyen el tipo “Paquete
demasiado grande” y el código de error “Opciones IPv6 no reconocidas”. Además, ICMPv6 incluye la
funcionalidad del Protocolo de gestión de grupos de Internet (IGMP, Internet Group Management
Protocol) que se emplea para gestionar el modo en que un host se une a un grupo de multidifusión y
lo abandona, anteriormente era un protocolo separado de ICMP en IPv4.
RUTEO EN INTERNET
El ruteo se refiere a la tarea de la red de determinar un camino entre un par de host que
quieren comunicarse.
- Los algoritmos estáticos son aquellos donde las rutas cambian muy lentamente en el
tiempo. A menudo el cambio es por intervención humana.
- Los algoritmos dinámicos son aquellos que pueden responder al estado actual de la
red, cambios en la topología, y cambios en los costes de los enlaces. Si bien son
mejores que los estáticos en el sentido de resolución de problemas que se puedan
presentar, tienen problemas de bucles de rutado y oscilación entre rutas.
Algoritmo de ruteo global, en donde la topología de la red y el coste de todos los enlaces
son conocidos. Esto se logra haciendo que nada nodo difunda paquetes del estado de los
enlaces a todos los demás nodos de la red, con cada paquete de estado de enlace
conteniendo las entidades y los
costes de sus enlaces conectados.
Este algoritmo también se
denomina algoritmo de Dijkstra.
Básicamente calcula la ruta de
coste mínimo desde un nodo a
todos los demás nodos de la red.
Es iterativo y tiene la propiedad de
que después de la k-ésima iteración
del algoritmo, se conocen las rutas
de coste mínimo hacia k nodos de
destino y entre las rutas de coste
mínimo a todo los nodos de destino,
estas k rutas tendrán los k costes
mas pequeños. La complejidad de
este algoritmo es de O(n^2).
ALGORITMO DE VECTOR
DISTANCIAS
Es un algoritmo de ruteo descentralizado. Es distribuido porque ningún nodo tiene
conocimientos de toda la red y en su lugar, recibe cierta información de uno o mas vecinos.
Es iterativo porque este proceso continúa hasta que no se intercambia mas información
entre los vecinos, y es asíncrono porque no precisa que los nodos operen al unísono.
La estructura de datos de este algoritmo es la tabla de distancias, que se mantiene en cada
nodo. La tabla dispone de una fila para cada destino de la red y de una columna para cada
uno de sus vecinos. Básicamente, cada nodo debe conocer el coste del camino hacia sus
vecinos. Una vez que lo conoce, debe informar a los demás. También debe aceptar la
información de los demás nodos y actualizar su tabla de caminos mínimos si es necesario.
Un SA realiza su propia gestión del tráfico que interno, y del que fluye hacia otros sistemas
autónomos.
Todos los routers que forman parte del mismo sistema autónomo ejecutan el mismo
algoritmo de ruteo y tienen información de los otros routers. Los algoritmos de ruteo internos
son conocidos como Intra-Autónomo. Los algoritmos de ruteo entre sistemas autónomos se
denominan Inter-Autónomo.
Los SA permiten el ruteo jerárquico, lo cual significa que una dirección IP puede ser dividida
en dos partes: una dirección de red, y una dirección de host (dos niveles de jerarquía de
ruteo). Los gateways usan únicamente la parte de red hasta que un datagrama IP llega a un
gateway que puede entregar el paquete directamente al host. También permiten subredes,
lo cual agrega mas niveles a la jerarquía de ruteo.
Cada SA se conecta a un router de borde que los conecta a otros. Para la conexión entre
sistemas autónomos se suele usar algún algoritmo EGP (Exterior Gateway Protocol).
También es posible que un router pida información a su vecino sobre el coste hacia cierto
destino, mediante un mensaje de petición RIP.
OSPF fue pensado para ser el sucesor de RIP y por eso tiene varias características
avanzadas.
Es un protocolo de estado de enlaces, en el cual la información fluye y los caminos
mínimos son decididos gracias al algoritmo de Dijkstra. Al usar este algoritmo, cada nodo
necesita crear un grafo del sistema autónomo completo. Cada red entonces va a usar
Dijkstra para hacer un árbol de caminos mínimos hacia todas las redes del SA, que va a
usar después para su tabla de caminos mínimos.
El administrador de la red puede decidir cómo manejar el peso de los enlaces: puede decidir
por ejemplo poner todos a 1, y que el coste del camino sea igual al número de saltos.
Cada router difunde información a todos los nodos de la red cuando quiere que haya algún
cambio (por ejemplo, un cambio de coste). Los mensajes OSPF van sobre IP, que envuelve
un paquete OSPF, lo cual nos indica que este algoritmo tiene también su propio protocolo
de transmisión de información que debe asegurarse de lograr una transferencia de datos
fiable.
Algunos avances de OSPF son:
- Seguridad en todos los intercambios de información. Solo los routers fiables van a
poder acceder a la información enviada por OSPF, gracias a un sistema de
autenticación.
- Múltiples caminos con el mismo coste. Se refiere a que cuando hay varios caminos
con el mismo coste, OSPF elegirá al azar, con el fin de no sobrecargar una zona de
la red.
- Soporte integrado para rutado por unidifusión o multidifusión.
- Soporte en la jerarquía de un único dominio de rutado.
Los SA se pueden configurar en áreas. Cada área puede ejecutar su propio algoritmo de
estado de enlaces OSPF, donde cada router difunde su estado de enlaces al resto de los
routers de esa área. Los detalles internos de cada área son invisibles desde afuera. El
rutado intra-área involucra solo a aquellos routers de la misma área.
Además, el SA configura un área como “Área troncal”, cuya función primordial es enrutar el
tráfico entre el resto de las áreas del SA.
INFORMACIÓN ADICIONAL
Una computadora puede calcular su dirección IPv6 a partir de su MAC (No usa protocolo ARP)
Para convertir las MAC en IPv6, se usa el proceso EUI-64, el cual consta de los siguientes pasos:
Las MAC tienen 48 bits. Los primeros 24 son OUI (identificador único de organización), y los
últimos 24 son identificador de dispositivo.
Para multicast, los cuatros bits menos significativos del segundo octeto de una dirección multicast
(ff0X::) identifican el ámbito, es decir, hasta dónde se propaga el tráfico multicast. Los ámbitos
definidos actualmente son:
La idea será que cada host pueda autoconfigurar su dirección IPv6 sin usar DHCP. Para esto,
usando EUI-64 genera los 64 bits menos significativos de su dirección IP, y usar la dirección de red
(enviada periódicamente por el router) como 64 bits mas significativos. La unión, me genera una
dirección IPv6 de 128 bits.
TABLAS DE ENRUTAMIENTO
Los routers tienen mas de una interfaz de salida, las cuales van a estar conectadas a una red. A su
vez, esta red puede tener dispositivos como hub o switches, los cuales a su vez pueden tener
distintas redes conectadas.
Los routers tienen tablas de enrutamiento, las cuales contienen la información necesaria para que el
router tome las decisiones de reenvío de paquetes hacia la red de destino, utilizando la información
de asociación entre la red y el siguiente salto. Esta tabla está en la memoria RAM del router.
En la tabla se ponen las redes conectadas directamente, y las formas de llegar a otras redes. Lo que
hacemos en la práctica es enrutamiento estático.
El enrutamiento estático es viable cuando hay pocas máquinas en la red. Cualquier cambio requiere
intervención humana.
El enrutamiento dinámico se usa para grandes redes. A priori, no requiere intervención humana.
Las máquinas conectadas a redes tienen tablas de ruteo (aunque no tengan acceso a internet, ya
que deben comunicarse con los demás nodos de la red), las cuales tienen al menos dos entradas:
- Entrada con un destino 0.0.0.0 y un gateway en particular, que indica a donde mando los
paquetes cuando el destino no está en mi tabla de ruteo.
- Entrada con un destino particular y el gateway 0.0.0.0, que indica que ya estoy en la red con
la cual me quiero comunicar.
Al analizar la capa de enlace, nos encontramos con que hay dos tipos de canales
fundamentalmente distintos de la capa de enlace. El primer tipo está compuesto por los
canales de difusión. En un canal de difusión hay muchos hosts conectados a un mismo
canal de comunicaciones, por lo que se hace necesario utilizar lo que se denomina un
protocolo de acceso al medio para coordinar las transmisiones y evitar que las tramas
transmitidas colisionen. El segundo tipo de canal de la capa de enlace es el canal de
comunicaciones punto a punto, como el que existe entre dos routers o entre un módem de
acceso telefónico residencial y el router de un ISP. La coordinación del acceso a un enlace
punto a punto es trivial, pero sigue habiendo problemas importantes relativos al entramado,
a la transferencia de datos fiable, a la detección de errores y al control de flujo.
Los posibles servicios que puede ofrecer un protocolo de capa de enlace son:
Como puede verse, muchos de los servicios posiblemente proporcionados por la capa de
enlace son similares a los proporcionados por TCP.
Si la capa de enlace realiza detección de errores, entonces será el controlador del emisor
quien se encargue de configurar los bits de detección de errores en la cabecera de la trama,
mientras que el controlador del receptor llevará a cabo la detección de errores. Si la capa de
enlace realiza control de flujo, entonces los controladores del emisor y del receptor
intercambian información de control de flujo de modo que el emisor envíe las tramas a una
velocidad que el receptor sea capaz de aceptar.
DETECCIÓN DE ERRORES
- SUMA DE COMPROBACIÓN
- BITS DE PARIDAD
Los códigos de paridad se usan en telecomunicaciones para detectar, y en algunos casos
corregir, errores en la transmisión. Para ellos se añade en origen un bit extra llamado bit de
paridad a los n bits que forman el carácter original.
Este valor del bit de paridad se determina de forma que el número total de bits 1 a transmitir
sea par (código de paridad par) o impar (código de paridad impar).
Así, para el código de paridad par, el número de unos contando el caracter original y el
bit de paridad tiene que ser par. Por lo tanto, el bit de paridad PAR será un 0 si el número
total de unos a transmitir es par y un 1 para un número impar de unos.
Por el contrario, para el código de paridad impar, el número de unos contando el
caracter original y el bit de paridad ha de ser impar. De esta forma, el bit de paridad
IMPAR será un 0 si el número total de unos es impar y un 1 para un número par de unos.
Normalmente el bit de paridad se añade a la izquierda del caracter original.
- DETECCIÓN DE REDUNDANCIA CÍCLICA
Idea: enviar los datos originales más un FCS que me permita decir si los datos
llegaron correctamente. Se supone que antes de la transferencia tanto el receptor como el
emisor deben pactar cuál será el Generador, secuencia de bits que se usará para dividir el
msj y comprobar.
Para enviar:
1. Se obtiene la longitud del FCS, será la longitud del Generador menos 1
2. Se le agregan tantos ceros como sea la longitud del FCS al final del msj a transmitir
3. Se divide esa nueva secuencia de bits con los ceros agregados POR el Generador,
haciendo esta operación en módulo a 2, por lo que no interesan los carries al restar
y se usa XOR en la resta (da 1 cuando los bits que se están operando son distintos,
y 0 cuando son iguales)
4. Se obtiene el resto de esa división, el cual serà el FCS.
5. Se envían los datos originales reemplazando los ceros concatenados anteriormente
por el FCS.
Dado que existen tanto las direcciones de la capa de red como las direcciones de la capa
de enlace, surge la necesidad de una traducción entre ellas. Cada host y cada router de una
red LAN tienen un módulo ARP.
ARP resuelve una dirección IP en una dirección LAN (o también llamada MAC). Es
importante aclarar que el módulo ARP solo resuelve direcciones IP para los nodos de una
misma LAN. Si un módulo ARP en Buenos Aires intentara solucionar una dirección de
Córdoba, el módulo ARP devolvería error.
El módulo ARP de cada nodo tiene una tabla ARP en su memoria RAM, la cual tiene una
relación entre dirección IP, dirección MAC y un TTL asociado que indica cuando la entrada
será borrada de la tabla. Un tiempo de espera típico son 20 minutos.
La tabla se irá llenando con este tipo de relaciones IP - MAC a medida que fluyan tramas
entre el nodo dueño de la tabla en cuestión. Es decir, la tabla puede no tener registros para
host de la misma red.
1. Cuando 2 hosts están en la misma red y uno quiere enviar un paquete a otro.
2. Cuando 2 host están sobre redes diferentes y deben usar un gateway/router para
alcanzar otro host.
3. Cuando un router necesita enviar un paquete a un host a través de otro router.
4. Cuando un router necesita enviar un paquete a un host de la misma red.
Existen dos casos distintos de uso del protocolo ARP cuando la MAC no se encuentra en la
tabla:
- El primer caso es cuando un host se quiere comunicar con otro de la misma LAN,
pero no tiene en su tabla ARP la relación entre IP - MAC del receptor. En este caso
se averigua la MAC con una consulta ARP al broadcast físico indicando la IP, y el
adaptador que reconoce la IP destino responde (de forma unicast) con su MAC, que
es agregada a la tabla del emisor.
- El segundo caso es cuando se quiere enviar un paquete fuera de la red. En este
caso se envía el frame al gateway, que luego continúa retransmitiéndolo. El
datagrama en el interior del frame contiene la IP del destino, pero el frame contiene
la MAC del gateway (si no la conoce, utiliza ARP para solicitarla). Al enviarse el
frame, es recibido por el router, sube a su capa de red y al ver una IP destino distinta
de la suya, vuelve a bajar a enlace para ser retransmitida al próximo router que
corresponda según la tabla de ruteo. Eventualmente un router conocerá al equipo
destino, y le enviará el datagrama con la MAC correcta -si no la conoce, utiliza ARP-.
Primero, el host de origen compara (AND) su propia dirección IP con su propia máscara de
subred. El resultado de ANDing es la identificación de la red en la que reside el host de
origen. Entonces compara las direcciones IP de destino con su propia máscara de subred.
El resultado del segundo ANDing será la red en la que está el host de destino. Si la
dirección de la red de origen y la dirección de la red de destino son iguales, se pueden
comunicar directamente. Si los resultados son distintos, están en diferentes redes o
subredes, y necesitarán comunicarse a través de routers, o puede que no sean capaces de
comunicarse.
Las máquinas en una red Ethernet se identifican con su número de MAC, que es único por
adaptador. Estas direcciones son de 48 bits de longitud, donde los 3 bytes mas
significativos son para identificar al fabricante, y los 3 bytes menos significativos son para
identificar la placa. Vale aclarar que esta dirección es única, y es portable (es decir, aunque
el equipo cambie de red, su dirección MAC será la misma, a diferencia de IP).
- Particionado de canal.
- Protocolos de arbitraje. Divide el canal en pequeñas piezas. Luego asigna
cada pieza a un nodo para su uso exclusivo. Es una estrategia estática y es
equitativo.
- Acceso randómico/aleatorio.
- El canal no se divide sino que un nodo puede usarlo y transmitir a toda
velocidad. No existe, a priori, coordinación entre nodos y por ende permite
colisiones. Es necesario recuperarse de las colisiones. Estrategia dinámica.
Los protocolos de acceso randómico especifican cómo detectar colisiones y
como recuperarse. Ejemplos claros son ALOHA, CSMA, CSMA/CD.
- Toma de turnos.
- Los nodos toman turnos, pero los nodos con mas tramas para enviar podrían
tomar turnos más largos. Es una estrategia dinámica. Estrategias de reserva
o centralizada. Intenta tomar lo mejor de “particionado de canal” y de “acceso
randómico”. Dos ejemplos son Token-Passing (un canal compartido, y un
nodo puede transmitir datos cuando tiene el token. La idea es que los nodos
de la red formen un anillo circular donde el “token” va cambiando de
poseedor, y cada nodo puede elegir usarlo para transmitir información, o
pasarlo al siguiente nodo si no desea transmitir información.), y el otro
ejemplo es Maestro Esclavo (hay un maestro que indica los turnos a los
esclavos).
Como se dijo anteriormente, las máquinas en una red Ethernet se identifican por su número
de MAC.
Ethernet se suele utilizar en una red LAN cableada. Se comporta como un medio
compartido, es decir, un solo dispositivo puede transmitir con éxito por vez, y cada uno es
responsable de la detección de colisiones y de la retransmisión. Si dos nodos transmiten a
la vez, habrá una colisión de la que deben recuperarse. Para evitarlo, deben coordinarse.
Una colisión es una situación que se da en la que dos tramas “chocan” y la información se
mezcla, de manera que ningún receptor puede utilizar la información que le llega.
Algoritmo CSMA/CD:
Los nodos de una LAN Ethernet están interconectados por un canal de difusión, por lo que
cuando un adaptador transmite un marco, todos los adaptadores de la LAN reciben el
marco. Ethernet utiliza un algoritmo de acceso múltiple CSMA/CD.
Vale aclarar, que CSMA es muy similar a CSMA/CD. La diferencia entre ambos es que
CSMA/CD detecta mientras transmite, a ver si recibe una señal por parte de otro nodo y en
tal caso, para de transmitir y envía a los demás nodos de esta situación, para que los
demás también paren de transmitir. Luego, espera un tiempo random para volver a
transmitir el paquete. En CSMA, esto no se da.
TRAMA ETHERNET
El preámbulo indica el inicio de la trama y tienen el objeto de que el dispositivo que lo recibe
detecte una nueva trama y se sincronicen los relojes
El “Tipo” indica qué protocolo de capa de red se está utilizando (no siempre se usa IP).
Ethernet no es un servicio confiable. No es orientado a la conexión, y si bien detecta
errores, no puede retransmitir.
Un dominio de colisión es un segmento físico de una red donde es posible que las tramas
puedan "colisionar" (interferir) con otros.
A medida que aumenta el número de nodos que pueden transmitir en un segmento de red,
aumentan las posibilidades de que dos de ellos transmitan a la vez. Esta transmisión
simultánea ocasiona una interferencia entre las señales de ambos nodos, que se conoce
como colisión. Conforme aumenta el número de colisiones disminuye el rendimiento de la
red.
(Las tablas de switches tienen dos campos, dirección MAC de la PC y PUERTO que me
comunica con dicha PC. Las entradas se van a ir llenando cuando fluya el tráfico ARP. Para
esto es que nos sirve saber de qué capa es cada dispositivo, nos permite saber con qué
datos trabaja.)
De forma más específica, es un área de una red de computadoras, formada por todas las
computadoras y dispositivos de red que se pueden alcanzar enviando una trama a la
dirección de difusión de la capa de enlace de datos.
Dispositivo Capa
Básicamente es repetidor. Por cada bit que recibe por cada enlace de entrada, copia la
información y reenvía la copia por los enlaces que posee. No tiene mecanismos para
prevenir colisiones.
SWITCH - BRIDGE
Son dispositivos un poco mas inteligentes que el hub. A partir de una trama, ambos tienen
que llevarla hacia el enlace correspondiente. Ambos cuentan con una tabla MAC con la que
hacen la asociación para decidir por que enlace reenviar el paquete. Si no tienen
información en la tabla, transmiten la información como Broadcast.