А. Робачевский - Операционная система UNIX (1114671), страница 87
Текст из файла (страница 87)
Напротив, маршрут по умолчанию являетсякосвенным маршрутом, поскольку всегда адресует получателя, располо!женного вне непосредственно доступных сетевых сегментов. Эта инфор!мация необходима при формировании кадра уровня канала данных. Еслипакет адресован хосту или сети, которые непосредственно не подключенык сетевому интерфейсу, то, хотя сетевой адрес этого пакета будет равенсетевому адресу фактического получателя данных, заголовок уровня каналаданных будет адресовать соседний шлюз, используемый для дальнейшейпередачи пакета. Если пакет не выходит за пределы непосредственно под!ключенной сети, адреса и сетевого уровня и уровня канала будут совпадатьс соответствующими адресами фактического получателя.www.books-shop.comв BSD UNIXДанный аспект проиллюстрирован на рис.
6.26. Здесь мы рассмотрелипроцесс передачихосту, расположенному в удаленном се!тевом сегменте Ethernet. Поскольку доставкапредполагает ис!пользование промежуточного шлюза, передача данных на канальном уров!не требует соответствующей адресации: на первом "перегоне" в качествеадреса получателя используетсяшлюза, и только затем —фактического адресата.Рис. 6.26. Инкапсуляция пакетов для косвенных маршрутовНа то, что маршрут является косвенным, указывает флаг RTF_GATEWAYэлемента таблицы маршрутов. В этом случае МАС!адрес получателя приформировании кадра канального уровня, будет определяться исходя из се!тевого адреса шлюза, хранящегося в полеМодуль протокола имеет возможность доступа кин!формации с помощью трех функций: rtallocдля получения маршрута,для его освобождения и rtredirectдля обработки управ!ляющих сообщений о перенаправлении маршрутаREDIRECT).Для определения соответствия между IP!адресами интерфейсов и ихис!пользуется протокол ARP (Address Resolution Protocol), позволяющий производить форми!рование адреса кадра уровня канала данных.www.books-shop.com462Функция rtallocтребуемому адресату.имеющую следующиеstruct rtentrystructГлава 6.сети в операционной системе UNIXпозволяет модулю протокола определить маршрут кВ результате модуль размещает структуру route,поля:*ro_rtУказатель на соответствующий элемент таблицы маршрутизацииАдрес получателя данныхВозвращаемый функцией() маршрут может быть освобожден спомощью функции(это не означает, что маршрут будет удалениз таблицы маршрутизации).
Время жизни маршрута зависит от протоколаверхнего уровня. Например, модуль протокола TCP хранит маршрут напротяжении жизни виртуального канала.Функция rtredirectобычно вызывается модулем протокола в ответ наполучение от соседних шлюзов управляющих сообщений о перенаправле!нииШлюз генерирует такое сообщение в случае, когда обна!ружен более предпочтительный маршрут для передаваемого пакета.Например, если хосты А и В находятся в одной и той же сети, и хост Анаправляет пакеты В через шлюз С, последний отправит А сообщение оперенаправлении маршрута, информирующее, что А в дальнейшем долженпосылать данные В непосредственно.
Этот процесс показан на рис. 6.27.Рис. 6.27. Пере%направление мар%шрутовВ семействе протоколов TCP/IP для этих целей служит протоколСообщения оперенаправлении маршрутов ICMP REDIRECT формируются IP!модулем шлюза и инфор!мируют IP!модули соседних хостов (шлюзов) о существовании более выгодного маршрутак данному адресату.www.books-shop.comсети в BSDДанная возможность может использоваться для упрощения процедурыформирования таблицы маршрутизации.
Например, рабочие станции мо!гут хранить только маршрут по умолчанию (в сеть 0), адресующий сосед!ний шлюз. При передаче данных хостам той же сети, что и источник,шлюз будет информировать последний о перенаправлении маршрутов, по!зволяя тем самым заполнить элементытаблицы.Функциявызывается с параметрами, указывающими наадрес получателя, новый адрес шлюза, который необходимо миновать длядостижения адресата, а также источник перенаправления маршрута.
Заме!тим, что сообщения о перенаправлении маршрута принимаются только оттекущего шлюза для данного получателя. Если существует маршрут, от!личный от маршрута по умолчанию, то для него изменяется полеrt_gateway согласно указанному в сообщении новому адресу шлюза.В противном случае создается новая запись таблицы маршрутизации.Вопросы определения маршрутов в UNIX являются прерогативой специ!альных прикладных процессов, а не ядра операционной системы.
Ядроразмещает и хранит необходимуюинформацию, атакже обеспечивает интерфейс доступа к этой информации. Процесс име!ет возможность добавить или удалить маршрут с помощью системного вы!зова ioctl(2). Для добавления маршрута используется командаадля удаления — SIOCDELRT.В качестве процессов, отвечающих за заполнение таблиц маршрутизации иее динамическое обновление, можно назвать стандартный демониспользующий протокол RIP (Routing Information Protocol) длядинамического определения и обновления маршрутов, а также демонподдерживающий работу нескольких протоколов обмена мар!шрутизационной информацией (RIP, OSPF, BGP).Текущую таблицу маршрутизации можно увидеть, воспользовавшись ко!мандой$Routing Table:Destination127defaultGatewayFlagsRefUse03050543092647150InterfaceПервая запись таблицы показывает маршрут для псевдохоста (localhost)логической сети операционной системы.
Следующий маршрут адресуетнепосредственно подключенную к интерфейсу (его адрес 194.85.160.50)сеть (194.85.160.0). Наконец, последняя запись определяет маршрут поумолчанию, направляя все пакеты, адресованные получателям "внешнегомира", для которых наш хост не знает конкретных маршрутов, на шлюз садресомкоторый обладает большей информацией о возмож!ных маршрутах.www.books-shop.com464Глава 6.сети в операционнойUNIXРеализация TCP/IPПрежде чем перейти к описанию функционирования модулей протоколовTCP/IP, рассмотрим еще одну структуру данных, называемую управляющимблоком протокола (Protocol Control Block, PCB), который в случае TCP/IPназывается Internet PCB, и представлен структурой inpcb, определенной вфайлеВид структуры inpcb показан на рис.
6.28.Рис. 6.28. Структуры данных протоколов TCP/IPЭта структура создается для каждого активного сокета TCP или UDP исодержит информацию, необходимую для текущих транзакций протокола,такую как IP!адреса источника и получателя (inp_laddr иномера портовиwww.books-shop.comсети в BSD UNIX465цииTCP создает дополнительный управляющий блок, гдехранятся данные, необходимые для работы этого протокола (такие как по!рядковые номера, номера подтверждений и т. д.)Управляющие блоки размещаются в виде связанного списка, отдельногодля TCP и UDP.
Модули протокола имеют в своем распоряжении наборфункций для создания, поиска и удаления управляющего блока. МодульIP демультиплексирует сообщения на основании номера протокола, ука!занного в заголовкеа протокол транспортного уровня, в своюочередь, производит поиск требуемого управляющего блока для доставкиданных протоколам более высокого уровня (приложений).Перейдем теперь к описанию взаимодействия рассмотренных модулей всетевой подсистеме BSD UNIX (рис. 6.29).Рис. 6.29. Сетевая подсистема BSD UNIXwww.books-shop.com466Глава 6.сети в операционной системе UNIXМодуль IPСетевой интерфейс получает пакеты данных из сети и передает их соот!ветствующему модулю сетевого уровня на основании информации, содер!жащейся в заголовке кадра уровня канала. В данном разделе мы не будемрассматривать поддержку различных сетевых протоколов, а остановимсятолько на взаимодействии с протоколом IP.
В этом случае полученные па!кеты помещаются в очередь приема модуля IP. После этого с помощьюпрограммного прерывания вызывается процедура ip_inputкотораяпоочередно извлекает пакеты из очереди и обрабатывает их. После обра!ботки на основании информации заголовкаданные либопередаются протоколу транспортного уровня, либо уничтожаются, если вданных обнаружена ошибка, либо передаются другому интерфейсу для по!следующей отправки фактическому адресату.
В последнем случае системавыполняет роль шлюза.считается адресованной данному хосту, если адрес получателясовпадает с одним из адресов интерфейса данного хоста, или адрес полу!чателя является широковещательным (или групповым) адресом даннойсети. В случае получения фрагментированноймодуль произ!водит ее реассемблирование. Для этого отдельные фрагменты собираютсяв специально организованной очереди, пока не будет сформирована ис!ходнаяПосле этого данные передаются транспортному прото!колу. Для демультиплексирования модуль IP использует поле Protocolзаголовка, которое по существу является индексом таблицы, каждый эле!мент которой представлен коммутаторомрассмотренного ранеев этой главе.