Каждый элемент таблицы маршрутизации, показанный на рис. 6.25, содержит адрес получателя (это может быть адрес сети получателя или адрес конкретного хоста). Это значение хранится в поле rt_dst
rt_gateway
, определяет следующий шлюз, которому необходимо направить пакет, чтобы последний в конечном итоге достиг адресата. Поле rt_flags
определяет тип маршрута (к хосту или к сети), а также его состояние. В поле rt_use
хранится число переданных по данному маршруту пакетов, a rt_refcnt
определяет использование маршрута сетевыми процессами (виртуальными каналами). Наконец, поле rt_ifp
адресует сетевой интерфейс, которому необходимо направить пакет для дальнейшей передачи по данному маршруту.Рис. 6.25
. Элемент таблицы маршрутизацииРазличают не только маршруты к хостам и сетям, но также маршруты
rt_dst
элемента таблицы маршрутизации. Если маршрут к сети, то сравнивается только сетевая часть адреса, в противном случае требуется полное совпадение адресов.Определение маршрута как прямого или косвенного зависит от того, имеется ли непосредственная связь между получателем, указанным в поле rt_dst
Данный аспект проиллюстрирован на рис. 6.26. Здесь мы рассмотрели процесс передачи IP-датаграммы хосту, расположенному в удаленном сетевом сегменте Ethernet. Поскольку доставка датаграммы предполагает использование промежуточного шлюза, передача данных на канальном уровне требует соответствующей адресации: на первом "перегоне" в качестве адреса получателя используется МАС-адрес шлюза, и только затем — МАС-адрес фактического адресата.
Рис. 6.26
. Инкапсуляция пакетов для косвенных маршрутовНа то, что маршрут является косвенным, указывает флаг RTF_GATEWAY
rt_gateway
.[85]Модуль протокола имеет возможность доступа к маршрутизационной информации с помощью трех функций: rtalloc
rtfree
для его освобождения и rtredirect
для обработки управляющих сообщений о перенаправлении маршрута (ICMP REDIRECT
).Функция rtalloc
route
, имеющую следующие поля:struct rtentry *ro_rt | Указатель на соответствующий элемент таблицы маршрутизации |
struct sockaddr ro_dst | Адрес получателя данных |
Возвращаемый функцией rtalloc
rtfree
(это не означает, что маршрут будет удален из таблицы маршрутизации). Время жизни маршрута зависит от протокола верхнего уровня. Например, модуль протокола TCP хранит маршрут на протяжении жизни виртуального канала.Функция rtredirect
Рис. 6.27
. Перенаправление маршрутовДанная возможность может использоваться для упрощения процедуры формирования таблицы маршрутизации. Например, рабочие станции могут хранить только маршрут по умолчанию (в сеть 0), адресующий соседний шлюз. При передаче данных хостам той же сети, что и источник, шлюз будет информировать последний о перенаправлении маршрутов, позволяя тем самым заполнить элементы маршрутизационной таблицы.