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

IP Сети

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

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

Подсети

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

Подсеть принимает на себя ответственность за доставку дейтаграммы для определенного диапазона IP адресов. Как и с классами A, B или C, она идентифицируется сетевой частью IP адресов. Однако, сетевая часть теперь расширена, чтобы включать некоторые биты из хост части. Количество битов, которые интерпретируются как номер в подсети, определяется так называемой подсетевой маской, или netmask. Это 32-разрядное число, которое определяет разрядную маску для сетевой части IP адреса.

Сеть Groucho Marx Университета — это пример такой сети. Она имеет класс B с сетевым номером 149.76.0.0, и netmask, следовательно, равна 255.255.0.0. Внутри этой сети GMU состоит из нескольких меньших сетей, таких как локальные сети различных отделов. Так что диапазон IP адресов разбит на 254 подсети, от 149.76.1.0 до 149.76.254.0. Например, отдел теоретической физики имеет номер 149.76.12.0. Университетский оптиковолоконный кабель тоже является сетью с собственным номером 149.76.1.0. Эти подсети имеют одинаковый сетевой IP адрес, а третья октета используется для различения между ними. Таким образом, они будут использовать подсетевую маску 255.255.255.0.

Рисунок показывает, как 149.76.12.4, адрес quark, интерпретируется по-разному, когда адрес рассматривается как стандартный адрес сети класса B и когда он используется в подсети.

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

Gateways Subnetting не только является организационным делением, но и часто естественным следствием границ аппаратных средств. Знание хоста о структуре данной физической сети, например, Ethernet, очень ограничено. Единственные хосты, с которыми они могут общаться напрямую, находятся в той же сети. Для общения со всеми остальными хостами они могут использовать так называемые шлюзы или gateways. Шлюз — это хост, который подключен к двум или более физическим сетям одновременно и настроен таким образом, чтобы передавать пакеты между ними.

IP легко определяет, находится ли хост в местной физической сети. Различные физические сети должны принадлежать разным IP сетям. Например, сетевой номер 149.76.4.0 зарезервирован для хостов в локальной сети математиков. При отправке дейтаграммы к quark, сетевое программное обеспечение на erdos сразу видит по IP адресу, 149.76.12.4, что хост места назначения находится в другой физической сети и поэтому может быть достигнут только через шлюз (по умолчанию через sophus). Sophus напрямую подключен к двум разным подсетям: отделу математики и университетской магистрали. Они доступны через разные интерфейсы (eth0 и fddi0 соответственно). Но какой IP адрес мы должны назначить ему? 149.76.1.0 или 149.76.4.0? Ответ: оба. Когда он общается с сервером в локальной сети математиков, sophus использует IP адрес 149.76.4.1, а при общении с хостом на магистрали он использует 149.76.1.4. Таким образом, у шлюза на каждую сеть, к которой он подключен, есть свой IP адрес. Эти адреса (вместе с netmask) привязаны к интерфейсам, через которые подсети обращаются. Так, интерфейсы и адреса sophus связаны следующим образом:

ИнтерфейсадресNetmask
Eth0149.76.4.1255.255.255.0
fddi0149.76.1.4255.255.255.0
Lo127.0.0.1255.0.0.0

Последняя запись описывает loopback интерфейс lo. На картинке изображена топология части сети Groucho Marx Университета (GMU). Хосты, находящиеся в двух подсетях в то же самое время показываются с обоими адресами.

Вообще, Вы можете не обращать внимание на различия между адресами хоста и интерфейса. Относитесь к адресу хоста, который находятся только в одной сети, как к адресу того и другого, хотя строго говоря это Ethernet интерфейс имеет IP адрес. Однако, это различие ощутимо только, когда Вы работаете с gateway.

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

Теперь сосредоточим наше внимание на том, как IP выбирает gateway при доставке дэйтаграм к определенной сети.

Как мы видели раньше erdos, когда передавал дэйтаграмы для quark, проверил место назначения и нашел, что его нет в местной сети. Поэтому он посылает ее gateway, sophus, который теперь сталкивается с той же самой задачей. Sophus определяет, что quark не находится в сетях, с которыми он непосредственно связан, так что он передает эту дэйтаграм другому gateway, чтобы он перенаправил ее дальше. Правильный выбор был бы niels (gateway Отдела Физики). Но sophus нуждается в некоторой информации чтобы определить подходящий gateway. Для этого используется таблица IP маршрутизации, которая определяет какие сети присоединены с помощью каких gateways. Обязательно должен быть указан маршрут по умолчанию (the default route), по которому будут направляться все пакеты с адресами в неизвестных сетях. Этот gateway связан с сетью 0.0.0.0. На sophus, эта таблица могла бы напоминать эту:

СетьGatewayИнтерфейс
149.76.1.0-Fddi0
149.76.2.0149.76.1.2fddi0
149.76.3.0149.76.1.3fddi0
149.76.4.0-Eth0
149.76.5.0149.76.1.5fddi0
.........
0.0.0.0149.76.1.2fddi0

Маршруты к сетям, с которыми Sophus связан непосредственно, обозначаются "-" в столбце Gateway.

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

В зависимости от размера сети применяются разные протоколы маршрутизации. Для маршрутизации внутри автономной системы, такой как университетский кампус, лучше всего подходит RIP (Routing Information Protocol), предложенный в BSD демоне. Для маршрутизации между автономными системами применяются внешние протоколы маршрутизации, такие как EGP (External Gateway Protocol) или BGP (Border Gateway Protocol); они, также как и RIP, были представлены в демоне gated (University of Cornell's).

Метрические значения

Динамическая маршрутизация, основанная на RIP, выбирает наилучший маршрут к определенному хосту или сети, опираясь на количество "hops" (переходов), то есть на количество шлюзов, через которые проходят дейтаграммы перед отправкой основной информации. Чем короче маршрут, тем выше его оценка по RIP. Особенно длинные маршруты с 16 или более переходами считаются неприемлемыми и отбрасываются.

Чтобы использовать RIP для управления информацией, маршрутизируемой внутри вашей сети, необходимо запустить gated на всех хостах. При запуске gated проверяются все активные сетевые интерфейсы. Если есть более одного активного интерфейса (не учитывая loopback), это предполагает, что хост передает пакеты между несколькими сетями и будет активно обмениваться маршрутной информацией. В противном случае он будет только пассивно принимать пакеты RIP и обновлять локальную таблицу маршрутизации.

Получив данные из локальной таблицы маршрутизации, gated определяет длину маршрута по так называемому метрическому значению, связанному с записью в таблице. Это метрическое значение задается системным администратором при настройке маршрута и должно отражать реальную сложность использования данного маршрута. Так, длина маршрута к подсети, с которой хост связан напрямую, всегда должна быть равна нулю, в то время как маршрут, проходящий через два шлюза, должен иметь длину два. Однако учитывайте, что вам не стоит беспокоиться о метриках, если вы не используете RIP или gated.