Как пакеты находят путь к машине назначения? Эта задача подробно рассматривается в этой главе.
Когда вы пишете письмо, вы обычно помещаете на конверте полный адрес. После того, как вы опускаете его в почтовый ящик, почта доставит его по месту назначения: оно будет послано в обозначенную страну, чья национальная почта пошлет его в требуемый регион и т.д. Преимущество этой иерархической схемы довольно очевидно: везде, где вы отправляете по почте письмо, местный начальник почтового отделения будет точно знать, куда передать это письмо и не должен заботиться, каким путем письмо будет путешествовать.
IP-сети построены подобным образом. Весь Inetrnet состоит из набора сетей, названных автономными системами (autonomous systems). Каждая такая система производит всю маршрутизацию между своими членами так, что задача посылки пакетов сведена к обнаружению пути к сети с требуемым хостом. Это означает, что как только пакет вручен любому хосту, который находится в нужной сети, обработка выполняется исключительно данной сетью.
Эта структура отражена в разбиении IP-адреса на хост и сетевую часть, как объяснено выше. По умолчанию, сеть места назначения получается из сетевой части IP-адреса. Таким образом, хосты с идентичными IP-адресами сети должны располагаться в пределах одной подсети и наоборот.
Имеет смысл предложить подобную схему также и внутри сети, так как она может состоять из набора сотен меньших сетей, где самыми маленькими единицами являются физические сети типа Ethernet. Поэтому IP позволяет поделить IP-сеть на несколько подсетей (subnets).
Подсеть принимает ответственность за доставку пакетов для определенного диапазона IP-адресов. Как с классами A, B или C она идентифицируется сетевой частью IP-адресов. Однако, сетевая часть теперь расширена, чтобы включить некоторые биты части хоста. Число битов, которые интерпретируются как номер в подсети, задается так называемой маской подсети (subnet mask) или 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-адрес, в то время как третья часть адреса (octet) используется, чтобы различать их между собой. Таким образом, они будут использовать сетевую маску 255.255.255.0.
Стоит заметить, что subnetting (техника создания подсетей) чисто внутреннее дело сети. Подсети создаются сетевым владельцем (или администратором). Часто подсети создаются, чтобы отразить существующие границы, будь они физические (две сети Ethernet), административные (между двумя отделами) или географические. Однако, эта структура воздействует только на внутреннее поведение сети и полностью невидима для внешнего мира.
Subnetting не только организационное деление, но часто и естественное следствие границ аппаратных средств. Знания хостов о строении данной физической сети, типа Ethernet, являются очень ограниченными: единственные хосты, с которыми они способны говорить непосредственно, те, что находятся в той же сети. Ко всем другим хостам они могут обращаться только через так называемый gateway (шлюз). Gateway, это хост, который связан с двумя или больше физическими сетями одновременно и конфигурирован так, чтобы перекачивать пакеты между ними.
IP достаточно легко распознать, находится ли хост в местной физической сети: различные физические сети должны принадлежать различным IP-сетям. Например, сетевой адрес 149.76.4.0 зарезервирован для хостов в локальной сети математиков. При посылке пакетов машине quark сетевое программное обеспечение на машине erdos немедленно увидит по IP-адресу 149.76.12.4, что хост места назначения находится в другой физической сети, и поэтому может быть достигнут только через gateway (допустим, машину sophus ).
Машина sophus непосредственно связана с двумя подсетями: отделом математики и университетской магистралью. Они доступы через различные интерфейсы (eth0 и fddi0 соответственно). Но какой IP-адрес мы ей назначаем? 149.76.1.0 или 149.76.4.0?
Ответ: оба. При работе с сервером в локальной сети математиков машина sophus использует IP-адрес 149.76.1.1, а при работе с хостом на магистрали она должна использовать 149.76.1.0 . Таким образом, gateway получает по одному IP-адресу на каждую сеть, к которой подключен. Эти адреса (вместе с netmask) привязаны к интерфейсу, через который обращаются подсети. Значит, интерфейсы и адреса sophus связаны так:
Интерфейс | Адрес | Маска подсети |
---|---|---|
eth0 | 149.76.4.1 | 255.255.255.0 |
fddi0 | 149.76.1.1 | 255.255.255.0 |
lo | 127.0.0.1 | 255.0.0.0 |
Последняя запись определяет loopback интерфейс lo .
Вообще, вы можете не обращать внимание на различия между адресами хоста и интерфейса. Относитесь к адресу хоста, который находится только в одной сети, как к адресу того и другого, хотя строго говоря, это Ethernet-интерфейс имеет IP-адрес. Однако, это различие ощутимо только, когда вы работаете с gateway.
Теперь сосредоточим наше внимание на том, как IP выбирает gateway при доставке пакетов определенной сети.
Как мы видели раньше, erdos, когда передавал пакеты для quark, проверил место назначения и нашел, что его нет в местной сети. Поэтому он посылает пакет gateway sophus, который теперь сталкивается с той же самой задачей. Машина sophus определяет, что quark не находится в сетях, с которыми он непосредственно связан, так что он передает этот пакет другому gateway, чтобы он перенаправил его дальше. Правильный выбор был бы niels (gateway отдела физики). Но шлюзовая машина sophus нуждается в некоторой информации, чтобы определить подходящий gateway.
Для этого используется таблица маршрутизации IP, которая определяет какие сети присоединены с помощью каких gateways. Обязательно должен быть указан маршрут по умолчанию (default route), по которому будут направляться все пакеты с адресами в неизвестных сетях. Этот gateway связан с сетью 0.0.0.0. На sophus эта таблица могла бы напоминать эту:
Сеть | Netmask | Gateway | Интерфейс |
---|---|---|---|
149.76.1.0 | 255.255.255.0 | - | fddi0 |
149.76.2.0 | 255.255.255.0 | 149.76.1.2 | fddi0 |
149.76.3.0 | 255.255.255.0 | 149.76.1.3 | fddi0 |
149.76.4.0 | 255.255.255.0 | - | eth0 |
149.76.5.0 | 255.255.255.0 | 149.76.1.5 | fddi0 |
… | … | … | … |
0.0.0.0 | 0.0.0.0 | 149.76.1.2 | fddi0 |
Маршруты к сетям, с которыми sophus связан непосредственно, обозначаются знаком "-" в столбце gateway.
Таблицы маршрутизации могут быть построены различными средствами. Для маленькой сети наиболее эффективно строить их вручную и передавать их IP, используя команду route во время загрузки системы (см. главу 5). Для больших сетей они строятся и регулируются во время работы маршрутизирующих демонов; они запускаются на центральном хосте и обмениваются информацией с другими компьютерами для вычисления оптимального маршрута между членами сетей.
Процесс определения правильного маршрута прост, но требует знания логики и двоичной арифметики: маршрут совпадает с пунктом назначения, если (адрес сети AND netmask)=(адрес назначения AND netmask).
Это означает, что маршрут правильный, если числу бит адреса сети, указанное netmask (начиная с левого бита) соответствует то же самое число битов в адресе назначения.
Когда реализация IP ищет самый лучший маршрут к адресату, может найтись ряд записей маршрутизации, которые соответствуют целевому адресу. Например, мы знаем, что заданный по умолчанию маршрут соответствует каждому адресату, но пакеты, предназначенные для местных сетей, будут соответствовать и их локальному маршруту. Как узнать, какой маршрут использовать? Здесь netmask играет важную роль. В то время как оба маршрута соответствуют адресату, один из маршрутов имеет большую netmask, чем другой. Я уже упомянул, что netmask используется, чтобы разбить наше адресное пространство на меньшие сети. Больший netmask более определенно задает целевой адрес, значит, при маршрутизации мы должны всегда выбирать маршрут, который имеет самую большую netmask. Заданный по умолчанию маршрут имеет netmask из нулевых битов, и в конфигурации, приведенной выше, местные сети имеют 24-разрядный netmask. Если пакет соответствует местной сети, он будет направлено на соответствующее устройство, а не на заданный по умолчанию маршрут, потому что локальный сетевой маршрут соответствует netmask с большим числом битов. Единственный пакет, который будет направлен через заданный по умолчанию маршрут это тот, который не соответствует вообще никакому другому маршруту.
В зависимости от размера сети используются различные протоколы маршрутизации. Для маршрутизации в автономной системе (типа университетского городка) лучше подходит внутренний протокол маршрутизации (internal routing protocols), например, RIP (Routing Information Protocol, протокол маршрутной информации), который предложен в демоне BSD routed. Для маршрутизации между автономными системами используются внешние протоколы маршрутизации (external routing protocols) типа EGP (External Gateway Protocol) или BGP (Border Gateway Protocol). Они были предложены в демоне gated (разработка University of Cornell's).
Динамическая маршрутизация, основанная на RIP, выбирает самый лучший маршрут к некоторому хосту или сети, основываясь на наборе hops (переходов), то есть пакетов, рассылаемых перед передачей основной информации. Чем более короткий маршрут, тем лучше RIP его оценивает. Очень длинные маршруты с 16 или больше hops рассматриваются как неподходящие и отвергаются.
Чтобы использовать RIP для управления информацией, маршрутизируемой внутри вашей сети, вы должны запустить gated на всех хостах. Во время загрузки gated проверяет все активные сетевые интерфейсы. Если имеется больше одного активного интерфейса (не считая loopback), он предполагает, что хост передает пакеты между несколькими сетями и будет активно обмениваться маршрутной информацией. Иначе, он будет только пассивно получать RIP-пакеты и модернизировать локальную таблицу маршрутизации.
Получив информацию из локальной таблицы маршрутизации, gated вычисляет длину маршрута по так называемому метрическому значению (metric value), связанному с записью в таблице. Это метрическое значение задается администратором системы при конфигурировании маршрута и должно отражать фактическую трудоемкость использования этого маршрута. Поэтому размер маршрута к подсети, с которой хост непосредственно связан, должен всегда быть установлен в ноль, в то время как маршрут, проходящий через два шлюза, должен иметь размер два. Обратите внимание на то, что Вы не должны беспокоиться относительно метрического значения, когда не используете RIP или gated.
Назад | Глобальное оглавление | Вперед |
Преобразование адресов | Локальное оглавление | Internet Control Message Protocol |