Documente Academic
Documente Profesional
Documente Cultură
CTEDRA O MATERIA
EQUIPO: LABORATORIO CISCO RELACIONADA
Software Matlab
NMERO DE ESTUDIANTES
POR EQUIPO O PRCTICA:
Fecha:
DOCENTE: 3 estudiantes por puesto
03 de enero de 2017
Ing. Juan Diego Jara Danny Guachichulca
Paola Maribel Guamn
Pedro Jos Pineda
1. INTRODUCCIN
En este documento se presenta la implementacin realizada del algoritmo Vector Distancia o conocido
tambin como Bellman-Ford, mediante el cual se puede obtener la trayectoria ms corta de un nodo
hacia otro, en este caso se desea obtener las rutas ms cortas para una red en la cual los nodos
estaran representando los diferentes routers, por lo que este algoritmo es utilizado en diferentes
tipos de enrutamiento.
Se especifica las herramientas necesarias para la implementacin del algoritmo, es decir las variables
que deben ser ingresadas, se tiene el diagrama de flujo y el pseudocdigo del algoritmo que detecta
las distancias ms cortas.
Se describe el programa realizado en Matlab, el cual consta de dos formas de implementacin, en la
primera se presenta las distancias desde cada uno de los nodos como inicial a los dems nodos, en
la segunda se especifica un par de nodos y se presenta el camino recorrido el cual ser el que posea
menor distancia.
2. OBJETIVOS
3. FUNDAMENTOS TERICOS
Es un protocolo que utiliza vectores para determinar la distancia de una ruta, estos vectores son
el router de siguiente salto. Este es un protocolo relativamente lento comparado con otros
protocolos de enrutamiento; cuando hago referencia a lento, se refiere a que converge y funciona
de manera ms lenta que los dems tipos de protocolos, por lo que mientras ms grande y
compleja sea la red, ms lento ser el funcionamiento del protocolo. La configuracin de estos
protocolos en relativamente fcil y no requiere de mucho conocimiento, lo cual es una ventaja.
[1]
Los protocolos que usan el algoritmo de vector distancia es RIP y IGRP.
3.1.1 CARACRERISTICAS
Distancia mxima (Maximum distance): La distancia mxima para que una ruta sea vlida es
de 16 saltos (hops.
Envenenamiento de ruta (Route poisoning): Una ruta es envenenada al detectarse que esta
no puede ser alcanzada; cuando el router detecta que la ruta no puede ser alcanzada, este
coloca los saltos en 16, de esta forma cuando otro router reciba la actualizacin vera que esta
ruta tiene 16 saltos y la declarar como invalida.
Actualizacin acelerada (triggered update): al detectar que una ruta no se cae, el router enva
inmediatamente una actualizacin indicando que esta ruta se no est, esto lo hace saltando
el tiempo de los 30 segundos para enviar una actualizacin.
Horizonte divido (Split horizon): cuando un router recibe una actualizacin de un router vecino
este router no debe enviar la informacin que recibi por la misma ruta que la recibi. Esto
evita que el los routers enven informacin en actualizaciones a los routers que ya le enviaron
esa informacin, evitando as loops.
tiempo de espera (hold down timer): Cuando un router enva una actualizacin acelerada a
otro router indicando que una ruta esta down, este router que recibe esa actualizacin no
aceptara actualizaciones con informacin sobre esta ruta por un periodo de tiempo
determinado, de igual forma actualizara a los dems routers para que establezcan el tiempo
durante el cual no recibirn dichas actualizaciones, esto prev de que si una ruta est
actuando de forma intermitente, no se est modificando la tabla de enrutamiento
repetidamente y el procesador de los routers no se sobre cargue.
Ventajas
Configuracin simple
Bajo requerimiento de procesamiento
Desventajas
Cada ruteador mantiene una tabla (un vector) que almacena las mejores distancias conocidas a
cada destino y las lneas a usar para cada destino. Se actualizan las tablas intercambiando
informacin con los vecinos.
La tabla de un ruteador almacena una entrada para cada uno de los ruteadores en la subred (los
ruteadores son los ndices). Las entradas almacenan la lnea preferida de salida y una estimacin
del tiempo o la distancia al destino. Se pueden usar mtricas distintas (saltos, retrasos, etc.).
Cada ruteador tiene que medir las distancias a sus vecinos. Por ejemplo, si la mtrica es el retraso,
el ruteador la puede medir usando paquetes de eco.
Cada T msegs los ruteadores intercambian sus tablas con sus vecinos. Un ruteador usa las tablas
de sus vecinos y sus mediciones de las distancias a sus vecinos para calcular una nueva tabla.
Computadora
MATLAB
5. DESARROLLO/PROCEDIMIENTOS
(, , )
[] = 0
{}
[] =
= 1 || 1
(, )
[] > [] + (, )
[] = [] + (, )
Como se observa el algoritmo de Bellman-Ford recibe tres variables principales que son G o la
representacin del grafo, el vrtice inicial y un destino.
El primer paso del algoritmo es la inicializacin la cual consiste en colocar la distancia para el
nodo inicial en cero y para cada nodo v excepto el inicial en infinito o un valor grande que lo
represente.
El algoritmo se encuentra controlado por un for-loop que se ejecuta | V | - 1 iteraciones donde
| V | Es igual al nmero de vrtices de la red.
Bellman-Ford, en cada iteracin para arista sea (u,v) los vrtices de la arista, se realiza un for-
loop por cada vrtice y se realiza lo que se conoce como relajacin, este proceso consiste en
verificar si la distancia actual ms el peso es menor que la distancia adyacente si esta opcin es
verdadera se actualiza la siguiente distancia a la distancia actual ms el peso.
G: matriz de pesos
W: nodo destino
S: nodo inicial
distancia(1:n) = inf;
previo(1:n) = inf;
distancia(inicial) = 0;
N= numero de nodos
i=1:N-1
J=1:N
K=1:N
[ ]> [ ]+ ( , )
[ ]= [ ]+ ( , )
K=k+1
J=j+1
i=i+1
Display (distancia)
FIN
5.3 PROGRAMA EN MATLAB DESCRIPCIN Y FUNCIONAMIENTO
5.3.1 DESCRIPCIN DEL CDIGO
%% Dos formas
fprintf('\n Ingrese T para todos los nodos o C para un par en
especifico \n');
chr_check = input('','s');
check = strcmpi(chr_check,'T'); % comparador
Si la opcin es uno:
Se debe ingresar el nmero de nodos que posee la red, el nmero de aristas y un array con los
pesos, es decir una matriz cuadrada, la cual siempre debe ser de dimensiones n x n en donde n
es el nmero de vrtices que posee el grafo. Cada fila representa el vrtice del cual se parte y
cada columna ser el vrtice al cual llega, el algoritmo se ha probado con diferentes matrices,
pero hay q tomar en cuenta que para un grafo no dirigido la matriz debe ser simtrica.
0 1 0 2 0
1 0 3 4 5
= 0 3 0 0 7
2 4 0 0 1
[0 5 7 1 0]
Se puede observar la diagonal de la matriz la cual indica que el peso de ir desde un vrtice
hacia si mismo es igual a cero.
Para graficar la red se utiliza un biograph object y mediante view se observa la grfica.
%Grfico view
ids = {'NODO 1','NODO 2','NODO 3','NODO 4','NODO 5'};
%bg2 = biograph(cm1,ids,'ShowWeights','on');% dirigido
bg2 = biograph(cm1,ids,'ShowArrows','off','ShowWeights','on');% no
dirigido
view(bg2)
Como se puede observar cada iteracin de p se transformar en la variable source que funcionar
como nodo de partida.
El primero for recorre desde a hasta n-1 para verificar la distancia con cada uno de los nodos, el
segundo for representa el primer vrtice de la arista, y el tercero el segundo vrtice, dentro de
esto se realiza el proceso de relajacin en donde, se verifica la condicin del algoritmo y se
actualiza la distancia si se cumple la condicin.
Al final se imprime la variable distancia ya que es la que almacena las distancias menores hacia
cada uno de los nodos en forma de vector, en donde la posicin 1 ser la distancia desde el nodo
tomado como source dado por el primer for hasta 1, la posicin dos hasta 2, as para todos los
nodos.
Para la segunda opcin C se especifica un nodo inicial y un nodo destino y la matriz con los pesos
es de forma similar a la descrita anteriormente, se realiza el grfico de la misma forma, en esta
ocasin el algoritmo solo se repite una vez y cuando se obtiene el resultado se procede a imprimir
la ruta obtenida:
ShortestPath = [dest];
traverse = dest;
while (previo(traverse) ~= inicial) % recorre hacia atrs para
encontrar la ruta
ShortestPath = [previo(traverse) ShortestPath];
traverse = previo(traverse);
end
ShortestPath = [previo(traverse) ShortestPath]
%distancia % distancias ms cortas partiendo del vrtice
source a todos los dems vrtices
Fig. 4. Grafo
En la figura se puede observar el grfico de los nodos y las aristas, este es un grafo no
dirigido.
Fig. 6. Ruta
En la grfica se puede observar la ruta desde el nodo 5 al nodo 1 ya que son los datos
proporcionado, pero ser el mismo valor viceversa ya que es un grafo no dirigido.
En la grfica se observa los datos proporcionados y la respuesta final la ruta que toma.
6. CONCLUSIONES Y RECOMENDACIONES
- Se pude concluir que el enrutamiento por vector distancia utiliza el algoritmo de Bellmad-Ford
para obtener la distancia ms corta de un nodo hacia otro, en los routers siempre estn
actualizando la tabla de enrutamiento. En este programa se implementa el algoritmo para
demostrar como se obtiene la distancia ms corta, es importante la forma en la que ingresan los
datos de la red, en el programa se ingresas una matriz de los pesos la cual debe ser simtrica.
7. ANEXOS
clc
clear all
close all
%% Dos formas
fprintf('\n Ingrese T para todos los nodos o C para un par en especifico \n');
chr_check = input('','s');
check = strcmpi(chr_check,'T'); % comparador
if (check==1)
%% Para todos los nodos
% Grafo
N = input(' \n Ingrese el nmero de nodos \n ');% nmero total de vrtices
A = input(' \n Ingrese el nmero de aristas \n ');% nmero total de aristas
cm1 = input (' \n Ingrese los vrtices de las aristas con sus pesos \n '); %
array de vertices y pesos
%Grfico view
%cm = [0 1 1 0 0;1 0 0 1 1;1 0 0 0 0;0 0 0 0 1;1 0 1 0 0]; %Otro grafo
%cm1 = [0 7 0 2 0;0 0 1 2 0;0 0 0 0 5;0 3 8 0 5;0 0 4 0 0];
ids = {'NODO 1','NODO 2','NODO 3','NODO 4','NODO 5'};
%bg2 = biograph(cm1,ids,'ShowWeights','on');% dirigido
bg2 = biograph(cm1,ids,'ShowArrows','off','ShowWeights','on');% no dirigido
view(bg2)
for (p=1:N)
source=p;
%Algoritmo Bellmand Ford
n = size(cm1, 1); % determina la dimension es igual al numero de nodos
end
else
%% Para un camino en especifico
%Grfico view
%cm = [0 1 1 0 0;1 0 0 1 1;1 0 0 0 0;0 0 0 0 1;1 0 1 0 0]; %Otro grafo
%cm1 = [0 7 0 2 0;0 0 1 2 0;0 0 0 0 5;0 3 8 0 5;0 0 4 0 0];
ids = {'NODO 1','NODO 2','NODO 3','NODO 4','NODO 5'};
%bg2 = biograph(cm1,ids,'ShowWeights','on');grafo dirigido
bg2 = biograph(cm1,ids,'ShowArrows','off','ShowWeights','on');% no dirigido
h = view(bg2)
end
8. Bibliografa:
[1] http://theosnews.com/2014/05/tipos-de-protocolos-de-enrutamiento-dinamico-vector-distancia-distance-
vector-estado-de-enlace-link-state-e-hibrido-hybrid/
[2] http://www.cs.virginia.edu/~knabe/iic3512/apuntes_7.html
[3] https://es.wikipedia.org/wiki/Algoritmo_de_Bellman-Ford
[4] http://neo.lcc.uma.es/evirtual/cdd/tutorial/red/bellman.html
https://kulharvijay.files.wordpress.com/2012/09/bellman_ford_algorithm1.pdf
[5] https://jariasf.wordpress.com/2013/01/01/camino-mas-corto-algoritmo-de-bellman-ford/
[6] https://www.mathworks.com/help/bioinfo/ref/graphshortestpath.html
[7] http://www.geeksforgeeks.org/dynamic-programming-set-23-bellman-ford-algorithm/
[8] https://www.mathworks.com/help/bioinfo/ref/biographobject.html