Изменения
→Просмотр таблицы маршрутизации
== Идея Определения==Рассмотрим задачу: найти слово в словаре. Если оно начинается на букву "А", то никто не будет искать его в середине, а откроет словарь ближе к началу. В чём разница между алгоритмом человека и другими? Отличие заключается в том, что алгоритмы вроде двоичного поиска не делают различий между "немного больше" и "существенно больше".
== Псевдокод =Пример таблицы маршрутизации=<code> '''int''' interpolationSearch(a : '''int[]''', key : '''int''') <font color=green> // a должен быть отсортирован </font> left = 0 <font color=green> // левая граница поиска (будем считать, что элементы массива нумеруются с нуля) </font> right {| border= a.length - "1 <font color=green> // правая граница поиска </font>" |- '''while''' a[left] < key '''and''' key < a[right]!Destination||Netmask||Gateway||Interface||Metric mid = left + (key - a[left]) / (a[right] - a[left]) * (right |- left) <font color=green> // индекс элемента, с которым будем проводить сравнение </font> '''if''' a[mid] < key left = mid + |0.0.0.0||0.0.0.0||192.168.0.1||192.168.0.100||10 '''else if''' a[mid] > key|- right = mid - |127.0.0.0||255.0.0.0||127.0.0.1||127.0.0.1||1 '''else'''|- '''return''' mid|192.168.0.0||255.255.255.0||192.168.0.100||192.168.0.100||10 |- '''if''' a[left] == key|192.168.0.100||255.255.255.255||127.0.0.1||127.0.0.1||10 '''return''' left|- '''else if''' a[right] == key '''return''' right '''else''' '''return''' -|192.168.0.1 <font color=green>// если такого элемента в массиве нет </font>||255.255.255.255||192.168.0.100||192.168.0.100||10</code>|}
== Литература =Пример получения адреса сети==={| class="simple" border="1"|-! ||Двоичная запись||Десятичная запись|-Д|IP-адрес||<tt>11000000 10101000 00000001 00000010</tt> ||192.Э168. Кнут: [http:1.2|-|Маска|| <tt>11111111 11111111 11111110 00000000</tt> || 255.255.254.0|-|Адрес сети|| <tt>11000000 10101000 00000000 00000000</bookstt> ||192.google168.com/books?id=92rW-nktlbgC&pg=PA452&lpg=PA453&ots=jChsP2sutg&dq=%D0%BA%D0%BD%D1%83%D1%82+%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D0%BE%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA&hl=ru&ie=windows-1251&output=html Искусство программирования (том 3)]0.0|}
{{Определение|definition = Интерфейс (Interface) указывает, какой локальный интерфейс отвечает за достижение шлюза. Например, шлюз 192.168.0.1 (интернет-маршрутизатор) может быть достижим через локальную сетевую карту, адрес которой 192.168.0.100.}} {{Определение|definition = Метрика (Metric) {{---}} числовой показатель, задающий предпочтительность маршрута. Чем меньше число, тем более предпочтителен маршрут. Интуитивно представляется как расстояние (необязательный параметр).}} ==Принцип действия==При отправке сетевого пакета, операционная система смотрит, по какому именно маршруту он должен быть отправлен, основываясь на таблице маршрутизации. Как правило, выбирается наиболее конкретный (т.е. с наиболее длинной сетевой маской) маршрут из тех, которые соответствуют адресу отправителя и имеют наименьшую метрику. Если ни один из маршрутов не подходит, пакет уничтожается, а его отправителю возвращается ICMP-сообщение ''No route to host''. Внутри каждого пакета есть поле TTL (Time to live) при каждой пересылке значение уменьшается на единицу, и если оно становится нулем, то пакет выбрасывается. ICMP-сообщение в данном случае ''TTL expired in transit''. ==Просмотр таблицы маршрутизации==Ниже приведены команды в разных операционных системах, с помощью которых можно посмотреть таблицу маршрутизации Windows: '''route print''' Linux: '''route -n''' ==Источники информации==*[http://lpcs.math.msu.su/~sk/lehre/fivt2013/Earley.pdf Алексей Сорокин {{---}} Алгоритм Эрли]* Ахо А., Ульман Д.{{---}} Теория синтакcического анализа, перевода и компиляции. Том 1. Синтаксический анализ. Пер. с англ. {{---}} М.:«Мир», 1978. С. 358 — 364. [[Категория: Дискретная математика и алгоритмыТеория формальных языков]][[Категория: Контекстно-свободные грамматики]][[Категория: Алгоритмы поискаразбора]]