Маршрутизация
Contents
Какво е маршрутизация
Маршрутизация или рутиране е процес на избиране на път в дадена мрежа, по който да се изпрати мрежовия трафик.
Рутиране има в различни мрежи - телефонни мрежи (комутационни вериги), транспортни мрежи (логистика), компютърни мрежи (пакетна комутация).
В компютърните мрежи информацията се предава на пакети, затова рутирането се занимава с препращането на пакет от комуникационна точка към друга комуникационна точка (нод - възел, който в частност може да е router, bridge, gateway, firewall, switch или host). Целта е информационният пакет да бъде пренесен от началната точка до крайната точка.
Всеки компютър с подходящ софтуер може да изпълнява роля на някои от тези устройства, но при големи натоварвания се препоръчва специализиран хардуер.
Рутиращата машина препраща пакети според своята рутираща таблица, в която са описани пътищата до различни дестинации (мрежи). Оптималното конструиране на рутиращата таблица е много важно за ефективно рутиране.
Трафик според дестинация
- anycast - до всеки от група нодове
- broadcast - до всички нодове
- multicast - до група от нодове
- unicast - до точно определен нод
- geocast - до географска област
Видове рутиране
Статично рутиране
На практика малки мрежи могат да използват ръчно конфигурирани рутиращи таблици, това се нарича статично рутиране (не адаптивно).
Приципно цялата мрежа може да бъде конфигурирана статично, но по този начин мрежата не е устойчива на повреда в даден нод. Ако има промяна и повреда в мрежата трафика няма да може да се пренасочи. Трябва да бъдат обновени съответните рутиращи таблици или да бъде отсранена повредата, за да може мрежата да функционира нормално.
При някои обстоятелства статичното рутиране би могло да е от полза - stub networks, default routes
Пример
To configure a static route to network 10.10.20.0/24, pointing to a next-hop router with the IP address of 192.168.100.1, type:
Cisco IOS ip route 10.10.20.0 255.255.255.0 192.168.100.1 Linux route add -net 10.10.20.0 netmask 255.255.255.0 gw 192.168.1.100
The other option is to define a static route with reference to the outgoing interface which is connected to the next hop towards the destination network.
Cisco IOS ip route 10.10.20.0 255.255.255.0 FastEthernet 0/0 Linux route add -net 10.10.20.0 netmask 255.255.255.0 dev eth0
Динамично рутиране
Големите мрежи имат сложна топология, която своевременно може многократно да се променя. Това прави ръчната конфигурация неприложима. Динамичното (адаптивното) рутиране позволява автоматична настройка на рутиращата таблица. Последната се променя според информацията, която се обменя между нодовете посредством рутиращи протоколи и заложениете локални предпочетания за всеки нод.
Примери за такива протоколи са RIP - Routing Information Protocol и OSPF (Open-Shortest-Path-First protocol). Дънамичното рутиране пробладава в Интернет, но изисква съответните познания за правилното му конфигуриране.
Adaptive routing describes the capability of a system, through which routes are characterized by their destination, to alter the path that the route takes through the system in response to a change in conditions.[1] The adaptation is intended to allow as many routes as possible to remain valid (that is, have destinations that can be reached) in response to the change.
People using a transport system can display adaptive routing. For example, if a local railway station is closed, people can alight from a train at a different station and use another method, such as a bus, to reach their destination. Another example of adaptive routing can be seen within financial markets. For example, ASOR or Adaptive Smart Order Router (developed by Quod Financial), takes routing decisions dynamically and based on real-time market events.
The term is commonly used in data networking to describe the capability of a network to 'route around' damage, such as loss of a node or a connection between nodes, so long as other path choices are available. There are several protocols used to achieve this: RIP OSPF IS-IS IGRP/EIGRP
Алгоритми на рутиращи протоколи
Distance vector algorithms
Вектор на разстоянието.
На всяка връзка между два нода се дава някаква стойност. Всеки нод ще препаща съобщение от точка А към точка B по пътя, който има най малка сумарна стойност.
При първоначалното включване на един нод, той знае единствено за връзките със своите съседи и стойността на тези връзките. Той прави таблица на тези връзки .
(This information, the list of destinations, the total cost to each, and the next hop to send data to get there, makes up the routing table, or distance table.)
Процеса се извършва в следните две стъпки:
- На определено време всеки нод изпраща до своите съседи таблица, в която са описани пътища с най-ниска стойност до мрежите, които са му известни.
- Всеки нод, който получи такава таблица е сравнява със своята таблица.
- Ако открие път до мрежа, която той не знае я добавя в собствената си таблица
- Ако открие път с по-ниска стойност до дадена мрежа от колкото пътя записан в локалната таблица, той замества този запис с този от получената таблица.
- Ако открие път в своята таблица, който минава минава през нода, чиято таблица е получена, но този път не съществува в получената таблица, този път се премахва от локалната таблица.
След време всички нодове ще са открили пътя с най-ниска стойност до всяка мрежа.
Когато някой нод спре да функционира, неговите съседи ще разберат по това, че той не праща съобщения и ще обновят своите таблици. При промяна на топологията.
Link-state algorithms
When applying link-state algorithms, each node uses as its fundamental data a map of the network in the form of a graph. To produce this, each node floods the entire network with information about what other nodes it can connect to, and each node then independently assembles this information into a map. Using this map, each router then independently determines the least-cost path from itself to every other node using a standard shortest paths algorithm such as Dijkstra's algorithm. The result is a tree rooted at the current node such that the path through the tree from the root to any other node is the least-cost path to that node. This tree then serves to construct the routing table, which specifies the best next hop to get from the current node to any other node.
Optimised Link State Routing algorithm
A link-state routing algorithm optimised for mobile ad-hoc networks is the Optimised Link State Routing Protocol (OLSR).[1] OLSR is proactive; it uses Hello and Topology Control (TC) messages to discover and disseminate link state information through the mobile ad-hoc network. Using Hello messages, each node discovers 2-hop neighbor information and elects a set of multipoint relays (MPRs). MPRs distinguish OLSR from other link state routing protocols.
Path vector protocol
Distance vector and link state routing are both intra-domain routing protocols. They are used inside an autonomous system, but not between autonomous systems. Both of these routing protocols become intractable in large networks and cannot be used in Inter-domain routing. Distance vector routing is subject to instability if there are more than a few hops in the domain. Link state routing needs huge amount of resources to calculate routing tables. It also creates heavy traffic due to flooding.
Path vector routing is used for inter-domain routing. It is similar to distance vector routing. In path vector routing we assume there is one node (there can be many) in each autonomous system which acts on behalf of the entire autonomous system. This node is called the speaker node. The speaker node creates a routing table and advertises it to neighboring speaker nodes in neighboring autonomous systems. The idea is the same as distance vector routing except that only speaker nodes in each autonomous system can communicate with each other. The speaker node advertises the path, not the metric of the nodes, in its autonomous system or other autonomous systems. Path vector routing is discussed in RFC 1322; the path vector routing algorithm is somewhat similar to the distance vector algorithm in the sense that each border router advertises the destinations it can reach to its neighboring router. However, instead of advertising networks in terms of a destination and the distance to that destination, networks are advertised as destination addresses and path descriptions to reach those destinations. A route is defined as a pairing between a destination and the attributes of the path to that destination, thus the name, path vector routing, where the routers receive a vector that contains paths to a set of destinations. The path, expressed in terms of the domains (or confederations) traversed so far, is carried in a special path attribute that records the sequence of routing domains through which the reachability information has passed.
Each entry in the routing table contains the destination network, the next router and the path to reach the destination.
Сравнение на рутиращи алгоритмни
Distance-vector routing protocols are simple and efficient in small networks and require little, if any, management. However, traditional distance-vector algorithms have poor convergence properties due to the count-to-infinity problem.
This has led to the development of more complex but more scalable algorithms for use in large networks. Interior routing mostly uses link-state routing protocols such as OSPF and IS-IS.
A more recent development is that of loop-free distance-vector protocols (e.g., EIGRP). Loop-free distance-vector protocols are as robust and manageable as native distance-vector protocols, but avoid counting to infinity, and have good worst-case convergence times.
Рутиращи протоколи
RIP
RIP (routing information protocol) e широко използван маршрутизиращ протокол с вектор на разстоянието. Той е подходящ предимно за малки мрежи, в които относително рядко настъпват промени в топологията. Всеки ред в маршрутната таблица на RIP маршрутизаторите съдържа информация за направлението, следваща стъпка към това направление и метрика. Метриката обозначава разстоянието в стъпки до местоназначението, т.е. метриката използвана от RIP протокола е брой хопове. Както повечето маршрутизиращи протоколи, RIP също използва таймери. Обикновено на всеки 30 секудни се изпраща копие на маршрутната таблица към съседните маршрутизатори. Този интервал се задава от таймера за обновяване (route update timer) и е общ за всички маршрути. Таймерът за невалиден маршрут (route timeout timer) определя интервала от време, след който даден маршрут се счита за невалиден, ако маршрутизаторът не е получил съобщения за него. Когато даден път бъде отбелязан като невалиден, се изпращат съобщения с тази информация към съседните маршрутизатори и се преустановява използването му. Тези съобщения се изпращат до изтичането на таймера за изтриване на маршрут (garbage-collection timer), след което пътя се изтрива от маршрутната таблица. Първата версия на RIP не поддържа подмаски, т.е. от гледна точка на IP не поддържа подмрежи, затова в края на 80-те години се разработва втора версия на RIP. Формата на пакетите на версия RIP-2 е следния:
Първите три полета Command, Version и Routing domain представляват заглавната част на пакета, а останалите шест полета съдържат данни за маршрути и комбинация от тях може да се повтаря до 25 пъти в един RIP-2 пакет. За пренасяне на информацията от по-големи маршутни таблици се използват няколко RIP-2 пакета. Полето Command указва дали пакетът съдържа заявка или отговор. Командата “Заявка” изисква отговарящата система да изпрати цялата или част от маршрутната си таблица. Командата “Отговор” представлява отговор на получена команда “Заявка” или периодично съобщение за обновяване на маршрутите, в което се включва цялата маршрутна таблица. Полето Version указва версията на протокола, за RIP-2 тази стойност е 2. Полето Routing domain не се използва. Полето Address family е идентификатор на адресна фамилия. Въвежда се идентификация на група от маршрутизатори. Всички маршутизатори в една група имат една и съща адресна фамилия. Полето Route tag указва дали информацията за даден маршрут произхожда от RIP или от друг вътрешен или външен маршутизиращ протокол. Полето IP address съдържа IP адреса на мрежа или хост, която представлява местоназначението на описвания маршрут. Полето Net mask е мрежовата маска, отнасяща се за горния IP адрес. Полето Next hop IP address съдържа IP адрес на най-близкия машрутизатор, към който ще се изпрати пакета. Полето Metric указва броя хопове до съответното местоназначение и може да има стойност от 1 (директно свързана мрежа) до 16 (недостъпен маршрут – безкрайност).
В първия от 25-те записа на RIP-2 пакета полето Address family може да има стойност 0xFFFF, която указва че следва идентификационна информация за подателя на пакета. В този случай полето Route tag определя използвания алгоритъм, а следващите 16 байта съдържат парола. Използването на този механизъм намалява максималния брой маршрути в един RIP-2 пакет на 24.
При промяна в топологията на мрежата се налага всички маршрутизатори да преизчислят своите вектори на разстоянията и да достигнат до непротиворечиво описание на новата топология. За увеличаване на скоростта на сходимост на RIP се използват различни методи, например разделяне на хоризонта. Тези методи намаляват вероятността за поява на цикли в маршрутите, но не могат да гарантират отсъствието им. Максималният брой хопове в RIP е 15. Всяко местоназначение, което е на разстояние над 15 хопа се приема за недостижимо. Това прави невъзможно прилагането на RIP в мрежи с диаметър над 15 хопа, но ограничава ситуацията “броене до безкрайност”, при която могат да се получат цикли в маршрутите.
Във версията RIP-2 са избегнати някои от недостатъците на RIP-1, но тя продължава да бъде приложима само в малки мрежи поради ниския максимален брой хопове и сравнително ниската и скорост на сходимост. Въпреки наследените от RIP-1 недостатъци и наличието на протоколи, в които те са избегнати, протоколът RIP-2 продължава да се използва, тъй като е лесен за реализация и конфигуриране и се нуждае от сравнително малко машинни и мрежови ресурси.
Internet е съвкупност от физически различни мрежи, които са обединени посредством общ протоколен стек, така че логически да се формира една обща мрежа. Най-лесният начин да се изгради такава мрежа е чрез свързване на две или повече мрежи чрез маршрутизатор (router). Маршрутизаторът представлява специализирано устройство, което дава възможност за свързване на различни типове физически мрежи. Основни функции на маршрутизатора са определяне за всеки получен пакет на най-добрия маршут до хоста-получател на пакета и препредаване на този пакет към следващия маршрутизатор по този маршрут. Последният маршрутизатор от пътя препредава пакета директно към хоста-получател. Информацията за най-добрите маршрути се съхраняват в маршрутни таблици. За определяне на най-добрия маршрут маршрутизаторите обменят помежду си информация, като за оценка използват различна метрика. Обикновено тази метрика включва следните величини: дължина на пътя, надеждност, закъснение на пакета при предаването от източника до получателя, пропусквателна способност на комуникационните линии, натоварване на маршрутизаторите, цена на комуникационните линии.
OSPF
Протоколът OSPF (open shortest path first) е разработен за IP мрежи и използва алгоритъма за маршрутизиране със следене състоянието на връзката (link state). OSPF маршрутизаторите поддържат топологични бази данни с информация за състоянието на връзките в мрежата. Тези бази данни периодично се обновяват посредством обмен на съобщения за състоянието на връзките и съдържат входните данни за алгоритъма на Дейкстра, който се изпълнява от всеки маршрутизатор. В резултат от неговото изпълнение, всеки OSPF маршрутизатор намира най-късите от своя гледна точка пътища до всички известни местоназначения в мрежата.
Важна особеност на OSPF е йерархичното разделяне на автономните системи на области (area). Връзките между различните области се осъществяват задължително през опорна мрежа (backbone), която е особена област с номер 0. Според принадлежността към OSPF областите различаваме 4 вида маршрутизатори: вътрешни маршрутизатори (internal routers), всичките интерфейси на които са свързани към мрежи от една OSPF област; областни гранични маршрутизатори (area border routers), интерфейсите на които са свързани към мрежи от две или повече OSPF области, една от които задължително е опорната мрежа. Тези маршрутизатори поддържат топологични бази данни с информация за състоянието на връзките в областите, към които са свързани, и изпълняват алгоритъма на Дейкстра поотделно за всяка от тях; опорни маршрутизатори (backbone routers), на които поне един от интерфейсите е свързан с опорната мрежа на област 0. Опорните маршрутизатори могат да бъдат областни гранични маршрутизатори, но това не е задължително; гранични за автономната система маршрутизатори (AS boundary routers), които са свързани към поне две различни автономни системи и изпълняват освен OSPF друг външен маршрутизиращ протокол (например BGP).
Опорните маршутизатори могат същевременно да бъдат вътрешни, ако всичките им интерфейси са свързани към опорната мрежа. В рамките на една област всички маршрутизатори имат една и съща топологична база данни. Нейното предназначение е да се изчислят най-късите пътища между дадения маршрутизатор и всички останали маршутизатори в областта. Йерархичните области в OSPF мрежите увеличават скоростта на сходимост на протокола и намаляват натоварването на необходимите за работата му мрежови и изчислителни ресурси. OSPF поддържа три вида различни връзки: връзка от тип “точка-точка” между два маршрутизатора; многоточкови мрежи с broadcast (например, повечето LAN); многоточкови мрежи без broadcast (например, повечето WAN с комутация на пакети).
OSPF работи чрез обмяна на информация между прилежащи маршрутизатори, което не е същото като съседни маршрутизатори. Това се прави, тъй като не е ефективно всеки два маршрутизатора да обменят данни. За целта се избира един титулярен маршрутизатор (designated router), който става прилежащ към всички останали маршрутизатори и всеки от тях синхронизира топологичната си база данни с неговата. Ако настъпи промяна в състоянието на връзките на даден маршрутизатор, той изпраща съобщение на титулярния маршрутизатор, а от своя страна той съобщава промяната на всички останали маршрутизатори в мрежата. При отпадане на титулярния маршрутизатор има заместник, който е в състояние веднага да поеме неговите функции.
Форматът на OSPF пакета е следния:
Полето Version number съдържа номера на версията на OSPF, която се използва. Полето Type определя типа на съобщението. Има няколко типа съобщения: “ехо” пакет (hello packet) – той се използва при откриване на съседни маршрутизатори, за проверяване на работоспособността на връзките и за избор на титулярен маршрутизатор; описание на база данни (database description) – разменят се при първоначално установяване на връзка между два маршрутизатора и служат за обмен на информация за състоянието на връзките в областта от техните топологични бази данни; пакет за запитване (link-state request) – чрез него даден маршрутизатор може да поиска информация от друг маршрутизатор за част от записите в неговата топологична база данни за състоянието на връзките; пакет за обновяване (link-state update) – тези пакети се изпращат периодично от всеки маршрутизатор и съдържат данни за неговото състояние и за цените, използвани в топологичната база данни; разпространяват се по метода на наводняването към всички останали маршрутизатори в границите на дадена област; пакет за потвърждение (link-state acknowledgement) – механизмът за надеждно доставяне на пакетите за обновяване изисква при получаването им да се изпращат потвърждения. Полето Packet length съдържа общата дължина на OSPF пакета, включват се заглавната част и данните. Полето Router ID съдържа уникален за автономната система идентификатор на маршрутизатора, изпратил пакета. Полето Area ID съдържа номера на областта, към която е свързан интерфейса на маршрутизатора-подател на пакета. Полето Check sum е контролна сума, която се изчислява върху цялото съдържание на OSPF пакета. Служи за проверка дали пакета е бил предаден правилно. Полето Authentication type указва вида на използвания механизъм за идентифициране на подателя на пакета. Проблемът е, че в мрежата може да проникнат фалшиви пакети, които дублират информацията за състояние на връзките на някой маршрутизатор. За това трябва да се установява автентичността на пакетите. Полето Authentication съдържа автентицираща информация.
BGP
В рамките на една автономна система се използват вътрешни протоколи за маршрутизиране, например RIP или OSPF. Тяхната цел е максимално бързо и ефективно да предават пакети от източника до получателя. За маршрутизиране между различни автономни системи се използват външни маршрутизиращи протоколи. Такъв протокол е BGP (border gateway protocol). В него се залага на политиката на маршрутизация – например, най-прекият път между две автономни системи не винаги е разумен. В политиката се включват икономически, административни и други фактори. Примери за политически ограничения: да не се позволява транзитен трафик през дадена автономна система; трафикът за Пентагона да не минава през Ирак; трафикът, започващ или свършващ в IBM да не минава през Microsoft. Политическите ограничения се конфигурират ръчно и не са част от BGP протокола.
От гледна точка на един BGP маршрутизатор, светът се състои от автономни системи, свързани с линии. Две автономни системи са свързани, ако има линия между гранични маршрутизатори във всяка от тях. От гледна точка на транзитния трафик BGP мрежите се делят на три вида: stub мрежи – те имат само една връзка в BGP графа и не могат да се използват за транзитен трафик; multiconnected мрежи – те могат да се използват за транзитен трафик, но самите те отказват да го правят; transit networks – например опорните мрежи, които пренасят транзитен трафик, обикновено срещу заплащане.
BGP протокола се базира на алгоритъма с вектор на разстоянието, но се различава доста от него. Вместо да се поддържа само цената към всяко местоназначение, всеки BGP маршрутизатор поддържа целия път към местоназначението. Освен това, вместо периодично да подава на съседите си цените до местоназначенията, всеки BGP маршрутизатор подава на съседите си целите пътища, които те използват. Това има смисъл, тъй като графът с възли автономните системи не е безмерно голям. Като пример да разгледаме следната мрежа от BGP маршрутизатори:
По-конкретно да разгледаме маршрутизатора F. Той получава от съседите си следните пътища до D – път BCD от B, път GCD от G, път IFGCD от I и път EFGCD от E. F преглежда тези пътища за да определи кой е най-добрия. Той премахва пътищата от I и E, тъй като минават през него. Изборът е между B и G. Всеки BGP маршрутизатор съдържа модул, който изследва пътищата до дадено местоназначение и ги оценява. Път, който нарушава политическо ограничение автоматично получава оценка безкрайност. Маршрутизаторът избира пътят с най-ниска оценка. Оценяващата функция не е част от BGP протокола. При BGP лесно се решава проблемът “броене до безкрайност”. Например, да предположим, че G пропадне или, че линията FG става недостъпна. Тогава F получава маршрути от останалите си три съседа. Тези маршрути са BCD, IFGCD и EFGCD. F бързо премахва последните два пътя, тъй като те са безсмислени – преминават през него и за това избира FBCD като нов маршрут. Другите алгоритми с вектор на разстоянието често правят погрешен избор, тъй като те не могат да съобщят кой от съседите има независим маршрут до местоназначението и кой няма.