А. Робачевский - Операционная система UNIX (1114671), страница 86
Текст из файла (страница 86)
Аналогично для обмена управляющими командамимежду модулями протоколов используются функции pr_ctlinputиpr_ctloutputЦепочка взаимодействующих протоколов производитразмещение и освобождение памяти при обмене сообщениями, которые пе!редаются посредством рассмотренных структур mbuf: при передаче сообще!ний от сети прикладному процессу за освобождение буферов mbuf отвечаетмодуль верхнего уровня и наоборот, при передаче сообщений в сеть память,занимаемая сообщением, освобождается на самом нижнем уровне.www.books-shop.com456Глава 6.сети в операционной системе UNIXПоле pr_flags определяет некоторые характеристики протокола и режимего функционирования, которые в основном относятся к уровню сокетов.Например, протоколы, предусматривающие предварительное установлениесвязи, указывают это с помощью флагане позволяятем самым функциямпередавать данные модулю до создания вир!туального канала.
Если установлен флагсоответствующиефункции сокета будут уведомлять модуль протокола, когда прикладнойпроцесс получает данные из буфера приема. Это может служить сигналомпротоколу для отправления подтверждения о получении, а также для об!новления значения окна в соответствии с освободившимся местом.Заметим, что каждый модуль протокола имеет собственные очереди сооб!щений, используемые для приема и передачи данных.Каждый сетевой интерфейс системы представлен структурой данных, по!казанной на рис.
6.23. Сетевой интерфейс обычно связан с соответствую!щим сетевым адаптером, хотя это не является обязательным условием.Например, внутренний сетевой интерфейс loopback представляет собойпсевдоустройство, используемое для унифицированного взаимодействиясетевых процессов в рамках одного хоста, отладки и т. п.Рис. 6.23. Сетевой интерфейсРешение об использовании того или иного сетевого интерфейса для пере!дачи сообщения базируется на таблице маршрутизации и производитсяwww.books-shop.comсети в BSDмодулем сетевого уровня. Интерфейс может обслуживать протоколы раз!личных коммуникационных доменов. Соответственно, один и тот же ин!терфейс может иметь несколько адресов, определенных для каждого се!мейства протоколов. Структуры, определяющие локальный и широкове!щательный (broadcast) адреса интерфейса, а также сетевую маску, хранятсяв виде связанного списка.Каждый сетевой интерфейс имеет очередь, в которую помещаются сооб!щения для последующей передачи, выполняемой функциейИнтерфейстакжеможетопределитьпроцедурыинициализацииif_initсброса if_resetи обработки таймераПо!следняя может использоваться для управления потенциально ненадежны!ми устройствами или для периодического сбора статистики устройства.Состояние интерфейса характеризуется флагами, хранящимися в полеlags.
Возможные флаги приведены в табл. 6.8.Таблица 6.8. Состояния интерфейсаФлагЗначениеИнтерфейс доступен для использованияIFF_BROADCASTИнтерфейс поддерживает широковещательные адресаИнтерфейс поддерживает групповые адресаИнтерфейс обеспечивает возможность отладкиIFF_LOOPBACKПрограммный внутренний интерфейсИнтерфейс для канала точка%точкаРесурсы интерфейса успешно размещеныIFF_NOARPИнтерфейс не использует протокол трансляции адресаФлаг IFF_UP свидетельствует о готовности интерфейса передавать сооб!щения.
Если сетевой интерфейс подключен к физической сети, поддержи!вающей широковещательную адресацию (broadcast), например, Ethernet,для интерфейса будет установлен флаг IFF_BROADCAST и определен широ!ковещательный адрес (полеструктуры адресовдлясоответствующего коммуникационного домена). Если же интерфейс ис!пользуетсядляканалаточка!точка,будетустановленфлаги определен адрес хоста (интерфейса), расположенногона противоположном конце (поле ifa_dstaddr).
Заметим, что эти двафлага являются взаимоисключающими, aи ifa_dstaddrявляются различными именами одного и того же поля. Интерфейс уста!навливает флаг IFF_RUNNING после размещения необходимых структурданных и отправления начального запроса на чтение устройству (напри!мер, сетевому адаптеру), с которым он ассоциирован.www.books-shop.com458Глава 6.сети операционной системе UNIXСостояние интерфейса и ряд других параметров можно просмотреть с по!мощью команды$inet1500netmask ffffffOO broadcastЛегко заметить, что команда выводит значение следующих полей структу!рыдля интерфейса leOi f _ f l a g s , if_mtu (MaximumTransmission Unit, MTU) определяющее максимальный размер пакета, ко!торый может быть передан по физической сети, а также значения полейструктурыадрес интерфейса inetмаску n e t m a s kи широковещательный адрес broadcast (ifa_broadaddr).Интерфейс хранит статистическую информацию, которая может быть ис!пользована при мониторинге сети.
В частности, эта информация включаетчисло полученных пакетов уровня канала (if_ipackets), количествоошибок при приеме (if_ierrors), число отправленных пакетов уровняканалаколичество ошибок при передаче (if_oerrors) ичисло коллизий (if_collisions). Командапозволяет полу!чить эту информацию для сконфигурированных интерфейсов в системе:$inNameleOMtu8231500Net/Dest127.0.0.0194.85.160.0Address127.0.0.1168761162463601042Opkts168761110166OerrsО1933CollisО382604МаршрутизацияСетевая подсистема предназначена для работы в коммуникационной сре!де, представляющей собой набор сетевых сегментов, связанных между со!бой. Связь между отдельными сегментами достигается путем подключенияих к хостам, имеющим несколько различных сетевых интерфейсов, какпоказано на рис. 6.24.
Такие хосты при необходимости выполняют переда!чу данных от одного сегмента к другомуДля сетей пакетнойкоммутации, о которых идет речь, выполнение этой задачи непосредст!венно связано с выбором маршрута прохождения пакетов данных (routing).Для этого система хранит таблицы маршрутизации, которые используютсяпротоколами сетевого уровня (например, IP) для выбора требуемого ин!терфейса для передачи пакета адресату.информация хранится в виде двух таблиц, одна изкоторых предназначена для маршрутов к хостам, а другая — для маршру!тов к сетям.
Такой подход позволяет использовать универсальные меха!Заметим, что каждый интерфейс такого хоста!шлюза имеет собственный адрес, соответст!вующий той сети, к которой он непосредственно подключен. Например, для сетей с раз!деляемой средой передачи сетевая часть этого адреса равна адресу сети.www.books-shop.comсети в BSD UNIX459определения маршрута как для сетей с разделяемой средой переда!чи (например, Ethernet), так и для сетей с каналами типа точка!точка.
На!пример, для доставки пакета удаленному хосту, подключенному к сетипервого типа, достаточно знать адрес этой сети, в то время как для кана!лов точка!точка необходимо явно задать адрес интерфейса противополож!ного концаРис. 6.24. Коммуникационная среда UNIX (internetwork)При определении маршрута модуль сетевого протокола (IP) сначала про!сматривает элементы таблицы для хостов, а затем для сетей. Если оба по!иска не дают результата, используется маршрут по умолчанию (если такойустановлен), определенный как маршрут в сеть с адресом 0.
Обычно ис!пользуется первый найденный маршрут. Таким образом, порядок поискаобеспечивает приоритетность маршрутов к хостам по отношению к мар!шрутам к сетям, что естественно, поскольку первые представлены болееконкретными адресами.Каждый элемент таблицы маршрутизации, показанный на рис. 6.25, со!держит адрес получателя (это может быть адрес сети получателя или адресВспомним, что IP!адрес состоит из двух частей — адреса сети и адреса хоста в этой сети.Для интерфейса, подключенного к разделяемой среде, каковой является большинство ло!кальных сетей, существенным является лишь первая часть адреса!получателя, посколькучерез этот интерфейс непосредственно доступны все хосты с данным адресом сети.
На!против, через сетевой интерфейс типа точка!точка непосредственный доступ осуществля!ется к единственномурасположенному на другом конце канала, и, таким образом,необходимо определение полного адреса удаленного интерфейса.Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRSɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕɈɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com460Глава 6.сети в операционнойUNIXконкретного хоста). Это значение хранится в поле rt_dst.
Следующее по!ле, rt_gateway, определяет следующий шлюз, которому необходимо на!править пакет, чтобы последний в конечном итоге достиг адресата. Полеrt_flags определяет тип маршрута (к хосту или к сети), а также его со!стояние. В поле rt_use хранится число переданных по данному маршрутупакетов, a rt_refcnt определяет использование маршрута сетевыми про!цессами (виртуальными каналами). Наконец, поле rt_ifp адресует сете!вой интерфейс, которому необходимо направить пакет для дальнейшейпередачи по данному маршруту.Рис.
6.25. Элемент таблицы мар%шрутизацииРазличают не только маршруты к хостам и сетям, но также маршруты пря!мые (direct) и косвенные (indirect). Первое различие определяет критерийсравнения адреса получателя пакета с полем rt_dst элемента таблицымаршрутизации. Если маршрут к сети, то сравнивается только сетеваячасть адреса, в противном случае требуется полное совпадение адресов.Определение маршрута как прямого или косвенного зависит от того, име!ется ли непосредственная связь между получателем, указанным в полеи сетевым интерфейсом, обслуживающим данный маршрут. На!пример, маршрут в сеть, непосредственно подключенную к сетевому ин!терфейсу, является прямым.