Реализация ip маршрутизации. Основы IP-маршрутизации

Маршрутизация процесс сетевого уровня, определяющий лучший путь доставки пакета информации получателю. Пути передачи пакетов информации называют маршрутами. Лучшие определенные маршруты к «знакомым» получателям записываются и хранятся в таблице маршрутизации.

Различают два вида маршрутизации:

  • Статическая маршрутизация
  • Динамическая маршрутизация

Деление происходит в зависимости от способа записи в таблицу маршрутизации.

Выполняют маршрутизацию, специальные устройства – маршрутизатороры или обычные компьютеры с несколькими сетевыми картами.

Маршрутизация в сетях на основе служб без установления соединения

Рассматривать процесс маршрутизации будем на условном примере.

По условию примера, Хосту 1 нужно передать сообщение Хосту 2 (рис. 1).

При этом длина сообщения в 4 раза длиннее допустимого к передаче. Из-за этого сообщение нужно разбить на 4 части (пакета) и последовательно отослать на маршрутизатор А.

Маршрутизатор А соединен только с маршрутизаторами В и С. Соответственно, все пакеты с Хоста А могут передаваться только на маршрутизаторы В и С.

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

Итак, через маршрутизатор А нужно передается 4 пакета. Согласно таблицы маршрутизации, действующей на данный момент времени, пакеты 1-3 передаются на маршрутизатор С. Далее согласно таблицы маршрутизации маршрутизатора С, пакеты передаются на Е — маршрутизатор, который связан непосредственно с хостингом В. Все пакеты 1-3 доставлены.

На следующий момент времени на маршрутизаторе А сменилась таблица маршрутизации, предположим из-за «пробки» на участке пути А-С-Е. Согласно новой таблицы маршрутизации, маршрутизатор А передает пакет 4 по пути маршрутизации А-В-Д, далее Е и на Хост В.

Отмечу, что таблицы маршрутизации оформляются по алгоритмам маршрутизации.

Это пример был для сетей с неустановленным соединением. А как осуществляется маршрутизация при уже установленном соединении.

Маршрутизация в сетях на основе служб с установлением соединения

В сетях с установлением соединения все пакеты информации передаются по единому маршруту. Это обеспечивается установлением на весь сеанс связи надежного виртуального канала.

Задача, передать информацию от Хоста 1 на Хост 2.

Маршрутизация – это процесс определения на основе данных из таблицы маршрутизации оптимального пути от узла-источника к узлу-получателю в условиях избыточных связей.

В процессе маршрутизации выделяют две смысловые части: определение дальнейшего пути пакета и непосредственно его пересылка по этому путь.

В соответствии с этими смысловыми частями процесс маршрутизации можно разделить на два иерархически связанных уровня.

Уровни работы маршрутизации

      Уровень маршрутизации . На этом уровне происходит работа с таблицей маршрутизации. Таблица маршрутизации служит для определения адреса (сетевого уровня) следующего маршрутизатора или непосредственно получателя по имеющемуся адресу (сетевого уровня) и получателя после определения адреса передачи выбирается определенный выходной физический порт маршрутизатора. Этот процесс называется определением маршрута перемещения пакета . Настройка таблицы маршрутизации ведется протоколами маршрутизации. На этом же уровне определяется перечень необходимых предоставляемых сервисов

      Уровень передачи пакетов . Перед тем как передать пакет, необходимо: проверить контрольную сумму заголовка пакета, определить адрес (канального уровня) получателя пакета и произвести непосредственно отправку пакета с учетом очередности, фрагментации, фильтрации и т.д. Эти действия выполняются на основании команд, поступающих с уровня маршрутизации.

В связи с этим можно провести следующую аналогию.

Интерпретация процесса маршрутизации Маршрутизация бывает

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

Косвенная маршрутизация происходит в том случае, если отправитель и получатель находятся в разных IP-сетях. Косвенная маршрутизация требует, чтобы отправитель передавал пакеты маршрутизатору для доставки их через распределённую сеть.

На рисунке, если узел 10.2.2.1 захочет послать пакет узлу в пределах сети 10, например, 10.2.2.2, то это будет прямая маршрутизация, а при отправке пределов в сеть, скажем, 192.168.1 – косвенная.

Прямая маршрутизация

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

Узлу 10.1.1.1 необходимо передать пакет узлу 10.2.2.2. Первое, что он делает - определяет, находится ли IP-адрес получателя в одной с ним сети. Для этого сравнивает свой номер сети 10 с номером сети получателя 10. Делает вывод, что узел-получатель находится в одном с ним сегменте сети.

С помощью протокола APR определяет MAC-адрес узла-получателя и посылает пакет по этому адресу.

Косвенная маршрутизация

В следующем примере предполагается, что узел 10.1.1.1 имеет пакет, который нужно отправить узлу 172.16.0.1 .

    Изучение адреса показывает, что узел назначения находится не а одной с предающим узлом сети. Узел 10.1.1.1 сконфигурирован так, что любые пакеты, требующие косвенной маршрутизации, передаются его шлюзу по умолчанию - маршрутизатору 1.

    Чтобы доставить пакет маршрутизатору 1, узлу 10.1.1.1 необходим MAC-адрес маршрутизатора 10.3.3.3. Если МАС-адрес узлу 10.1.1.1 неизвестен, он отправляет ARP-запрос, чтобы его получить. Затем пакет, предназначенный для 172.16.0.1 отправляется маршрутизатору 1.

    Маршрутизатор 1 осознает, что он подсоединен к сети 172.16. и полагает, что узел 172.16.0.1 должен быть частью этой сети. Маршрутизатор 1 реализует свою собственную процедуру прямой маршрутизации и посылает ARP-запрос, ища узел назначения.

При отправке пакета от узла 10.1.1.1 до узла 192.168.1.1 узел-отправитель сравнит номер своей сети с номером сети назначения и выяснит, что получатель находится в другой сети. Пакет будет отпрален шлюзу по умолчанию, в данном случае Маршрутизатору 1. Пусть в таблице маршрутизатора нет записи о сети 192.168.1, но шлюзом по умолчанию является маршрутизатор 2, тогда он перешлет пакет ему, а тот доставит пакет до получателя.

Если же узел 10.1.1.1 попытается отправить пакет узлу 192.164.1.1, то этот пакет будет перенаправлен маршрутизатору 1. Но так как он ничего не знает про сеть 192.164.1 , то будет выполнено одно из самых главных правил маршрутизации: если пакет получен, и таблица маршрутизации не содержит информации о его сети назначения, пакет следует отбросить.

Таблица маршрутизации для IP- сетей

Задачу выбора конечного маршрута из нескольких возможных решают маршрутизаторы, а так же конечные узлы. Маршрут выбирается на основании имеющейся у этих устройств информации о текущей конфигурации сети, а также на основании указанного критерия маршрута.

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

В этой таблице в столбце

    Адрес сети назначения – указываются адреса всех сетей, которым данный маршрутизатор может передавать пакеты

    Следующий маршрутизатор в пути – IP-адрес удаленного маршрутизатора, которому необходимо послать пакет для доставки его по назначению

    Номер выходного порта – по которому следует отправить пакет

    Расстояние до сети назначения – это любая метрика, используемая в соответствии с заданным в сетевом пакете классом сервиса. Это может быть количество хопов(переходов), время прохождения пакета по линиям связи, надежность линий связи или другая величина, отражающая качество данного маршрута по отношению к конкретному классу сервиса. Если маршрутизатор поддерживает несколько классов сервиса пакетов, то таблица маршрутов составляется и применяется отдельно для каждого вида сервиса (критерия выбора маршрута).

В таблице маршрутизации может содержаться несколько записей об одной и той же сети- получателя и запись о шлюзе по умолчанию.

Для начала уточним некоторые понятия:

  • сетевой узел (node) - любое сетевое устройство с протоколом TCP/IP;
  • хост (host) - сетевой узел, не обладающий возможностями маршрутизации пакетов;
  • маршрутизатор (router) - сетевой узел, обладающий возможностями маршрутизации пакетов

IP-маршрутизация - это процесс пересылки unicast -трафика от узла-отправителя к узлу –получателю в IP-сети с произвольной топологией.

Когда один узел IP-сети отправляет пакет другому узлу, в заголовке IP-пакета указываются IP-адрес узла отправителя и IP-адрес узла-получателя. Отправка пакета происходит следующим образом:

  1. Узел-отправитель определяет, находится ли узел-получатель в той же самой IP-сети, что и отправитель (в локальной сети), или в другой IP-сети (в удаленной сети). Для этого узел-отправитель производит поразрядное логическое умножение своего IP-адреса на маску подсети, затем поразрядное логическое умножение IP-адреса узла получателя также на свою маску подсети. Если результаты совпадают, значит, оба узла находятся в одной подсети. Если результаты различны, то узлы находятся в разных подсетях.
  2. Если оба сетевых узла расположены в одной IP-сети, то узел-отправитель сначала проверяет ARP-кэш на наличие в ARP-таблице MAC-адреса узла-получателя. Если нужная запись в таблице имеется, то дальше отправка пакетов производится напрямую узлу-получателю на канальном уровне. Если же в ARP-таблице нужной записи нет, то узел-отправитель посылает ARP-запрос для IP-адреса узла-получателя, ответ помещает в ARP-таблицу и после этого передача пакета также производится на канальном уровне (между сетевыми адаптерами компьютеров).
  3. Если узел-отправитель и узел-получатель расположены в разных IP-сетях, то узел-отправитель посылает данный пакет сетевому узлу, который в конфигурации отправителя указан как "Основной шлюз" ( default gateway ). Основной шлюз всегда находится в той же IP-сети, что и узел-отправитель, поэтому взаимодействие происходит на канальном уровне (после выполнения ARP-запроса). Основной шлюз - это маршрутизатор, который отвечает за отправку пакетов в другие подсети (либо напрямую, либо через другие маршрутизаторы).

Рассмотрим пример, изображенный на рис. 4.5 .


Рис. 4.5.

В данном примере 2 подсети: 192.168.0.0/24 и 192.168.1.0/24 . Подсети объединены в одну сеть маршрутизатором. Интерфейс маршрутизатора в первой подсети имеет IP-адрес 192.168.0.1 , во второй подсети - 192.168.1.1 . В первой подсети имеются 2 узла: узел A (192.168.0.5 ) и узел B (192.168.0.7 ). Во второй подсети имеется узел C с IP-адресом 192.168.1.10 .

Если узел A будет отправлять пакет узлу B, то сначала он вычислит, что узел B находится в той же подсети, что и узел A (т.е. в локальной подсети), затем узел A выполнит ARP-запрос для IP-адреса 192.168.0.7 . После этого содержимое IP-пакета будет передано на канальный уровень, и информация будет передана сетевым адаптером узла A сетевому адаптеру узла B. Это пример прямой доставки данных (или прямой маршрутизации, direct delivery).

Если узел A будет отправлять пакет узлу C, то сначала он вычислит, что узел C находится в другой подсети (т.е. в удаленной подсети). После этого узел A отправит пакет узлу, который в его конфигурации указан в качестве основного шлюза (в данном случае это интерфейс маршрутизатора с IP-адресом 192.168.0.1 ). Затем маршрутизатор с интерфейса 192.168.1.1 выполнит прямую доставку узлу C. Это пример непрямой доставки (или косвенной маршрутизации, indirect delivery) пакета от узла A узлу C. В данном случае процесс косвенной маршрутизации состоит из двух операций прямой маршрутизации.

В целом процесс IP-маршрутизации представляет собой серии отдельных операций прямой или косвенной маршрутизации пакетов.

Каждый сетевой узел принимает решение о маршрутизации пакета на основе таблицы маршрутизации, которая хранится в оперативной памяти данного узла. Таблицы маршрутизации существуют не только у маршрутизаторов с несколькими интерфейсами, но и у рабочих станций, подключаемых к сети через сетевой адаптер. Таблицу маршрутизации в системе Windows можно посмотреть по команде route print . Каждая таблица маршрутизации содержит набор записей. Записи могут формироваться различными способами:

  • записи, созданные автоматически системой на основе конфигурации протокола TCP/IP на каждом из сетевых адаптеров;
  • статические записи, созданные командой route add или в консоли службы Routing and Remote Access Service ;
  • динамические записи, созданные различными протоколами маршрутизации (RIP или OSPF).

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

Рабочая станция.

В данном примере имеется рабочая станция с системой Windows XP, с одним сетевым адаптером и такими настройками протокола TCP/IP: IP-адрес - 192.168.1.10 , маска подсети - 255.255.255.0 , основной шлюз - 192.168.1.1 .

Введем в командной строке системы Windows команду route print , результатом работы команды будет следующий экран (рис. 4.6 ; в скобках приведен текст для английской версии системы):


Рис. 4.6.

Список интерфейсов - список сетевых адаптеров, установленных в компьютере. Интерфейс MS TCP Loopback interface присутствует всегда и предназначен для обращения узла к самому себе. Интерфейс Realtek RTL8139 Family PCI Fast Ethernet NIC - сетевая карта.

Сетевой адрес - диапазон IP-адресов, которые достижимы с помощью данного маршрута.

Маска сети - маска подсети, в которую отправляется пакет с помощью данного маршрута.

Адрес шлюза - IP-адрес узла, на который пересылаются пакеты, соответствующие данному маршруту.

Интерфейс - обозначение сетевого интерфейса данного компьютера, на который пересылаются пакеты, соответствующие маршруту.

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

Проанализируем некоторые строки таблицы.

Первая строка таблицы соответствует значению основного шлюза в конфигурации TCP/IP данной станции. Сеть с адресом "0.0.0.0" обозначает "все остальные сети, не соответствующие другим строкам данной таблицы маршрутизации".

Вторая строка - маршрут для отправки пакетов от узла самому себе.

Третья строка (сеть 192.168.1.0 с маской 255.255.255.0 ) - маршрут для отправки пакетов в локальной IP-сети (т.е. той сети, в которой расположена данная рабочая станция).

Последняя строка - широковещательный адрес для всех узлов локальной IP-сети.

Последняя строка на рис. 4.6 - список постоянных маршрутов рабочей станции. Это статические маршруты, которые созданы командой route add . В данном примере нет ни одного такого статического маршрута.

Теперь рассмотрим сервер с системой Windows 2003 Server, с тремя сетевыми адаптерами:

  • Адаптер 1 - расположен во внутренней сети компании (IP-адрес - 192.168.1.10 , маска подсети - 255.255.255.0 );
  • Адаптер 2 - расположен во внешней сети Интернет-провайдера ISP-1 (IP-адрес - 213.10.11.2 , маска подсети - 255.255.255.248 , ближайший интерфейс в сети провайдера - 213.10.11.1 );
  • Адаптер 3 - расположен во внешней сети Интернет-провайдера ISP-2 (IP-адрес - 217.1.1.34 , маска подсети - 255.255.255.248 , ближайший интерфейс в сети провайдера - 217.1.1.33 ).

IP-сети провайдеров - условные, IP-адреса выбраны лишь для иллюстрации (хотя вполне возможно случайное совпадение с какой-либо существующей сетью).

Кроме того, на сервере установлена Служба маршрутизации и удаленного доступа для

Модели OSI является маршрутизация. Устройства, которые связывают подсети между собой в единую составную сеть, называются маршрутизаторами. Внутри сети сегменты не разделяются маршрутизаторами, иначе это была бы не одна сеть, а несколько сетей. Маршрутизатор соединят несколько сетей в интерсеть (internetwork или internet).

Данные, которые поступают на сетевой уровень и которые необходимо передать через составную сеть, снабжаются заголовком сетевого уровня. Данные вместе с заголовком образуют пакет. Заголовок пакета сетевого уровня имеет унифицированный формат, не зависящий от форматов кадров канального уровня тех сетей, которые могут входить в объединенную сеть, и несет наряду с другой служебной информацией данные о номере сети, которой предназначается этот пакет. Явная нумерация сетей позволяет протоколам сетевого уровня составлять точную карту межсетевых связей и выбирать рациональные маршруты при любой их топологии, в том числе альтернативные маршруты, если они имеются, что никак не умеют делать мосты и коммутаторы.

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

Резюмируем .

    построение неоднородных сетей реализуют с помощью сетевого уровня.

    сетевой уровень использует собственную адресацию, которая обеспечивает каждому узлу подсети составной сети свой универсальный сетевой адрес, который состоит из номера сети и номера узла. Благодаря такой системе адресации сетевой уровень может пересылать информации к узлу получателю "не обращая внимания" на внутреннюю структуру подсетей, с другой стороны для непосредственного продвижения пакетов к адресату, он использует технологию передачи данных конкретной подсети, через которую следуют эти пакеты.

    поиск наилучшего пути следования пакетов в сети - маршрутизация - это основная задача сетевого уровня.

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

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

Маршрутизация статическая

Статическая маршрутизация является одним из способов задания маршрута следования пакетов в сетях. При этом протоколы маршрутизации не используются, а необходимая информация заносится системным администратором вручную в соответствующие таблицы маршрутизации. К статическим маршрутам также относится маршрут по умолчанию (default route).

Создание собственных таблиц и правил маршрутизации это и есть Policy-Routing , он же PBR (Policy-based Routing) . SBR (Source-based Routing) или Source-Routing в Linux является частным случаем Policy-Routing , в случае использования условия from в правиле маршрутизации.

iproute

iproute также известна как iproute2.

Пакет iproute состоит из нескольких утилит управления трафиком:

    ip – управление собственно маршрутизацией;

    tc – управление очередями маршрутизации;

Доступ ко всем возможностям дает только ip , использование утилиты route устарело (вы не сможете настроить например политики маршрутизации и не увидите их существование в выводе команды просмотра, если они уже настроены в системе).

    Поиск маршрута для удаленного ip ip route get 192.168.35.55 192.168.35.55 via 192.168.35.254 dev tun1 src 10.26.95.254 cache ipid 0xf0ea

    Для все MAC задает состояние failed, в дальнейшем ядро Ос удалит помеченные так MAC записи из arp таблицы. # ip neigh flush all

    Вывести запись о маршруте по умолчанию: # ip r | grep default

    Просмотр сетевых карт # ip link list

    Сбросить кеш маршрутизатора # ip route flush cache

    blackhole . Добавить «зануленный» маршрут (аналог «ip route … null0» в Cisco). Пакеты в сеть с таким маршрутом будут удалены с причиной «No route to host». Может быть полезно для подавление DoS-атака -атаки с хоста # ip route add blackhole 10.56.50.0/27

    C помощью команды ip addr add можно установить на сетевом интерфейсе как основной IP адрес, так и несколько дополнительных адресов. Удалить IP адрес ip addr del 10.90.91.254 dev eth4 или удалить все с интерфейса wlan1 ip addr flush wlan1

Таблицы маршрутизации

Вывести таблицы маршрутизации. Ядро принимает решение о применении той или иной таблицы на основании адреса источника пакета. Эти таблицы применимы для всех пакетов.

# ip rule list 0: from all lookup local 32766: from all lookup main 32767: from all lookup default

Вывести содержимое таблицы local.

# ip route show table local

    Таблица local . Пакет при выборе пути к месту назначения проверяется правилом с наименьшим приоритетом. Правило 0 отправит поиск маршрута в таблицу "local".

Таблица local проверяет не адресован ли пакет локальной машине (широковещательный или сетевой адреса интерфейсов). Таблицу local автоматически заполняют команды конфигурации сетевых интерфейсов.

    Таблица main - является основной и именно она используется, если в команде, связанной с маршрутизацией, не указано какую таблицу использовать. При поднятии интерфейсов в неё прописываются маршруты к подсетям интерфейсов, стартовые скрипты также заносят в эту таблицу значение шлюза по-умолчанию. Использование команды route add администратором также может дополнить таблицу маршрутами. В общем случае, таблица main всегда содержит подходящий для пакета маршрут (например шлюз по-умолчанию).

    Таблица default изначально пуста.

    Модификация таблицы маршрутизации : Добавление маршрута через шлюз: ip route add 172.16.10.0/24 via 192.168.1.1 Добавление маршрута через интерфейс: ip route add 172.16.10.0/24 dev eth0 Маршрут с метрикой: ip route add 172.16.10.0/24 dev eth0 metric 100

    Кроме add также поддерживаются и другие действия: del - удалить маршрут; replace - заменить маршрут другим; change - изменить параметры маршрута.

Policy-Routing. Маршрутизация для двух ISP

Пример 1. Создание таблицы для маршрутизации пакетов с определенного IP- адреса. Локальная сеть 10.26.95.0/24 имеет выход в Интернет с двух разных провайдеров – основной ISP1 (статика) и резервный ISP2 (Настройка DHCP сервера Linux, FreeBSD).

    В файле /etc/iproute2/rt_tables для удобства задаются символьные имена таблиц, это не обязательно так как все таблицы имеют цифровые идентификаторы. Например echo "82 velton" >> / etc/ iproute2/ rt_tables

    Маршрут по умолчанию для таблицы "82 velton" ip route add default via 82.117.232.1 table 82

    Внесем правила маршрутизация для пользователя с IP 10.26.95.5, после чего эта таблица станет доступна в выводе команды ip rule list. Теперь все пользователи шлют пакеты через ISP1, кроме пользователя с IP 10.26.95.251 ip rule add from 10.26.95.251/ 32 table 82

Пример 2. Создание таблицы для маршрутизации, когда часть сетей (AS) нужно маршрутизировать через резервного провайдер ISP2. Например, это может быть дешевая точка обменом трафика или ресурсы провайдера. whois - найти все IPs вашего провайдера

    Создаем как в предыдущем примере маршрут по умолчанию для таблицы "82 velton" ip route add default via 82.117.232.1 table 82

    Прописываем статические маршруты на сети ISP2 ip route add 82.117.224.0/ 19 via 82.117.234.15 ip route add 85.90.192.0/ 19 via 82.117.234.15

    Добавим rule для всех сетей ip rule add to 82.117.224.0/ 19 table 82 ip rule add to 85.90.192.0/ 19 table 82

    Очистить кеш маршрутизатора для вступления в силу сделанных изменений ip route flush cache

В данный момент (вспомним нулевой выпуск) у нас в Москве использованы адреса 172.16.0.0-172.16.6.255. Предположим, что сеть может ещё увеличиться здесь, допустим, появится офис на Воробьёвых горах и зарезервируем ещё подсети до 172.16.15.0/24 включительно.
Все эти адреса: 172.16.0.0-172.16.15.255 - можно описать так: 172.16.0.0/20. Эта сеть (с префиксом /20) будет так называемой суперсетью , а операция объединения подсетей в суперсети называется суммированием подсетей (суммированием маршрутов, если быть точным, route summarization)

Приносим извинения за гигантские простыни, видео тоже с каждым разом становится всё длиннее и невыносимее. Постараемся в следующий раз быть более компактными.

Все заинтересованные, но незарегистрированные приглашаются на беседу в ЖЖ .
За подготовку статьи большое спасибо моему соавтору thegluck и моей жене за львиное терпение.

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

Добавить метки