114
I Facultad de Contaduría y Administración “Redes Inalámbricas en Linux” MONOGRAFÍA Qué para obtener el Título de: Licenciado en Sistemas Computacionales Administrativos Presenta: Arturo Sarabia Vargas Asesor: M.C. Rubén Álvaro González Benítez Coasesor: M.E. Patricia Arieta Melgarejo Cuerpo Académico: Tecnologías de la Información y Organizaciones Inteligentes en la Sociedad del Conocimiento Xalapa-Enríquez, Veracruz Septiembre 2007 UNIVERSIDAD VERACRUZANA

Sarabia Vargas.pdf

Embed Size (px)

Citation preview

Page 1: Sarabia Vargas.pdf

I

Facultad de Contaduría y Administración

“Redes Inalámbricas en Linux”

MONOGRAFÍA

Qué para obtener el Título de:

Licenciado en Sistemas

Computacionales Administrativos

Presenta:

Arturo Sarabia Vargas

Asesor: M.C. Rubén Álvaro González Benítez

Coasesor:

M.E. Patricia Arieta Melgarejo

Cuerpo Académico: Tecnologías de la Información y

Organizaciones Inteligentes en la Sociedad del Conocimiento

Xalapa-Enríquez, Veracruz Septiembre 2007

UNIVERSIDAD VERACRUZANA

Page 2: Sarabia Vargas.pdf

II

Facultad de Contaduría y Administración

“Redes Inalámbricas en Linux”

MONOGRAFÍA

Qué para obtener el Título de:

Licenciado en Sistemas

Computacionales Administrativos

Presenta:

Arturo Sarabia Vargas

Asesor: M.C. Rubén Álvaro González Benítez

Cuerpo Académico: Tecnologías de la Información y

Organizaciones Inteligentes en la Sociedad del Conocimiento

Xalapa-Enríquez, Veracruz Septiembre 2007

UNIVERSIDAD VERACRUZANA

Page 3: Sarabia Vargas.pdf

III

Page 4: Sarabia Vargas.pdf

IV

AGRADECIMIENTOS

QUIERO AGRADECER PRINCIPALMENTE A MI MADRE POR HABERME DADO LA VIDA, BRINDARME TODO SU AMOR Y ESFUERZO PARA QUE YO LOGRARA CONCLUIR MIS SUEÑOS, POR BUSCAR SIEMPRE MI BIENESTAR, SALUD Y FELICIDAD A COSTA DE SACRIFICIOS, TE QUIERO CON TODO MI CORAZÓN MAMITA, GRACIAS.

A MI NOVIA, POR SER MI ARNÉS EN EL MOMENTO ADECUADO, DARME UNA INMENSA FELICIDAD DIA TRAS DIA Y POR SER LA PERSONA MAS NOBLE QUE CONOZCO; TE AMO CON TODO MI CORAZÓN, GRACIAS MI AMOR.

Page 5: Sarabia Vargas.pdf

V

ÍNDICE

Capítulo 1 LINUX …………………………………………………………………... 5

1.1 ETIMOLOGÍA …………………………………………………………… 6

1.2 HISTORIA …………………………………………………………… 7

1.3 DISTRIBUCIONES LINUX …………………………………………… 9

1.3.1 Comparativa de algunas distribuciones Linux ……………. 11

1.4 COMO SE INSTALAN …………………………………………………… 17

1.5 APLICACIONES DE LOS SISTEMAS LINUX ……………………………. 18

1.6 LA ESCALA DEL DESARROLLO DE "LINUX" ……………………………. 19

1.7 EN LINUX EL MERCADO ……………………………………………………. 20

1.8 GNU/LINUX COMO SISTEMA DE PROGRAMACIÓN …………….. 21

1.9 LINUX EN LA ADMINISTRACIÓN PÚBLICA ……………………………. 22

1.10 COMO USAR UN MÓDULO PROGRAMADO PARA LINUX ……………. 23

Capítulo 2 TCP/IP EN LINUX …………………………………………………… 33

2.1 TCP/IP …………………………………………………………………… 34

2.1.1 Niveles en la pila TCP/IP …………………………………………… 34

Page 6: Sarabia Vargas.pdf

VI

2.1.2 Familia de protocolos de Internet …………………………………… 37

2.2 TCP/IP LINUX …………………………………………………………… 38

2.2.1 IPv4 …………………………………………………………………… 41

2.2.2 Desperdicio de direcciones ……………………………………. 41

2.3 EL SISTEMA OPERATIVO Y LA COMUNICACIÓN …………………… 42

2.3.1 Envío TCP/IP …………………………………………………… 43

2.3.2 Recepción TCP/IP …………………………………………………… 44

2.3.3 Sockets sobre TCP/IP en Linux: Fuentes y Estructuras de Datos. 46

2.3.4 Creación de un Socket ……………………………………………. 47

2.3.5 Ubicación de las Funciones ejecutadas para enviar un mensaje a

través de Sockets en Linux …………………………………… 73

2.3.6 Convenientes e Inconvenientes de la comunicación con TCP/IP en

Linux …………………………………………………………………... 74

Capítulo 3 LAS WIRELESS LAN EN LINUX …………..…………..………….... 75

3.1 LAS WIRELESS LAN …………..…………..…………..…………..……. 76

Page 7: Sarabia Vargas.pdf

VII

3.1.1 Principios de las redes WLAN …………..…………..……………. 77

3.1.1.1 Cómo trabajan …………..…………..……………. 77

3.1.1.2 Configuraciones de red para radiofrecuencia …….. 78

3.1.1.3 Chipset …………..…………..…………..………… 79

3.2 LAS WIRELESS LAN EN LINUX …………..…………..…………..………… 79

3.2.1 Chipset Prism …………..…………..…………..………………… 79

3.2.1.1 Funcionamiento …………..…………..…………….. 80

3.2.2 Chipset Hermes …………..…………..…………..………………… 81

3.2.3 Chipset Atheros …………..…………..…………..………………... 81

3.3 EJEMPLO DE LA INSTALACIÓN DE UNA TARJETA INALAMBRICA EN

LINUX …………..…………..…………..…………..…………..………………. 82

Capítulo 4 MODIFICACIONES A UN DRIVER PARA CALIDAD DE SERVICIO.

…………..…………..…………..…………..…………..…………..…………..……… 85

4.1 STATELESS WIRELESS AD HOC NETWORKS …………………… 86

4.1.1 Resumen …………..…………..…………..……………….. 86

4.1.2 Introducción …………..…………..…………..…………… 87

4.1.3 ¿Qué son las redes Ad Hoc? …………..………………... 87

4.1.4 Retos a superar en Ad Hoc. …………..………………… 88

4.1.5 QoS en Redes Ad Hoc. …………..…………..……………. 89

4.1.6 Características de los enlaces con QoS para esquemas de

tiempo real …………..…………..…………..…………..…………………… 90

4.1.7 Servicios diferenciados (DiffServ) …………..………… 91

Page 8: Sarabia Vargas.pdf

VIII

4.1.8 Modelo SWAN: Service Differentiation in Stateless Wireless Ad

Hoc Networks …………..…………..…………..…………..….. 92

4.1.9 Hardware and Software requirement …………..………… 92

4.1.10 Metodología …………..…………..…………..…………… 93

4.1.11 Resultados y conclusiones …………..…………..…….. 94

Page 9: Sarabia Vargas.pdf

IX

ÍNDICE DE IMÁGENES

Fig. 1 Linus Torvalds, creador del kernel …………..…………..…………... 7

Fig. 2 Sharp Zaurus, un computador de bolsillo con Linux. …………..………. 10

Fig. 3 Escritorio KDE 3.4.2 corriendo sobre Gentoo Linux (2.6.13-r9) corriendo un

cliente IRC Konversation, un cliente p2p aMule y un reproductor musical Amarok.

…………..…………..…………..…………..…………..…………..…………..……… 18

Fig. 4 Richard Stallman, creador del proyecto GNU …………..…………..….... 20

Fig. 5 Procedimientos del núcleo que interaccionan …………..……………….. 31

Fig. 6 Procedimientos del núcleo que interaccionan …………..…………..….... 32

Fig. 7 Varios algoritmos de control de congestión seleccionables al compilar Linux

(versión 2.6.17.4) …………..…………..…………..…………..…………………... 39

Fig. 8 Pilas de protocolos …………..…………..…………..…………..…………... 42

Fig. 9 Pila de protocolos y la forma en que interactúan al enviar paquetes ….. 43

Fig. 10 Pila de protocolos y la forma en que interactúan al recibir paquetes … 44

Fig. 11 Pila de protocolos y módulos que los componen …………………… 45

Fig. 12 Bibliotecas que se utilizan en Linux para manejar sockets …………… 46

Fig .13 Creación de estructura de datos ………………………………………….. 47

Fig. 14 Creación de un socket ………………………………………………….. 48

Fig. 15 Creación de un socket 2 ………………………………………………….. 48

Fig. 16 Estructura de un socket ………………………………………………….. 48

Fig. 17 Estructura del protocolo de transmisión …………………………………. 49

Fig. 18 Estructura de un socket ………………………………………………….. 50

Fig. 19 Estructura compuesta por una serie de operaciones para implementar los

protocolos TCP y UDP …………………………………………………………… 51

Fig. 20 Escritura del sistema de archivos en Linux ………………………….... 52

Fig. 21 Diagrama explicativo de la interacción entre el socket, protocolo y el

sistema de archivos …………………………………………………………… 53

Fig. 22 Uso de la memoria del sistema …………………………………………… 54

Fig. 23 Estructura de envió …………………………………………………… 54

Fig. 24 Almacenamiento de punteros a funciones en un vector …………… 55

Fig. 25 Definición de la estructura de archivos a utilizar …………………… 56

Page 10: Sarabia Vargas.pdf

X

Fig. 26 Asociación del socket con el fichero …………………………………… 56

Fig. 27 Estructuras creadas a partir del socket …………………………… 57

Fig. 28 Forma de interacción entre las estructuras creadas …………………… 55

Fig. 29 Protocolo enviado con las características del paquete ……………. 58

Fig. 30 Estructura del buffer …………..…………..…………..………………. 59

Fig. 31 Estructura del buffer. …………..…………..…………..………………. 60

Fig. 32 Secuencia de envío …………..…………..…………..………………. 61

Fig. 33 Estructura del proceso de envió del mensaje …………..………………. 61

Fig. 34 Rectángulo no. 5 tcp_transmit_skb …………………………………... 62

Fig. 35 Se procede a enviar el mensaje mediante un socket …………… 63

Fig. 36 Estructura del envió del mensaje mediante un socket …………… 64

Fig. 37 Continuación de la figura 36 …………..…………..…………..………. 65

Fig. 38 Estructura en donde se toma la decisión de enviar o encolar el o los

paquetes…………..…………..…………..…………..…………..…………..……… 66

Fig. 39 Diagrama del proceso de salida del paquete …………..…………..…… 67

Fig. 40 ip_queue_xmit() …………………………………………………………... 68

Fig. 41 estructura de código en la que ip_queue_xmit() construye la cabecera IP

…………..…………..…………..…………..…………..…………..…………..……... 69

Fig. 42 La rutina dev_queue_xmit() se encarga de la transmisión del sk_buff

correspondiente a cada paquete, a través de la tarjeta de red (a través de una

llamada a su controlador …………..…………..…………..…………..………….. 70

Fig. 43 La rutina dev_queue_xmit() se encarga de la transmisión del sk_buff

correspondiente a cada paquete, a través de la tarjeta de red (a través de una

llamada a su controlador …………..…………..…………..…………..………….. 71

Fig. 44 Diagrama explicativo de la interacción …………..………………. 72

Fig. 45 Ubicación de las funciones ejecutadas para enviar un mensaje a través de

sockets en Linux …………..…………..…………..…………..…………..……… 73

Fig. 46 Metodología del modelo aplicado …………..…………..…………… 94

Fig. 47 Resultados obtenidos con el modulo admission control …………… 95

Fig. 48 Resultados obtenidos con el modulo admission control …………… 96

Fig. 49 resultados con un tráfico mayoritariamente de tiempo real …………… 96

Fig. 50 resultados con un tráfico mayoritariamente de tiempo real …………… 97

Page 11: Sarabia Vargas.pdf

XI

ÍNDICE DE TABLAS

Tabla 1. Linux …………..…………..…………..…………..…………..……… 9

Tabla 2. Comparación general de las distribuciones de Linux …………… 11

Tabla 3. Comparación técnica de las distribuciones de Linux. …………… 13

Tabla 4. Datos extras de las distribuciones de Linux. …………..……….. 15

Tabla 5. Comandos necesarios para el manejo de módulos. …………… 23

Tabla 6. Pila de protocolos modelo OSI …………………………………………... 34

Tabla 7 Una interpretación simplificada de la pila …………………………… 35

Page 12: Sarabia Vargas.pdf

1

INTRODUCCION

Page 13: Sarabia Vargas.pdf

2

Existen distintos estándares que definen distintos tipos de redes

inalámbricas. Esta variedad produce confusión en el mercado y descoordinación

en los fabricantes. Para resolver este problema, los principales vendedores de

soluciones inalámbricas (3com, Airones, Intersil, Lucent Technologies, Nokia y

Symbol Technologies) crearon en 1999 una asociación conocida como WECA

(Wireless Ethernet Compability Aliance, Alianza de Compatibilidad Ethernet

Inalámbrica) . El objetivo de esta asociación fue crear una marca que permitiese

fomentar más fácilmente la tecnología inalámbrica y asegurase la compatibilidad

de equipos.

De esta forma en abril de 2000 WECA certifica la interoperatibilidad de equipos

según la norma IEEE 802.11b bajo la marca Wi-Fi (Wíreless Fidelity, Fidelidad

Inalámbrica). Esto quiere decir que el usuario tiene la garantía de que todos los

equipos que tenga el sello Wi-Fi pueden trabajar juntos sin problemas

independientemente del fabricante de cada uno de ellos. Se puede obtener un

listado completo de equipos que tienen la cetificación Wi-Fi en Alliance - Certified

Products.

En el año 2002 eran casi 150 miembros de la asociación WECA. Como la norma

802.11b ofrece una velocidad máxima de transferencia de 11 Mbps ya existen

estándares que permiten velocidades superiores, WECA no se ha querido quedar

atrás. Por ese motivo, WECA anunció que empezaría a certificar también los

equipos IEEE 802.11a de la banda de 5 Ghz mediante la marca Wi-Fi5.

La norma IEEE.802.11 fue diseñada para sustituir a las capas físicas y MAC de la

norma 802.3 (Ethernet). Esto quiere decir que en lo único que se diferencia una

red Wi-Fi de una red Ethernet, es en la forma como los ordenadores y terminales

en general acceden a la red; el resto es idéntico. Por tanto una red local

inalámbrica 802.11 es completamente compatible con todos los servicios de las

redes locales de cable 802.3 (Ethernet).

Las Redes Inalámbricas facilitan la operación en lugares donde la computadora no

puede permanecer en un solo lugar, como en almacenes o en oficinas que se

encuentren en varios pisos.

Page 14: Sarabia Vargas.pdf

3

No se espera que las redes inalámbricas lleguen a remplazar a las redes

cableadas. Estas ofrecen velocidades de transmisión mayores que las logradas

con la tecnología inalámbrica. Mientras que las redes inalámbricas actuales

ofrecen velocidades de 54 Mbps, las redes cableadas ofrecen velocidades de 100

Mbps y se espera que alcancen velocidades de hasta 1000 Mbps. Los sistemas de

Cable de Fibra Optica logran velocidades aún mayores.

Sin embargo se pueden mezclar las redes cableadas y las inalámbricas, y de esta

manera generar una "Red Híbrida" y poder resolver los últimos metros hacia la

estación. Se puede considerar que el sistema cableado sea la parte principal y la

inalámbrica le proporcione movilidad adicional al equipo y el operador se pueda

desplazar con facilidad dentro de un almacén o una oficina.

Las redes inalámbricas en Linux son un problema; la culpa no es Linux, si no los

fabricantes que no se preocupan por lanzar drivers para este sistema. Los

empaques de los routers, y otros dispositivos inalámbricos, no especifican el chip

que utilizan, pequeño detalle que ayudaría a los usuarios Linux, pues así pueden

adquirir fácilmente un modelo con chip compatible con Linux.

Por lo tanto la finalidad de esta monografía es proporcionar la documentación

necesaria para instalar una tarjeta de red inalámbrica en Linux, que se pueda

utilizar para su análisis, posibles mejoras mediante la implementación de código

propio y poder hacer una comparación con la propuesta de calidad de servicio

proporcionada por SWAN (Stateless Wireless Ad hoc Networks) el cual es un

proyecto encaminado a las redes inalámbricas móviles proporcionando servicios

con calidad (QoS) en redes Ad Hoc o punto a punto.

Los sistemas inalámbricos se han convertido en el segmento de mayor y más

rápido crecimiento en las telecomunicaciones, donde su principal consecuencia

han sido dotar de movilidad a los nodos de la red al liberarlos de sus conexiones

físicas, además también están empezando a ofrecer múltiples servicios con

calidad (QoS) como una conversación telefónica, la transferencia de ficheros,

acceso a la web o la realización de videoconferencia, sin restricciones de lugar y

de tiempo. Estos ejemplos de comunicación inalámbrica espontánea entre

dispositivos se denomina redes Ad Hoc, permitiendo a los dispositivos establecer

Page 15: Sarabia Vargas.pdf

4

la comunicación, en cualquier momento y en cualquier lugar. En realidad, la

formación de redes Ad Hoc como tal no es nueva, sino lo es nuevo es la forma de

configuración y uso de sus elementos. Una aproximación para otorgar calidad de

servicio es la de diferenciar entre el conjunto de paquetes que circulan por la red

clasificando los paquetes en un número pequeño de tipos de servicios y utiliza

mecanismos de prioridad para proporcionar una calidad de servicio adecuada al

tráfico. Este estudio preliminar se realizo aplicando servicios diferenciados con el

modelo SWAN en el entorno del simulador ns2. SWAN es un modelo de red “sin

estados”, el cual usa algoritmos de control distribuidos para entregar servicios

diferenciados en MANET de una manera escalable y robusta. Estos algoritmos

aplican controles basados en retroalimentaciones para soportar servicios de

tiempo real “soft” y servicios diferenciados en redes inalámbricas Ad Hoc. El

modelo usa el rate control (rc) para trafico UDP y TCP best effort, y un admission

control (ac) para trafico UDP de tiempo real. SWAN aplica la notificación explicita

de congestionamiento (ECN) para regular dinámicamente trafico de tiempo real

admitido. El novedoso aspecto de este modelo es que no requiere de QoS en la

capa MAC.

Page 16: Sarabia Vargas.pdf

5

CAPITULO I

LINUX

Page 17: Sarabia Vargas.pdf

6

1.1 Etimología

Linux se refiere estrictamente al núcleo Linux, pero es comúnmente

utilizado para describir al sistema operativo tipo Unix (que implementa el estándar

POSIX), que utiliza primordialmente filosofía y metodologías libres (también

conocido como GNU/Linux) y que está formado mediante la combinación del

núcleo Linux con las bibliotecas y herramientas del proyecto GNU y de muchos

otros proyectos/grupos de software (libre o no libre). El software que suelen incluir

consta de una enorme variedad de aplicaciones, como: entornos gráficos, suites

ofimáticas, servidores web, servidores de correo, servidores FTP, etcétera.

Coloquialmente se aplica el término "Linux" a éstas. Algunas personas opinan que

es incorrecto denominarlas distribuciones Linux, y proponen llamarlas sistema

GNU/Linux. Otras personas opinan que los programas incluidos proceden de

fuentes tan variadas que proponen simplificarlo denominándolo simplemente a

"Linux".

Linux (pronunciación IPA: /lɪnʊks/) es la denominación de un sistema operativo

tipo-Unix y el nombre de un núcleo. Es uno de los paradigmas más prominentes

del software libre y del desarrollo del código abierto, cuyo código fuente está

disponible públicamente y cualquier persona puede libremente usarlo, estudiarlo,

redistribuirlo y, con los conocimientos informáticos adecuados, modificarlo.

Los primeros sistemas Linux se originaron en 1992, al combinar utilidades de

sistema y bibliotecas del proyecto GNU con el núcleo Linux, completando un

sistema también conocido como GNU/Linux. Desde fines de 1990 Linux ha

obtenido el apoyo de diversas empresas multinacionales del mundo de la

informática, tales como IBM, Sun Microsystems, Hewlett-Packard y Novell.

Linux es usado como sistema operativo en una amplia variedad de plataformas de

hardware y computadores, incluyendo los computadores de escritorio (PCs x86 y

x86-64, y Macintosh y PowerPC), servidores, supercomputadores, mainframes, y

dispositivos empotrados así como teléfonos celulares.

La marca Linux (Número de serie: 1916230) pertenece a Linus Torvalds y se

define como "un sistema operativo para computadoras que facilita su uso y

Page 18: Sarabia Vargas.pdf

7

operación". Existen grupos de usuarios del sistema Linux en casi todas las áreas

del planeta

La pronunciación correcta (para cualquier idioma) es muy cercana a como se

pronuncia en español: /lí.nux/ o /lnəks/ (Alfabeto Fonético Internacional).

1.2 Historia

Fig. 1 Linus Torvalds, creador del kernel

La historia de Linux está fuertemente vinculada a la del proyecto GNU. El

proyecto GNU, iniciado en 1983, tiene como objetivo el desarrollo de un sistema

Unix completo compuesto enteramente de software libre. Hacia 1991, cuando la

primera versión del núcleo Linux fue liberada, el proyecto GNU había producido

varios de los componentes del sistema operativo, incluyendo un intérprete de

comandos, una biblioteca C y un compilador, pero aún no contaba con el núcleo

que permitiera completar el sistema operativo.

El núcleo creado por Linus Torvalds, quien se encontraba entonces estudiando en

la Universidad de Helsinki, llenó el hueco final que el sistema operativo GNU

exigía. Subsecuentemente, miles de programadores voluntarios alrededor del

mundo han participado en el proyecto, mejorándolo continuamente. Torvalds y

otros desarrolladores de los primeros días de Linux adaptaron los componentes de

Page 19: Sarabia Vargas.pdf

8

GNU y de BSD, así como de otros muchos proyectos como Perl, Apache, Python,

etc. para trabajar con el núcleo Linux, creando un sistema operativo

completamente funcional procedente de muchísimas fuentes diferentes, la

mayoría libres.

Page 20: Sarabia Vargas.pdf

9

1.3 Distribuciones Linux Tabla 1 Linux

El logotipo oficial del núcleo Linux es el pingüino Tux

Desarrollador Varios

Familia de S.O. Unix-like

Modelo de desarrollo Open source

Núcleo Linux

Tipo de núcleo Monolítico

Licencia GPL/LGPL/BSD/Otras

Estado actual En desarrollo

Page 21: Sarabia Vargas.pdf

10

Fig. 2 Sharp Zaurus, un computador de bolsillo con Linux.

Una distribución es un conjunto de aplicaciones reunidas por un grupo, empresa o

persona para permitir instalar fácilmente un sistema Linux. Es un sabor de Linux.

En general se destacan por las herramientas para configuración y sistemas de

paquetes de software a instalar.

Existen numerosas distribuciones Linux (también conocidas como "distros"),

ensambladas por individuos, empresas y otros organismos. Cada distribución

puede incluir cualquier número de software adicional, incluyendo software que

facilite la instalación del sistema. La base del software incluido con cada

distribución incluye el núcleo Linux y las herramientas GNU, al que suelen

adicionarse también varios paquetes de software.

Las herramientas que suelen incluirse en la distribución de este sistema operativo

se obtienen de diversas fuentes, incluyendo de manera importante proyectos de

código abierto o libre, como el GNU y el BSD o el KDE. Debido a que las

herramientas de software libre que en primera instancia volvieron funcional al

núcleo de Linux provienen del proyecto GNU que desde 1983 había liberado

software que pudo ser usado en el proyecto de Linux de 1991, Richard Stallman

(fundador del proyecto GNU) pide a los usuarios que se refieran a dicho sistema

como GNU/Linux. A pesar de esto, la mayoría de los usuarios continúan llamando

al sistema simplemente "Linux" y las razones expuestas por Richard Stallman son

Page 22: Sarabia Vargas.pdf

11

eterno motivo de controversia. La mayoría de los sistemas "Linux" incluyen

también herramientas procedentes de BSD y de muchos otros proyectos como

Mozilla, Perl, Ruby, Python, PostgreSQL, MySQL, Xorg, casi todas con licencia

GPL o compatibles con ésta (LGPL, MPL) otro aporte fundamental del proyecto

GNU.

Usualmente se utiliza la plataforma XFree86 o la X.Org para sostener interfaces

gráficas.

1.3.1 Comparativa de algunas distribuciones Linux

Existen numerosas distribuciones Linux. Cada una de ellas puede incluir

cualquier cantidad de software adicional (libre o no), como algunos que facilitan

la instalación del sistema y una enorme variedad de aplicaciones, entre ellos,

entornos gráficos, suites ofimáticas, servidores web, servidores de correo,

servidores FTP, etcétera.

La base de cada distribución incluye el núcleo Linux, con las bibliotecas y

herramientas del proyecto GNU y de muchos otros proyectos/grupos de

software, como BSD.

Tabla 2 Comparación general de las distribuciones de Linux.

Empresa

Fecha de

la

primera

P.R.

Predecesor

Última

versión

estable

Precio (€) Licencia Público País

Debian

GNU/Linux

Proyecto

Debian

agosto de

1993 N/A

4.0

(Etch) Gratis

cualquier

DFSG

Desktop,

Workstation,

Server

Mun

dial

Fedora

Core

Proyecto

Fedora

noviembre

de 2003

Fedora Linux,

Red Hat Linux

Ver. 7 /

Junio

2007

Gratis GPL

Workstation,

Server,

Público

EEU

U

Page 23: Sarabia Vargas.pdf

12

Gentoo Fundación

Gentoo

marzo de

2002 Enoch 2006.1 Gratis GPL

Workstation,

Server,

Público

Mun

dial

Mandriva

Linux Mandriva

julio de

1998

Mandrake

Linux/Conectiva

y Lycoris Xls

2007.1

Spring

Gratis

(edición

para

descargar)

GPL

Desktop,

Workstation,

Server

Mun

dial

Rxart Pixart octubre

de 2001

rxart, rxart

Linux 3.0 €16 GPL

Workstation,

Server

Arge

ntina

Slackware

Linux

Patrick

Volkerding

julio de

1993 SLS 11.0 Gratis GPL

Workstation,

Server,

Público

EEU

U

SUSE

Linux

Novell,

OpenSUSE

marzo de

1994 Jurix 10.3

Descarga

gratuita

disponible

Ed.

Profesional:

51,95

GPL

Workstation,

Server,

Desktop,

Público

Mun

dial

Ubuntu Canonical

Ltd.

octubre

de 2004 Debian

7.04

(Feisty

Fawn)

Gratis

LiveCD GPL

Desktop,

Workstation,

Server

Mun

dial

Tabla 2. Comparación general de las distribuciones de Linux (continuación).

Page 24: Sarabia Vargas.pdf

13

Tabla 3. Comparación técnica de las distribuciones de Linux.

Kernel

Sistem

a de

fichero

s

Sistemas

de

ficheros

compatib

les

Arquitect

ura

Herramie

nta de

actualizac

ión de

paquetes

Administra

dor de

Paquetes

API

principal

y

lenguaje

para

Aplicacio

nes

Gráficas

API

principal

y

lenguaje

para

Aplicacio

nes CLI

Debian

GNU/Lin

ux

Linux

2.6.18 ext3

ext2, JFS,

XFS,

FAT,

NTFS,

ISO 9660,

UDF,

NFS,

ReiserFS

x86, x86-

64, IA64,

PowerPC,

SPARC,

SPARC64

, Alpha,

MIPS,

ARM, PA-

RISC,

Mac/VME

68k,

S/390

APT

dpkg,

Synaptic,

Adept, APT

y Aptitude

Varias

pre-LSB

con C,

otros

(estándar

POSIX)

Fedora

Core

Linux

2.6.18

Fed.C

ore

Verid 9

ext3

ext2,

ReiserFS,

FAT, ISO

9660,

UDF,

NFS

x86, x86-

64, i386,

PowerPC

up2date,

yum, APT

(limitado)

RPM, yum Varias

pre-LSB

con C,

otros

(estándar

POSIX)

Rxart Linux

2.6.34 ext3

ext2,

ReiserFS,

FAT, ISO

9660,

UDF,

NFS

x86, x86-

64, i386,

PowerPC

up2date,

net, APT

(limitado)

DEB, ASK Varias

pre-LSB

con C,

otros

(estándar

POSIX)

Mandriv

a Linux

Linux

2.6.17 ext3

ext2, JFS,

XFS,

x86

(i586), urpmi RpmDrake Varias

pre-LSB

con C,

Page 25: Sarabia Vargas.pdf

14

FAT,

NTFS,

ISO 9660,

UDF,

NFS,

ReiserFS

x86-64,

PPC

otros

(estándar

POSIX)

Slackwa

re Linux

Linux

2.4.33

/

2.6.18

Reiser

FS,

ext3/ex

t2

JFS,

XFS,

FAT,

NTFS,

ISO 9660,

UDF,

NFS

x86, IA64,

S/390

Swaret,

Slapt-get,

otros no

oficiales

installpkg y

upgradepkg Varias

pre-LSB

con C,

otros

(estándar

POSIX)

openSU

SE

Linux

2.6.18.

8

ext3

ext2,

ext3, JFS,

XFS,

FAT,

NTFS,

ISO 9660,

UDF,

NFS,

Reiser4

x86, IA64,

x86-64,

PowerPC

YaST2

(Misma

Versión de

YaST

Avanzada)

RPM, YaST Varias

pre-LSB

con C,

otros

(estándar

POSIX)

Ubuntu Linux

2.6.20 ext3

JFS,

XFS,

NTFS,

ISO 9660,

ReiserFS

x86, x86-

64 APT

dpkg,

Synaptic,

APT y

Aptitude

Varias

pre-LSB

con C,

otros

(estándar

POSIX)

Tabla 3. Comparación técnica de las distribuciones de Linux (continuación).

Page 26: Sarabia Vargas.pdf

Tabla 4. Datos extras de las distribuciones de Linux.

Paquetes Instalación

gráfica

Administrador de

archivos

Navegador

web

Entorno

gráfico

principal

Gestor de

ventanas

principal

Tema

visual de

escritorio

Suite ofimática

Debian

GNU/Linux 18000

Sí (a partir de la

4.0 "Etch") Nautilus, Konqueror

Iceweasel,

Konqueror GNOME

Metacity,

KWin a elegir

OpenOffice.org,

KOffice, GNOME Office

Fedora

Core 5000 Sí Nautilus, Konqueror

Mozilla

Firefox,

Epiphany

GNOME,

KDE

Metacity,

Kwin

ClearLook

s

(GNOME)

Bluecurve

(KDE)

OpenOffice.org,

KOffice, GNOME Office

Mandriva

Linux 4000 Sí Konqueror

Konqueror,

Mozilla

Firefox

KDE KWin la Ora OpenOffice.org

Rxart

Linux 2000 Sí Konqueror

Konqueror,

Mozilla

Firefox

KDE KWin Rxart OpenOffice.org

Slackware

Linux muchos No Konqueror Mozilla

Firefox, varios a elegir a elegir KOffice

Page 27: Sarabia Vargas.pdf

Seamonkey

SUSE

Linux 12500 Sí Nautilus

Mozilla

Firefox,

Konqueror

(en KDE),

Epiphany

(en

GNOME)

Gnome,

KDE Metacity

ClearLook

s

OpenOffice.org,

KOffice, GNOME Office

Ubuntu menos de

18000 Sí Nautilus

Mozilla

Firefox GNOME Metacity Human

OpenOffice.org,

GNOME Office

Tabla 4. Datos extras de las distribuciones de Linux (continuación).

Page 28: Sarabia Vargas.pdf

17

1.4 Cómo se instala Linux

Linux en la actualidad es un sistema operativo fácil de instalar, tan solo

basta con descargar la imagen iso de una distribución como Debian, SuSE,

Ubuntu o Yellow Dog (la mayoría son gratuitas) y grabarla en un CD o DVD.

Existen versiones linux para máquinas x86 (abarca desde computadoras 386,

pentium I, celeron, hasta pentium IV), también para 64 bits (los nuevos

procesadores, aunque también trabajan con linux para x86), y para procesadores

PowerPc (ppc) de las computadoras Apple Macintosh.

El resto es tan fácil como instalar Windows, incluso algunas distribuciones

permiten entrar al escritorio linux sin necesidad de instalar el sistema operativo

(desde el CD), para luego usarlo o instalarlo desde el escritorio. Este es el caso de

Ubuntu y Kubuntu y las versiones más actualizadas, insertas el cd/dvd dentro de la

computadora, reinicias y en uno o dos minutos estás en el escritorio del sistema

operativo Linux. Estas versiones son también llamadas Live, del inglés "en vivo".

Actualmente Linux es un sistema fácil de usar. Cada distribución trae programas

seleccionados por los autores de la distribución incluidos en el cd o en el dvd, y se

pueden instalar tanto al comienzo de la instalación como luego de haber instalado

el sistema. Se puede instalar en computadoras que se consideren "obsoletas",

pero esto puede resultarle complicado a un usuario novato.

Page 29: Sarabia Vargas.pdf

18

1.5 Aplicaciones de los sistemas Linux

Fig. 3 Escritorio KDE 3.4.2 corriendo sobre Gentoo Linux (2.6.13-r9) corriendo un cliente IRC

Konversation, un cliente p2p aMule y un reproductor musical Amarok.

Con la adopción por numerosas empresas fabricantes de PCs, muchas

computadoras son vendidas con distribuciones GNU/Linux pre-instaladas, y

"GNU/Linux" ha comenzado a tomar su lugar en el vasto mercado de las

computadoras de escritorio.

Con entornos de escritorio, "GNU/Linux" ofrece una interfaz gráfica alternativa a la

tradicional interfaz de línea de comandos de Unix. Existen en la actualidad

Page 30: Sarabia Vargas.pdf

19

numerosas aplicaciones gráficas, ya sean libres o no, que ofrecen funcionalidad

que está permitiendo que GNU/Linux se adapte como herramienta de escritorio.

Algunas distribuciones permiten el arranque de Linux directamente desde un disco

compacto (llamados LiveCDs) sin modificar en absoluto el disco duro de la

computadora en la que se ejecuta Linux. Para este tipo de distribuciones, en

general, los archivos de imagen (archivos ISO) están disponibles en Internet para

su descarga.

Otras posibilidades incluyen iniciar el arranque desde una red (ideal para sistemas

con requerimientos mínimos) o desde un disco flexible o disquete o de unidades

de almacenamiento USB.

1.6 La escala del desarrollo de "Linux"

Un estudio sobre la distribución Red Hat 7.1 reveló que ésta en particular

posee más de 30 millones de líneas de código real. Utilizando el modelo de

cálculo de costos COCOMO, puede estimarse que esta distribución requeriría

8.000 programadores por año para su desarrollo. De haber sido desarrollado por

medios convencionales de código cerrado, hubiera costado más de mil millones de

dólares en los Estados Unidos.

La mayor parte de su código (71%) pertenecía al lenguaje C, pero fueron

utilizados muchos otros lenguajes para su desarrollo, incluyendo C++, Bash, Lisp,

Ensamblador, Perl, Fortran y Python.

Alrededor de la mitad de su código total (contado en líneas de código) fue liberado

bajo la licencia GPL en su versión 2.

El núcleo Linux contenía entonces 2,4 millones de líneas de código,

correspondiente al 8% del total, demostrando que la vasta mayoría del sistema

operativo no pertenece al núcleo del mismo.

En un estudio posterior, Counting potatoes: the size of Debian 2.2, el mismo

análisis fue hecho para Debian GNU/Linux versión 2.2. Esta distribución contiene

más de 55 millones de líneas de código fuente, y habría costado 1.900 millones de

Page 31: Sarabia Vargas.pdf

20

dólares (año 2000) el desarrollo por medios convencionales (no libres); y el núcleo

Linux continua siendo de unas 2,5 millones de líneas.

1.7 En Linux el mercado

Fig. 4 Richard Stallman, creador del proyecto GNU

La creciente popularidad de Linux se debe a las ventajas que presenta ante

otros tipos de software. Entre otras razones se debe a su estabilidad, al acceso a

las fuentes (lo que permite personalizar el funcionamiento y auditar la seguridad y

privacidad de los datos tratados), a la independencia de proveedor, a la seguridad,

a la rapidez con que incorpora los nuevos adelantos tecnológicos (IPv6,

microprocesadores de 64 bits), a la escalabilidad (se pueden crear clusters de

cientos de computadoras), a la activa comunidad de desarrollo que hay a su

alrededor, a su interoperatibilidad y a la abundancia de documentación relativa a

los procedimientos.

Hay varias empresas que comercializan soluciones basadas en Linux: IBM, Novell,

Red Hat, Rxart, Cannonical (Ubuntu), Rxart, así como miles de PYMES que

ofrecen productos o servicios basados en esta tecnología.

Dentro del segmento de supercomputadoras, la 5ª más grande de Europa,

denominada MareNostrum, fue desarrollada por IBM y está basada en un cluster

Page 32: Sarabia Vargas.pdf

21

Linux ([1]). Ella se encuentra alojada en Barcelona y es gestionada por la

"Universitat Politécnica de Catalunya" (UPC). A fines de 2006, de acuerdo al

TOP500.org, encargado de monitorear las 500 principales supercomputadoras del

mundo: 371 usaban una distribución basada en GNU/Linux, 81 Unix, 32 SLES

(una variante de Unix), 13 Únicos con Linux y 3 Mac. Ninguna usaba Windows.

Linux, además de tener una amplia cuota en el mercado de servidores de internet,

debido entre otras cosas a la gran cantidad de soluciones que tiene para este

segmento, tiene un creciente campo en computadoras de escritorio y portátiles.

Prueba de ello es que es el sistema base que se ha elegido para el proyecto

OLTPC, que tiene como objetivo llevar una LapTop a cada niño de países como

China, Brasil, Argentina y Uruguay y está patrocinado por la iniciativa del MIT y

firmas como AMD, Google y Sun Microsystems.

1.8 GNU/Linux como sistema de programación

La colección de utilidades para la programación de GNU es con diferencia

la familia de compiladores más utilizada en Linux. Tiene capacidad para compilar

C, C++, Java, Ada, entre otros muchos lenguajes. Además soporta diversas

arquitecturas mediante la compilación cruzada, lo que hace que sea un entorno

adecuado para desarrollos heterogéneos.

Hay varios IDEs disponibles para Linux incluyendo, Anjuta, KDevelop, NetBeans

IDE y Eclipse. Además existen editores extensibles como pueda ser Emacs que

hoy en día siguen siendo ampliamente utilizados. GNU/Linux también dispone de

capacidades para lenguajes de guión (script), aparte de los clásicos lenguajes de

programación de shell, la mayoría de las distribuciones tienen instalado Python,

Perl, PHP y Ruby.

Page 33: Sarabia Vargas.pdf

22

1.9 Linux en la Administración Pública

Hay una serie de administraciones públicas que han mostrado su apoyo al

software libre, sea migrando total o parcialmente sus servidores y sistemas de

escritorio, sea subvencionándolo. Como ejemplos se tiene a:

Alemania pagando por el desarrollo del Kroupware. Además ciudades como

Múnich, que migró sus sistemas a SuSE Linux, una distribución alemana

especialmente orientada a KDE.

Cuba donde el gobierno ha establecido una indicación oficial para introducir de

manera progresiva el software libre y en particular GNU/Linux y en el que la red de

Salud Pública, Infomed, fue pionera en su uso.

China, con su acuerdo con Sun Microsystems para distribuir millones de Java

Desktop (una distribución de GNU/Linux basada en GNOME y especialmente bien

integrada con java)

Brasil, con una actitud generalmente positiva, y, por ejemplo, con el desarrollo de

los telecentros

En España, algunos gobiernos autonómicos están desarrollando sus propias

distribuciones no sólo para uso administrativo sino también académico. Así

tenemos LinEx en Extremadura, Augustux en Aragón, GuadaLinex en Andalucía,

LliureX en La Comunidad Valenciana, Molinux en Castilla-La Mancha, MAX en La

Comunidad de Madrid, Linkat en Cataluña y Trisquel en la Comunidad de Galicia,

por el momento. Todas estas distribuciones tienen en común el hecho de estar

basadas en Debian, o alguno de sus derivados, como Ubuntu.

Venezuela donde por decreto, se estableció el uso preferencial del software libre y

GNU/Linux en toda la administración pública, incluyendo ministerios y oficinas

gubernamentales y se está fomentando la investigación y el desarrollo de software

libre.

Chile, donde el Ministerio de Educación y la Universidad de la Frontera (ubicada

en Temuco) crearon EduLinux, una distribución que hoy está en más de 1500

escuelas chilenas y funcionando en más de un 90% de las bibliotecas chilenas.

Actualmente las Fuerzas Armadas chilenas están planificando la creación de una

Page 34: Sarabia Vargas.pdf

23

distribución militar que interconecte a las ramas de la defensa chilena. El gobierno

de ese país aprobó el uso del software libre en la administración pública, anulando

así un contrato previo con Microsoft para el mantenimiento de las redes y de los

equipos en escuelas y bibliotecas chilenas.

República Dominicana, promociona el uso y proliferación del Software libre en el

campo educativo y científico. Dispone de dos fundaciones, una en la capital de

Santo Domingo y la otra en la ciudad de Santiago. Codigolibre.org

México el Gobierno del Distrito Federal dentro de sus políticas y lineamientos en

materia de Informática da preferencia al uso del Software Libre. La Delegación

Tlalpan crea la distribución Gobierno GDF/Linux.

1.10 Como usar un módulo programado para Linux

Después de haber leído la reseña completa sobre Linux, Supongamos que

ya he programado mi driver, ahora ¿cómo lo uso?

Para empezar diremos que sólo el superusuario puede insertar y quitar módulos

del kernel, las razones para esto son evidentes, se podria hacer un driver que se

dedicase a borrar todos los ficheros del disco duro, como este código se ejecuta

en el kernel, podemos saltarnos todas las comprobaciones de permisos de

escritura y borrar todo lo que queramos, aunque esté protegido contra escritura.

En la tabla 5 aparecen los nombres de los comandos necesarios para el manejo

de módulos (que sólo puede ejecutar root).

Tabla 5. Comandos necesarios para el manejo de módulos.

Insmod mi_modulo Inserta el módulo mi_modulo en el kernel

rmmod mi_modulo Saca del kernel el módulo mi_modulo

modinfo

Muestra información sobre el módulo.

modprobe

Automatiza/facilita la gestión de módulos.

Page 35: Sarabia Vargas.pdf

24

depmod

Determina las dependencias entre módulos.

Lsmod

Muestra los módulos que están actualmente insertados en

el kernel, junto con algunos datos adicionales sobre el

estado de los mismos.

Page 36: Sarabia Vargas.pdf

25

CARGAR MÓDULOS

1. Compilar el núcleo con los parámetros de configuración que permiten trabajar

con módulos.

*

* Loadable module support

*

Enable loadable module support (CONFIG_MODULES) [Y/n/?] Y

2. Diseñar e implementar un manejador como módulo cargable.

2.1 Definir número mayor y menor para el dispositivo:

#define manejador_MAYOR nn

#define manejador_MINOR xx

2.2 Definir operaciones de entrada salida para el dispositivo:

static int manejador_fs_read (struct inode *inode, struct file *file,

char *buf, int nbytes );

2.3 Definir la estructura: file_operations

static struct file_operations manejador_fops =

{

NULL,

manejador_fs_read,

NULL,

NULL,

NULL,

NULL,

Page 37: Sarabia Vargas.pdf

26

NULL,

NULL,

NULL,

NULL

};

2.4 Diseñar la función de inicialización del modulo y descarga:

int manejador_init (void)

{

.....

}

#ifdef MODULE

/* función de inicio del modulo */

int init_module (void)

{

return manejador_init ();

}

/* Función de descarga del módulo */

void cleanup_module (void)

{

unregister_chardev (mayor device, “manejador”);

printk (“manejador modulo no se puede descargar \n”);

}

#endif

2.5 Diseñar la función de lectura del manejador:

static int manejador_fs_read (struct inode *inode, struct file *file, char *buf, int

Page 38: Sarabia Vargas.pdf

27

nbytes)

{

...

}

3. Compilar el modulo con las directivas: D__KERNEL__ y DMODULE

4. Crear el archivo especial para este manejador:

#mknod /dev/manejador c mayor_device menor_device

5. Insertarlo en el núcleo:

#insmod manejador

6. Ver lista de módulos cargados:

#lsmod

7. Utilizarlo:

#modprobe

8. Quitarlo del núcleo:

#rmmod manejador

MÓDULOS DEL NÚCLEO

Hay componentes del núcleo que siempre tienen que estar en memoria como el

planificador de la CPU.

Sin embargo otros componentes solo tienen que estar en memoria cuando se

necesitan, como el manejador de un CDWriter; un sistema de ficheros Minix, NFS;

Page 39: Sarabia Vargas.pdf

28

un manejador de protocolo PPP.

Estas partes del núcleo que pueden cargarse o descargarse dinámicamente en

memoria, mientras el núcleo se esta ejecutando se llaman MÓDULOS.

Ventajas de los módulos:

1. La incorporación de nuevos manejadores al núcleo es mas fácil, se pueden

compilar, cargar, probar, o quitar como módulos antes de integrarlos en le

núcleo.

2. Si el manejador está integrado en el núcleo, cada vez que hagamos

modificaciones en el manejador hay que recompilar todo el núcleo y

reiniciar.

3. El núcleo no ocupa tanta memoria principal, quedando libre para las

aplicaciones.

Desventajas:

1. Cada vez que se requiere o ya no se necesita un módulo hay que pagar el

coste de leer o escribir en disco.

2. El código del núcleo se incrementa con el sistema de manejo de módulos.

La opción que activa que el núcleo maneje los módulos es:

Enable loadable module suport (CONFIG_MODULES) [Y/n/?]

Si se desea instalar un componente como módulo, hay que declararlo en la

configuración del núcleo, ejemplo instalar el sistema de ficheros MSDOS.

Page 40: Sarabia Vargas.pdf

29

DOS FAT fs support (CONFIG_FAT_FS) [M/n/y/?] M

MSDOS fs support (CONFIG_MSDOS_FS) [M/n/y/?] M

VFAT (Windows-98) fs support (CONFIG_VFAT_FS) [m/n/y/?] M

Una vez compilado el núcleo se compilan los módulos, la secuencia puede ser:

make config

make dep

make clean

make zImage

make modules

make modules_install

Finalizado este proceso, los módulos se encuentran el /lib/modules.

Los módulos se compilan como cualquier programa pero son enlazados como

imágenes recargables, esto es no están asociadas a ninguna dirección.

Podemos ver los símbolos exportados por el núcleo en /proc/ksyms o utilizando el

comando ksyms.

Cada módulo debe contener unos procedimientos que los manejan, incluyendo

uno de inicialización cuando se carga el módulo y otro de borrado cuando se quita

del núcleo.

Los comandos del súper usuario para manejar manualmente los módulos son:

• insmod – instalar un módulo

• lsmod – lee el contenido de /proc/modules y muestra los módulos cargados

en memoria, (nombre, número de páginas del módulo y procesos que los

utilizan).

Page 41: Sarabia Vargas.pdf

30

ejemplo de listado al ejecutar lsmod

Module: #pages: Used by:

msdos 2 1 (autoclean)

vfat 4 1 (autoclean)

fat 6 [vfat msdos] 2 (autoclean)

• rmmod – quitar un módulo

Carga automática de módulos por demanda del núcleo

Cuando se monta un sistema de ficheros que no está integrado en el núcleo, el

núcleo solicita al programa kerneld que cargue los módulos necesarios para este

sistema de ficheros montado.

La carga dinámica y automática de módulos precisa que se compile el núcleo con

la opción CONFIG_KERNELD y los IPC System V.

Se precisa al arrancar el sistema lanzar el programa demonio kerneld, que lee las

peticiones del núcleo y realiza la carga o descarga de los módulos necesarios. Se

ejecuta como un proceso de usuario y establece un canal de comunicación

basado en mensajes (IPC) con el núcleo, por el cual el núcleo solicita mediante

mensajes un modulo al programa modprobe. Se utilizan los programas depmod y

modprobe.

DEPMOD, genera un archivo de dependencias de los símbolos encontrados en los

módulos.

MODPROBE, es el programa para manejo de módulos, requiere privilegios de

root.

Page 42: Sarabia Vargas.pdf

31

Los procedimientos del núcleo que interaccionan con modprobe y la estructura de

datos principal, (se encuentran en include/linux/module.h y kernel/module.c) son:

• request_module

Es la función llamada por el núcleo cuando este percibe, por la solicitud de

un proceso, la necesidad de cargar un módulo.

• exec_modprobe

Es el programa que añade el módulo solicitado al núcleo, es llamado por

kerneld.

• struct module

Fig. 5 Procedimientos del núcleo que interaccionan

next

ref

symtab

name

size

next

ref

symtab

name

size

size

n_symbols

n_refs

size

n_symbols

n_refs

symbol_table symbol_table

module module

module_list

Page 43: Sarabia Vargas.pdf

32

Fig. 6 Procedimientos del núcleo que interaccionan

Los ficheros que tratan con los módulos son:

incluye/linux/module.h

kernel/module.c

contienen la estructura struc module

y las llamadas al sistema utilizadas por modprobe y los comandos insmod, lsmod

y rmmod son:

sys_create_module

sys_init_module

sys_delete_module

sys_get_kernel_syms

request_module (módulo)

Núcleo

kerneld

modprobe (módulo)

Núcleo

módulo

módulo

disco

Page 44: Sarabia Vargas.pdf

33

CAPITULO II

TCP/IP EN LINUX

Page 45: Sarabia Vargas.pdf

34

2.1 TCP/IP

2.1.1 Niveles en la pila TCP/IP

Hay algunas discusiones sobre como encaja el modelo TCP/IP dentro del

modelo OSI. Como TCP/IP y modelo OSI no están delimitados con precisión no

hay una respuesta que sea la correcta.

El modelo OSI no está lo suficientemente dotado en los niveles inferiores como

para detallar la auténtica estratificación en niveles: necesitaría tener una capa

extra (el nivel de Interred) entre los niveles de transporte y red. Protocolos

específicos de un tipo concreto de red, que se sitúan por encima del marco de

hardware básico, pertenecen al nivel de red, pero sin serlo. Ejemplos de estos

protocolos son el ARP (Protocolo de resolución de direcciones) y el STP

(Spanning Tree Protocol). De todas formas, estos son protocolos locales, y

trabajan por debajo de las capas de Interred. Cierto es que situar ambos grupos

(sin mencionar los protocolos que forman parte del nivel de Interred pero se sitúan

por encima de los protocolos de Interred, como ICMP) todos en la misma capa

puede producir confusión, pero el modelo OSI no llega a ese nivel de complejidad

para ser más útil como modelo de referencia.

La siguiente Tabla intenta mostrar la pila TCP/IP y otros protocolos relacionados

con el modelo OSI original:

Tabla 6. Pila de protocolos modelo OSI

7 Aplicación ej. HTTP, DNS, SMTP, SNMP, FTP, Telnet, SSH y SCP, NFS,

RTSP, Feed, Webcal

6 Presentación ej. XDR, ASN.1, SMB, AFP

5 Sesión ej. TLS, SSH, ISO 8327 / CCITT X.225, RPC, NetBIOS

4 Transporte ej. TCP, UDP, RTP, SCTP, SPX

3 Red ej. IP, ICMP, IGMP, X.25, CLNP, ARP, RARP, BGP, OSPF

Page 46: Sarabia Vargas.pdf

35

2 Enlace de

datos

ej. Ethernet, Token Ring, PPP, HDLC, Frame Relay, RDSI,

ATM, IEEE 802.11, FDDI

1 Físico ej. cable, radio, fibra óptica

Normalmente, los tres niveles superiores del modelo OSI (Aplicación,

Presentación y Sesión) son considerados simplemente como el nivel de aplicación

en el conjunto TCP/IP. Como TCP/IP no tiene un nivel de sesión unificado sobre el

que los niveles superiores se sostengan, estas funciones son típicamente

desempeñadas (o ignoradas) por las aplicaciones de usuario. La diferencia más

notable entre los modelos de TCP/IP y OSI es el nivel de Aplicación, en TCP/IP se

integran algunos niveles del modelo OSI en su nivel de Aplicación. Una

interpretación simplificada de la pila se muestra debajo:

Tabla 7 Una interpretación simplificada de la pila

5 Aplicación

ej. HTTP, FTP, DNS

(protocolos de enrutamiento como BGP y RIP, que por varias

razones funcionen sobre TCP y UDP respectivamente, son

considerados parte del nivel de red)

4 Transporte

ej. TCP, UDP, RTP, SCTP

(protocolos de enrutamiento como OSPF, que funcionen sobre IP,

son considerados parte del nivel de red)

3 Interred

Para TCP/IP este es el Protocolo de Internet (IP)

(protocolos requeridos como ICMP e IGMP funcionan sobre IP,

pero todavía se pueden considerar parte del nivel de red; ARP no

funciona sobre IP

2 Enlace ej. Ethernet, Token Ring, etc.

1 Físico ej. medio físico, y técnicas de codificación, T1, E1

Page 47: Sarabia Vargas.pdf

36

Linux implementa todo lo necesario para trabajar en red con TCP/IP. Desde

administradores para las tarjetas de red más populares hasta SLIP/PPP, que

permiten acceder a una red TCP/IP por el puerto serie. También se implementan

PLIP (para comunicarse por el puerto de la impresora) y NFS (para acceso remoto

a ficheros). Y también se han portado los clientes de TCP/IP, como FTP, telnet,

NNTP y SMTP.

Linux dispone de los dos principales protocolos de red para sistemas UNIX:

TCP/IP y UUCP. TCP/IP (para los aficionados a los acrónimos, Transmission

Control Protocol/Internet Protocol) es un conjunto de protocolos de red que

permite a sistemas de todo el mundo comunicarse en una única red conocida

como Internet. Con Linux, TCP/IP y una conexión a la red, puede comunicarse con

usuarios y máquinas por toda Internet mediante correo electrónico, noticias

(USENET news), transferencias de ficheros con FTP y mucho más. Actualmente

hay muchos sistemas Linux conectados a Internet.

La mayoría de las redes TCP/IP usan Ethernet como tipo de red física de

transporte. Linux da soporte a muchas tarjetas de red Ethernet e interfaces para

ordenadores personales, incluyendo el adaptador Ethernet D-Link de bolsillo para

ordenadores portátiles.

Pero dado que no todo el mundo tiene una conexión Ethernet en casa, Linux

también proporciona SLIP (Serial Line Internet Protocol), el cual permite

conectarse a Internet a través de un módem. Para poder usar SLIP, necesitará

tener acceso a un servidor de SLIP, una máquina conectada a la red que permite

acceso de entrada por teléfono. Muchas empresas y universidades tienen

servidores SLIP disponibles. De hecho, si su sistema Linux dispone de conexión

Ethernet y de módem, puede configurarlo como servidor de SLIP para otros

usuarios.

NFS (Network File System) permite fácilmente compartir ficheros con otras

máquinas de la red. FTP (File Transfer Protocol) permite la transferencia de

ficheros entre máquinas.

Si tiene experiencia con aplicaciones TCP/IP en otros sistemas UNIX, Linux le

será muy familiar. El sistema proporciona la interface estándar de programación

por "sockets", lo que virtualmente permite que cualquier programa que use TCP/IP

Page 48: Sarabia Vargas.pdf

37

pueda ser llevado a Linux. El servidor Linux de X también soporta TCP/IP,

permitiendo ver aplicaciones que están corriendo en otros sistemas sobre su

pantalla.

UUCP (UNIX-to-UNIX Copy) es un viejo mecanismo usado para transferir ficheros,

correo electrónico y noticias entre máquinas UNIX. Clásicamente las máquinas

UUCP conectan entre ellas mediante líneas telefónicas y módem, pero UUCP es

capaz de funcionar también sobre una red TCP/IP. Si no tiene acceso a una red

TCP/IP o a un servidor SLIP, puede configurar su sistema para enviar y recibir

ficheros y correo electrónico usando UUCP.

2.1.2 Familia de protocolos de Internet

La familia de protocolos de Internet es un conjunto de protocolos de red que

implementa la pila de protocolos en la que se basa Internet y que permiten la

transmisión de datos entre redes de computadoras. En ocasiones se la denomina

conjunto de protocolos TCP/IP, en referencia a los dos protocolos más importantes

que la componen: Protocolo de Control de Transmisión (TCP) y Protocolo de

Internet (IP), que fueron los dos primeros en definirse, y que son los más utilizados

de la familia. Existen tantos protocolos en este conjunto que llegan a ser más de

100 diferentes, entre ellos se encuentra el popular HTTP (HyperText Transfer

Protocol), que es el que se utiliza para acceder a las páginas web, además de

otros como el ARP (Address Resolution Protocol) para la resolución de

direcciones, el FTP (File Transfer Protocol) para transferencia de archivos, y el

SMTP (Simple Mail Transfer Protocol) y el POP (Post Office Protocol) para correo

electrónico, TELNET para acceder a equipos remotos, entre otros.

El TCP/IP es la base de Internet, y sirve para enlazar computadoras que utilizan

diferentes sistemas operativos, incluyendo PC, minicomputadoras y computadoras

centrales sobre redes de área local (LAN) y área extensa (WAN). TCP/IP fue

desarrollado y demostrado por primera vez en 1972 por el departamento de

defensa de los Estados Unidos, ejecutándolo en ARPANET, una red de área

extensa del departamento de defensa.

Page 49: Sarabia Vargas.pdf

38

La familia de protocolos de internet puede describirse por analogía con el modelo

OSI, que describe los niveles o capas de la pila de protocolos, aunque en la

práctica no corresponde exactamente con el modelo en Internet. En una pila de

protocolos, cada nivel soluciona una serie de problemas relacionados con la

transmisión de datos, y proporciona un servicio bien definido a los niveles más

altos. Los niveles superiores son los más cercanos al usuario y tratan con datos

más abstractos, dejando a los niveles más bajos la labor de traducir los datos de

forma que sean físicamente manipulables.

El modelo de Internet fue diseñado como la solución a un problema práctico de

ingeniería. El modelo OSI, en cambio, fue propuesto como una aproximación

teórica y también como una primera fase en la evolución de las redes de

ordenadores. Por lo tanto, el modelo OSI es más fácil de entender, pero el modelo

TCP/IP es el que realmente se usa. Sirve de ayuda entender el modelo OSI antes

de conocer TCP/IP, ya que se aplican los mismos principios, pero son más fáciles

de entender en el modelo OSI.

2.2 TCP/IP Linux

El código de TCP en Linux se escribió de forma independiente al resto de

implementaciones. Hay que tener en cuenta que, al estar bajo licencia GPL, no

podría haber usado el código de los sistemas BSD, ya que éstos usaban la

licencia BSD original (con la cláusula de publicidad), incompatible con la GPL.

Esta cláusula se quitó mucho más tarde, en 1999.

Todos los detalles de implementación de TCP en Linux están visibles y explicados

en su código fuente. La parte relacionada con TCP en IPv4 está en el directorio

net/ipv4/. Aquí se encuentran ficheros importantes, como:

tcp_ipv4.c

tcp_input.c

tcp_output.c

En net/ipv6/ está el código para implementar TCP sobre IPv6. Es una adaptación

del código para IPv4.

Page 50: Sarabia Vargas.pdf

39

En un sistema en ejecución, varios parámetros de TCP se pueden ver y

modificar mediante los ficheros del directorio /proc, por ejemplo

/proc/sys/net/ipv4/

Existen varios libros que explican los detalles de implementación de TCP/IP en

el núcleo Linux y analizan su código. Uno de ellos, que describe hasta la

versión 2.4, es:

Wehrle, Klaus; Pahlke, Frank; Ritter, Hartmut; Muller, Daniel; Bechler,

Marc (2004), Linux Network Architecture, Prentice Hall. ISBN 0131777203.

Fig. 7 Varios algoritmos de control de congestión seleccionables al compilar Linux

(versión 2.6.17.4)

Como entrar al menú descrito en la figura 7 (at make menuconfig</menu>):

Asegúrese que usted tiene " Prompt para desarrollo y/o

código/controladores incompleto " activo

Activar: "Networking" -> "Networking options" -> "TCP: advanced

congestion control"

Entonces entre "TCP congestion control"

The default settings are: BIC-TCP with new Reno as a fallback

Page 51: Sarabia Vargas.pdf

40

Linux implementa muchos algoritmos de control de congestión. Por ejemplo, está

SACK, Westwood+, Reno, NewReno, FACK (forward acknowledgement), ECK, H-

TCP, y varios más. Desde la version 2.6.19 se usa por defecto CUBIC con

NewReno como salvaguarda.

Se puede cambiar el algoritmo usado por defecto ajustando las opciones de

compilación, tal como se ve en la imagen adjunta. Aunque al ser modular, tambien

puede ser cambiado en caliente modificando

/proc/sys/net/ipv4/tcp_congestion_control.

Linux 2.4 usando el algoritmo SACK (acuse de recibo selectivo) consigue un

rendimiento mayor que otros sistemas que también usan SACK (como OpenBSD y

FreeBSD), según Comparando las implementaciones modernas (2004/2005), se

ve que han evolucionado por caminos distintos, pero que todas aguantan bien la

congestión de red (a diferencia de la implementación original de BSD). Según las

pruebas, Linux 2.6 el que mejor rendimiento da (de entre FreeBSD 5.3, OpenBSD

3.5, y Windows XP Service Pack 2).

Como el desarrollo de Linux es un proceso abierto al público, en Internet se

encuentran páginas que explican los problemas que daba su implementación de

TCP, y cómo se han solucionado. Por ejemplo: mejora de rendimiento en la

versión 2.0.36 (marzo 1999), problemas de TCP detectados al hacer una

comparativa (1999), ajustes para 2.4 y 2.6 (febrero 2006), problemas en los

algoritmos de TCP en Linux 2.6.16.3 (junio 2006), entre otros. Es habitual que

estos fallos se detecten cuando alguien está escribiendo un documento técnico o

comparativa. En caso de comportamiento extraño, un estudio del código fuente

sirve para confirmar las sospechas y poder corregir el error en Linux.

Page 52: Sarabia Vargas.pdf

41

2.2.1 IPv4

IPv4 es la versión 4 del Protocolo IP (Internet Protocol). Esta fue la

primera versión del protocolo que se implementó extensamente, y forma la

base de Internet.

IPv4 usa direcciones de 32 bits, limitándola a 232 = 4.294.967.296 direcciones

únicas, muchas de las cuales están dedicadas a redes locales (LANs). Por el

crecimiento enorme que ha tenido del Internet (mucho más de lo que esperaba,

cuando se diseñó IPv4), combinado con el hecho de que hay desperdicio de

direcciones en muchos casos, ya hace varios años se vio que escaseaban las

direcciones IPv4.

Esta li|mitación ayudó a estimular el impulso hacia IPv6, que esta actualmente

en las primeras fases de implementación, y se espera que termine

reemplazando a IPv4.

2.2.2 Desperdicio de direcciones

¿El desperdicio de direcciones IPv4 se debe a varios factores. Uno de

los principales es que inicialmente no se consideró el enorme crecimiento que

iba a tener Internet; se asignaron bloques de direcciones grandes (de 16,7

millones de direcciones) a países, e incluso a empresas.

Otro motivo de desperdicio es que en la mayoría de las redes, exceptuando las

más pequeñas, resulta conveniente dividir la red en subredes. Dentro de cada

subred, la primera y la última dirección no son utilizables; de todos modos no

siempre se utilizan todas las direcciones restantes. Por ejemplo, si en una

subred se quieren acomodar 80 hosts, se necesita una subred de 128

direcciones (se tiene que redondear a la siguiente potencia de 2); en este

ejemplo, las 48 direcciones restantes ya no se utilizan.

Page 53: Sarabia Vargas.pdf

42

2.3 El Sistema Operativo y la Comunicación

La diferencia entre los requisitos de las aplicaciones y las características

(y necesidades) del hardware de comunicación hacen necesaria la existencia

de una interfaz a través de la que las aplicaciones accedan a los servicios de

comunicación entre computadores a través de la red (network communication).

En el sistema operativo suelen incluirse los servicios que permiten la

comunicación entre computadores.

Esta comunicación se encuentra en la base de servicios de red como WWW,

ftp, rlogin, NFS, e-mail,.... y el tipo de red utilizada es irrelevante para el

usuario.

En Linux los protocolos más frecuentemente utilizados para la comunicación

son los TCP/IP. Otros:

En la figura 8 vemos que en la Capa de enlace se muestran los protocolas que

se utilizan con mayor frecuencia en Linux. SLIP (Serial Line Interface Protocol),

PLIP (Parallel Line Interface Protocol), PPP (Point to Point Protocol), AX.25

(Comunicación por radio), IPX (Protocolo desarrollado por Novell).

Fig. 8 Pilas de protocolos.

Page 54: Sarabia Vargas.pdf

43

Linux implementa los protocolos del conjunto TCP/IP.

El acceso a los servicios de red se suele realizare a través de los sockets.

Los Sockets BSD son una interfaz de programación abstracta que se implementa

sobre la capa de sockets INET, y ésta, a su vez, sobre la capa de transporte

TCP/UDP.

2.3.1 Envío TCP/IP

Fig. 9 Pila de protocolos y la forma en que interactúan al enviar paquetes

La figura 9 ilustra el proceso que se realiza capa por capa para hacer el envío de

un paquete, desde la escritura del socket hasta que el paquete sale al medio.

Page 55: Sarabia Vargas.pdf

44

2.3.2 Recepción TCP/IP

Fig. 10 Pila de protocolos y la forma en que interactúan al recibir paquetes

La figura 10 ilustra el proceso que se realiza capa por capa para hacer la

recepción de un paquete, desde que el paquete llega del medio, hasta que la

aplicación dispone de los datos para su uso.

Page 56: Sarabia Vargas.pdf

45

Fig. 11 Pila de protocolos y módulos que los componen

El acceso a los servicios de red se suele realizare a través de los sockets. La

figura 11 muestra la capa de sockets y Los Sockets BSD que son una interfaz de

programación abstracta que se implementa sobre la capa de sockets INET, y ésta,

a su vez, sobre la capa de transporte TCP/UDP.

Page 57: Sarabia Vargas.pdf

46

2.3.3 Sockets sobre TCP/IP en Linux: Fuentes y Estructuras de Datos

Fig. 12 Bibliotecas que se utilizan en Linux para manejar sockets.

La figura 12 muestra las bibliotecas empleadas en Linux para utilizar lo sockets

necesarios para el envío y recepción de paquetes necesitados por las aplicaciones

del usuario.

Page 58: Sarabia Vargas.pdf

47

Fig .13 Creacion de estructura de datos

Tarjeta de red o NIC (Network Interface Controller, Controlador de Interfaz de Red

en español) mostrada en la figura 13, es una tarjeta de expansión que permite a

una DTE (Data Terminal Equipment) ordenador o impresora acceder a una red y

compartir recursos entre dos o más equipos (discos duros, cdrom, etc). Hay

diversos tipos de adaptadores en función del tipo de cableado o arquitectura que

se utilice en la red (coaxial fino, coaxial grueso, etc.), pero, actualmente el más

común es del tipo Ethernet utilizando un interfaz o conector RJ45.

2.3.4 Creación de un Socket

Proceso ilustrado en la figura 14:

1. Llamada a la función socket() de la biblioteca BSD

2. Se origina la llamada al sistema, sys_socket() (en net/socket.c)

3. Esta función utiliza la función sock_create() (en net/socket.c)

Page 59: Sarabia Vargas.pdf

48

Fig. 14 Creacion de un socket

Mediante inet_create(struct socket *sock, int protocol), como se muestra en la

figura 15 (net/ipv4/af_inet.c)

• Se asigna memoria a la estructura sock

• Se inicializan los valores correspondientes a TCP o UDP para la estructura

proto

• Se inicializan los valores correspondientes a familia, protocolo, etc. en la

estructura sock

Fig. 15 Creacion de un socket 2

Page 60: Sarabia Vargas.pdf

49

Fig. 16 Estructura de un socket

En la figura 16 se muestra el bloque de código que contiene la información del

estado del socket y las estructuras hacia las que apunta.

Page 61: Sarabia Vargas.pdf

50

Fig. 17 Estructura del protocolo de transmisión

En la figura 17 está el bloque de código para elaborar la estructura del protocolo

de transmisión, declarado proto_ops.

Fig. 18 Estructura de un socket

Page 62: Sarabia Vargas.pdf

51

La figura 18 muestra el código correspondiente a la estructura de un socket en la

que se utilizan apuntadores que se dirigen hacia estructuras como: proto,

sk_buff_head_recive_queue, sk_buff_head_write_queue.

Fig. 19 Estructura compuesta por una serie de operaciones para implementar los protocolos TCP y

UDP

En la figura 19 se muestra el código de la estructura compuesta por apuntadores

que van a ser utilizados en los protocolos tcp y udp.

Page 63: Sarabia Vargas.pdf

52

En informática, un inodo, nodo-i (figura 20), nodo índice o i-node en inglés

es una estructura de datos propia de los sistemas de archivos tradicionalmente

empleados en los sistemas operativos tipo UNIX como es el caso de Linux. Un

inodo contiene las características (permisos, fechas, ubicación, pero NO el

nombre) de un archivo regular, directorio, o cualquier otro objeto que pueda

contener el sistema de ficheros.

Fig. 20 Escritura del sistema de archivos en Linux

Page 64: Sarabia Vargas.pdf

53

Fig. 21 Diagrama explicativo de la interacción entre el socket, protocolo y el sistema de archivos.

En la figura 21 se presenta la interacción existente entre las estructuras antes

creadas.

1,2 (figura 22): write(socket,data, length) llama a sys_write() componente del

VFS, que comprueba características del socket, sock_write() transfiere los

parámetros de la escritura a la estructura de mensaje y llama a sock_sendmsg()

obtiene la dirección del socket a partir de su identificador, como se muestra en la

figura 22 y 23.

Page 65: Sarabia Vargas.pdf

54

Fig. 22 Uso de la memoria del sistema

Fig. 23 Estructura de envio

Page 66: Sarabia Vargas.pdf

55

Fig. 24 Almacenamiento de punteros a funciones en un vector.

El descriptor de un socket es similar a un descriptor de fichero: se pueden utilizar

llamadas estándar al sistema para operar con ficheros. Los punteros utilizados

para las distintas operaciones de fichero se almacenan en un vector como se

muestra en la figura 24.

Page 67: Sarabia Vargas.pdf

56

Fig. 25 Definición de la estructura de archivos a utilizar

En la figura 25 se muestran el código de la estructura archivo (struct file)

declarando las variables a utilizar y las estructuras con las que se va a conectar.

Fig. 26 Asociación del socket con el fichero

Page 68: Sarabia Vargas.pdf

57

Después de crear las estructuras, file y files_struct, se busca la estructura socket

asociada con el fichero a través de la función scki_lookup(), se convierten los

parámetros a la estructura del mensaje completando la correspondiente cabecera

(msghdr) y se llama a la función sock_sendmsg() situada en la biblioteca

/net/socket.c, como se muestra en el código de la figura 26.

Fig. 27 Estructuras creadas a partir del socket

En el cuadro numero 3 de la figura 27 se utiliza inet_sendmsg() (figura 28): utiliza

sock para llamar a la función de envío según el protocolo (proto tiene un puntero a

la función de envío)

En el cuadro numero 4 de la figura 27 se utiliza tcp_sendmsg(): reserva memoria

para los paquetes, trocea en MTU, crea la estructura sk_buff, y comprueba

disponibilidad en receptor.

Al crear un socket se crean, entre otras, las estructuras de datos socket, sock,

inode, proto_ops y proto, como se muestra en la figura 27.

Page 69: Sarabia Vargas.pdf

58

Fig. 28 Forma de interacción entre las estructuras creadas

Fig. 29 Protocolo enviado con las características del paquete

Extrae de socket el puntero que apunta a una estructura sock (socket INET)

A través de la estructura sock se llama a la función de envío de protocolo: El

campo prot de la estructura sock tiene los punteros de función para TCP (o UDP).

Es decir sk->prot->sendmsg(sk,msg,size) se traduce a tcp_sendmsg (figura 29).

Page 70: Sarabia Vargas.pdf

59

struct sk_buff {

/* These two members must be first. */

struct sk_buff * next; /* Next buffer in list */

struct sk_buff * prev; /* Previous buffer in list */

struct sk_buff_head * list; /* List we are on */

struct sock *sk; /* Socket we are owned by */

struct timeval stamp; /* Time we arrived */

struct net_device *dev; /* Device we arrived on/are leaving by */

/* Transport layer header */

union

{

struct tcphdr *th;

struct udphdr *uh;

struct icmphdr *icmph;

struct igmphdr *igmph;

struct iphdr *ipiph;

struct spxhdr *spxh;

unsigned char *raw;

} h;

/* Network layer header */

union

{

struct iphdr *iph;

struct ipv6hdr *ipv6h;

struct arphdr *arph;

struct ipxhdr *ipxh;

unsigned char *raw;

} nh;

/* Link layer header */

union

{

struct ethhdr *ethernet;

unsigned char *raw;

} mac;

struct dst_entry *dst;

/*

/*

* This is the control buffer. It is free to use for every

* layer. Please put your private variables there. If you

* want to keep them across layers you have to do a skb_clone()

* first. This is owned by whoever has the skb queued ATM.

*/

char cb[48];

unsigned int len; /* Length of actual data */

unsigned int data_len;

unsigned int csum; /* Checksum */

unsigned char __unused, /* Dead field, may be reused */

cloned, /* head may be cloned (check refcnt to be sure). */

pkt_type, /* Packet class */

ip_summed; /* Driver fed us an IP checksum */

__u32 priority; /* Packet queueing priority */

atomic_t users; /* User count - see datagram.c,tcp.c */

unsigned short protocol; /* Packet protocol from driver. */

unsigned short security; /* Security level of packet */

unsigned int truesize; /* Buffer size */

unsigned char *head; * Head of buffer */

unsigned char *data; /* Data head pointer */

unsigned char *tail; /* Tail pointer */

unsigned char *end; * End pointer */

void (*destructor)(struct sk_buff *);/* Destruct function */

……………………………………………

};

Fig. 30 Estructura del buffer

Page 71: Sarabia Vargas.pdf

60

En la figura 30 se muestra el código para crear struct sk_buff, que es la

estructura del buffer utilizado para almacenar momentáneamente los datos que

llegan y se utiliza la biblioteca /include/linux/skbuff.h.

Todos los protocolos utilizan el mismo sk_buff. Los protocolos de transporte y los

drivers crean estructuras de paquete para los datos que les llegan. Éstos se

gestionan a través de los buffers que se muestran en la figura 31.

Fig. 31 Estructura del buffer.

Page 72: Sarabia Vargas.pdf

61

Fig. 32 Secuencia de envío

int tcp_sendmsg(struct sock *sk, struct msghdr *msg, int size)

{

struct iovec *iov;

struct tcp_opt *tp;

struct sk_buff *skb;

int iovlen, flags;

int mss_now;

int err, copied;

long timeo;

tp = &(sk->tp_pinfo.af_tcp);

lock_sock(sk);

TCP_CHECK_TIMER(sk);

flags = msg->msg_flags;

timeo = sock_sndtimeo(sk, flags&MSG_DONTWAIT);

/* Wait for a connection to finish. */

if ((1 << sk->state) & ~(TCPF_ESTABLISHED | TCPF_CLOSE_WAIT))

if((err = wait_for_tcp_connect(sk, flags, &timeo)) != 0) goto out_err;

/* This should be in poll */

clear_bit(SOCK_ASYNC_NOSPACE, &sk->socket->flags);

Fig. 33 Estructura del proceso de envio del mensaje

Page 73: Sarabia Vargas.pdf

62

El método tcp_sendmsg() mostrado en la figura 32 y visualizado

estructuralmente en la figura 33 ubicado en la biblioteca /net/ipv4/tpc.c realiza las

siguientes acciones:

• Reserva memoria de sistema para los paquetes llamando a la la función

tcp_alloc_pskb()

• Trocea los datos en unidades MTU y crea una estructura sk_buff para

almacenar cada MTU. Se copian los datos desde la memoria de usuario a

las estructuras sk_buff. Mediante csum_and_copy_from_user() se realiza

la copia y el cálculo del código de eror. Las estructuras sk_buff para un

mismo mensaje están enlazadas.

• Llama a tcp_write_xmit() para controlar que el receptor tiene disponible

una ventana de recepción (según el algoritmo de control de flujo de ventana

deslizante) y cuando se tiene el visto bueno (se utiliza un timer) se llama a

tcp_transmit_skb()

Fig. 34 cuadro no. 5 tcp_transmit_skb

Page 74: Sarabia Vargas.pdf

63

El cuadro 5 de la figura 34, corresponde a tcp_transmit_skb() que es el compone

de la cabecera TCP para cada sk_buf y contiene la información del sock (se llama

según el número de paquetes). Decide si se encolan o se envían (figura 35).

Fig. 35 Se procede a enviar el mensaje mediante un socket

Page 75: Sarabia Vargas.pdf

64

int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb)

{

if(skb != NULL) {

struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);

struct tcp_skb_cb *tcb = TCP_SKB_CB(skb);

int tcp_header_size = tp->tcp_header_len;

struct tcphdr *th;

int sysctl_flags;

int err;

#define SYSCTL_FLAG_TSTAMPS 0x1

#define SYSCTL_FLAG_WSCALE 0x2

#define SYSCTL_FLAG_SACK 0x4

sysctl_flags = 0;

if (tcb->flags & TCPCB_FLAG_SYN) {

tcp_header_size = sizeof(struct tcphdr) + TCPOLEN_MSS;

if(sysctl_tcp_timestamps) {

tcp_header_size += TCPOLEN_TSTAMP_ALIGNED;

sysctl_flags |= SYSCTL_FLAG_TSTAMPS;

}

if(sysctl_tcp_window_scaling) {

tcp_header_size += TCPOLEN_WSCALE_ALIGNED;

sysctl_flags |= SYSCTL_FLAG_WSCALE;

}

if(sysctl_tcp_sack) {

sysctl_flags |= SYSCTL_FLAG_SACK;

if(!(sysctl_flags & SYSCTL_FLAG_TSTAMPS))

tcp_header_size += TCPOLEN_SACKPERM_ALIGNED;

}

} else if (tp->eff_sacks) {

/* A SACK is 2 pad bytes, a 2 byte header, plus

* 2 32-bit sequence numbers for each SACK block.

*/

tcp_header_size += (TCPOLEN_SACK_BASE_ALIGNED +

(tp->eff_sacks * TCPOLEN_SACK_PERBLOCK));

}

th = (struct tcphdr *) skb_push(skb, tcp_header_size);

skb->h.th = th;

skb_set_owner_w(skb, sk);

Fig. 36 Estructura del envio del mensaje mediante un socket

Page 76: Sarabia Vargas.pdf

65

/* Build TCP header and checksum it. */

th->source = sk->sport;

th->dest = sk->dport;

th->seq = htonl(tcb->seq);

th->ack_seq = htonl(tp->rcv_nxt);

*(((__u16 *)th) + 6) = htons(((tcp_header_size >> 2) << 12) | tcb->flags);

if (tcb->flags & TCPCB_FLAG_SYN) {

/* RFC1323: The window in SYN & SYN/ACK segments

* is never scaled.

*/

th->window = htons(tp->rcv_wnd);

} else {

th->window = htons(tcp_select_window(sk));

}

th->check = 0;

th->urg_ptr = 0;

if (tp->urg_mode &&

between(tp->snd_up, tcb->seq+1, tcb->seq+0xFFFF)) {

th->urg_ptr = htons(tp->snd_up-tcb->seq);

th->urg = 1;

}

if (tcb->flags & TCPCB_FLAG_SYN) {

tcp_syn_build_options((__u32 *)(th + 1),

tcp_advertise_mss(sk),

(sysctl_flags & SYSCTL_FLAG_TSTAMPS),

(sysctl_flags & SYSCTL_FLAG_SACK),

(sysctl_flags & SYSCTL_FLAG_WSCALE),

tp->rcv_wscale,

tcb->when,

tp->ts_recent);

} else {

tcp_build_and_update_options((__u32 *)(th + 1),

tp, tcb->when);

TCP_ECN_send(sk, tp, skb, tcp_header_size);

}

tp->af_specific->send_check(sk, th, skb->len, skb);

Fig. 37 Continuación de la figura 36

En las figuras 36 y 37 se muestra el código de la función tcp_transmit_skb(), el

cual se encuentra en la biblioteca /net(ipv4/tcp_output.c y Construye la cabecera

TCP y calcula el código de error (checksum) para cada sk_buff con la información

disponible en sock. Se llama a esta función tantas veces como paquetes existan.

Page 77: Sarabia Vargas.pdf

66

Fig. 38 Estructura en donde se toma la decisión de enviar o encolar el o los paquetes

Función tcp_transmit_skb() que se encuentra en la biblioteca

/net(ipv4/tcp_output.c, este llama a tcp_send_skb() (fig. 38) que decide si envía o

encola los paquetes añadiendo la correspondiente estructura sk_buff a la lista

enlazada (en los dos sentidos) con los paquetes pendientes de envío.

La función tcp_send_skb() también se encarga de actualizar el número de

secuencia de los paquetes (con la información disponible en sock)

Finalmente, tcp_transmit_skb() llama a ip_queue_xmit()

Page 78: Sarabia Vargas.pdf

67

Fig. 39 Diagrama del proceso de salida del paquete

En el cuadro 6 de la figura 39 que corresponde a la función ip_queue_xmit() la

cual se encarga de poner la cabecera IP y llamar a dev_queue_xmit() para que

vaya transmitiendo cada paquete (figura 40).

En el cuadro 7 de la figura 39 que corresponde a la función dev_queue_xmit()

actúa sobre la estructuras sk_buff de los paquetes pendientes.

La rutina socket() de la biblioteca de C devuelve un descriptor de fichero, las

llamadas a las funciones del sistema de E/S read() y write() pueden utilizarse.

Cuando un proceso se comunica a través de la red utiliza las funciones que

proporciona la capa de sockets BSD. Esta capa se encarga de tareas similares a

las del sistema de ficheros virtuales y permite administrar una estructura de datos

general para los sockets.

Debajo está la capa de sockets INET que gestiona los extremos de comunicación

para los protocolos TCP y UDP. Estos se manejan a través de estructuras de

datos sock (sockets INET). Según el tipo de socket, la capa que hay debajo es la

capa TCP, UDP, o directamente la capa IP. Debajo de la capa IP están los

dispositivos, a los que la capa IP pasa los paquetes finales. Se asume que los

Page 79: Sarabia Vargas.pdf

68

procesos que se comunican han creado sus sockets y se encuentran conectados

unos con otros a través de connect() o accept().

Fig. 40 ip_queue_xmit()

Page 80: Sarabia Vargas.pdf

69

int ip_queue_xmit(struct sk_buff *skb)

{

struct sock *sk = skb->sk;

struct ip_options *opt = sk->protinfo.af_inet.opt;

struct rtable *rt;

struct iphdr *iph;

/* Make sure we can route this packet. */

rt = (struct rtable *)__sk_dst_check(sk, 0);

if (rt == NULL) {

u32 daddr;

/* Use correct destination address if we have options. */

daddr = sk->daddr;

if(opt && opt->srr)

daddr = opt->faddr;

/* If this fails, retransmit mechanism of transport layer will

* keep trying until route appears or the connection times itself

* out.

*/

if (ip_route_output(&rt, daddr, sk->saddr,

RT_TOS(sk->protinfo.af_inet.tos) | RTO_CONN | sk->localroute,

sk->bound_dev_if))

goto no_route;

__sk_dst_set(sk, &rt->u.dst);

sk->route_caps = rt->u.dst.dev->features;

}

skb->dst = dst_clone(&rt->u.dst);

if (opt && opt->is_strictroute && rt->rt_dst != rt->rt_gateway)

goto no_route;

/* OK, we know where to send it, allocate and build IP header. */

iph = (struct iphdr *) skb_push(skb, sizeof(struct iphdr) + (opt ? opt->optlen : 0));

*((__u16 *)iph) = htons((4 << 12) | (5 << 8) | (sk->protinfo.af_inet.tos & 0xff));

iph->tot_len = htons(skb->len);

iph->frag_off = 0;

iph->ttl = sk->protinfo.af_inet.ttl;

iph->protocol = sk->protocol;

iph->saddr = rt->rt_src;

iph->daddr = rt->rt_dst;

skb->nh.iph = iph;

/* Transport layer set skb->h.foo itself. */

if(opt && opt->optlen) {

iph->ihl += opt->optlen >> 2;

ip_options_build(skb, opt, sk->daddr, rt, 0);

}

return NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev,

ip_queue_xmit2);

no_route:

IP_INC_STATS(IpOutNoRoutes);

kfree_skb(skb);

return -EHOSTUNREACH;

}

Fig. 41 estructua de código en la que ip_queue_xmit() contruye la cabecera IP

Page 81: Sarabia Vargas.pdf

70

En la figura 41 se enuncia el código de la función ip_queue_xmit() que se

encuentra en la biblioteca /net/ipv4/ip_output.c y construye la cabecera IP, busca

la ruta, añade el código de error (checksum), fragmenta y llama a

dev_queue_xmit() (fig. 42).

Fig. 42 La rutina dev_queue_xmit() se encarga de la transmisión del sk_buff correspondiente a

cada paquete, a través de la tarjeta de red (a través de una llamada a su controlador

Page 82: Sarabia Vargas.pdf

71

int dev_queue_xmit(struct sk_buff *skb)

{

struct net_device *dev = skb->dev;

struct Qdisc *q;

if (skb_shinfo(skb)->frag_list &&

!(dev->features&NETIF_F_FRAGLIST) &&

skb_linearize(skb, GFP_ATOMIC) != 0) {

kfree_skb(skb);

return -ENOMEM;

}

/* Fragmented skb is linearized if device does not support SG,

* or if at least one of fragments is in highmem and device

* does not support DMA from it.

*/

if (skb_shinfo(skb)->nr_frags &&

(!(dev->features&NETIF_F_SG) || illegal_highdma(dev, skb)) &&

skb_linearize(skb, GFP_ATOMIC) != 0) {

kfree_skb(skb);

return -ENOMEM;

}

/* If packet is not checksummed and device does not support

* checksumming for this protocol, complete checksumming here.

*/

if (skb->ip_summed == CHECKSUM_HW &&

(!(dev->features&(NETIF_F_HW_CSUM|NETIF_F_NO_CSUM)) &&

(!(dev->features&NETIF_F_IP_CSUM) ||

skb->protocol != htons(ETH_P_IP)))) {

if ((skb = skb_checksum_help(skb)) == NULL)

return -ENOMEM;

}

/* Grab device queue */

spin_lock_bh(&dev->queue_lock);

q = dev->qdisc;

if (q->enqueue) {

int ret = q->enqueue(skb, q);

qdisc_run(dev);

spin_unlock_bh(&dev->queue_lock);

return ret == NET_XMIT_BYPASS ? NET_XMIT_SUCCESS : ret;

}

/* The device has no queue. Common case for software devices:

loopback, all the sorts of tunnels...

Really, it is unlikely that xmit_lock protection is necessary here.

(f.e. loopback and IP tunnels are clean ignoring statistics counters.)

However, it is possible, that they rely on protection

made by us here.

Check this and shot the lock. It is not prone from deadlocks.

Either shot noqueue qdisc, it is even simpler 8)

*/

if (dev->flags&IFF_UP) {

int cpu = smp_processor_id();

if (dev->xmit_lock_owner != cpu) {

spin_unlock(&dev->queue_lock);

spin_lock(&dev->xmit_lock);

dev->xmit_lock_owner = cpu;

Fig. 43 La rutina dev_queue_xmit() se encarga de la transmisión del sk_buff correspondiente a cada paquete, a través de la tarjeta de red (a través de una llamada a su controlador)

Page 83: Sarabia Vargas.pdf

72

En la figura 43 se encuentra el código de la función dev_queue_xmit() la cual se

encuentra en la biblioteca /net/core/dev.c y se encarga de:

• La rutina dev_queue_xmit() se encarga de la transmisión del sk_buff

correspondiente a cada paquete, a través de la tarjeta de red (a través de

una llamada a su controlador.

• La función actúa sobre las estructuras sk_buff de todos los paquetes

pendientes de envío de todas las aplicaciones que necesitan enviar a través

del mismo dispositivo.

• Las estructuras sk_buff se encuentran enlazadas a través de una lista (en

una sola dirección) (Fig. 44).

Fig. 44 Diagrama explicativo de la interacción

Page 84: Sarabia Vargas.pdf

73

2.3.5 Ubicación de las Funciones ejecutadas para enviar un mensaje a

través de Sockets en Linux

Fig. 45 Ubicación de las funciones ejecutadas para enviar un mensaje a través de sockets en Linux

Otras estructuras o punteros que se incluyen en esta estructura de la figura 45

son:

- Cabecera de la cola de recibidos

- Cabecera de la cola de enviados

- Dirección fuente para el socket

- Colas extras para paquetes de respaldo, erróneos, etc.

- Opciones TCP para el socket

Page 85: Sarabia Vargas.pdf

74

2.3.6 Convenientes e Inconvenientes de la comunicación con TCP/IP

en Linux.

Para culminar el capítulo 2 de esta monografía, voy a enlistar de las

ventajas y desventajas de la transmisión de datos mediante TCP/IP en Linux:

Ventajas:

• Ofrece interfaz de programación (API): Sockets BSD

• Transporte fiable

• Protección entre aplicaciones

• Control de flujo

• Gestión de multitarea y multiusuario

Desventajas:

• Cambios de contexto

• Transferencias de datos entre el espacio de usuario y las estructuras

utilizadas por el sistema operativo

• Tiempo que consume la ejecución de las rutinas que implementan los

protocolos.

Page 86: Sarabia Vargas.pdf

75

CAPITULO III

LAS WIRELESS LAN EN LINUX

Page 87: Sarabia Vargas.pdf

76

3.1 LAS WIRELESS LAN

En los últimos años se ha producido un crecimiento espectacular en lo

referente al desarrollo y aceptación de las comunicaciones móviles y en concreto

de las redes de área local (Wireless LANs). La función principal de este tipo de

redes es la proporcionar conectividad y acceso a las tradicionales redes cableadas

(Ethernet, Token Ring...), como si de una extensión de éstas últimas se tratara,

pero con la flexibilidad y movilidad que ofrecen las comunicaciones inalámbricas.

El momento decisivo para la consolidación de estos sistemas fue la conclusión del

estándar IEEE 802.11 el mes de junio de 1997. En este estándar se encuentran

las especificaciones tanto físicas como a nivel MAC que hay que tener en cuenta a

la hora de implementar una red de área local inalámbrica. Otro de los estándares

definidos y que trabajan en este mismo sentido es el ETSI HIPERLAN.

WLAN (inglés < Wireless Local Area Network) es un sistema de comunicación de

datos inalámbrico flexible muy utilizado como alternativa a las redes LAN

cableadas o como extensión de éstas. Utiliza tecnología de radiofrecuencia que

permite mayor movilidad a los usuarios al minimizar las conexiones cableadas.

Las WLAN van adquiriendo importancia en muchos campos, como almacenes o

para manufactura, en los que se transmite la información en tiempo real a una

terminal central. También son muy populares en los hogares para compartir el

acceso a Internet entre varias computadoras.

La norma 802.11 ha sufrido diferentes extensiones sobre la norma para obtener

modificaciones y mejoras. De esta manera, tenemos las siguientes

especificaciones:

802.11 Especificación para 1-2 Mbps en la banda de los 2.4 GHz, usando salto de

frecuencias( FHSS) o secuencia directa (DSSS).

802.11b Extensión de 802.11 para proporcionar 11Mbps usando DSSS.

Page 88: Sarabia Vargas.pdf

77

Wi-Fi (Wireless Fidelity) Promulgado por el WECA para certificar productos

802.11b capaces de interoperar con los de otros fabricantes.

802.11a Extensión de 802.11 para proporcionar 54Mbps usando OFDM.

802.11g Extensión de 802.11 para proporcionar 20-54Mbps usando DSSS y

OFDM. Es compatible hacia atrás con 802.11b. Tiene mayor alcance y menor

consumo de potencia que 802.11a.

3.1.1 Principios de las redes WLAN

3.1.1.1 Cómo trabajan

Se utilizan ondas de radio para llevar la información de un punto a otro

sin necesidad de un medio físico guiado. Al hablar de ondas de radio nos

referimos normalmente a portadoras de radio, sobre las que va la información,

ya que realizan la función de llevar la energía a un receptor remoto. Los datos

a transmitir se superponen a la portadora de radio y de este modo pueden ser

extraídos exactamente en el receptor final.

A este proceso se le llama modulación de la portadora por la información que

está siendo transmitida. Si las ondas son transmitidas a distintas frecuencias

de radio, varias portadoras pueden existir en igual tiempo y espacio sin

interferir entre ellas. Para extraer los datos el receptor se sitúa en una

determinada frecuencia, frecuencia portadora, ignorando el resto. En una

configuración típica de LAN sin cable los puntos de acceso (transceiver)

conectan la red cableada de un lugar fijo mediante cableado normalizado. El

punto de acceso recibe la información, la almacena y la transmite entre la

WLAN y la LAN cableada. Un único punto de acceso puede soportar un

pequeño grupo de usuarios y puede funcionar en un rango de al menos treinta

metros y hasta varios cientos. El punto de acceso (o la antena conectada al

punto de acceso) es normalmente colocado en alto pero podría colocarse en

cualquier lugar en que se obtenga la cobertura de radio deseada. El usuario

final accede a la red WLAN a través de adaptadores. Estos proporcionan una

Page 89: Sarabia Vargas.pdf

78

interfaz entre el sistema de operación de red del cliente (NOS: Network

Operating System) y las ondas, mediante una antena.

3.1.1.2 Configuraciones de red para radiofrecuencia

Pueden ser de muy diversos tipos y tan simples o complejas como sea

necesario. La más básica se da entre dos ordenadores equipados con tarjetas

adaptadoras para WLAN, de modo que pueden poner en funcionamiento una red

independiente siempre que estén dentro del área que cubre cada uno. Esto es

llamado red de igual a igual (peer to peer). Cada cliente tendría únicamente

acceso a los recursos del otro cliente pero no a un servidor central. Este tipo de

redes no requiere administración o preconfiguración.

Instalando un Punto de Acceso se puede doblar la distancia a la cuál los

dispositivos pueden comunicarse, ya que estos actúan como repetidores. Desde

que el punto de acceso se conecta a la red cableada cualquier cliente tiene acceso

a los recursos del servidor y además gestionan el tráfico de la red entre los

terminales más próximos. Cada punto de acceso puede servir a varias máquinas,

según el tipo y el número de transmisiones que tienen lugar. Existen muchas

aplicaciones en el mundo real con un rango de 15 a 50 dispositivos cliente con un

solo punto de acceso.

Los puntos de acceso tienen un alcance finito, del orden de 150 m en lugares u

zonas abiertas. En zonas grandes como por ejemplo un campus universitario o un

edificio es probablemente necesario más de un punto de acceso. La meta es

cubrir el área con células que solapen sus áreas de modo que los clientes puedan

moverse sin cortes entre un grupo de puntos de acceso. Esto es llamado roaming.

iuparticulares de topologías, el diseñador de la red puede elegir usar un Punto de

Extensión (EPs) para aumentar el número de puntos de acceso a la red, de modo

que funcionan como tales pero no están enganchados a la red cableada como los

puntos de acceso. Los puntos de extensión funcionan como su nombre indica:

extienden el alcance de la red retransmitiendo las señales de un cliente a un punto

Page 90: Sarabia Vargas.pdf

79

de acceso o a otro punto de extensión. Los puntos de extensión pueden

encadenarse para pasar mensajes entre un punto de acceso y clientes lejanos de

modo que se construye un puente entre ambos.

Uno de los últimos componentes a considerar en el equipo de una WLAN es la

antena direccional. Por ejemplo: si se quiere una Lan sin cable a otro edificio a 1

km de distancia. Una solución puede ser instalar una antena en cada edificio con

línea de visión directa. La antena del primer edificio está conectada a la red

cableada mediante un punto de acceso. Igualmente en el segundo edificio se

conecta un punto de acceso, lo cual permite una conexión sin cable en esta

aplicación.

3.1.1.3 Chipset

El Circuito Integrado Auxiliar o Chipset es un conjunto de circuitos integrados que

se encarga de realizar las funciones que el microprocesador delega en ellos.

Chipset traducido literalmente del inglés significa conjunto de circuitos integrados.

Se designa circuito integrado auxiliar al circuito integrado que es periférico a un

sistema pero necesario para el funcionamiento del mismo. La mayoría de los

sistemas necesitan más de un circuito integrado auxiliar.

Contiene todas las instrucciones necesarias para operar la tarjeta inalámbrica.

3.2 LAS WIRELESS LAN EN LINUX

3.2.1 Chipset Prism

El chipset Prism es un circuito auxiliar integrado de los más antiguos en el

mercado, desde que en el año 1998 la empresa Intersil lo creó ha ido

evolucionando hasta convertirse en uno de los más potentes chipsets en el medio.

El chipset Prism es uno de los más usados por usuarios de GNU/Linux así como

BSD gracias a la integración a la que goza este chipset ya que todos los

documentos del comité de evaluación; notas, diseños de referencia, informes y

Page 91: Sarabia Vargas.pdf

80

resúmenes técnicos sobre el chipset se pueden conseguir de forma gratuita en la

página web de Intersil

3.2.1.1 Funcionamiento

Tomemos el esquema de la primera versión del Chipset Prism para explicar su

funcionamiento:

La controladora MAC(situada a la derecha en el esquema) ya que realiza la mayor

parte de las operaciones básicas del protocolo 802,11 es la encargada de

determinar si se puede utilizar la tarjeta en modo monitor (RFMON) y de la

inserción y manipulación de marcos en los paquetes así como indicar si la tarjeta

puede cumplir la función de punto de acceso

La controladora MAC de los chipsets Prism 2,0 o superior posee un motor WEP

que agiliza el trabajo con este tipo de criptografía ahorrando ciclos de CPU al

ordenador.

Prism I ---- 802,11 original

Prism II ---- 802,11b

Prism III ---- 802,11a/b

Prism Indigo - 802,11ª

Prism GT ---- 802,11b/g

Prism Duette - 802,11a/b

Prism Nitro -- red IEEE 802.11g mejorada

Prism World Radio --802,11a, b, d, g, h, i y j

Page 92: Sarabia Vargas.pdf

81

3.2.2 Chipset Hermes

El Chipset Hermes está desarrollado por Lucent. Es un chipset de código cerrado,

no obstante Lucent publicó una parte del código fuente necesario para controlar

las funciones básicas de las tarjetas ORiNOCO, a partir del cual se creó el

controlador wvlan_cs. Actualmente el controlador wvlan_cs ha sido reemplazado

por el orinoco_cs.

Gran parte de las tarjetas con chipset Hermes poseen un conector de antena

superior a los MMCX de los chipset Prism o Aironet lo que hace que los problemas

de conexión antena/tarjeta sean casi nulos.

ORiNOCO® 11a/b/g ComboCard

ORiNOCO® 11a/b/g PCI Card

3.2.3 Chipset Atheros

Atheros WLAN chipsets destaca tecnologías de punta para ampliar la gama y

reducir el consumo de electricidad de redes inalámbricas 802.11. Cuando son

incorporados en dispositivos WLAN, los chipsets Atheros ofrecen a los usuarios

finales una amplia gama, una mayor duración de la pila, e instrumentos de

dirección de red que la ayudan a reducir el costo, funcionamiento y posesión de

redes inalámbricas.

Page 93: Sarabia Vargas.pdf

82

3.3 EJEMPLO DE LA INSTALACIÓN DE UNA TARJETA

INALAMBRICA EN LINUX

Hardware

Tarjeta SMC2335W, EZ Connect 2.4Ghz/5Ghz Universal Wireless Cardbus

Adapter

Software

Módulo MadWifi para el núcleo Linux para la tarjeta con chipset Atheros

Situandote en el directorio /usr/src, crea un directorio para el módulo madwifi y

situate dentro de él:

$md madwifi

$cd madwifi

Para obtener el módulo de madwifi, como no hay en este momento una versión

publicada fuera del cvs, hay que utilizar este repositorio para obtener la versión en

curso, con el comando:

cvs -z3 -d:pserver:[email protected]:/cvsroot/madwifi co madwifi

Preparando los fuentes del núcleo antes de compilar madwifi. Para compilar un

módulo necesitas los ficheros de cabeceras del nucleo instalados en tu equipo.

Supón que tienes instalado el núcleo 2.4.25 para Intel Pentium II, III y superiores

en Debian del paquete que viene ya listo para instalar, verás que tienes instalado

el paquete:

kernel-image-2.4.25-1-686

Baja el paquete con las fuentes de esa versión del nucleo y descomprimelo:

$cd /usr/src

$apt-get install kernel-source-2.4.25

$tar jxvf kernel-source-2.4.25.tar.bz2

Además, deja el fichero de opciones de compilación con el que se esta trabajando

en el directorio del nucleo descomprimido, como si lo hubieras usado realmente

para compilar el nucleo... esto te deja este directorio del nucleo practicamente

igual que si hubieras hecho una compilación del nucleo (pero sin los ficheros

temporales y sin el resultado final de la compilación, claro):

Page 94: Sarabia Vargas.pdf

83

cp /boot/config-2.4.25-1-686 /usr/src/kernel-image-2.4.25/.config

modificar /etc/kernel-pkg.conf e incluir en el "do_clean := No"

recompilar el nucleo: make-kpkg --revision=custom.1.0 kernel_image

Enlaza ahora el directorio donde está el nucleo con el directorio build del directorio

de modulos que están en uso en tu actual nucleo:

ln -s /usr/src/kernel-source-2.4.25 /lib/modules/2.4.25-1-586tsc/build

Compilando el módulo madwifi

Ponte en el directorio donde lo descomprimiste antes, y ejecuta make:

cd /usr/src/madwifi

make

make install

Ya está listo el módulo.

Asegurate de que está conectada la tarjeta (conectala y si usas pcmcia_cs verás

algo como lo siguiente en tu syslog):

May 14 00:32:10 gordon kernel: cs: cb_alloc(bus 1): vendor 0x168c, device

0x0012

May 14 00:32:10 gordon kernel: PCI: Enabling device 01:00.0 (0000 -> 0002)

May 14 00:32:10 gordon cardmgr [419] : socket 0: ?CardBus hotplug device

Ya que pcmcia_cs no conoce nada sobre tu tarjeta, no carga el modulo, así que lo

cargas a mano:

modprobe ath_pci

y el syslog reflejará algo como esto:

May 14 00:32:33 gordon kernel: ath_hal: 0.9.8.6

May 14 00:32:34 gordon kernel: wlan: 0.7.3.1 BETA

May 14 00:32:34 gordon kernel: ath_pci: 0.8.5.4 BETA

May 14 00:32:34 gordon kernel: ath_pci: cache line size not set; forcing 8

May 14 00:32:34 gordon kernel: Setup queue (0) for WME_AC_BK

May 14 00:32:34 gordon kernel: Setup queue (1) for WME_AC_BE

May 14 00:32:34 gordon kernel: Setup queue (2) for WME_AC_VI

May 14 00:32:34 gordon kernel: Setup queue (3) for WME_AC_VO

May 14 00:32:34 gordon kernel: ath0: mac 4.2 phy 3.0 5ghz radio 1.7 2ghz radio

2.3

Page 95: Sarabia Vargas.pdf

84

May 14 00:32:34 gordon kernel: ath0: 11a rates: 6Mbps 9Mbps 12Mbps 18Mbps

24Mbps 36Mbps 48Mbps 54Mbps

May 14 00:32:34 gordon kernel: ath0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps

May 14 00:32:34 gordon kernel: ath0: turbo rates: 6Mbps 9Mbps 12Mbps 18Mbps

24Mbps 36Mbps 48Mbps 54Mbps

May 14 00:32:34 gordon kernel: ath0: 802.11 address: 00:01:24:60:0d:6d

May 14 00:32:34 gordon kernel: ath0: Atheros 5211: mem=0x10400000, irq=11

Si quieres que el módulo se cargue siempre al arrancar (por simplificar, no podrás

quitar y poner la tarjeta como lo haces habitualmente con una pcmcia que si esté

contemplada por pcmcia_cs), añade este módulo en /etc/modules:

ath_pci

Configurar la interface ath0 (ojo, no eth con e, si no con a)

Manualmente:

iwconfig ath0 essid redlibre mode managed rate auto

pump -i ath0

(necesitas tener instalado pump, claro, para obtener una direccion ip

automaticamente de tu servidor dhcp), o bien:

ifconfig ath0 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255

En el fichero /etc/network/interfaces:

auto ath0

iface ath0 inet static

address 10.0.0.1

network 10.0.0.0

netmask 255.255.255.0

broadcast 10.0.0.255

#mode 3 para 802.11g, 2 para 802.11b y 1 para 802.11a

#mode no es necesario, la tarjeta chequea en buscando un ap por todos los

canales

#up /sbin/iwpriv ath0 mode 3

up /sbin/iwconfig ath0 essid "redlibre" mode managed rate auto

Page 96: Sarabia Vargas.pdf

85

CAPITULO 4

MODIFICACIONES A UN DRIVER

PARA CALIDAD DE SERVICIO.

SWAN

(Stateless Wireless Ad hoc Networks)

Page 97: Sarabia Vargas.pdf

86

4.1 Stateless Wireless Ad hoc Networks

4.1.1 Resumen

Los sistemas inalámbricos se han convertido en el segmento de mayor y

más rápido crecimiento en las telecomunicaciones, donde su principal

consecuencia han sido dotar de movilidad a los nodos de la red al liberarlos de sus

conexiones físicas, además también están empezando a ofrecer múltiples

servicios con calidad (QoS) como una conversación telefónica, la transferencia de

ficheros, acceso a la web o la realización de videoconferencia, sin restricciones de

lugar y de tiempo. Estos ejemplos de comunicación inalámbrica espontánea entre

dispositivos se denomina redes Ad Hoc, permitiendo a los dispositivos establecer

la comunicación, en cualquier momento y en cualquier lugar. En realidad, la

formación de redes Ad Hoc como tal no es nueva, sino lo es nuevo es la forma de

configuración y uso de sus elementos [6]. Una aproximación para otorgar calidad

de servicio es la de diferenciar entre el conjunto de paquetes que circulan por la

red clasificando los paquetes en un número pequeño de tipos de servicios y utiliza

mecanismos de prioridad para proporcionar una calidad de servicio adecuada al

tráfico. Este estudio preliminar se realizo aplicando servicios diferenciados con el

modelo SWAN [1] en el entorno del simulador ns2. SWAN es un modelo de red

“sin estados”, el cual usa algoritmos de control distribuidos para entregar servicios

diferenciados en MANET de una manera escalable y robusta. Estos algoritmos

aplican controles basados en retroalimentaciones para soportar servicios de

tiempo real “soft” y servicios diferenciados en redes inalámbricas Ad Hoc. El

modelo usa el rate control (rc) para trafico UDP y TCP best effort, y un admission

control (ac) para trafico UDP de tiempo real. SWAN aplica la notificación explicita

de congestionamiento (ECN) para regular dinámicamente trafico de tiempo real

admitido. El novedoso aspecto de este modelo es que no requiere de QoS en la

capa MAC.

Page 98: Sarabia Vargas.pdf

87

4.1.2 Introducción

Los sistemas inalámbricos han capturado la atención y la imaginación del publico,

y se han convertido en el segmento de mayor y más rápido crecimiento en las

telecomunicaciones, donde su principal consecuencia han sido dotar de movilidad a los

nodos de la red al liberarlos de sus conexiones físicas (cableado), dichos nodos pueden

funcionar de encaminadores y de anfitriones (Host).

Los sistemas inalámbricos también están empezando a ofrecer múltiples servicios con

calidad (Quality of Service –QoS-) como una conversación telefónica, la transferencia de

ficheros, acceso a la web o la realización de videoconferencia, sin restricciones de lugar y

de tiempo. Estos ejemplos de comunicación inalámbrica espontánea entre dispositivos o

nodos podría ser definido de manera informal como un esquema, al que a menudo se

denomina formación de redes Ad Hoc, que permite a los dispositivos establecer la

comunicación, en cualquier momento y en cualquier lugar. En realidad, la formación de

redes Ad Hoc como tal no es nueva, sino lo es nuevo es la forma de configuración, de uso

y de sus elementos. [6]

4.1.3 ¿Qué son las redes Ad Hoc?

Las redes Ad Hoc consisten en nodos móviles interconectados con enlaces

de comunicación inalámbricos multisaltos que a diferencia de las redes

inalámbricas convencionales, las redes Ad Hoc no tienen una infraestructura fija

de red o administración central, donde la topología de estas redes cambia

dinámicamente con nodos móviles entrando o saliendo de la red, y con

consecuencias de que algunos enlaces de comunicación llegan a ser inválidos [4],

por ello uno de los principales objetivos en este tipo de redes es encontrar una

trayectoria que tenga suficientes recursos para satisfacer las limitaciones del

retardo, ancho de banda, calidad de los datos multimedia (video, audio, etc) y/o

otras métricas [5] enviando paquetes hacia otros nodos y ejecutar las aplicaciones

del usuario, adicionalmente también todos los nodos pueden ser móviles

dinámicamente, creando una red inalámbrica auto-creciente, auto-organizada y

auto-administrada. [6] Por lo tanto, las comunicaciones en estas redes se crearían

únicamente por interacciones entre sus nodos móviles inalámbricos, usando esas

Page 99: Sarabia Vargas.pdf

88

interacciones para proporcionar el control de flujo necesario y funciones de

administración, [4] pero siendo la comunicación degradada en alguno casos por la

movilidad de sus nodos. Es decir, los nodos pueden entrar y salir de áreas de

mayor interferencia, o alejarse repentinamente de una zona de cobertura de otro

nodo con el cual establecía una comunicación. Además, contrariamente a las

redes cableadas, el número de integrantes en una red de nodos móviles, puede

variar bastante dinámicamente, al punto de saturar dicha red.

4.1.4 Retos a superar en Ad Hoc.

De una forma resumida y no por orden de importancia, son numerosos los

retos que deben superarse para alcanzar los beneficios prácticos de las redes Ad

Hoc inalámbricas, tales como:

• Encaminamiento efectivo (Throughput alto, perdida nula o baja de

paquetes, etc.)

• Métodos de control de acceso al medio ( o canal)

• Administración móvil

• Seguridad

• La calidad de servicio (QoS) de las aplicaciones multimedia, que es

afectada principalmente por el retardo y por la administración del disponible

ancho de banda, entre otros factores. [4]

• Conseguir elementos / equipos con potencia extremadamente baja para

evitar tener que recargar frecuentemente la batería.

• Dispositivos de poco peso debido a que son portátiles y deben poder

llevarse encima (wearable).

• Conseguir bajos costos en el mercado

• Resolver el problema de las interferencias.

Page 100: Sarabia Vargas.pdf

89

• Conseguir interoperabilidad entre los diferentes equipos que están

moviéndose dentro en la red, a través de un eficiente modelo y protocolo de

encaminamiento.

• Creación de contenidos.

• Los factores ambientales juegan un papel muy importante, no solo

limitando la distancia entre dos nodos, sino agregándole ruido, interferencia

y variedad de terrenos que obstruyen la señal. [6]

4.1.5 QoS en Redes Ad Hoc

El concepto de calidad de servicio (QoS) ha sido propuesto para evaluar las

prestaciones cuantitativas y cualitativas de un conjunto de requerimientos de

servicio que serán encontrados, otorgados y mantenidos por la red mientras

transporta un paquete desde el origen al destino, siendo una función de la red

satisfacer ese grupo de requerimientos en términos de retardo estático extremo a

extremo (end-to-end), disponibilidad de ancho de banda, probabilidad de pérdidas

de paquetes en una conexión.[3]. Por ejemplo en multimedia esto puede incluir

calidad de imágenes, o tiempo de respuesta, al hecho que una imagen fue

producida o fue una respuesta a un estimulo ocurrido. La QoS puede estar

delimitada por un conjunto de condiciones, las cuales pueden ser:

• Link constraints: especifican la restricción en el uso de los enlaces, p.e.

tener ancho de banda disponible para cierta aplicación.

• Path constraints: especifica los requerimientos QoS extremo a extremo en

una simple trayectoria.

• Tree constraints: especifica los requerimientos para un árbol multicast. [8]

El costo de transporte y el rendimiento total de la red pueden ser incluidos como

parámetros. El costo generalmente se describe en términos monetarios por

proceso o en término de tiempo usado en un proceso. Es frecuentemente el caso

de que el costo será usado para poner los límites superiores e inferiores a las

Page 101: Sarabia Vargas.pdf

90

otras características. El costo de un enlace también puede ser en función de la

utilización del buffer o ancho de banda. El costo total de una ruta (árbol) es el total

del costo de todos los enlaces en la trayectoria. La optimización del problema es

encontrar la trayectoria con menor costo entre todas las rutas factibles.

Obviamente que los recursos en la red de deben estar disponibles durante la

invocación del servicio para la garantía QoS. La primera tarea esencial es

encontrar una adecuada ruta a través de la red, entre el origen y el destino que

tendrá los recursos necesarios disponibles para encontrar las características de

QoS para el servicio deseado. La tarea de reservación recursos (pedir, identificar y

terminar) es el otro ingrediente indispensable de QoS. [4]

4.1.6 Características de los enlaces con QoS para esquemas de

tiempo real

Para tener tráfico en tiempo real como voz, video en vivo, debe mantenerse

bajo cierto límites el retardo total y la varianza del retardo, el cual se puede lograr

reduciendo hasta donde sea posible el número de saltos, o encaminadores

intermedios en el camino. Con cambios potencialmente impredecibles de topología

en una red Ad Hoc este objetivo es difícil de lograr.

Aunque existen aplicaciones en tiempo real “Blandas” (soft) presentan cierta

tolerancia en cuanto a que los mensajes lleguen después de su deadline.

Muchas de las aplicaciones multimedia están en esta categoría. Pero las

aplicaciones de Tiempo Real “Duras” (hard) permiten imponer cualquier restricción

para establecer la comunicación, pero una vez establecida no se permite que

ningún mensaje llegue después de su deadline y mucho menos que se pierda

mensajes. En esta categoría están las aplicaciones industriales por ejemplo que

controlan robots o sistemas de seguridad.

Una aproximación para otorgar calidad de servicio es diferenciar entre el conjunto

de paquetes que circulan por la red. Cuando se desarrolló el concepto de

conmutación de paquetes, se aplicó un servicio de mejor esfuerzo, el cual trata los

paquetes sin hacer ninguna diferenciación entre los diferentes tipos de flujos.

Page 102: Sarabia Vargas.pdf

91

Todos los paquetes reciben la misma prioridad al momento de ser procesados por

el planificador de paquetes el cual se encarga de decidir cual paquete es el que va

a pasar primero al enlace. De esta manera, los paquetes son más sensibles a los

retardos.

Una manera de mejorar este esquema del mejor esfuerzo, es tratar a los paquetes

de manera diferente, tomando la decisión de cómo procesarlo dependiendo del

contenido del encabezado del paquete. Los campos que son de utilidad en el

encabezado para el manejo del paquete son los campos de dirección fuente y

destino, el puerto de origen y destino, tipo de servicio (ToS) y el protocolo. El

encaminador basándose en estos datos puede tomar una decisión de cómo

procesar el paquete. Sin embargo, cuando la cantidad de paquetes es muy grande

–varios cientos o miles de paquetes por segundo- esto puede repercutir en el

rendimiento del encaminador.

Si existen similitudes entre diferentes paquetes, es posible clasificar los paquetes

en grupos y tomar decisiones de cómo procesar los paquetes dependiendo del

grupo al que pertenezca un paquete. Este mecanismo se logra reservando ciertos

bits en el encabezado del paquete –de hecho el campo de tipo de servicio del

protocolo Ipv4 estaba reservado para este propósito- y definir en él, el tipo de

servicio que se le debe aplicar al paquete de acuerdo a las políticas que se hayan

especificado para ese propósito. [7]

4.1.7 Servicios diferenciados (DiffServ)

El modelo de Servicios Diferenciados se basa en tráfico sin reservación.

Este modelo clasifica los paquetes en un número pequeño de tipos de servicios y

utiliza mecanismos de prioridad para proporcionar una calidad de servicio

adecuada al tráfico. El objetivo principal de este mecanismo es asignar el ancho

de banda a diferentes usuarios en una forma controlada durante periodos de

congestión. Este mecanismo se aplica igualmente a aplicaciones tradicionales

basadas sobre TCP, tales como transferencia de archivos, accesos a bases de

datos o Servidores de Web, y nuevas clases de aplicaciones tales como audio o

video en tiempo real. [9] Los Servicios Diferenciados pueden proveer a los

Page 103: Sarabia Vargas.pdf

92

usuarios, una expectativa predecible del servicio que las redes le proveerá en

tiempos de congestión, y permite que diferentes usuarios obtengan diferentes

niveles de servicio de la red. [3]

4.1.8 Modelo SWAN: Service Differentiation in Stateless Wireless Ad

Hoc Networks

El objetivo de este punto es realizar estudios preliminares aplicando

servicios diferenciados con el modelo SWAN [1] en el entorno del simulador ns2.

SWAN es un modelo de red “sin estados”, el cual usa algoritmos de control

distribuidos para entregar servicios diferenciados en MANET de una manera

escalable y robusta. Estos algoritmos aplican controles basados en

retroalimentaciones para soportar servicios de tiempo real “soft” y servicios

diferenciados en redes inalámbricas Ad Hoc. El modelo usa el rate control (rc)

para trafico UDP y TCP best effort, y un admission control (ac) para trafico UDP de

tiempo real. SWAN aplica la notificación explicita de congestionamiento (ECN)

para regular dinámicamente trafico de tiempo real admitido. El novedoso aspecto

de este modelo es que no requiere de QoS en la capa MAC. [2]

A continuación se presenta la configuración de la pc en la que fueron realizdas las

pruebas:

4.1.9 Hardware and Software requirement

• Laptops/mini-laptops

At least Three Laptops: One for Server (source node), Intermediate node,

Client (destination node) with Intel Pentium or higher.

• Wireless Adapter Card

For SWAN Admission Controller, D-Link Wireless Adapter Card (IEEE

802.11) is needed Wireless Adapter Card should be configured to AdHoc

mode. Linksys or Orinoco card may work as well.

For SWAN Rate Controller, Aironet Wireless Adapter Card (IEEE 802.11) is

needed.

Page 104: Sarabia Vargas.pdf

93

• Operating System

SWAN Project Testbed runs on Linux Kernel version 2.2.18. (RedHat Linux

7.3)

• Complier

The SWAN Testbed is compiled by gcc compiler. Tcl/Tk 8.x is also needed.

• Others

The libpcap package is needed. If /usr/include/pcap doesn't exist, you

should install it. (For download and installation, see 2.) MpegTv is used

for streaming video at destination node for SWAN Admission Controller.

4.1.10 Metodología

El modelo se aplico en un entorno de simulación MANET con protocolo

AODV (Fig. 46), evaluando los parámetros de: Throughput, Retardo medio y

Paquetes perdidos.

El entorno de simulación considera los siguientes escenarios:

• Fuentes de video: 1 y 19 (Trafico de tiempo real)

• Fuentes de FTP: 1 y 19 (Trafico de tiempo no real)

• Área de simulación: 500x2500 mts.

• 100 nodos

• Tiempo de simulación de 100 seg.

• Tiempo de pausa de 20 seg.

• Movimiento Random Waypoint (RWP)

Page 105: Sarabia Vargas.pdf

94

Fig. 46 Metodología del modelo aplicado

4.1.11 Resultados y conclusiones

a) 19 Fuentes de tiempo real (video) y 1 de tiempo no real (FTP)

Se observa que cuando esta activado el admission control (ac), el

throughput de tiempo real aumenta debido a que se le da prioridad, y por lo tanto

su retado medio y cantidad de paquetes perdidos disminuyen. Fig. 47

Page 106: Sarabia Vargas.pdf

95

Fig. 47 Resultados obtenidos con el modulo admission control

Page 107: Sarabia Vargas.pdf

96

Fig. 48 Resultados obtenidos con el modulo admission control

b) Fuente de tiempo real (video) y 19 de tiempo no real (FTP).

Se puede observar que aquí también al igual que el punto anterior, el aplicar la

diferenciación de servicio mejora o disminuye las prestaciones evaluadas con un

trafico mayoritariamente de tiempo no real. Fig. 49.

Fig. 49 resultados con un trafico mayoritariamente de tiempo real

Page 108: Sarabia Vargas.pdf

97

Fig. 50 resultados con un tráfico mayoritariamente de tiempo real

Page 109: Sarabia Vargas.pdf

98

CONCLUSIÓN

Page 110: Sarabia Vargas.pdf

99

Con las WLANs la red, por sí misma, es móvil y elimina la necesidad de

usar cables y establece nuevas aplicaciones añadiendo flexibilidad a la red, y lo

más importante incrementa la productividad y eficiencia en las empresas donde

está instalada. Un usuario dentro de una red WLAN puede transmitir y recibir voz,

datos y vídeo dentro de edificios, entre edificios o campus universitarios e inclusive

sobre áreas metropolitanas a velocidades de 11 Mbit/s, o superiores.

Pero no solamente encuentran aplicación en las empresas, sino que su extensión

a ambientes públicos, en áreas metropolitanas, como medio de acceso a Internet

o para cubrir zonas de alta densidad de usuarios (hot spots) en las próximas redes

de tercera generación (3G) se ven como las aplicaciones de más interés durante

los próximos años Muchos de los fabricantes de ordenadores y equipos de

comunicaciones como son los PDAs (Personal Digital Assistants), módems,

terminales de punto de venta y otros dispositivos están introduciendo aplicaciones

soportadas en las comunicaciones inalámbricas.

Las nuevas posibilidades que ofrecen las WLANs son: permitir una fácil

incorporación de nuevos usuarios a la red, ofrecer una alternativa de bajo costo a

los sistemas cableados, además de la posibilidad para acceder a cualquier base

de datos o cualquier aplicación localizada dentro de la red.

Dentro del enorme horizonte de las comunicaciones inalámbricas y la computación

móvil, las redes inalámbricas van ganando adeptos como una tecnología madura y

robusta que permite resolver varios de los inconvenientes del uso del cable como

medio físico de enlace en las comunicaciones, muchas de ellas de vital

importancia en el trabajo cotidiano.

La tecnología WLAN es una tecnología madura perfectamente aplicable y

funcional hoy en día a un coste asequible pero haciendo especial hincapié, en que

si se decide implantar, se deben tomar medidas de seguridad.

Entre las medidas de seguridad que se deben tomar, las más básicas son una

correcta configuración de la red para impedir el acceso a la misma de usuarios no

autorizados y hacer que la información circule de forma cifrada. Los dos ámbitos

de aplicación son en la empresa como sustitución a las redes cableadas y en la

otra cara de la moneda está el surgimiento incipiente de las redes ciudadanas, que

se apoyan en esta tecnología y en el software libre.

Page 111: Sarabia Vargas.pdf

100

Realizando una profunda comparación de la gama de redes inalámbricas con las

LANs cableadas, se llega a la conclusión que ambos sistemas de

telecomunicación no son en absoluto excluyentes sino complementarios, ya que

es el sistema inalámbrico el que funciona con el usuario final, pero este sistema se

basa en los sistemas alámbricos.

Con las redes inalámbricas se ofrece como gran prestación el ahorro del costoso

cableado del edificio. Como punto negativo se tiene que comentar el inconveniente

de transmitir por un medio que cuenta con interferencias y otros factores no

propicios, lo que dificulta poder alcanzar velocidades comparables con las de las

redes alámbricas.

En un futuro se puede prever la integración de las dos tecnologías, es decir la

tecnología alámbrica y la inalámbrica, de manera que se aplique la que mejor

resultado tenga en cada uno de los casos que se presenten.

Para redes inalámbricas móviles, las prestaciones de los protocolos de

encaminamiento son afectadas por muchos factores, como la tecnología

empleada, el comportamiento del nivel de enlace, movilidad, dispersión y

velocidad de los nodos, etc. Por otro lado el modelo SWAN tuvo buenas

prestaciones al tener baja tasa de paquetes perdidos, pero mostró un incremento

en el retardo medio y jitter debido a su naturaleza reactiva con tamaño de

paquetes de 512 bytes. Sus prestaciones se mantuvieron mas estables y

eficientes en los escenarios altamente dinámicos. También se observo que la

aplicación de servicios diferenciados en MANET, mejora las prestaciones del

trafico en tiempo real, teniendo una mejor calidad de servicio extremo – extremo.

Como resultados se espera que el lector de este trabajo haya sido capaz de

instalar el sistema operativo Linux, así como también, de instalar su tarjeta de red

inalámbrica para poder realizar sus pruebas y, basándose en los resultados aquí

mostrados, tener un punto de referencia con el que pueda comparar sus propios

datos.

Los resultados mostrados en el último capítulo esta basados en un experimento

mediante un simulador de redes y una configuración punto a punto (Ad Hoc), y se

espera que en el futuro se implementen algoritmos que provean de calidad de

servicio a las redes de tipo infraestructura con salida a internet, alcanzando, con

Page 112: Sarabia Vargas.pdf

101

esto, evitar al máximo perdida de información y por lo tanto optimizar la

transmisión de datos.

Page 113: Sarabia Vargas.pdf

102

BIBLIOGRAFIA

Instant Byte S.L., http://www.instantbyte.com , ejemplo de Linux, 20 de julio de

2007.

http://sopa.dis.ulpgc.es/ii-aso/portal_aso/practicas/modulo.htm, 28 de agosto de

2007.

http://es.wikipedia.org/wiki/Linux, 15 de marzo de 2007

[1] G-S. Ahn, T. Campbell, A. Veres and L. Sun, “Stateless Wireless Ad Hoc

Networks (SWAN)”. http://www.comet.columbia.edu/swan/draft-ahn-swan-manet-

00.txt. Columbia University, October 2002.

[2] G-S. Ahn, T. Campbell, A. Veres and L. Sun, “SWAN: Service Differentiation in

Stateless Wireless Ad Hoc Networks”, Proc. IEEE INFOCOM'2002, New York,

New York, 2002.

[3] S. Andreozzi, “DiffServ simulations using the Network Simulator: Requirements,

Issues and Solutions”, Master’s Thesis, University of Pisa, 2001

[4] S. Chakrabarti and A. Mishra, “QoS issues in Ad Hoc Wireless Networks”, IEEE

Communication Magazine, February 2001.

[5] S. Chen and K. Nahrstedt, “Distributed QoS routing with imprecise state

information”, In 7th Int. Conf. on Computer Communications and Networks (IC3N),

October 1998, Urbana ,IL

[6] M. Fording, P. Johansson and P. Larsson, “Wireless Ad Hoc Networking –The

Art of Networking without a network ”, Ericsson Review Num 4, 2000

[7] P. Pieda, J. Ethridge, M. Baines and F. Shallwani, “A Network Simulator

Differentiated Services Implementation”, Open IP, Nortel Networks, July 26, 2002.

[8] A .Qayyum, L. Viennot and A. Laouiti, “Multipoint relaying: An efficient

technique for flooding in mobile wireless networks”, 35th Annual Hawaii

International Conference on System Sciences (HICSS'2002).

[9] V. Rexhepi, G. Karagiannis and G. Heijenk, "A Framework for QoS and Mobility

in the Internet Next Generation”, EUNICE 2000 proceedings, September 2000.

Beck, M., et al.:”Linux Kernel Programming”. Tercera Edición. Addison Wesley,

2002.

Page 114: Sarabia Vargas.pdf

103

Herbert, T.F.:”The Linux TCP/IP Stack: Networking for Embedded Systems”.

Charles River Media, 2004 (Capítulo 6)