Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа? |
Моделирование сетей, сетевая надежность и сетевые драйверы
17.4. Сетевые драйверы
Читатели, знакомые с телекоммуникационными протоколами, могут заинтересоваться тем, как писать прикладные программы для работы с пакетами. В большинстве случаев вполне достаточно воспользоваться стандартной библиотекой для работы с сокетами. В особых случаях может возникнуть необходимость получения данных непосредственно от сетевого интерфейса. Прикладная программа взаимодействует с драйвером сетевого интерфейса. Ethernet-интерфейс, как и всякий другой, содержит несколько статусных управляющих регистров ( CSR – Control Status Register) и один или несколько регистров данных. Запись (чтение) в эти регистры выполняется в IBM/PC с помощью команд IN (OUT). Каждому регистру ставится в соответствие определенный номер порта. Блок номеров портов задается в процессе постановки пакетного драйвера.
Следует иметь в виду, что разные интерфейсы могут иметь разное число CSR -регистров и отличные от приведенных ниже функции (NE2100). Интерфейс характеризуется тремя целыми числами: класс (8 бит), тип (16 бит) и номер. Класс говорит о том, для какой из сетевых сред предназначен данный прибор (PPP, DIX Ethernet, IEEE 802.3, IEEE 802.5, Pronet-10, Appletalk и т.д.). Тип описывает конкретную реализацию интерфейса (NE2100, NI5210, 3C501 и т.д.). Тип 0xffff соответствует всем интерфейсам данного класса. В случае, когда ЭВМ оснащена более чем одним интерфейсом идентичного типа, для их идентификации используется номер. На рис. 17.4 показана структура управляющего ( CSR ) регистра сетевого интерфейса.
CSR 1 (доступ разрешен при CSR 0[stop] = 1)
CSR2 (доступ разрешен при CSR0[stop] = 1)
Bcon | 0 = <0:7> перестановка байтов адресов |
---|---|
Acon | 0 = ale, 1 = /as |
Bswp | 0 = /bm1, bm0, /hold; |
CSR 3 (доступ разрешен при CSR 0[stop] = 1)
Структура переменных init_mode (смещение = 0) имеет вид
Drx | запрет приема |
---|---|
Dtx | запрет передачи |
Loop | цикл |
Dtcr | запрет передачи crc |
Coll | столкновение |
Drty | запрет повторов |
Intl | внутренний цикл |
Prom | режим приема всех пакетов (promiscuous mode) |
Приведенное выше описание регистров интерфейса не является единственно возможным. Структура драйверов варьируется для разных операционных систем. Для системных программистов полезно иметь возможность настраивать драйвер или непосредственно интерфейс на определенный режим, например, на прием всех пакетов, проходящих по кабельному сегменту. Последнее может представлять интерес в диагностических целях, так как вслед за пакетным драйвером загружается Etherdrv, Winsock или winpkt и т.д., блокирующие режим приема всех пакетов (mode=6).
Существует множество пакетных драйверов. Можно обнаружить несколько модификаций для одного и того же типа интерфейса. Эти драйверы могут быть ориентированы на работу в разных программных средах и иметь разные возможности. Драйвер может использовать минимум возможностей интерфейса (базовый уровень), реализовать более широкий набор функций (мультикастинг, сбор статистики и т.д.) или поддерживать практически все, на что способен данный интерфейс. В последнем случае он занимает больше места в памяти. При написании программы следует помнить, что порядок байтов в Ethernet противоположен тому, который используется в вашей машине.
Пакетные драйверы используют программные прерывания в интервале . Следует сразу заметить, что не все прерывания из этого списка свободны, и при конфигурировании системы следует проявлять осмотрительность. Для того, чтобы избежать конфликтов с другими внешними устройствами, предусматривается возможность реконфигурации прерываний. Практически все драйверы могут работать с различными протоколами (TCP/IP, OSI и др.). Решить задачу мультиплексирования на связном уровне помогает процедура access_type, которая обеспечивает доступ для пакетов определенного типа.
Все функции реализуются с помощью обращения к драйверу с набором определенных параметров. Каждому типу используемого сетевого протокола, с которым работает интерфейс, ставится в соответствие целочисленный указатель (handle), получаемый с помощью процедуры access_type. Выполнимость драйвером тех или иных операций может быть выяснена с помощью запроса driver_info.
Следует помнить, что порядок байтов в PC и в некоторых сетях, включая Ethernet, не совпадает. Мультикастинг адресация реализуется на уровне L2, при этом список мультикаст-адресов подписки пользователей хранится в сетевом интерфейсе и может быть прочитан по запросу.
Современные сетевые интерфейсы производят подсчет принятых и переданных октетов, количество различного типа ошибок и пр. Получение статистических данных об ошибках и трафике через данный интерфейс осуществляется с помощью запроса get_statistics(handle). Статистические данные имеют вид целых 32-разрядных чисел.
Практически все интерфейсы допускают смену МАС-адреса, прошитого изготовителем интерфейса.