Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): Глава 17. Драйвера сетевых устройств

Оглавление
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Глава 17. Драйвера сетевых устройств

hardorsoft 26.10.10 в 01:12

0

Мы обсудили символьные и блочные драйвера, теперь рассмотрим
сетевые. Сетевой интерфейс является третьим стандартным классом
устройств Linux, в этой главе описано его взаимодействие с ядром.

hardorsoft 26.10.10 в 01:13

0

Роль сетевых устройств в системе подобна монтируемым блочным
устройствам. Блочное устройство регистрирует диски и методы в ядре,
затем передает и принимает блоки данных по запросу с помощью
функции request. Аналогично и сетевое устройство регистрирует себя в
специальных структурах ядра, для обмена пакетами с внешним миром.

hardorsoft 26.10.10 в 01:13

0

Имеются несколько важных отличий между монтированием дисков
и интерфейсом доставки пакетов. Диск представлен как специальный
файл в каталоге /dev, а сетевой интерфейс не имеет подобного
представления. Стандартные файловые операции (чтение, запись и т.п.)
не производятся над сетевым интерфейсом, также не применим принцип
Unix «все является файлом». Таким образом, сетевой интерфейс
существует в своем пространстве, и экспортирует собственный набор
операций.

hardorsoft 26.10.10 в 01:13

0

Хотя вы можете возразить, что приложения используют системные
вызовы read и write для сокетов, но эти вызовы взаимодействуют с
программным обеспечением по отдельному интерфейсу. Несколько сотен
сокетов могут быть мультиплексированы на одном физическом
устройстве.

hardorsoft 26.10.10 в 01:13

0

Более важное отличие заключается в том, что блочные устройства
выполняют какие-либо действия только по запросу ядра, а сетевые
устройства принимают пакеты асинхронно из внешней среды. Таким
образом, для передачи буфера, ядро запрашивает драйвер блочного
устройства, а сетевое устройство само запрашивает ядро для передачи
полученного пакета. Интерфейс ядра для сетевых устройств построен на
основе этих отличий.

hardorsoft 26.10.10 в 01:14

0

Помимо этого сетевые драйверы должны решать административные
задачи: установка адреса, изменение параметров передачи, учет трафика
и ведение статистики ошибок. API сетевого драйвера отражает эти
требования, поэтому мы можем увидеть серьезные отличия интерфейсов.

hardorsoft 26.10.10 в 01:14

0

Сетевая подсистема ядра Linux, спроектирована так, чтобы быть
независимой от протокола. Это применимо к сетевым протоколам
(Internet protocol [IP], IPX или другие) и аппаратному протоколу (Ethernet,
token ring и т.д.). При взаимодействии между сетевым драйвером и ядром
одновременно может передаваться только 1 пакет. Это позволяет
скрывать от драйвера протокол, и от протокола – физическую среду.

hardorsoft 26.10.10 в 01:14

0

Эта глава описывает, как сетевые интерфейсы вписываются в ядро
Linux, предоставляет примеры сетевого интерфейса, который называется
snull. Для упрощения обсуждения, интерфейс использует аппаратный
протокол Ethernet и передает IP-пакеты. Знания, приобретенные вами при
рассмотрении snull, могут быть легко применены для не IP-протокола.
Написание не Ethernet-драйвера немного отличается в деталях,
связанных с сетевым протоколом.

hardorsoft 26.10.10 в 01:14

0

В этой главе не рассказывается о схеме назначения IP адресов,
сетевых протоколов или других основополагающих концепциях сети. Эти
понятия не имеют отношения к написанию драйверов, и нельзя
удовлетворительно рассмотреть сетевые технологии в объеме менее чем сотня страниц.

hardorsoft 26.10.10 в 01:15

0

Перед началом изучения, сделаем заметку по терминологии. В
мире сетевых технологий используется термин «октет», что означает
группу из 8 бит, что в большинстве случаев является наименьшей
единицей данных в сетевых устройствах и протоколах. Термин байт почти
никогда не встречается. Для соблюдения стандартов, мы также будем
употреблять «октет», когда говорим о сетевых устройствах.

hardorsoft 26.10.10 в 01:15

0

Термин «заголовок» так же заслуживает упоминания. Заголовок –
это множество байт (прошу прощения – октет), находящихся в пакете, и
позволяющих ему пройти через различные сетевые уровни. Когда
приложение посылает блок данных через TCP-сокет, сетевая подсистема
разделяет эти данные на пакеты, и добавляет в начало каждого пакета
TCP-заголовки, описывающие его местоположение в потоке. Затем, перед
заголовком TCP, нижние уровни добавляют IP-заголовок, используемый
для доставки пакета к месту назначения. Если пакет выходит за пределы
среды Ethernet, заголовки Ethernet, интерпретируемые аппаратно,
находятся перед остальными. Обычно сетевой драйвер не должен
интересоваться заголовками более высоких уровней, они могут
многократно усложнить создание заголовков аппаратного уровня.

hardorsoft 26.10.10 в 01:15

0
Минутку...