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

Схема распределения адресного пространства

Теоретическая часть

IP АДРЕСАЦИЯ И IP МАРШРУТИЗАЦИЯ

Цель: Закрепить знания основ работы с адресным пространством в вычислительных сетях.

IP-адреса являются той базой, на которой строится доставка сообщений через сеть TCP/IP.

IP-адрес – это 4-байтовая последовательность. Принято каждый байт этой последовательности записывать в виде десятичного числа. Например, приведенный ниже адрес является адресом одной из машин РНЦ «Курчатовский Институт»: 144.206.160.32.

Каждая точка доступа к сетевому интерфейсу имеет свой IP-адрес.

IP-адрес состоит из двух частей: адреса сети и номера хоста. Под хостом понимают любое устройство, которое имеет свой сетевой интерфейс.

Существует 5 классов IP-адресов. Эти классы отличаются друг от друга количеством битов, отведенных на адрес сети и адрес хоста в сети. На рис. 1.1 показаны 5 классов IP-адресов.

 

24 31
Класс А номер сети номер хоста
Класс В номер сети номер хоста
Класс С номер сети номер хоста
Класс D групповой адрес
Класс Е зарезервировано
                         

Рис. 1.1 Классы IP-адресов

 

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

При разработке структуры IP-адресов предполагалось, что они будут использоваться по разному назначению.

Адреса класса A предназначены для использования в больших сетях общего пользования. Адреса класса B предназначены для использования в сетях среднего размера (сети больших компаний, научно-исследовательских институтов, университетов). Адреса класса C предназначены для использования в сетях с небольшим числом компьютеров (сети небольших компаний и фирм). Адреса класса D используют для обращения к группам компьютеров, а адреса класса E – зарезервированы.

Класс Диапазон значений первого октета Возможное количество сетей Возможное количество узлов
А 1 – 126
B 128 – 191
C 192 – 223
D 224 – 239
E 240 – 247

Рис. 1.2 Характеристики классов IP-адресов

 

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

 

N IP-адрес Пример Значение
1. все нули 0.0.0.0 данный узел сети
2. номер сети | все нули 192.168.62 | .0 данная IP-сеть
3. все нули | номер узла 0.0.0 | .55 узел в данной (локальной) сети
4. все единицы 255.255.255.255 все узлы в данной локальной IP-сети
5. номер сети | все единицы 192.168.62 | .255 все узлы указанной IP-сети
6. 127.0.0.1 127.0.0.1 «петля» (lookup interface)

Рис. 1.3 Зарезервированные IP-адреса

 

Особое внимание в таблице (рис. 1.3) уделяется последней строке. Адрес 127.0.0.1 предназначен для тестирования программ и взаимодействия процессов в рамках одного компьютера. В большинстве случаев в файлах настройки этот адрес обязательно должен быть указан, иначе система при запуске может «зависнуть». Наличие «петли» чрезвычайно удобно с точки зрения использования сетевых приложений в локальном режиме для их тестирования и при разработке интегрированных систем.

Вообще, зарезервирована вся сеть 127.0.0.0. Эта сеть класса A реально не описывает ни одной настоящей сети.

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

Реальные адреса выделяются организациями, предоставляющими IP-услуги, из выделенных для них пулов IP-адресов. Согласно документации NIC (Network Information Centre) IP-адреса предоставляются бесплатно, но в прейскурантах наших организаций (как коммерческих, так и некоммерческих), занимающихся Internet-сервисом предоставление IP-адреса стоит отдельной строкой.

 

 

Подсети

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

Подсеть – это подмножество сети, не пересекающееся с другими подсетями. Это означает, что сеть организации (скажем, сеть класса С) может быть разбита на фрагменты, каждый из которых будет составлять подсеть. Реально, каждая подсеть соответствует физической локальной сети (например, сегменту Ethernet). Вообще говоря, подсети придуманы для того, чтобы обойти ограничения физических сетей на число узлов в них и максимальную длину кабеля в сегменте сети. Например, сегмент Ethernet, построенный на тонком коаксиальном кабеле, имеет максимальную длину 185 м и может включать до 32 узлов. Как видно из рис. 1.2, самая маленькая сеть – класса С – может состоять из 254 узлов. Для того, чтобы достичь этой цифры, надо объединить несколько физических сегментов сети. Сделать это можно либо с помощью физических устройств (например, коммутаторов), либо при помощи машин-шлюзов. В первом случае разбиения на подсети не требуется, т.к. логически сеть выглядит как одно целое. При использовании шлюза сеть разбивается на подсети (рис. 1.4).

На рис. 1.4 изображен фрагмент сети класса B – 144.206.0.0, состоящий из двух подсетей – 144.206.130.0 и 144.206.160.0. В центре схемы изображена машина шлюз, которая связывает подсети. Эта машина имеет два сетевых интерфейса и, соответственно, два IP-адреса.

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

1. в сети, состоящей из одного сегмента Ethernet, весь адресный пул сети не будет использован, т.к., например, для сети класса С (самой маленькой с точки зрения количества узлов в ней), из 254 возможных адресов можно использовать только 32;

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

 

Рис. 1.4 Схема разбиения адресного пространства сети на подсети

 

Разбиение сети на подсети использует ту часть IP-адреса, которая закреплена за номерами хостов. Администратор сети может замаскировать часть IP-адреса и использовать её для назначения номеров подсетей. Фактически, способ разбиения адреса на две части, теперь будет применяться к адресу хоста из IP-адреса сети, в которой организуется разбиение на подсети.

Маска подсети – это четыре байта, которые накладываются на IP-адрес для получения номера подсети.

На приведенной схеме (рис. 1.5) сеть класса B (144.206.0.0) разбивается на подсети маской 255.255.224.0. При этом первые два байта задают адрес сети и не участвуют в разбиении на подсети. Номер подсети задается тремя старшими битами третьего байта маски. Такая маска позволяет получить 6 подсетей. Для нумерации подсети нельзя использовать номер 000 и номер 111. Номер 160 задает 5-ю подсеть в сети 144.206.0.0. Для нумерации машин в подсети можно использовать оставшиеся после маскирования 13 битов, что позволяет создать подсеть из 8190 узлов.

 

 
IP-адрес 1001 0000 1100 1110 1010 0000 0010 0000
маска 1111 1111 1111 1111 1110 0000 0000 0000
 

Рис. 1.5 Схема маскирования и вычисления номера подсети

 

Подсети не только решают, но также и создают ряд проблем. Например, происходит потеря адресов, но уже не по причине физических ограничений, а по причине принципа построения адресов подсети. Как было видно из примера, выделение трех битов на адрес подсети не приводит к образованию 8-подсетей. Подсетей образуется только 6, так как номера сетей 0 и 7 использовать в силу специального значения IP-адресов, состоящих из 0 и единиц, нельзя. Таким образом, все комбинации адресов хоста внутри подсети, которые можно было бы связать с этими номерами, придется забыть. Чем шире маска подсети (чем больше места отводится на адрес хоста), тем меньше потерь. В ряде случаев приходится выбирать между приобретением ещё одной сети или изменением маски. При этом физические ограничения могут быть превышены за счёт коммутаторов, хабов и т. п.

Бесклассовая адресация CIDR[1]

Концепция бесклассовой междоменной маршрутизации (CIDR) была официально документирована в сентябре 1993 года (RFC[2] 1517, RFC 1518, RFC 1519 и RFC 1520). Её появление было вызвано участившимися кризисами в Интернете. Из-за несовершенства протоколов маршрутизации трафик, вызванный сообщениями об обновлении таблиц маршрутизации, приводил к сбоям магистральных маршрутизаторов. Это было связано с полным задействованием их ресурсов на обработку большого объема служебной информации. Так, в 1994 году таблицы маршрутизации магистральных маршрутизаторов Интернета содержали до 70 000 маршрутов. Внедрение технологии CIDR сократило число записей маршрутов до 30 000. Кроме того, дополнительной предпосылкой для внедрения технологии CIDR явилась реальная опасность нехватки адресного пространства при дальнейшем расширении Интернета. Эта технология позволяет реализовать новые, не поддерживавшиеся ранее возможности:

1. Отход от традиционной концепции разделения адресов протокола IP на классы, благодаря чему можно более эффективно использовать адресное простран­ство протокола IP версии 4.

2. Объединение маршрутов. Здесь одна запись в таблице маршрутизации может представлять сотни адресов. Это позволяет контролировать количество маршрутной информации в магистральных маршрутизаторах Интернета.

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

Технология CIDR позволяет рекурсивно делить порции адресного пространства на небольшие части. Основное различие между ними в том, что при использовании маски подсети переменной длины рекурсия выполняется на адресном пространстве, выделенном организации ранее. При этом схема деления пространства остаётся спрятанной внутри организации (то есть, например, для пользователей в сети Интернет подобная схема разделения остается прозрачной и незаметной).

Сначала метод CIDR рассматривался, как способ распределения провайдером Internet между клиентами IP-адресов в виде диапазонов IP -адресов (называемых блоками), а не выделения адреса некоторого класса. Обычно Интернет-провайдер выделяет своим клиентам адреса определенных классов, что приводит к некоторой избыточности в одном месте и к дефициту в другом. Обратившись к технологии CIDR , провайдеры получают возможность «нарезать» блоки из выделенного им адресного пространства, которые оптимально подходят под требования каждого клиента, оставляя в то же время возможность будущего пространственного роста.

Например, если организация заключает с Интернет-провайдером соглашение об аренде линии Т1, ей может быть передан для использования блок общедоступных IP-адресов. При этом количество адресов в блоке может находиться в пределах от 2 до 64, в зависимости от потребностей организации. Организация может также запросить (за дополнительную плату) ещё один блок общедоступных адресов и добавить его к ранее полученному блоку, если в этом возникнет необходимость.

Принцип осуществления метода CIDR является очень простым. Интернет-провайдер после получения заявки от организации, которой, допустим, требуется 25 внешних IP-адресов, просматривает имеющиеся в его распоряжении пространство адресов. Предположим, что он обнаруживает, что адреса в диапазоне от 64.90.1.32 до 64.90.1.63 не заняты. В этом случае провайдер выделяет организации адрес сети 64.90.1.32/27[3]. В этом блоке адресов организация получает 30 действительных IP-адресов от 64.90.1.33 до 64.90.1.62. Это — адрес сети класса А, но организация не получает весь диапазон адресов этого класса, поскольку им по-прежнему владеет Интернет-провайдер. Организации просто предоставляется часть пространства адресов этой сети, которое она может использовать до тех пор, пока не перейдет к другому Интернет-провайдеру.

Основной принцип метода CIDR состоит в том, что понятие класса уже не применяется. При использовании этого метода следует помнить, что после получения от Интернет-провайдера адреса и маски (например, длиной 22 бита), организация не имеет права уменьшить длину этой маски (использовать в ней меньше битов), даже если полученный IP-адрес сети относится к классу А. Организации не передаётся в использование весь этот класс, ей только предоставляется возможность применять определенную часть пространства адресов, переданного в её распоряжение. Но, организация может увеличивать длину маски (включать в нее больше битов) и тем самым разбивать свою часть пространства адресов на подсети в соответствии со своими потребностями. Но при этом необходимо тщательно следить за тем, чтобы использовались только адреса из назначенного диапазона.

Предположим, что провайдеру был выделен адрес 206.0.64.0 с сетевым префиксом /18. Тогда для задания индивидуальных адресов остается 14 бит (32-18=14), что позволяет поддерживать до 16 384 (214) хостов. В случае использования классов адресов достижение той же цели требует от провайдера выделения 64 адресов класса С.

Если клиенту, которого обслуживает данный провайдер, для своей сети требуется 800 адресов хостов, то провайдер может выделить ему адресный блок 206.0.68.0/22, то есть блок из 1024 (210) адресов хостов. При таком выделении клиент получает в свое распоряжение 224 дополнительных адреса. Если следовать классовой адресной схеме, то клиенту потребовалось бы выделить или один адрес класса В, или четыре адреса класса С. При предоставлении одного адреса класса В клиент получает более 64 000 дополнительных адресов. При выделении четырех адресов класса С клиент имеет приемлемое количество адресов, но заодно увеличивается размер таблиц маршрутизации (добавляются четыре записи).

Рассмотрим на практике работу с технологией CIDR . Для этого выберем адресный блок 192.168.168.0/21. На первом этапе запишем индивидуальные номера сетей для этого блока.

В двоичном виде блок представляется следующим образом:

192.168.168.0/21 – 11000000.10101000.10101000.00000000.

Маска, определяемая префиксом /21, на три бита меньше, чем традиционная маска для сети класса С (/24). А это означает, что рассматриваемый блок CIDR идентифицирует блок из 8 (23) последовательных (упорядоченных) сетей с префиксом /24:

11000000.10101000.10101000.00000000 – 192.168.168.0

11000000.10101000.10101001.00000000 – 192.168.169.0

11000000.10101000.10101010.00000000 – 192.168.170.0

11000000.10101000.10101011.00000000 – 192.168.171.0

11000000.10101000.10101100.00000000 – 192.168.172.0

11000000.10101000.10101101.00000000 – 192.168.173.0

11000000.10101000.10101110.00000000 – 192.168.174.0

11000000.10101000.10101111.00000000 – 192.168.175.0

Другой пример. Требуется объединить набор следующих четырех адресов с префиксом /24 в максимально вместительный адрес:

192.168.146.0/24

192.168.147.0/24

192.168.148.0/24

192.168.149.0/24

Вначале запишем эти адреса в двоичной форме:

192.168.146.0/24 11000000.10101000.10010010.00000000

192.168.147.0/24 11000000.10101000.10010011.00000000

192.168.148.0/24 11000000.10101000.10010100.00000000

192.168.149.0/24 11000000.10101000.10010101.00000000

Следует обратить внимание на то, что рассматриваемый набор из четырех сетей нельзя объединить в один адрес с префиксом /23. Учитывая это, объединение CIDR будет следующим:

192.168.146.0/23

192.168.148.0/23

Если две сети с префиксом /23 нужно объединить в сеть с префиксом /22, то они должны соответственно «помещаться» в один адресный блок /22. Однако раз каждая из полученных сетей с префиксом /23 является членом различных блоков /22, то они не могут быть объединены в блоке /22, хотя объединение в 192.168.144/21 формально действительно. Но такое объединение включало бы четыре адреса сети, которых не было в исходных сетях. Учитывая всё вышеизложенное, отметим, что объединение, состоящее из минимального количества адресных блоков (два), будет иметь префикс /23.

Пример разбиения сети на подсети

Организации выделен блок адресов 220.215.14.0/24. Разбить блок на 4 подсети, наибольшая из которых насчитывает 50 узлов.

На первом этапе необходимое число подсетей необходимо округлить в большую сторону к ближайшей степени числа 2. Поскольку в данном примере число необходимых подсетей равно 4, округлять не нужно. Далее определяется количество бит, нужных для организации 4 подсетей. Для этого представим 4 в виде степени двойки: 4 = 22 . Степень – это и есть количество бит отводимых для номера подсети. Так как сетевой префикс блока равен 24, то расширенный сетевой префикс будет равен 24 + 2 = 26.

 

    Сетевой префикс Подсеть Узел
    24 25
220.215.14.0/26 <--> 0 0
    Расширенный сетевой префикс  

 

Оставшиеся 32 - 26 = 6 бит будут использоваться для номера узла. 6-ю битами можно адресовать: 26 - 2 = 62 узла.

Следующим этапом является нахождение подсетей. Для этого двоичное представление номера подсети, начиная с нуля, подставляется в биты, отведенные для номера подсети.

 

Основная сеть 220.215.14.0/24
Подсеть 0(00) 220.215.14.0/26
Подсеть 1(01) 220.215.14.64/26
Подсеть 2(10) 220.215.14.128/26
Подсеть 3(11) 220.215.14.192/26
  Расширенный сетевой префикс    

 

Для проверки правильности вычислений, следует помнить простое правило: десятичные номера подсетей должны быть кратными номеру первой подсети. Из этого правила можно вывести и другое, упрощающее расчет подсетей: достаточно вычислить адрес первой подсети, а адреса последующих определяются произведением адреса первой на соответствующий номер подсети. В примере легко можно установить адрес третьей подсети, просто умножив 64 * 3 = 192.

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

подсеть |
ШВА подсети 0 (00) | 11011100.11011100.00001110.00 111111 | 220.215.14.63/26
ШВА подсети 0 (01) | 11011100.11011100.00001110.01 111111 | 220.215.14.127/26
ШВА подсети 0 (10) | 11011100.11011100.00001110.10 111111 | 220.215.14.191/26
ШВА подсети 0 (11) | 11011100.11011100.00001110.11 111111 | 220.215.14.255/26
| Расширенный сетевой префикс | Узловая часть = все 1

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

 

№ подсети Наименьший адрес подсети Наибольший адрес подсети
220.215.14.1 - 220.215.14.62
220.215.14.65 - 220.215.14.126
220.215.14.129 - 220.215.14.190
220.215.14.193 - 220.215.14.254

 

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

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

В соответствии с общей схемой, IP может получать датаграммы от собственных уровней TCP, UDP, ICMP и IGMP (это датаграммы, формирующиеся здесь же), которые необходимо отправить, однако датаграммы могут быть приняты с какого-либо сетевого интерфейса (эти датаграммы должны быть перенаправлены). Когда датаграмма принята с сетевого интерфейса, IP, во-первых, проверяет, не принадлежит ли ему указанный IP адрес назначения, или не является ли этот IP адрес широковещательным. Если это так, то датаграмма доставляется в модуль протокола, указанный в поле протокола в IP заголовке. Если датаграмма не предназначается для этого IP адреса, и если IP уровень был сконфигурирован для того, чтобы работать как маршрутизатор, то пакет перенаправляется, в этом случае датаграмма обрабатывается, как исходящая.

Каждый пункт таблицы маршрутизации содержит следующую информацию:

1.IP адрес назначения. Это может быть как полный адрес хоста (host address) или адрес сети (network address), что указывается в поле флагов (описывается ниже). Адрес хоста имеет ненулевое значение идентификатора хоста и указывает на один конкретный хост, тогда как адрес сети имеет идентификатор хоста, установленный в 0, и указывает на все хосты, включенные в определенную сеть (Ethernet, Token ring).

2.IP адрес маршрутизатора следующей пересылки (next-hop router), или, иначе говоря, IP адрес следующего маршрутизатора. Маршрутизатор следующей пересылки принадлежит одной из непосредственно подключенных сетей, в которую возможно отправить датаграммы для их доставки. Маршрутизатор следующей пересылки это не конечный пункт назначения, однако, он принимает датаграммы, которые пересылаются, и перенаправляет их в направлении конечного пункта.

3.Флаги. Один флаг указывает, является ли IP адрес пункта назначения адресом сети или адресом хоста. Другой флаг указывает на то, является ли маршрутизатор следующей пересылки действительно маршрутизатором или это непосредственно подключенный интерфейс.

4.Указание сетевого интерфейса, на который должны быть переданы датаграммы для передачи.

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

IP маршрутизация осуществляет в следующей последовательности:

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

2.Осуществляется поиск в таблице маршрутизации пункта, который совпадет, как минимум, с идентификатором сети назначения. Если пункт найден, пакет посылается на указанный маршрутизатор следующей пересылки или на непосредственно подключенный интерфейс (в зависимости от поля флагов). Если используются маски переменной длины (VLSM[4]), то из всех записей таблицы маршрутизации с использованием VLSM вычисляются адреса подсетей. Из получившего множества подсетей выбирается та подсеть (и, соответственно, запись в таблице маршрутизации), что имеет наибольшее количество совпавших битов с подсетью, указанной в IP адресе назначения датаграммы. Маршрутизация ко всем хостам, находящимся в сети назначения, осуществляется с использованием этого единственного пункта таблицы маршрутизации.

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

Если ни один из шагов не дал положительного результата, датаграмма считается недоставленной. Если недоставленная датаграмма была сгенерирована данным хостом, то обычно возвращается ошибка «хост недоступен» (host unreachable) или «сеть недоступна» (network unreachable). Этот код ошибки возвращается приложению, которое сгенерировало датаграмму.

Как следует из вышеизложенного, маршрутизатор по-умолчанию должен находиться в одной подсети с сетевым интерфейсом, через который к нему направляются датаграммы. В начале всегда осуществляется сравнение на совпадение полного адреса хоста, после чего осуществляется сравнение идентификатора сети[5]. Только в том случае, если результат обеих сравнений отрицательный, используется маршрут по-умолчанию. Маршруты по-умолчанию и сообщения ICMP о перенаправлении, отправляемые на маршрутизатор следующей пересылки (если для датаграммы выбрано неверное направление по-умолчанию), являются довольно мощными характеристиками IP маршрутизации.

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

Примеры: