viernes, 29 de noviembre de 2013

Destination Finder == Sistema Distribuido

  • El sitio web Destination Finder, diseñado por la empresa SoftCake Inc. puede ser considerado como un sistema distribuido por lo siguiente: cada "modulo" que integra la pagina web, fue distribuida en diferentes equipos y funciono de manera exitosa, haciendo uso de los protocolos TCP/IP, logramos hacer una distribución de recursos, permitiendo una comunicación estable y eficiente entre todos los equipos, permitiendo el acceso a una sola base de Datos y coordinando el orden de ejecución de las acciones de cada parte, logramos una interfaz simple, comprensible y rápida.
  • Cumpliendo con las siguientes características podemos asegurar que este proyecto si es un sistema distribuido:


    1. Transparencia: la mayoría de los usuarios que usen nuestra plataforma web, percibirán a esta como un solo objeto, y no un "rompecabezas" que esta hecho por partes.
    2. Concurrencia: el sistema esta habilitado para la realización de multiples tareas de procesamiento y fue comprobado por medio del JMeter.
    3. Escalable: fue diseñado de tal manera que pueda seguir siendo desarrollado posteriormente sin necesidad de realizar muchos ajustes para permitir la "expansión" de su funcionalidad.
    4. Fallos independientes: al ser un proyecto integrado por partes, el fallo de un modulo, no podrá afectar el desempeño de los otros.
El sitio web esta disponible en este link "Destination Finder"

domingo, 24 de noviembre de 2013

Cliente V2.0



import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.Timer;
import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;
/**
 *
 * @author Eduardo Yair-
 */
public class Cliente extends JLabel implements Juego{
    JFrame frm=new JFrame("Speed Racer GT");
    Socket sokete;
    ArrayList<Enemigo> racerx=new ArrayList<Enemigo>();
    ArrayList<Auto> speedr=new ArrayList<Auto>();
    Timer t;
    ObjectInputStream entradaOBJ;
    ObjectOutputStream objSaliente;
    Image track=new ImageIcon(getClass().getResource("media/fondo.png")).getImage();
    Image autoi=new ImageIcon(getClass().getResource("media/carpot.png")).getImage();
    Image enemyi=new ImageIcon(getClass().getResource("media/enemy.png")).getImage();
    Image enemyj=new ImageIcon(getClass().getResource("media/enemy1.png")).getImage();
    Image enemyk=new ImageIcon(getClass().getResource("media/enemy2.png")).getImage();
    Image enemyl=new ImageIcon(getClass().getResource("media/ship.png")).getImage();

    int pos=0;
    public static void main(String args[]) throws Exception{
        new Cliente();
    }
    public void bkgrndmsk()throws Exception {
        URL url = new URL(  "https://dl.dropboxusercontent.com/u/96424843/hocus.wav");      
        //String strFilename = "media/hocus.wav";
        //File sound=new File(strFilename);
        //InputStream in = ClassLoader.getSystemResourceAsStream("media/hocus.wav");
        //URL urlToClip = this.getClass().getResource("media/hocus.wav");
        Clip clip = AudioSystem.getClip();
        // getAudioInputStream() also accepts a File or InputStream
        AudioInputStream ais = AudioSystem.getAudioInputStream(url);
        clip.open(ais);
        clip.loop(Clip.LOOP_CONTINUOUSLY);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JOptionPane.showMessageDialog(null, "La música se terminara cuando acabe el juego");
            }
        });
    }
    public Cliente() throws Exception{
        super();
        bkgrndmsk();
        conectar();
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension pantalla=Toolkit.getDefaultToolkit().getScreenSize();
        frm.setSize(pantalla);
        frm.setUndecorated(true);
        frm.add(this);
        frm.setVisible(true);
        this.setFocusable(true);
        this.addKeyListener(error85);
        setBackground(Color.BLACK);
        t=new Timer(5,updater);
       
        t.start();
    }
    public void dibujarAuto(Auto c,Graphics2D g2d){
        if(!c.perder){
            g2d.drawImage(autoi,c.posx,c.posy,c.ancho,c.alto , null);
        }
    }
     public void paint(Graphics g){
        super.paint(g);
        Graphics2D g2d=(Graphics2D)g;
        g2d.setColor(Color.white);
        g2d.drawImage(track, 0, pos,frm.getWidth() ,frm.getHeight() , null);
        g2d.drawImage(track, 0, 0-frm.getHeight()+pos,frm.getWidth() , frm.getHeight() , null);
        for(Auto a:speedr){
            dibujarAuto(a,g2d);
        }
        dibujarEnemigos(racerx,g2d);
    }
    public void dibujarEnemigos(ArrayList<Enemigo> enem,Graphics2D g2d){
        for(int i=0;i<enem.size();i++){
            int r=i%3;
            if(r==0){
                g2d.drawImage(enemyi,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);
            }else if(r==1){
                g2d.drawImage(enemyj,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);
            }else if(Math.random()*2<=4){
                g2d.drawImage(enemyk,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);
            }else if(Math.random()*2>=4){
                g2d.drawImage(enemyl,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);}
        }
    }
    public void recibirEnemigos(){
        try{
            //s.setSoTimeout(5);
            Mensaje mensaje=(Mensaje)entradaOBJ.readObject();
           
            racerx=mensaje.enemigos;
            speedr=mensaje.autos;
            pos=mensaje.fondo;
            //imprimirEnemigos();
        }catch(IOException e ){
            //e.printStackTrace();
            //System.exit(0);
        }
        catch(Exception e ){
            //e.printStackTrace();
        }
    }
    @Override
    public void conectar() {
        try{
            //System.out.println("Estableciendo Conexión");
            InetAddress ad=InetAddress.getByName(JOptionPane.showInputDialog("IP (Server): "));
            sokete=new Socket(ad,Integer.parseInt(JOptionPane.showInputDialog("Puerto: ")));
            entradaOBJ=new ObjectInputStream(sokete.getInputStream());
            objSaliente=new ObjectOutputStream(sokete.getOutputStream());
        }catch(Exception e){
            //e.printStackTrace();
        }
    }
    public void mover(Movimiento m) {
        try{
            objSaliente.writeObject(m);
            //ois.readInt();
            //Thread.sleep(200);
            objSaliente.flush();
            //sokete.getOutputStream().flush();
            //ooo.reset();
           
        }catch(Exception e){
            //e.printStackTrace();
        }
    }

    @Override
    public void actualizar() {
            recibirEnemigos();
            repaint();
    }

    @Override
    public void ganar() {
    }

    @Override
    public void perder() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    ActionListener updater=new ActionListener(){
        public void actionPerformed(ActionEvent ae) {
            actualizar();
        }
       
    };
    KeyListener error85=new KeyListener(){
        public void keyTyped(KeyEvent ke) {
        }
        public void keyPressed(KeyEvent ke) {
            if(ke.getKeyCode()==KeyEvent.VK_ESCAPE){
                System.exit(0);
            }
            Movimiento m=new Movimiento(ke,true);
            mover(m);
        }
        public void keyReleased(KeyEvent ke) {
            Movimiento m=new Movimiento(ke,false);
            mover(m);
        }
    };
}

miércoles, 20 de noviembre de 2013

Juego Distribuido ("Speed Racer 2049")

Juego.java


/**
 *
 * @author Eduardo Yair-
 */
import java.awt.Graphics2D;
import java.util.ArrayList;
import javax.swing.JPanel;

public interface Juego{
public void conectar();
public void mover(Movimiento m);
public void actualizar();
public void ganar();
public void perder();
public void recibirEnemigos();
public void dibujarAuto(Auto a,Graphics2D g2d);
public void dibujarEnemigos(ArrayList<Enemigo> enem,Graphics2D g2d);
}


Cliente.java



import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.Timer;
/**
 *
 * @author Eduardo Yair-
 */
public class Cliente extends JLabel implements Juego{
    JFrame ventana=new JFrame("Speed Racer 2049");
    Socket s;
    ArrayList<Enemigo> enemigos=new ArrayList<Enemigo>();
    ArrayList<Auto> autos=new ArrayList<Auto>();
    Timer t;
    ObjectInputStream ois;
    Image fondo=new ImageIcon(getClass().getResource("img/fondo.png")).getImage();
    Image autoi=new ImageIcon(getClass().getResource("img/carpot.png")).getImage();
    Image enemyi=new ImageIcon(getClass().getResource("img/enemy.png")).getImage();
    Image enemyj=new ImageIcon(getClass().getResource("img/enemy1.png")).getImage();
    Image enemyk=new ImageIcon(getClass().getResource("img/enemy2.png")).getImage();
    Image enemyl=new ImageIcon(getClass().getResource("img/ship.png")).getImage();
    
    ObjectOutputStream ooo;
    int pos=0;
    public static void main(String args[]){
        new Cliente();
    }
    public Cliente(){
        super();
        conectar();
        ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension pantalla=Toolkit.getDefaultToolkit().getScreenSize();
        ventana.setSize(pantalla);
        ventana.setUndecorated(true);
        ventana.add(this);
        ventana.setVisible(true);
        this.setFocusable(true);
        this.addKeyListener(teclado);
        setBackground(Color.BLACK);
        t=new Timer(5,escuchador);
        
        t.start();
    }
    public void recibirEnemigos(){
        try{
            //s.setSoTimeout(5);
            Mensaje mensaje=(Mensaje)ois.readObject();
            enemigos=mensaje.enemigos;
            autos=mensaje.autos;
            pos=mensaje.fondo;
            //imprimirEnemigos();
        }catch(IOException e ){
            //e.printStackTrace();
            //System.exit(0);
        }
        catch(Exception e ){
            //e.printStackTrace();
        }
    }
    public void dibujarAuto(Auto c,Graphics2D g2d){
        if(!c.perder){
            g2d.drawImage(autoi,c.posx,c.posy,c.ancho,c.alto , null);
        }
    }
    ActionListener escuchador=new ActionListener(){
        public void actionPerformed(ActionEvent ae) {
            actualizar();
        }
        
    };
    public void paint(Graphics g){
        super.paint(g);
        Graphics2D g2d=(Graphics2D)g;
        g2d.setColor(Color.white);
        g2d.drawImage(fondo, 0, pos,ventana.getWidth() ,ventana.getHeight() , null);
        g2d.drawImage(fondo, 0, 0-ventana.getHeight()+pos,ventana.getWidth() , ventana.getHeight() , null);
        for(Auto a:autos){
            dibujarAuto(a,g2d);
        }
        dibujarEnemigos(enemigos,g2d);
    }
    public void dibujarEnemigos(ArrayList<Enemigo> enem,Graphics2D g2d){
        for(int i=0;i<enem.size();i++){
            int r=i%3;
            if(r==0){
                g2d.drawImage(enemyi,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);
            }else if(r==1){
                g2d.drawImage(enemyj,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);
            }else if(Math.random()*2<=4){
                g2d.drawImage(enemyk,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);
            }else if(Math.random()*2>=4){
                g2d.drawImage(enemyl,enem.get(i).posx,enem.get(i).posy,enem.get(i).ancho,enem.get(i).alto , null);}
        }
    }
     KeyListener teclado=new KeyListener(){
        public void keyTyped(KeyEvent ke) {
        }
        public void keyPressed(KeyEvent ke) {
            if(ke.getKeyCode()==KeyEvent.VK_ESCAPE){
                System.exit(0);
            }  
            Movimiento m=new Movimiento(ke,true);
            mover(m);
        }
        public void keyReleased(KeyEvent ke) {
            Movimiento m=new Movimiento(ke,false);
            mover(m);
        }
    };
    @Override
    public void conectar() {
        try{
            System.out.println("Estableciendo Conexión");
            InetAddress ad=InetAddress.getByName(JOptionPane.showInputDialog("Inserte IP del servidor: "));
            s=new Socket(ad,Integer.parseInt(JOptionPane.showInputDialog("Inserte Puerto: ")));
            ois=new ObjectInputStream(s.getInputStream());
            ooo=new ObjectOutputStream(s.getOutputStream());
        }catch(Exception e){
            //e.printStackTrace();
        }
    }
    public void mover(Movimiento m) {
        try{
            ooo.writeObject(m);
            Thread.sleep(200);
            
            //ooo.flush();
            //s.getOutputStream().flush();
            ooo.reset();
            
        }catch(Exception e){
            //e.printStackTrace();
        }
    }

    @Override
    public void actualizar() {
            recibirEnemigos();
            repaint();
    }

    @Override
    public void ganar() {
    }

    @Override
    public void perder() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}

Acceso.java


import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JOptionPane;
/**
 *
 * @author Eduardo Yair-
 */

class Acceso {
    JFrame ven=new JFrame("Speed Racer 2049");
    
    public Acceso() {
        ven.setSize(200, 200);
        ven.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ven.setLocationRelativeTo(null);
        Container c=ven.getContentPane();
        c.setLayout(null);
        JButton b2=new JButton("Unirse a partida");
        b2.addActionListener(clien);
        
        b2.setBounds(25, 50, 150, 25);
        c.add(b2);
        ven.setVisible(true);
    }
    ActionListener clien=new ActionListener(){
        public void actionPerformed(ActionEvent ae) {
            new Cliente();
            ven.dispose();
        }
    };
}


Auto.java


import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.Serializable;

public class Auto implements Serializable{
    int dx,dy,posx,posy,alto,ancho;
    int[]teclas=new int[4];
    Control control=new Control();
    boolean perder=false;
    public Auto(int px,int py,int lx,int ly,int nteclas[]){
        
        teclas=nteclas;
        posx=px;
        posy=py;
        alto=ly;
        ancho=lx;
    }
    
    public void mover(Dimension max){
        posx+=dx;
        posy+=dy;
        if(posx<=0){
            posx=0;
        }
        if(posx+ancho+15>max.width){
            posx=max.width-ancho-15;
        }
        if(posy<0){
            posy=0;
        }
        if(posy+alto+35>max.height){
            posy=max.height-alto-35;
        }
    }
    
    public class Control implements Serializable,KeyListener{

        public void keyTyped(KeyEvent ke) {
        }
        public void keyPressed(KeyEvent ke) {
            int tecla=ke.getKeyCode();
            if(tecla==teclas[2]){
                dy=-5;
            }
            if(tecla==teclas[3]){
                dy=5;
            }
            if(tecla==teclas[0]){
                dx=-5;
            }
            if(tecla==teclas[1]){
                dx=5;
            }
            
        }
        public void keyReleased(KeyEvent ke) {
            int tecla=ke.getKeyCode();
            if(tecla==teclas[2]||tecla==teclas[3]){
                dy=0;
            }
            if(tecla==teclas[0]||tecla==teclas[1]){
                dx=0;
            }
        }
        
    }
}


Movimiento.java

import java.awt.event.KeyEvent;
import java.io.Serializable;
public class Movimiento implements Serializable{
    public Movimiento(KeyEvent k,boolean b){
        ke=k;
        presion=b;
    };
    KeyEvent ke;
    boolean presion;
}


Mensaje.java

import java.io.Serializable;
import java.util.ArrayList;

/**
 *
 * @author eduardoyair-
 */
public class Mensaje implements Serializable{
    ArrayList<Enemigo> enemigos=new ArrayList<Enemigo>();
    ArrayList<Auto> autos=new ArrayList<Auto>();
    int fondo;
    int perder=0;
}

Main.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author eduardoyair
 */
public class main {
    public static void main(String args[]){
        new Acceso();
    }
}


Enemigo.java


import java.io.Serializable;

class Enemigo  implements Serializable{
    int vel,posx,posy=-200,ancho=100,alto=200;
    public Enemigo(int w,int v){
        posx=(int)(Math.random()*w);
        vel=(int)(Math.random()*v)+1;
    }
    public void mover(){
        posy+=vel;
    }
}

miércoles, 4 de septiembre de 2013

Modelo OSI

Modelo OSI 

 


El Modelo OSI (Open Systems Interconnection) fue desarrollado en 1977 por la ISO (International Standars Organization) y es fundamentalmente el proceso por etapas que deben recorrer los datos a través de cada una de sus 7 capas, de dispositivo a dispositivo, usando una red.

7 capas

Las primeras 4 capas usan hardware:

Capa Física:
  • Se encarga de realizar la transmisión de un flujo de bits a través del medio.
  • Se usan voltajes e impulso eléctricos.
  • Depende de cables, conectores y otros componentes para la conexión con el medio de transmisión.
Capa Enlace de Datos:
  • Le de forma al flujo de bits, usando un formato predeterminado llamado "TRAMA".
  • Para formar una "trama" este nivel agrega una secuencia especial de bits al principio y al final del flujo principal.
  • Usa la MAC (Media Access Control) y la LLC (Logic Link Control).
Capa de Red (Nivel de paquetes):
  • Divide el mensaje en "paquetes".
  • Cada paquete lo encapsula en una "trama".
  • Usa la IP (Internet Protocol).

Capa de Transporte:
  • Establece las conexiones punto con punto, para evitar errores en el envío de los mensajes.
  • Provee el "broadcast" a múltiples destinos.
  • Usa los protocolos TCP (Transmission Control Protocol) y UDP (User Datagram Protocol).
*Las siguientes capas se basan en el software:

Capa de Sesión:
  • Permite a usuarios en diferentes maquinas a crear una sesión.
  • Controla los "diálogos" (quien habla, cuando, cuanto tiempo, half duplex o full duplex).
  • Mantiene la sincronía.
Capa de Presentación:
  • Establece un formato adecuado para la información que sera transmitida.
  • Define la estructura para los datos (Ej. definir campos de un registro).
  • Define una codificación a usar para la representación de la cadena de caracteres (ASCII, etc).
  • Comprime los datos.

Capa de Aplicación:
  • Transferencia de archivos, Login Remoto, Correo Electrónico, Acceso a BD.

Convertir a bits para la transmisión:
  •  En una aplicación se introduce el dato, este lo pasa a través de la interfaz a la presentación, la cual determina el formato usado añadiendolo en los "encabezados" del paquete que se envía a la siguiente capa, llamada sesión, en esta etapa podemos incluir la seguridad (cifrado de los datos, aunque no es la uncia, la seguridad se puede aplicar en cualquiera de estas etapas), posteriormente llegamos a la parte del hardware, el transporte en esta etapa se hacen "pedacitos" los bloques y se determina un protocolo (TCP / UDP). En la eapa de red se decide que ruta se usa para el envio de los datos (IP); al llegar a la parte del enlace se determina la LLC y la MAC (dirección única para el hardware a nivel mundial), por último, estos datos se envían junto con el paquete original usando la tarjeta de red o similares a el receptor que realizara el proceso inverso.
Ejemplo básico del modelo OSI: LogMeInHamachi

Representación gráfica Modelo OSI

Señales analogas-digitales

Ejemplo entre Analogica y Digital usando el Muestreo (rep. gráfica)




El OSI llego a facilitar la comprension del manejo de los datos al momento de que un usuario, por medio de un equipo computacional, emitiera un mensaje destinado a otro usuario. ISO creo el modelo de las 7 capas para describir la forma en que la información se transfiere de una red a otra, al mismo tiempo, lo creo para establecer una guía para la creación posterior de redes y estándares de comunicación. Por lo mismo, el "OSI Manual Assistance" se separo en 7 capas.

Bibliografía

Enterprise, M. (27 de 02 de 2002). The OSI Model's Seven Layers Defined and Functions Explained. Recuperado el 04 de 09 de 2013, de Microsoft Support: http://support.microsoft.com/kb/103884/en
Tyson, J. (No Disponible de No Disponible de 2000). How OSI Works. Recuperado el 04 de 09 de 2013, de How Stuff Works: http://computer.howstuffworks.com/osi1.htm


domingo, 25 de agosto de 2013

Topologías de Red

Topologías de Red


Las topologías de red son la unión de varios elementos (enlaces, nodos, etc.) de una computadora o “red biológica”.

Básicamente, es la forma espacial de la figura/estructura de la red, la  cual puede ser descrita tanto física, como lógicamente.  En la parte física nos referimos a el orden en que se acomodan las cosas, mientras que en la parte lógica nos centramos en los flujos de datos sin importar su diseño.
Aun cuando las interconexiones y su distancia sean diferentes, puede haber redes que tengan la misma tipología.

Nosotros contamos con 2 categorías básicas de tipología:

  • ·      Física: la forma en que se organizan los cables, nodos y computadoras.  La topología física esta determinada por las capacidades de los diferentes dispositivos de acceso a la red, el nivel de control deseado, la tolerancia a fallos mínima, y el costo asociado a los cables. (Groth & Skandier, 2005)
  • ·      Lógica: la forma en que las señales actúan en los medios de comunicación de la red, o la forma en que los datos pasan a través de la red desde un dispositivo al siguiente sin tener en cuenta la interconexión física de los dispositivos. No tiene porque ser necesariamente la misma topología que la física.

Hay 6 topologías básicas:
           
·      Punto a Punto: La topología más simple es un enlace permanente entre dos puntos finales.

  • ·      BUS: En redes de área local donde se usa la topología de bus, cada nodo está conectado a un solo cable. Cada equipo o servidor se conecta a la línea del bus. Una señal de la fuente se desplaza en ambas direcciones a todas las máquinas conectadas en el cable de bus hasta que encuentra el destinatario. Si la dirección de la máquina no coincide con la dirección prevista para los datos, la máquina hace caso omiso de los datos. Por el contrario, si la dirección coinciden con la dirección de la máquina, se aceptan los datos.
  • ·      Estrella: cada nodo (estación de trabajo de ordenador o cualquier otro periférico) está conectado al nodo central llamado concentrador o conmutador. El interruptor es el servidor y los dispositivos periféricos son los clientes. La red no tiene por qué parecerse a una estrella para ser clasificado como una red en estrella, pero todos los nodos de la red debe estar conectado a un dispositivo central.
  • ·      Anillo: Cada dispositivo incorpora un receptor para la señal entrante y un transmisor para enviar los datos a la siguiente dispositivo en el anillo. La red depende de la capacidad de la señal de viajar por todo el ring. Cuando un dispositivo envía datos, estos deben viajar a través de cada dispositivo en el anillo hasta que lleguen a su destino.
  • ·      Malla: El valor de las redes de malla completa es proporcional al exponente del número de abonados, en el supuesto de que la comunicación de los grupos de cualquiera de los dos puntos finales, hasta e incluyendo todos los puntos finales, se aproxima por la Ley de Reed. En una red totalmente conecta, se sigue la siguiente formula:
                                                                 
  • ·      Árbol: Se basa en la jerarquía de los nodos. El nivel más alto de cualquier red de árboles se compone de un único nodo, 'raíz', este nodo esta conectado un nodo individual (o, más comúnmente, uno múltiple) en el nivel inferior enlace punto a punto. Estos nodos de nivel inferior también están conectados a un único o múltiples nodos en el siguiente nivel inferior. No están limitados a cualquier número de niveles, sin embargo, al ser una variante de la topología de la red de BUS, son propensos a fallas en la red podrían “paralizar” una conexión.


Topología
Representación
BUS

Estrella

Anillo

Malla

Árbol




Fundamentalmente existen 6 topologias, las cuales pueden tener variantes tanto en su forma física, como la lógica, una se refiere a su acomodo espacial, mientras que otra, se refiere principalmente a la transmisión de datos, velocidad de conexión, capacidad de enlaces, etc. Al momento de montar nuestra propia red, debemos tomar en cuenta, el costo, mantenimiento, materiales, y el uso que le vamos a dar, por lo mismo, también debemos considerar el tipo de red a usar (WAN, MAN, HAN, CAN, LAN, SAN o WPAN)

Bibliografía

BICSI, B. (2002). Fundamentos de Diseño de red para profesionales de cableado. New York: McGraw HIll.
Groth, D., & Skandier, T. (2005). Network+ Study Guide. New Jersey: Sybex INC.
Robert Lee Lounsbury, J. (ND de Septiembre de 2007). Optimum Antenna Configuration for Maximizing Access Point Range of an IEEE 802.11 Wireless Mesh Network in Support of Multimission Operations Relative to Hastily Formed Scalable Deployments. California, Monterey, USA.