Marşrutlama alqoritmi
Bu məqalə Marşrutlama alqoritmləri məqaləsinə çox yaxındır və hər ikisinin eyni başlıq altında birləşdirilməsi mümkündür.
Bu məqaləni vikiləşdirmək lazımdır. Lütfən, məqaləni ümumvikipediya və redaktə qaydalarına uyğun şəkildə tərtib edin. |
== Optimallıq prinsipi ==
Spesifik alqoritmlərə başlamadan əvvəl, şəbəkə trafikini və ya topologiyasını nəzərə almadan optimal marşurtlar haqqında açıqlama verək. Bu açıqlama optimallıq prinsipi (Bellman, 1957) olaraq bilinir. Marşurtlayıcı (router) J , marşurtlayıcı İ-dən marşurtlayıcı K-a ən optimal yoldadırsa, onda J-dən K-a da ən optimal yolda eyni yoldan keçir. Bunu görmək üçün İ-dən J-ə r1 və marşurtun geri qalanına r2 marşurt bölünməsini edin. Əgər J-dən K-a r2-dən daha yaxşı bir yol varsa, onda İ-dən K-a marşurtu yaxşılaşdırmaq üçün r1-i seçirik.
Optimumluq prinsipi birbaşa nəticəsi olaraq, bütün mənbələrdən müəyyən bir hədəfə köklü bir ağac yaradıldığını görəbilirik. Belə bir ağaca istiqamətləndirici ağac deyilir və məsafə metriyi sıçramalarının sayı Şəkil 1(b) də göstərilmişdir. Bütün marşurtlama alqoritmlərinin məqsədi bütün marşurtlar üçün istiqamətləndirici ağacları kəşf etmək və istifadə etməkdir.
İstiqamətləndirici ağacın bənzərsiz olmadığını unutmayın. Eyni yol uzunluqlarına sahib digər ağaclar da ola bilər. Bütün mümkün yolların seçilməsinə icazə versək, ağac DAG (Yönləndirilmiş Müstəqil Qraf-Directed Acyclic Graph) adı verilən daha ümumi struktur halına gəlir. DAG-ların dövrü yoxdur. Hər iki vəziyyətdə də istiqamətləndirici ağacları uyğun bir qısaltma olaraq istifadə edəcəyik. Hər iki vəziyyətdə yolların bir birinə qarışmadığı texniki ehtimalıyla əlaqəlidir. Bu səbəblə məsələn bir yoldakı bir nəqliyyat sıxlığı başqa keçid yoluna səbəb olmaz.
Bir istiqamətləndirmə ağacı əslində bir ağac olduğundan hərhansı bir dövr daxil deyil, bu səbəblə hər paket son və limitli sayda sıçramalarla göndərilir. Praktikada bu elə də asan deyil. Kanallar və marşurtlandırıcılar iş ərzində geri gələbilər və təkrar gedə bilər, bu səbəblə fərqli marşurtlandırıcılar mövcud topologiya haqqında fərqli fikirlərə sahib ola bilər.Optimumluq prinsipi və istiqamətləndirici ağacı digər marşurtlama alqoritmlərinin ölçüləbiləcəyi bir müqayisə nöqtəsi təmin edir.
Qısa yol alqoritmi
Şəbəkənin əksiksiz rəsmi verilən ən optimal yolları hesablamaq üçün sadə üsulla alqoritmləri marşurtlamaya başlayaq. Bütün marşurtlandırıcılar şəbəkənin bütün detallarını bilməsə də , tapmaq üçün dağınıq marşurtlama alqoritmi istifadə edir. İdeya şəbəkənin bir qrafını yaratmaqdır. Qrafın hər düyünü marşurtlandırıcını və hər kənar əlaqə xəttini və ya kanalı təmsil edir. Marşurtlandırıcı cütü arasında yolu seçmək üçün , alqoritm qrafda onlar arasında ən qısa yolu tapır.
Qısa yol alqoritm konsepsiyası bəzi açıqlamalara layiqdir. Yolun uzunluğunu ölçmək üçün sıçramaların sayını bilmək lazımdır. Bu metrikin istifadəsi , ABC və ABE bərabər uzunluqdadır (Şəkil 2 ). Başqa metrik isə kilometrlə ölçülən coğrafi uzunluqdur, hansı ki, ABC açıq-açıq ABE-dən uzundur.
Bununla birlikdə sıçramalar və fiziki uzaqlıq xaricində bir çox başqa metrikdə mümkündür. Məsələn hər bir kənar saatlıq icralarla ölçülən standart bir test paketinin ortalama gecikməsi ilə etiketlənə bilər. Bu qraf etiketləmə ilə ən qısa yol, ən az sayda kənar və ya kilometr olan yolu deyil, ən sürətli olanıdır. Ümumi halda kənardakı etiketlər məsafə, ötürmə sürəti, ortalama trafik, əlaqə xərci , ölçülən gecikmə və digər faktorların funksiyası olaraq hesablana bilir. Ağırlıq funksiyasını dəyişdirərərək, alqoritm daha sonra bir çox kriteriyadan hərhansı birinə görə ölçülən “ən qısa” yolu və ya bir kriteriya kombinasiyasını hesablayır.
Bir qrafın iki düyünü arasında ən qısa yolu hesablamaq üçün bir çox alqoritm vardır. Bunlardan Dijkstra (1959)-a aiddir və bir mənbə ilə şəbəkədəki bütün hədəflər arasındakı ən qısa yolları tapır.Hər düyün ən yaxşı bilinən yol boyunca mənbə düyündən uzaqlığı ilə etiketlənmişdir. Məsafələr ötürmə sürəti və gecikmə kimi real miqdarlarla bağlıdırsa, neqativ olmamalıdır. Başlanğıcda heç bir yol bilinmir, bu səbəblə bütün düyünlər sonsuz olaraq etiketlənir. Bir etiket keçici və ya qalıcı ola bilir. Başlanğıcda bütün etiketlər keçici deyildir. Bir etiketin kəşfedildikdə, qalıcı hala gətirilir və bundan sonra heç bir zaman dəyişdirilmir.
Etiketləmə alqoritmini necə işlədiyini göstərmək üçün Şəkil 2-dəki istiqamətləndirilməmiş qrafa baxın A-dan D-ə ən qısa yolu tapmaq istəyirik. Əvvəlcə düyün A-nı işarələyirik. Sonra A-ya bitişik düyünlərin hər birini yoxlayırıq, hər birinin A-ya olan uzaqlığı ilə yenidən etiketliyirik. A-ya bitişik düyünlərin hər birini yoxladıqdan sonra bütün qrafda keçici olaraq etiketli bütün düyünləri yoxladıq və Şəkil 2 (b)-də göstərildiyi kimi ən kiçik etiketli qalıcı olanı yaradırıq. Bu yeni iş düyünü olur. İndi B-dən başlayıb bütün qonşu düyünləri yoxlayırıq. B üzərindəki etiketin bütünü və B-dən düşünüləcək düyünə olan uzaqlığı bu düyün üzərindəki etiketdən daha kiçiksə, düyünün yennidən etiketlənməsi üçün daha qısa bir yolumuz var. İş düyününə bitişik olan bütün düyünlər yoxandıqdan və mümkün olduğunca keçici etiketlər dəyişdirildikdən sonra bütün qraf ən kiçik dəyəri olan keçici olaraq etiketlənmiş düyün üçün axtarılır. Bu düyün qalıcı edilir və sonrakı tur üçün iş düyünü olur. Şəkil 2-də alqoritmin ilk altı addımı göstərilir.
Alqoritmin niyə işlədiyini görmək üçün şəkil 2 (c)-ə baxın.Bu nöqtədə sadəcə E ni qalıcı etdik. AXYZE (bəzi X və Y üçün) ABE-dən daha qısa bir yol olduğunu düşünək. İki ehtimal var: ya Z düyünü əvvəlcədən qalıcı hala gətirilmiş ya da hələ yaradılmamışdır. Varsa, E yoxlandı, bu səbəplə AXYZE yolu diqqətimizdən qaçmadı və bu səbəplə qısa yol ola bilməz.İndi Z-nin keçici olaraq etikletləndiyi vəziyyətini düşünün. Z-dəki etiket E-dəki dəyərdən böyük və ya bərabərsə, AXYZE ABE-dən daha qısa bir yol olmaz. Etiket E-ninkindən daha kiçiksə, E-nin deyil Z-nin əvvəl qalıcı olacağı və E-nin Z-dən yoxlanılmasına icazə verir.Bu alqoritm şəkil 3 də göstərilib.
Dalğa şəklində yayılma
Bir marşurtlama alqoritmi tətbiq edildikdə, hər marşurtlayıcı , şəbəkənin tam rəsmi deyil, lokal biliyə əsaslanan qərarlar verməlidir. Bəsit bir lokal üsul, hər gələn paketin gəldiyi xət xaricindəki hər gedən xətt üzərində göndərildiyi dalğadır. Təbii ki, dalğa əməliyyatını dayandırmaq üçün bəzi tədbirlər alınmayan vaxt ərzində dalğa əslində paketlərin sayını sonsuz sayda generasiya edir. Belə bir tədbirin alınması hər bir sıçramada azaldılan hər paketin başlığında olan və sayğac sıfıra yaxınlaşdıqda atılan bir sıçrama sayğacına sahib olmaqdır. İdeal olaraq sıçrama sayğacı mənbədən hədəfə gedən yolun nə qədər uzun olduğunu bilmirsə, sayğacı ən pis vəziyyətdə şəbəkənin tam diametrinə başlada bilər.
Sıçrama sayı ilə dalğalanma , sıçrama sayı artdıqca və marşurtlayıcılar daha əvvəl gördükləri paketləri çoxaltdıqca exponensial sayda təkrarlanan paketlər yarada bilir. Dalğalanmadan çıxmaq üçün daha yaxşı üsul marşurtlayıcıların hansı paketlərin dalğalanacağını təqib etmələrini təmin etmək və onları ikinci dəfə göndərməkdən qaçınmaqdır.Bu məqsədə çatmaq üçün bir yol , mənbə marşurtlayıcının, hostlarından aldığı hər paketə bir sıra nömrəsi qoymağını təmin etməkdir. Hər bir marşurtlayıcı mənbə marşurtlayıcı başına bir listə ehtiyac duyur, bu mənbədən hansı sıralamadakı nömrələrin görüldüyünü deyir. Listdə gələn bir paket varsa, dalğalanmır.
//Şəkil 3 #define MAX NODES 1024 /* düyünlərin maksimum sayı */ #define INFINITY 1000000000 /* hər maksimum yoldan daha böyük bir ədəd*/ int n, dist[MAX NODES][MAX NODES]; /* dist[i][j] i dən jə olan uzaqlıq */ void shortest path(int s, int t, int path[]) { struct state { /* üzərində işlənilən yol */ int predecessor; /* əvvəlki düyün */ int length; /* mənbədən bu düyünə olan uzunluq */ enum {permanent, tentative} label; /* etiket vəziyyəti */ } state[MAX NODES]; int i, k, min; struct state *p; for (p = &state[0]; p < &state[n]; p++) { /* vəziyyəti başlat*/ p->predecessor = −1; p->length = INFINITY; p->label = tentative; } state[t].length = 0; state[t].label = permanent; k = t; /* k ilk işləmə düyünüdür */ do { /* k-dan yaxşı yol varmı? */ for (i = 0; i < n; i++) /* bu qrafın n düyünü var */ if (dist[k][i] != 0 && state[i].label == tentative) { if (state[k].length + dist[k][i] < state[i].length) { state[i].predecessor = k; state[i].length = state[k].length + dist[k][i]; } } /* Ən kiçik etiketli keçici olaraq etiketlənmiş düyünü tapın */ k = 0; min = INFINITY; for (i = 0; i < n; i++) if (state[i].label == tentative && state[i].length < min) { min = state[i].length; k = i; } state[k].label = permanent; } while (k != s); /*Yolu çıxış massivinə kopyalayın */ i = 0; k = s; do {path[i++] = k; k = state[k].predecessor; } while (k >= 0); }
Listin limitləri xaricində böyüməsini qabaqlamaq üçün, hər listə bir sayğac, yəni k ilə genişlədilməlidir, yəni k ilə keçən bütün sıra ədədlər görülür.Dalğalanma bir çox paketi göndərmək üçün praktik deyildir, ancaq bəzi önəmli istifadələri vardır. Birincisi, bir paketin şəbəkədəki hər düyünə göndərilməsini təmin edir. Paketə ehtiyyac duyan tək bir hədəf varsa, bu boşa ola bilər, ancaq məlumat yaymaq üçün effektivdir. Simsiz kabellərdə bir stansiya tərəfindən alına bilər.İkinci olaraq dalğalanma böyük ölçüdə sağlamdır. Dalğalanma da təşkiletmə yolunda çox az şey tələb edir. Bu dalğalanma daha effektiv ancaq tərtibat yolunda daha çox ehtiyac duyulan digər marşurtlama alqoritmləri üçün bünovrə olaraq istifadə oluna bilər. Dalğalanma digər marşurtlama alqoritmlərinin qaşılaşdırıla biləcəyi bir metrik olaraq da istifadə oluna bilər. Hər ehtimal paralel olaraq seçildiyindən dalğalanma hər zaman ən qısa yolu seçər. Nəticədə başqa heçbir alqoritm daha qısa bir gecikmə yaratmaz.
Məsafə Vektor Marşurtlama
Kompüter şəbəkələri dalğalanmaya görə daha qarışıq olan dinamik marşurtlama alqoritmlərini istifadə edir, ancaq keçərli topologiya üçün ən qısa yolları tapmaları səbəbiylə daha effektiv olurlar. İki dinamik alqoritm özəlliklə də məsafə vektoru marşurtlaması və kanal vəziyyəti marşurtlama ən populyardır. Bir məsafə vektoru marşurtlama alqoritmi hər bir marşurtlayıcının hər bir varış nöqtəsinə ən yaxşı bilinən məsafəyi verən bir cədvəli (vektoru) saxlayan və ora getmək üçün hansı əlaqəni istifadə etməsini təmin edir.Bu cədvəllər qonşularla informasiya alış-verişində olaraq yenilənir. Sonunda hər marşurtlayıcı hər hədəfə çatmaq üçün ən yaxşı əlaqəni bilir.
Məsafə vektoru marşurtlama alqoritmi (Bellman 1957 və Ford və Fulkerson,1962)inkişaf etdirən tədqiqatçılardan sonra, əsasən Belman-Ford marşurtlama alqoritmi kimi yayılıb.Orjinal ARPANET marşurtlama alqoritmiydi və İnetnetə RİP adı altında istifadə edilirdi. Məsafə vektor marşurtlamasında hər marşurtlayıcı şəbəkədəki hər marşurtlayıcı üçün bir giriş saxlayan və tərəfindən indekslənmiş bir marşurtlama cədvəli saxlayır. Bu giriş iki bölümdən ibarətdir: o hədəf üçün istifadə olunacaq seçim edilən gedən xətti və bu hədəfə olan məsafəni təxmin edən. Ən qısa yolları hesablamaq üçün müzakirə etdiyimiz kimi sıçrama sayı olaraq və ya başqa bir metrik istifadə edərək ölçülə bilər. Marşurtlayıcının qonşularının hər birinə “məsafə” -ə sahib olduğu düşünülür. Metrik sıçrarsa,məsafə sadəcə bir sıçrama məsafəsindədir. Metrik yayılma gecikməsidirsə, marşurtlayıcı birbaşa alıcını zaman ştamplarıyla göstərdiyi və ola bildiyincə sürətli geri göndərdiyi özəl ECHO paketləriynən ölçülə bilir. Misal olaraq gecikmənin istifadə olunduğu və marşurtlayıcıının qonşularının hər birinə olan gecikməni bildiyini düşünək. Hər T msandə bir dəfəhər marçurtlayıcı hər qonşusuna təxmini gecikmələrin bir listini bir bir hədəfə göndərir. Həmçinin hər qonşudan bənzər bir list alır. Bu cədvəllərdən birinin qonşusu X-dən gəldiyini düşünək. X-in marşurtlayıcını nə qədər müddət keçməsi lazım olduğunu təxmin etməsi. Marşurtlayıcı,X-in gecikməsinin m msan olduğunu bilirsə, X vasitəsilə marşurtlayıcıya Xi+m msan cinsindən çata biləcəyini bilər. Hər qonşu üçün bu hesablamanı reallaşdıraraq, bir marşurtlayıcı hansı təxminin ən yaxşı göründüyünü tapa bilər və bu təxmini və əlaqəli marşurtlamanı yeni marşurtlandırma cədvəlində istifadə oluna bilər. Hesablamada köhnə marşurtlama cədvəlinin istifadə olunmadığını unutmayın.
Bu yeniləmə prosesi Şəkil 4 də göstərilir. Bölüm (a) bir şəbəkə göstərir. (b) bölümünün ilk dörd sütunu, marşurtlayıcının qonşularından gələn gecikmə vektorlarını göstərir. A,B-ə 12 ms gecikmə, C-ə 25ms gecikmə, D-ə 40 ms gecikmə verilir. J qonşularına sırayla 8, 10, 12 və 6 msan olaraq A,İ,H və K gecikmələrini ölçdü və ya təxmin etdi.
J-nin marşurtlayıcı G-ə olan yeni marşurtunu necə hesabladığını düşünün. 8 ms də A-a çata biləcəyini bilir və ayrıca A, 18 ms-də G-ə çata biləcəyini iddia edr, bu səbəblə J 26 msan-lik gecikməyə güvənə biləcəyini bilir.Bənzər şəkildə G,İ,H vəK üzərindən 41 (31 + 10), 18(6 + 12), və 37(31 + 6) msan gecikməsini hesaplayır, sırayla. Bu dəyərlərin ən yaxşısı 18 dir, bu səbəblə marşurtlama cədvəlində G gecikməsinin 18 msan olduğu və istifadə oluna biləcək yolun H üzərindən olduğu bir giriş edər. Eyni hesablama digər bütün hədəflər üçün yeni marşurtlama ilə reallaşdırılır . Cədvəlin son sütununda göstərilən cədvəl.
Xarici keçid.
Computer Networks, 5th Edition, paraqraf 5.2.1, 5.2.2, 5.2.3, 5.2.4