Таблица маршрутов (Routing Table)
Теперь сосредоточим наше внимание на том, как IP выбирает gateway при доставке пакетов определенной сети.
Таблица маршрутов (Routing Table)
Теперь сосредоточим наше внимание на том, как 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.0255.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).