Андрей Робачевский - Операционная система UNIX
- Название:Операционная система UNIX
- Автор:
- Жанр:
- Издательство:BHV - Санкт-Петербург
- Год:1997
- Город:Санкт-Петербург
- ISBN:5-7791-0057-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Андрей Робачевский - Операционная система UNIX краткое содержание
Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей
Операционная система UNIX - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Поле pr_flags
определяет некоторые характеристики протокола и режим его функционирования, которые в основном относятся к уровню сокетов. Например, протоколы, предусматривающие предварительное установление связи, указывают это с помощью флага PR_CONNREQUIRED
, не позволяя тем самым функциям сокета передавать данные модулю до создания виртуального канала. Если установлен флаг PR_WANTRCVD
, соответствующие функции сокета будут уведомлять модуль протокола, когда прикладной процесс получает данные из буфера приема. Это может служить сигналом протоколу для отправления подтверждения о получении, а также для обновления значения окна в соответствии с освободившимся местом.
Заметим, что каждый модуль протокола имеет собственные очереди сообщений, используемые для приема и передачи данных.
Каждый сетевой интерфейс системы представлен структурой данных, показанной на рис. 6.23. Сетевой интерфейс обычно связан с соответствующим сетевым адаптером, хотя это не является обязательным условием. Например, внутренний сетевой интерфейс loopback представляет собой псевдоустройство, используемое для унифицированного взаимодействия сетевых процессов в рамках одного хоста, отладки и т.п.

Рис. 6.23. Сетевой интерфейс
Решение об использовании того или иного сетевого интерфейса для передачи сообщения базируется на таблице маршрутизации и производится модулем сетевого уровня. Интерфейс может обслуживать протоколы различных коммуникационных доменов. Соответственно, один и тот же интерфейс может иметь несколько адресов, определенных для каждого семейства протоколов. Структуры, определяющие локальный и широковещательный (broadcast) адреса интерфейса, а также сетевую маску, хранятся в виде связанного списка.
Каждый сетевой интерфейс имеет очередь, в которую помещаются сообщения для последующей передачи, выполняемой функцией if_output()
. Интерфейс также может определить процедуры инициализации if_init()
, сброса if_reset()
и обработки таймера if_watchdog()
. Последняя может использоваться для управления потенциально ненадежными устройствами или для периодического сбора статистики устройства.
Состояние интерфейса характеризуется флагами, хранящимися в поле if_flags
. Возможные флаги приведены в табл. 6.8.
Таблица 6.8. Состояния интерфейса
Флаг | Значение |
---|---|
IFF_UP |
Интерфейс доступен для использования |
IFF_BROADCAST |
Интерфейс поддерживает широковещательные адреса |
IFF_MULTICAST |
Интерфейс поддерживает групповые адреса |
IFF_DEBUG |
Интерфейс обеспечивает возможность отладки |
IFF_LOOPBACK |
Программный внутренний интерфейс |
IFF_POINTOPOINT |
Интерфейс для канала точка-точка |
IFF RUNNING |
Ресурсы интерфейса успешно размещены |
IFF_NOARP |
Интерфейс не использует протокол трансляции адреса |
Флаг IFF_UP
свидетельствует о готовности интерфейса передавать сообщения. Если сетевой интерфейс подключен к физической сети, поддерживающей широковещательную адресацию (broadcast), например, Ethernet, для интерфейса будет установлен флаг IFF_BROADCAST
и определен широковещательный адрес (поле ifa_broadaddr
структуры адресов ifaddr
для соответствующего коммуникационного домена). Если же интерфейс используется для канала точка-точка, будет установлен флаг IFF_POINTOPOINT
и определен адрес хоста (интерфейса), расположенного на противоположном конце (поле ifa_dstaddr
). Заметим, что эти два флага являются взаимоисключающими, a ifa_broadaddr
и ifa_dstaddr
являются различными именами одного и того же поля. Интерфейс устанавливает флаг IFF_RUNNING
после размещения необходимых структур данных и отправления начального запроса на чтение устройству (например, сетевому адаптеру), с которым он ассоциирован.
Состояние интерфейса и ряд других параметров можно просмотреть с помощью команды ifconfig(1M) :
$ ifconfig le0
le0: flags=863 mtu 1500
inet 194.85.160.50 netmask: ffffff00 broadcast 194.85.160.255
Легко заметить, что команда выводит значение следующих полей структуры ifnet
для интерфейса le0
( if_name
): if_flags
, if_mtu
(Maximum Transmission Unit, MTU) определяющее максимальный размер пакета, который может быть передан по физической сети, а также значения полей структуры ifaddr: адрес интерфейса inet
( ifa_addr
), маску netmask
( ifa_netmask
) и широковещательный адрес broadcast
( ifa_broadaddr
).
Интерфейс хранит статистическую информацию, которая может быть использована при мониторинге сети. В частности, эта информация включает число полученных пакетов уровня канала ( if_ipackets
), количество ошибок при приеме ( if_ierrors
), число отправленных пакетов уровня канала ( if_opackets
), количество ошибок при передаче ( if_oerrors
) и число коллизий ( if_collisions
). Команда netstat(1M) позволяет получить эту информацию для сконфигурированных интерфейсов в системе:
$ netstat -in
Name Mtu Net/Dest Address Ipkts Ierrs Opkts Oerrs Collis
lo0 823 127.0.0.0 127.0.0.1 168761 0 168761 0 0
le0 1500 194.85.160.0 194.85.160.50 1624636 1042 110166 1933 382604
Маршрутизация
Сетевая подсистема предназначена для работы в коммуникационной среде, представляющей собой набор сетевых сегментов, связанных между собой. Связь между отдельными сегментами достигается путем подключения их к хостам, имеющим несколько различных сетевых интерфейсов, как показано на рис. 6.24. Такие хосты при необходимости выполняют передачу данных от одного сегмента к другому (forwarding). [83] Заметим, что каждый интерфейс такого хоста-шлюза имеет собственный адрес, соответствующий той сети, к которой он непосредственно подключен. Например, для сетей с разделяемой средой передачи сетевая часть этого адреса равна адресу сети.
Для сетей пакетной коммутации, о которых идет речь, выполнение этой задачи непосредственно связано с выбором маршрута прохождения пакетов данных (routing). Для этого система хранит таблицы маршрутизации , которые используются протоколами сетевого уровня (например, IP) для выбора требуемого интерфейса для передачи пакета адресату.

Рис. 6.24. Коммуникационная среда UNIX (internetwork)
Маршрутизационная информация хранится в виде двух таблиц, одна из которых предназначена для маршрутов к хостам, а другая — для маршрутов к сетям. Такой подход позволяет использовать универсальные механизмы определения маршрута как для сетей с разделяемой средой передачи (например, Ethernet), так и для сетей с каналами типа точка-точка. Например, для доставки пакета удаленному хосту, подключенному к сети первого типа, достаточно знать адрес этой сети, в то время как для каналов точка-точка необходимо явно задать адрес интерфейса противоположного конца канала. [84] Вспомним, что IP-адрес состоит из двух частей — адреса сети и адреса хоста в этой сети. Для интерфейса, подключенного к разделяемой среде, каковой является большинство локальных сетей, существенным является лишь первая часть адреса-получателя, поскольку через этот интерфейс непосредственно доступны все хосты с данным адресом сети. Напротив, через сетевой интерфейс типа точка-точка непосредственный доступ осуществляется к единственному хосту, расположенному на другом конце канала, и, таким образом, необходимо определение полного адреса удаленного интерфейса.
Интервал:
Закладка: