UNИX, осень 2008, 06 лекция (от 05 ноября)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Содержание

[править] Лекция

[править] Вступление

Мы чересчур поспешно добрались до сетевого уровня TCP/IP, на котором решаются две задачи:

  • задача глобальной идентификации
  • задача доставки пакета, маршрутизации (в случае, если отправитель и получатель отделены последовательностью различных СПД)

[править] Идентификация

Лектор напоминает, что если бы СПД была одна, и она была бы Ethernet, то этого уровня не было бы. Есть некий механизм порождения уникальности, ethernet-идентификатор, который можно было бы использовать, и задействовать для идентификации устройств - именно из уникального идентификатора, то есть MAC-адреса.

[править] IP адрес

Необходимость ещё одного идентификатора также диктуется независимостью уровней.

Для идентификации на сетевом уровне вводится понятие IP-адрес. Он состоит из 4 байтов, эти 4 байта можно записывать в 10-м виде через точку: 127.0.0.1, их же можно записывать в 16-ричном виде, в 2-ном (только долго писать придётся), и принято различать... каждый такой адрес присваивается некоему сетевому интерфейсу, то есть, той дырке, той части системы, через которую пакеты переходят на уровень сетевой. Тут может происходить сборка-разборка пакетов.

[править] Маска сети

Принято различать в IP-адресе адрес компьютера и адрес сети. Адрес сети и адрес абонента сети. Поначалу предположили, что сетей будет 256 штук, поэтому считались, что первый байт сети. Потом выяснилось, что то отфонарное деление и реальные сети содержат мало компьютеров, поэтому придумали деление сетей на классы.

Система там очень простая:

  • A — первый бит адреса 0, один байт на адрес сети
  • B — 10, два байта на адрес сети
  • С — 110, три байта на адрес сети

Но это деление теперь тоже оказалось малоосмысленным, и все на это забили. В альте, например, выдаётся сетевая маска /24, даже если адрес 10.х.х.х.

Поскольку не все умеют корректно и правильно обрабатывать дырявые маски, и они мало где используются, то обычно маска определяется количеством единиц в ней: в адресе 210.111.18.2/24 маска 255.255.255.0 и подсеть 210.111.18.0.

...

[править] Откуда берутся адреса

Поскольку мы всех перенумеровали, то теоретически один абонент может передать другому данные. Но тут возникает несколько вопросов:

Откуда я знаю, что я такой адрес? От провайдера. А откуда у провайдера этот адрес? Наверное, есть орган (IANA), которая раздаёт адреса по-крупному. Например, 210.x.x.x выдан Китаю (?), и если спросить у неё про конкретный адрес, то она не ответит, скажет, все вопросу к Китаю. Там уже пошлют к провайдеру, там ещё к одному и так далее. Идея понятна: существует некая чисто административная иерархия по раздаче адресов в пространстве интернета. Эта иерархия держится на административных и отчасти топологических закономерностях — скажем, связность между двумя адресами 210.х.х.х выше, чем между ними и адресами из другой подсети.

Соответственно, адресация получается не кто первый занял, а есть организация, за это отвечающая.

[править] Локальные IP

Есть некий шаблон поведения, который, по крайней мере, не требует того, чтобы для каждого из таких компьютеров регистрировался IP-адрес, а в ряде случаев такое даже не нужно. Например, если у нас есть компьютерный класс, от при добавлении десятка компьютеров было бы очень неудобно ходить к провайдеру и регистрировать 10 адресов. Более того, в ряде случаев было бы хорошо скрывать диапазон адресов, используемых в локальной сети.

Есть ещё одна проблема: IP-шники начинают кончаться, и IANA выдаёт их неохотно.

Ещё одна типичная ситуация: подключение к интернету непостоянное.

Две последние проблемы решаются следующим образом:

  • Существует технология подмены IP-адреса, про неё мы будем говорить, когда будем говорить про IP-уровень. Суть этой технологии (NAT) очень простая: есть компьютер с неважным IP-адресом, и посылает пакет в интернет, пакет проходит через некое устройство, которое запоминает историю пакета и его уникальные характеристики, подменяет IP и посылает наружу, когда приходит ответ, происходит обратная операция. Когда используют NAT, адреса в локалке никого не волнуют. Для того, чтобы это дело более менее ввести в какое-то русло...

На заре становления факультетского интернета были IBM RT, которые приехали неизвестно откуда. Приехали они с чистыми хардами, но на одной из машин оказался бэкап, с которого как-то развернули систему, и долгое время адреса в у них были такие же, как у MIT. Поскольку был NAT, то никто об этом не знал, но на сайт MIT'а было нельзя.

Чтобы такой проблемы не возникало, некоторые диапазоны адресов отведены под локальные сети:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 169.254.0.0/16
  • 192.168.0.0/16

Любой из них можно использовать для адресации в локальных сетях без проблем.

При этом в настоящем интернете такие адреса встречаться не должны, а если и встретятся, то первый попавшийся маршрутизатор обязан такой адрес выкинуть. Ещё их обозначают как интранет. Интранет — такое слово без определения, и им называет много чего. И если говорят интранет-адрес, то скорее всего имеют адрес из этих диапазонов.

Поскольку очевидно некое неудобство использования адресов в привычном виде, давно разработана система раздачи адресов, называется IPv6. Она немного сложнее, там много вопросов решается.

[править] Доставка пакета

[править] Нужна ли пакету маршрутизация

Сосредоточимся на одном из всего этого: есть абонент сети, и ... за это отвечает сетевая маска.

Есть довольно простой способ проверки (это часть сетевого протокола), принадлежит ли абонент локальной сети и, следовательно, доступен ли в пределах СПД, или же он ей не принадлежит и с ним надо что-то делать. Накладываем маску на адреса отправителя и получателя, и, если они совпадают, то они лежат в пределах локальной сети.

[править] Случай 1. Локальная сеть. ARP

Что в этом случае делать: заворачиваем в ethernet-фрейм и посылаем, поскольку знаем его идентификатор, MAC-адреса. А откуда мы его знаем? Есть СПД, где заранее известны все идентификаторы, это статические сети, например в рамках вычислительного кластера. В реальной жизни бывает всё не так. В общем случае нам неизвестен интерфейсный идентификатор абонента, известен только IP.

Для того, чтобы выполнить операцию нахождения соответствия между MAC-адресами и IP-адресами (интерфейсным и сетевым адресами), мы должны иметь некую таблицу соответствий, и существует протокол (ARP), который как раз занимается переводом из адреса уровня сетевого в адрес уровня интерфейсного. Там богатый спектр верхних и нижних уровней, и, в частности, переводит из IP в MAC. Поддержка ARP — неотъемлемое свойство практически любой машины, подключенной к интернету. Протокол ARP широковещательный, его пакеты направляются сразу всем (в поле MAC-адреса стоят все 1), и тип этого пакета — ARP-запрос. В нём написано? "Чей такой вот IP?". Этот пакет все получают, и та машина, чей IP, отвечает: "Это ARP-ответ", поскольку адрес содержится в фрейме. После этого таблица пополняется.

Таблица соответствий динамическая, записи в ней живут недолго, буквально минуту или несколько минут.

[править] ip neighbour

В линуксе, по крайней мере мере, в утилите ip показывается, насколько запись старая.

Сразу, чтобы было понятно, наша универсальная утилита ip это часть пакета iproute2, которая занимается чёрт знает всем, и, в частности, маршрутизацией. У утилиты ip есть команда neighbour. команда ip n выдаст ARP-таблицу, для тех, кто ещё помнит, есть arp -a. Внимательное изучение документации по ip, можно узнать, что можно прописывать статические ARP-записи. Можно ещё в этой таблице прописать чужой IP-адрес. Чем это отличается от alias? Чаще всего это бывает в следующих ситуациях: есть интернет, по нему есть ppp-канал, за которым машины с такой же подсетью, как и ваша. В этом случае на маршрутизаторе прописывается ещё одна arp-запись.

[править] Случай 2. Другая сеть

Что касается маршрутизации: здесь есть две проблемы. Первая проблема состоит в очень простом вопросе: мы выяснили, что наш пакет на уровне IP, мы его хотим послать абоненту, который не находится в нашей локальной сети. Что дальше? Видимо, послать его куда-то, причём в надежде, что оно пошло ещё дальше, и ещё дальше и так далее. В нашей сети не все йогурты абоненты одинаковы.

Это значит, что мы должны взять за правило все пакеты не для нашей сети посылать определенной машине. Это и есть акт маршрутизации. Очень часто бывает, что это пластиковая мыльница, которая лампочками мигает и маршрутизирует.

[править] Утилита ip

При этом что нужно сделать на клиенте: на ней нужно создать специальную запись, опять таки, внутри таблиц ядра, которая именовала эту машину маршрутизатором для... Есть команда ip route, которая позволяет просмотреть все маршруты. Выполнив её...

Возвращаемся к вопросу идентификации. Мы помним, что все сетевые интерфейсы можно просмотреть командой ip link. С помощью ip addr можно просмотреть список всех интерфейсов и всю информацию, касающуюся сетевого уровня, присвоенную этим интерфейсам. По крайней мере, с точки зрения линукса, должен быть интерфейс, и на него уже навешивать параметры уровня сетевого. Для того, чтобы добавить адрес к интерфейсу, достаточно сказать ip addr add 210.11.70.8/24 dev eth0.

Некоторые узнают в этом синтаксис ifconfig. Естественно, поскольку ip это в первую очередь замена ему, и умеет всё и ещё больше. Только в ifconfig для добавления нескольких адресов необходимо было создать виртуальные интерфейсы... проделывать некое упражнение.

...

[править] Таблицы маршрутизации

За каждую локальную сеть, которая навешана на интернет, будет отвечать запись в таблице маршрутизатора, примерно следующего содержания: ... сеть такая-то, передавать через то-то.

В случае, когда есть несколько записей, таблица будет просмотрена следующим образом: чем более общая маска, тем позже она будет просмотрена: сначала, записи хост-хост, дальше для маленьких сетей и так далее до записи default, где маска нулевая.

Некое утверждение: когда мы говорим про адрес сети, мы должны понимать, что как минимум два адреса абонента зарезервированы: адрес абонента не может иметь из всех нулей и из всех единиц. Из нулей — собственно адрес сети, и не может использоваться, что же касается адреса, состоящего из адреса сети и всех единиц, то это широковещательный адрес сетевого уровня, broadcast. Кстати сказать, этот параметр, вычислим из маски, но его можно задавать вручную по-другому.

В случае соединения точка-точка, нам вообще не нужно пользоваться механизмом сеть-подсеть. Если это подключение не точка-точка, то сколько тогда надо бит? 2, не 1. Сеть /30. Это к тому, насколько максимум подсетей можно разрезать подсеть класса C: не на 256, и не на 128, а на 64, или даже 63.

Алгоритм маршрутизации достаточно прост: мы просматриваем строчки таблицы маршрутизации, где сначала абоненты локальной сети, потом записи вида пересылки через абонентов и последней будет по умолчанию. Это всё стандартный алгоритм маршрутизации, если не использовать хитрые штуки ip route. Ибо не зря iproute2. Ибо такой способ маршрутизации весьма неэффективен в случае сложной маршрутизации. В случае настройки простой маршрутизации он вполне хорош.

Например, в случае, когда нужно предоставить различную скорость доступа для разных категорий пользователей, для определения того, куда пересылать пакет, нужно изучать адрес отправителя, а не адрес получателя. Тут мы наталкиваемся на ситуацию, что в адресе отправителя ничего про это не говорится. Эта задача одна из первых возникает в задаче принудительной маршрутизации, она называется source-based routing. Разумеется, раз пошла такая пьянка, то пошли всякий примеси. Например, пакеты одного класса можно пересылать через быстрый и тонкий канал, другого — через тонкий и медленный. Или если пакет из привилегированного сеанса, от обработать его привилегированно. Вообще говоря, можно подменить стандартный процесс маршрутизации, маршрутизируя по правилам какое состояние в системе и какими свойствами обладает приехавший пакет.

Пристальный анализ документации к утилите ip покажет, что там достаточно много разных действий.

[править] Глобальная маршрутизация

Осталось 5 минут на проблему глобальной маршрутизации. В реальности тот же интернет не является деревом. Если это было бы дерево, то был бы маршрутизатор всего интернета, к которому в очередь выстраивались бы террористы, желающие обрушить весь интернет.

В реальности имеются некие облачка (внутри которых уже очень часто бывают деревья), и между ними неплохо было бы устроить какую-то сеть, и поддерживать информацию о:

  • Достижимости
  • Стоимости этого дела
  • Уметь в случае пропадания достижимости гибко перестраивать этот маршрут

С точки зрения деревообр. кусочка это выглядит так: сначала передавали их через одно место, потом через другое.

Если бы не было такой стратегии разю. интернета на авт. системы и отслеживания достижимости, то никакого интернета бы не было. Эта проблема это тоже проблема маршрутизации. Первая проблема — маршрутизация изнутри, вторая — маршрутизация снаружи.

Существует несколько протоколов разной степени замшелости, которые описывают поведение авт. систем: BGP, RIP, RIP2, EGP. Реализация такого протокола есть функция не столько рабочей машины, скорее всего вы даже такую машину не увидите, это очень редкий компьютер, и на нём совсем не обязательно линукс или что-то юникс-подобное. Сущ. прогр. продукты, которые реализуют эти протоколы маршрутизации, наиболее известный это Zebra и выросщий из неё ... . Проблема в том, что это вообще не очень часто решающаяся задача, и если юникс-гуру дали такую задачу, то он возьмёт ту же ..., посидит над неё неделю и сделает так, что бы оно работало. Но есть фирмы, которые занимаются продажей такого железа.

О протоколах этого уровня в следующий раз.


[править] Конспект Kda

Сегодня приступаем к уровню IP. Есть ощущение, что можем не уложиться в семестр. Прикладные вещи, такие как DNS, возможно, придется отложить на следующий семестр.

Начнем с небольшого повторения того, что было раньше. Мы добрались до сетевого уровня, на котором решаются задачи идентификации всех абонентов сети и задача доставки пакета в случае, если отправитель и получатель отделены друг от друга последовательностью СПД с различным администрированием. Идентификация и маршрутизация.

Если бы СПД была одна, этого уровня не было бы. Есть механизм порождения уникальных Ethernet-идентификаторов, их можно было бы задействовать.

Сетевой уровень не должен зависеть от интерфейсного уровня. Для идентификации на сетевом уровне вводится понятие IP-адреса. Состоит из 4 байтов, часто их любят записывать в десятичном виде. Можно записывать в шестнадцатеричном, двоичном виде. В последнем случае долго писать. Каждый адрес присваивается некому сетевому интерфейсу, той «дырке», на которой происходит переход на нижний уровень.

Принято различать адрес компьютера и адрес сети. Сеть и абонент сети. Предполагалось, что первый байт будет адресом сети, а остальное — адресом компьютера. Реально столько компьютеров в одной сети нет. Сейчас система следующая: первый бит 0 — класс A, первый 1, второй 0 — класс B, первые две единицы, затем 0 — класс C. Сейчас ничего по-человечески не используется. Даже если у нас в первом байте 10, скорее всего, все равно будет 24 бита на сеть. Есть класс D — начинается с 1110 — Multicast.

Должна быть сетевая маска — число, определяющее, сколько битов является адресом сети, а сколько — адресом компьютера. Не все их нормально умеют обрабатывать, считается, что задается количество первых бит. Адрес 210.111.18.2/24 — первые 24 бита — адрес сети.

Предполагается, что весь Интернет разделен на мелкие СПД. Впрочем, на одной СПД можно завести несколько сетей и так иногда делается. Если мы перенумеровали всех абонентов, теоретически, можно передать данные от любого абонента к любому. Главная проблема — как выяснить адрес своего компьютера. Провайдер сказал. А откуда он узнал? Точнее, как провайдер узнал, что у него есть сеть. Где-то есть специальный орган, занимающийся раздачей адресов. Выдается диапазон адресов, например, Китаю. Обращаясь с специальную службу, мы спрашиваем, чей это адрес (210.***). Они говорят, не знаем, вопросы к китайцам. Китайцы говорят, у нас этим занимается мелкий китайский провайдер (десяток-другой провинций). Уже (210.111.***). Далее находим китайскую деревеньку. То есть получается такая иерархическая топология. Абоненты одной локальной сети, считаем, в одной сети.

Есть некий шаблон поведений или способ работы с компьютерами, который не требует, чтобы для каждого из компьютеров регистрировался IP-адрес, а может быть адрес даже не известен. Есть компьютерный класс, в котором мы работаем. У нас нет серверов, нет спама, ничего нет. Если нужно добавить десяток компьютеров, было бы неудобно регистрировать компьютеры в Интернете. Заявление о регистрации нежелательно. Было бы хорошо, чтобы не надо было регистрироваться у провайдера, но даже скрывать внутренние адреса. Есть один внешний адрес, на нем может быть даже расположен сервер. Но информация о компьютерах в сети либо никому не интересна, либо даже засекречена.

Мы не знаем, имеют ли все компьютеры Интернета уникальные адреса. Реально неизвестных компьютеров очень много. Сегодня IP-адресов не хватает на всех. Организация неохотно выдает новый диапазон, их надо покупать за большие деньги. Типичный пример, когда нам не нужен постоянный IP-адрес. Это когда подключение к Интернету временное. Раньше Москва подключалась в основном через диалап. Мы осуществляем подключение к Интернету, работаем, отключаемся и наш адрес выдают еще кому-то.

Существует технология подмены IP-адреса. Основная работа происходит на транспортном уровне. NAT. Суть проста — есть компьютер с IP-адресом. Есть устройство. Берет пакет, подменяет IP-адрес на свой и отправляет. Когда приходит ответ, подменяет адрес обратно и отправляет обратно.

Есть локальная сеть. На заре становления Интернета в МГУ. Точнее, даже раннее утро. Приехали XT. В начале они приехали с отформатированными дисками. В одной обнаружили два винчестера вместо одного. На втором был бэкап, который можно развернуть. Все XT были с адресами МИДа. Но адреса были внутри, и это никого не волновало. Реально есть разрешенные диапазоны для внутреннего использования. Сеть 10.0.0.0/8 (255.0.0.0). На Китай не хватит, но 16 млн компьютеров можно подключить. 172.16/12 (реально 16-31 во втором байте, 255.240.0.0). 169.254/16. 192.168/16.

Сети класса D — для широковещания. Внутренние адреса в Интернете не встречаются, а даже если встречаются, первый же маршрутизатор отбросит их.

Что еще можно сказать про IP-адреса? Поскольку, очевидно, есть некоторые неудобства, связанные с использованием IP-адресов, сейчас есть IPv6. Новый протокол существенно сложнее. Вопросы идентификации, маршрутизации решаются по-другому. Старый протокол называется IPv4.

Есть понятие абонента локальной сети. За сеть отвечает сетевая маска. Есть довольно простой способ определить, принадлежит ли наш абонент локальной сети, или нет и с пакетом надо что-то делать. Берем адрес отправителя и получателя, накладываем маску, если результаты не совпадают, адреса в разных сетях, иначе в одной.

Сравнили адреса, вычленили маску, выяснили, что сети совпадают. Есть 210.111.70.1, передаем для 210.111.70.8. Берем пакет, заворачиваем в Ethernet-фрейм и отсылаем. Мы знаем, куда отсылать. А откуда? Есть адреса абонентов. Пусть есть сеть, где абоненты всегда включены и не изменяются. В реальной жизни все не так, компьютеры включаются и отключаются. В общем случае нам неизвестен интерфейсный идентификатор, а только IP-адрес. Для нахождения интерфейсного уровня в ядре есть таблица соответствия, есть протокол ARP, переводящий адреса сетевого уровня в адреса интерфейсного уровня. В том числе он переводит IP в MAC, но не только. ARP должен работать у любого устройства сети.

Мы захотели передать, а MAC-адрес не знаем. Вместо фрейма с пакетом передаем специальный широковещательный фрейм (в адресе все единички). Этот пакет — ARP-запрос. У меня есть IP, отзовитесь, чей он. Передают на уровень выше. В ответном фрейме ничего не содержится, кроме идентификатора ARP-запроса (адрес отправителя уже есть).

На интерфейсном уровне посылается широковещательный запрос с сетевым адресом. Получаем ответ, таблица соответствия пополняется. Таблица динамическая, записи живут недолго, минуту или около того.

В Линуксе есть информация о том, сколько осталось жить записи в таблице. При передаче первым делом лезем в таблицу, если там нет адреса, делаем запрос, пополняем таблицу и после этого отправляем. Утилита IP — часть iproute2, который занимается в том числе маршрутизацией. У утилиты есть команда ip neighbour. Выполнив, увидим таблицу. Внимательное изучение документации покажет, что можно проделать разные вещи. Можно добавить статическую запись (неустаревающую). Например, чтобы не посылать постоянно широковещательные запросы. Можно все прописать статически и отключить везде ARP, чтобы сбить с толку злоумышленника. Можно прописать чужой IP-адрес на свой MAC-адрес.

Есть машина, подключенная к Интернету, есть PPP канал. Нужно организовать доступ. Можем воспользоваться этой возможностью, чтобы не включать NAT. Чужой IP становится частью нашей СПД, чтобы не заморачиваться на трансляцию адресов. Мы добавляем информацию о том, что ip2 — тоже наш адрес. При получении пакета, обнаруживаем, что он не нам и делаем банальную маршрутизацию. Два адреса принадлежат одной и той же локальной сети.

Достаточно поговорили об идентификации, сейчас обсуждаем маршрутизацию. Мы выяснили, что абонент-получатель находится в другой локальной сети. Что делать? Послать куда-то, потом еще куда-то. В итоге пакет должен попасть куда надо. Мы должны взять за правило все пакеты, не принадлежащие локальной сети, пересылать определенной машине. Такая машина работает маршрутизатором. Это может быть просто коробочка, в которой, впрочем, может стоять тот же Линукс.

Нужно создать специальную запись, которая бы явно именовала маршрутизатором некую машину.

Упустили важную вещь, возврат назад. Мы уже помним, что все сетевые интерфейсы можно посмотреть с помощью ip link. С помощью ip addr мы можем посмотреть список всех интерфейсов и параметры, присвоенные этим интерфейсам. Есть интерфейс и на этот интерфейс навешиваются различные параметры. Интерфейс loopback есть всегда. В работающей системе с высокой вероятностью будет интерфейс lo (loopback) для соединения с самим собой. Мы можем обращаться по 127.0.0.1. Это еще один необщий адрес. Адресов 127.0.0.1 больше всего, почти столько же, сколько компьютеров.

Команда ip addr показывает список адресов, навешенных на интерфейс. ip addr add 210.111.70.8/24 dev eth0. Все, что умел ifconfig, умеет ip addr, и даже больше. Раньше приходилось создавать алиасные интерфейсы, потом в ядре что-то переписали, сделали ip addr и все стало проще. Можно навесить сколько угодно ip-адресов. При отсылке пакета будет сканироваться каждая возможность отослать в локальную сеть. Это уже не на уровне идентификации, а на уровне ip route.

ip route выдаст как минимум две записи, одна — для локальной сети, а вторая — для всего остального. За каждую локальную сеть, навешенную на интерфейс будет отвечать некая запись в таблице маршрутизации. Сеть такая-то, передавать для таких-то адресов. Для маршрутизатора запись другая: адреса такие-то, передавать через машину такую-то. Для всего Интернета — сеть 0. При принятии решений таблица маршрутизаций просматривается так: чем больше сетевая маска, тем раньше будет проверена соответствующая альтернатива. Бывает даже «такой-то ip» через «такой-то IP». Небольшая сеть, потом большая сеть, потом весь Интернет.

Некое утверждение. Состоит в следующем. Когда мы говорим о сети, мы должны понимать, что как минимум два адреса зарезервированы. Он не может состоять из всех нулей и всех единиц. Адрес из всех нулей — это адрес собственно сети. Из всех единиц — широковещательный адрес. Если адрес сети состоит из нашей сети, а адрес абонента — все единицы, мы шлем в нашу сеть широковещательный запрос. Не все на него прореагируют.

Есть соединение точка-точка. То есть, два абонента. Какого размера подсеть надо выделить, чтобы сеть верно заработала с точки зрения TCP/IP? Ничего не нужно, только два адреса. Если же это сеть с двумя абонентами, то длина сети будет 30, а не 31. Потому что нужны два зарезервированных адреса. Сеть класса C можно разделить на 64, а то и 63 сети.

Еще раз про маршрутизацию. Алгоритм прост — просматриваем записи с точки зрения количетсва битов в сетевой маске. Чем меньше бит в маске, тем меньше приоритет. Это стандартный алгоритм маршрутизации, если не используется iproute. Есть iproute2. Такой способ неэффективен при сложных задачах по передаче пакетов. Представим ситуацию: есть пользователи, которые заплатили за Интернет, и которые не платят за Интернет, но которым его нужно предоставлять. Маршрутизатор один, и есть два канала, один толще. Тем, кто платит, канал толще. Если у нас исключительно ip-адресация, то очевидно, что не определим, как маршрутизировать. Чтобы определить, куда пересылать пакет, нужно анализировать не адрес получателя, а адрес отправителя.

Это — одна из первых задач принудительной маршрутизации. Еще пример. Пакеты одного класса можно пересылать через быстрый, но тонкий канал, а другого класса через медленный, но толстый канал. Возможна маршрутизация по правилам. Многие из этих задач решает ip route. Стандартный процесс маршрутизации — иерархический, более сложный — для более сложных задач. Можно читать документацию по iproute. Можно принимать сведения от файрволла.

Вспомним про проблемы глобальной маршрутизации. Если бы было дерево, то был бы «маршрутизатор всего Интернета». Вокруг него были бы террористы. Есть «облачка», соединенные между собой. Было бы неплохо если не соединять каждое с каждым, то хотя бы устроить между ними какую-то сеть, уже не в виде дерева и поддерживать информацию о достижимости одного облачка из другого, стоимости доставки (не в деньгах; предлагается в баррелях). Есть автономные системы, и есть достижимость между ними. Принятие решений о использовании одного или другого канала в случае пропадания достижимости. Если бы не было стратегии разбиения Интернета на автономные системы и достиижимости между ними, Интернета бы не было. Существует несколько протоколов, описывающих глобальную маршрутизацию. BGP, RIP, RIP2, EGP и другие. Их довольно много, они разной степени замшелости. Реализация такого протокола не является функцией не только рабочего стола, рабочей машины. Скорее всего, такой компьютер мы не увидим, разве что только мы работаем у провайдера. Их мало. Там вряд ли стоит Линукс, это может быть цисковская железка. Тем не менее есть свободное ПО, которые более-менее нормально реализуют эти протоколы. Это не часто встречающаяся задача. Если возникает задача настроить под Линуксом такой протокол, профессионал посидит недельку и сделает все, что нужно.


UNИX, осень 2008


Лекции

01 02 03 04 05 06 07 08 09 10 11 12


Календарь

Октябрь
01 08 15 22 29
Ноябрь
05 12 19 26
Декабрь
03 10 17
Семинары

01 02


Календарь

Сентябрь
01
Ноябрь
02


Эта статья является конспектом лекции.

Эта статья ещё не вычитана. Пожалуйста, вычитайте её и исправьте ошибки, если они есть.
Личные инструменты
Разделы