0% encontró este documento útil (0 votos)
23 vistas2 páginas

Emulación de red con NetEm en Linux

NetEm es un módulo del kernel de Linux que permite emular propiedades de una red como demora, pérdida, duplicación y reordenamiento de paquetes. Se controla a través de la herramienta tc y permite realizar pruebas de protocolos de red de forma sencilla en un solo sistema emulando el comportamiento de una red real. NetEm implementa colas internas con diferentes políticas para simular las condiciones de la red y puede configurarse para emular diversos escenarios a través de parámetros como la demora promedio y desviación estándar

Cargado por

doce12
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
23 vistas2 páginas

Emulación de red con NetEm en Linux

NetEm es un módulo del kernel de Linux que permite emular propiedades de una red como demora, pérdida, duplicación y reordenamiento de paquetes. Se controla a través de la herramienta tc y permite realizar pruebas de protocolos de red de forma sencilla en un solo sistema emulando el comportamiento de una red real. NetEm implementa colas internas con diferentes políticas para simular las condiciones de la red y puede configurarse para emular diversos escenarios a través de parámetros como la demora promedio y desviación estándar

Cargado por

doce12
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

\chapter{NetEm} \label{app:netem} A continuacin se describe el modulo NetEm \cite{NETEM} del kernel de Linux.

NetEm provee la funcionalidad de emulacin de red para realizar pruebas de protocolos, emulando las propiedad de un red WAN, Wide Area Network. La actual versin puede emular demora, perdidas, duplicacin y reordenamiento de paquetes. NetEm se controla a travs de la lnea de comando, con el comando \tc, que es parte del paquete de herramientas de iproute2 \cite{IPROUTE2}. NetEm es una mejora reciente a las funcionalidades de control de trafico de Linux. Se construye utilizando las funcionalidades existente en Linux de QoS y Servicios Diferenciados (DiffServ). La motivacin que hay detrs de NetEm es la de proveer una manera de reproducir grandes redes en un ambiente de laboratorio. Primeramente se utilizo para evaluar nuevas mejoras a TCP en Linux. Naci del cdigo de TBF y solo soportaba una demora constante, pero fue evolucionando con el tiempo y el esfuerzo de desarrolladores y usuarios. %%Una alternativa a la emulacin de red es una completa simulacin en %%un ambiente virtual. La simulacin es una aproximacin sinttica en %%el cual hay que generar un modelo de los protocolos de red a probar %%y luego aplicar datos, tambin sintticos, al modelo. Simulacin es %%ms til cuando se desarrolla un nuevo protocolo desde su inicio, %%porque es ms fcil reproducir de reproducir y no es influenciado %%por los detalles de tiempo del mundo real. El simulador NS-2 %%\cite{NS2} es el ms utilizado para investigacin de prototipos de %%nuevos protocolos. %% %%Existe una aproximacin hbrida llamada \emph{umlsim"} %%\cite{UMLSIM}, que utiliza Linux en modo usuario (UML) para proveer %%una simulacin dirigida por eventos. Esto permite probar la pila del %%protocolo TCP/IP estndar usando un pseudo-dispositivo que puede %%simular una red. Aunque es til para probar el protocolo, umlsim %%est limitado ya que al correr en modo usuario tiene un ambiente %%virtual que no tiene la misma performance or tiempos del hardware %%real. %% %%Solo hay dos emuladores, de los mucho emuladores de red que existen %%que tienen un diseo similar a NetEm, Dummynet \cite{DUMMYNET} y %%NIST Net \cite{NISTNET}. Dummynet es una parte estandar de FreeBSD %%\cite{FREEBSD} y est implementado como una parte del mecanismo de %%filtrado de paquetes. Dummynet es similar a NetEm porque ambos %%realizan filtrado de paquetes salientes, pero es autocontenido y %%dificil de extender. NIST Net es una extencin del kernel de Linux %%que provee complejas demoras, perdidas y otras opciones de %%emulacin. Como NIST Net es de dominio publico, muchas de sus %%funciones son reutilizadas en NetEm. Sin embargo, NIST Net opera en %%los paquetes entrantes antes de que lleguen a la pila del protocolo %%y utiliza hardware de alta resolucin de tiempos. Al igual que %%Dummynet, NIST Net hace su propio filtrado y encolado de paquetes. \section{Diseo} NetEm consiste de dos partes, un pequeo modulo del kernel de Linux para disciplina de colas y una herramienta, \tc, de lnea de comando para configurarlo. El modulo est integrado desde la versin 2.6.8 y 2.4.28 del kernel, y la herramienta es parte del paquete \emph{iproute2}. La comunicacin entre la herramienta y el kernel es hecha a travs de la interfase de sockets Netlink. Los pedidos son codificados en el formato estndar de mensajes que luego el kernel decodifica. La figura \ref{fig:netem_basico} muestra la arquitectura bsico de NetEm. Las disciplina de cola existen entre la salida del protocolo y el dispositivo de red. Una disciplina de cola es un objeto simple con dos interfases claves. Una encola paquetes a ser enviados y la otra entrega paquetes al dispositivo de red. Las polticas a utilizar para la entrega de paquetes al dispositivo de red est en la configuracin de la disciplina de cola. Se pueden configurar polticas complejas anidando distintas disciplinas de cola. Internamente, NetEm es una disciplina de cola con clases con colas de paquetes. Una es una cola privada de espera tipo FIFO y la otra es una disciplina de cola anidada, generalmente FIFO. La interfase de encolado toma paquetes, les asigna un Timestamp (con el tiempo de envo) y los pone en la cola de espera. Un reloj interno mueve los paquete de la cola de espera a la disciplina de cola anidada. La interfase de desencolado toma paquetes de la disciplina de cola anidada. \subsection{Parmetros} El usuario especifica los parmetros de emulacin a travs de la herramienta \tc. Sin parmetros, NetEm se comporta como una cola FIFO sin demora, perdida, duplicacin o reordenamiento de paquetes. \subsubsection{Demora} La redes de computadoras no muestran siempre la misma demora, sta varia en base a otros flujos de trafico que viajan por el mismo camino. Por esta razn, la demora se define por el valor promedio ($\mu$), desviacin estndar ($\sigma$) y correlacin ($\rho$). Por defecto NetEm utiliza una distribucin uniforme ($\mu \pm \sigma$), pero es posible utilizar otra tabla de distribucin generadas a partir de un modelo matemtico o datos experimentales. stas se pueden generar con herramientas que provee ipreoute2. Las distribuciones estndar a utilizar son uniforme, normal, pareto y paretonormal. \subsubsection{Perdida} La perdida de paquete est implementada como la eliminacin de un cierto porcentaje de paquetes al azar antes de ser encolados. Se define como un porcentaje de paquetes a perder y su correlacin. \subsubsection{Duplicacin} En redes con hardware confiable no duplican paquetes, pero con routers redundantes y hardware real la duplicacin puede ocurrir. En NetEm la duplicacin se realizar clonando un cierto porcentaje de paquetes al azar antes de ser encolados. Se define como un porcentaje de paquetes a duplicar y su correlacin. \subsubsection{Corrupcin} Ruido aleatorio en los enlaces causa que algunos paquete lleguen corruptos a su destino. NetEm puede generar un simple bit de error en el paquete para corromperlo. Se define como un porcentaje de paquetes a corromper y su correlacin. \subsubsection{Reordenamiento} Reordenamiento de paquete ocurre cuando paquetes atraviesan caminos con diferentes demoras. Algunos routers de alta velocidad usan mltiples buses y procesadores que internamente crean caminos alternativos. Los paquetes son reordenados cuando diferentes procesadores y buses tienen diferente demora. NetEm tiene dos formas posible de reordenamiento. Una forma es definiendo un \emph{gap} que acta como un agente de seguridad aleatorio, este elige $1$ de $N$ paquetes y lo demora. Otra forma es definiendo un porcentaje $X\%$ de paquetes a demorar y su correlacin. Un $X\%$ de los paquetes sern enviados inmediatamente, los restantes sufrirn la demora configurada. \section{Control de tasa} Por defecto NetEm usa una disciplina de cola FIFO para la cola saliente, sin embargo se pueden utilizar otras, como se explic en Disciplina de colas (\emph{qdiscs}). \section{Limitaciones} NetEm trabaja en un flujo simple. Sin embargo, redes reales son complejas y la emulacin no puede emular todos los casos posibles que se pueden presentar. La granularidad del reloj de Linux afecta la naturaleza de tiempo real de NetEm, la eleccin del pseudo-generador de nmeros aleatorios impacta en los resultados de la emulacin, y los dispositivos de red no siempre estn disponibles para rfaga de paquetes. Los parmetros de NetEm no son suficientes para describir complejas redes con mltiples niveles de complejidad. \subsection{Relojes} Al no ser Linux un sistema de tiempo real, esto causa que NetEm sufra ciertas restricciones. Los relojes del kernel estn limitados por el tick del sistema a 1000Hz o 1ms en Linux 2.6, o 100Hz o 10ms en Linux 2.4. Por ende, NetEm no puede emular demoras menores a 1ms. Pero este problema no lo sufre solamente NetEm, las disciplinas de control de tasa tambin lo sufren cuando corren sobre enlaces de alta velocidad. No es posible limitar una red de 10gigabit a 100mbit con precisin sin utilizar relojes de alta resolucin. %%NIST Net soluciona esta limitacin programando uno de los %%alternativos relojes disponibles en la arquitectura de la PC para %%proveer relojes de alta resolucin. Esto tiene impacto en la %%performance ya que la carga de interrupcion es alta, y no portable a %%otras arquitecturas. \subsection{Nmeros al azar} En el kernel de Linux existen varias fuentes de nmeros pseudo-azarosos, pero ninguno es idneo para una buena emulacin. La segura funcin criptogrfica de generacin de nmeros al azar \emph{get\_random\_bytes()} no puede ser utilizada duramente ya que confa en los eventos del sistema para proveer entropa. La intensin de la misma es la de proveer claves criptogrficas y se puede bloquear cuando hay poca entropa hasta que el pool de entropa se llene de nuevos eventos del sistema (bsquedas en disco, llegada de paquetes, movimientos del mouse, etc.). El cdigo de red tiene una simple funcin de nmeros al azar de 32bit, \emph{net\_random()}, implementada como un generador lineal congruente (LCG). LCG no tiles para simaulaciones porque producen patrones en la salida que pueden influenciar los resultados finales. Una mejor alternativa (que finalmente se implement) fue la utilizacin de generador Tausworthe combinado y mximamente equi-distribuido encontrado en la librera GNU Scientific Library 1.5. \subsection{Dispositivos de red} Los dispositivos de red en Linux tienen un driver de transmisin en forma de anillo que tiene una referencia a los datos disponibles para que el hardware lo procese. Este anillo tiene un tamao definido, limitado por la disponibilidad de los bloques de control de transmisin. Cuando la carga es alta, NetEm causara rfaga de paquetes hacia el dispositivo cada 1ms. El anillo de transmisin debe ser lo suficientemente grande para manejar esta rfaga de paquete o el dispositivo debe manejar el flujo correctamente. % NetEm can't simulate the real Internet. The real Internet is very complex and always changing [15] and it is impossible to create one simple model. % Therefore a better question is: how well can NetEm recreate a typical connections behavior? % This result shows that NetEm can be used for test protocols, it not does mean that NetEm is sucient to cover all types of Internet behavior. The risk is that NetEm reduces a complex multiple input system into a simplistic simulation.

% 6 Conclusion % NetEm has proved to be a useful tool for testing protocol behavior. It provides the necessary statistical options to emulate real world network response. The author developed it to validate BIC TCP and TCP Vegas for the 2.6 kernel; but many other developers are actively using for testing protocols and applications.

También podría gustarte