Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): 17.1. Как появился snull

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

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

17.1. Как появился snull

hardorsoft 26.10.10 в 01:16

0

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

hardorsoft 26.10.10 в 01:16

0

Первое и главное – в этой книге предполагалось использовать простой и
независимый от реальной аппаратуры интерфейс, и простой код. Это
наводит на мысль о сходстве с loopback интерфейсом. Snull не является
loopback, в отличии от него он позволяет взаимодействовать с удаленным
хостом, и хорошо демонстрирует процесс написания сетевого драйвера.
Драйвер Linux loopback – прост, его можно найти в файле
drivers/net/loopback.c.

hardorsoft 26.10.10 в 01:18

0

Еще одна особенность snull в том, что он поддерживает только
транспорт IP Это следствие внутреннего устройства интерфейса – snull. .
анализирует содержимое и интерпретирует пакеты, чтобы представлять
два аппаратных интерфейса. Реальный интерфейс не зависит от
протокола передачи, и это ограничение snull не будет затронуто во
фрагментах кода этой главы.

hardorsoft 26.10.10 в 01:17

0

17.1.1. Назначение IP-адресов.

hardorsoft 26.10.10 в 01:18

0

Модуль snull создает два интерфейса. Эти интерфейсы отличаются
от простого loopback тем, что один интерфейс позволяет посылать
данные только самому себе, а другой интерфейс - не только себе.

hardorsoft 26.10.10 в 01:18

0

К сожалению, этот эффект не может быть достигнут посредством
назначения IP-адреса, потому что ядро не отослало бы пакет через
интерфейс A, который был бы направлен к интерфейсу B, этого же хоста.
Для этого используется канал loopback, без прохождения через snull.
Пакеты, посланные через один интерфейс, могут быть приняты через
другой, но получателем пакета не может быть локальный хост. (?????????)

hardorsoft 26.10.10 в 01:19

0

Чтобы стать «скрытым loopback», интерфейс snull инвертирует младший бит 3-го октета в адресах получателя и отправителя. Это
изменяет IP-адреса класса C сети и хоста. В результате пакет,
посылаемый в сеть A(соединение sn0, первый интерфейс), появляется на
интерфейсе sn1, как пакет сети B.

hardorsoft 26.10.10 в 01:19

0

Чтобы не использовать большое количество чисел, назначим
символические имена IP-адресам:

hardorsoft 26.10.10 в 01:20

0

snullnet0 – сеть, соединенная с интерфейсом sn0. Так же snullnet1
соединен с sn1. Адреса этих сетей различаются только младшим
битом 3-го октета. Эти сети должны иметь 24-битную маску сети.

hardorsoft 26.10.10 в 01:20

0

local0 – IP адрес назначенный интерфейсу sn0, это относиться и к
snullnet0. Адрес sn1 – local1. local0 и local1 должны отличаться
в младшем бите 3-го октета и четвертым октетом.

hardorsoft 26.10.10 в 01:20

0

remote0 это хост в snullnet0, и его четвертый октет – тот же что и в
local1. Любой пакет, посланный в remote0, доходит до local1, после
этого сетевой адрес модифицируется кодом интерфейса. Хост
remote1 принадлежит snullnet1 и его четвертый октет – тот же что
и в local0.

hardorsoft 26.10.10 в 01:20

0

Операции snull интерфейса изображены на рисунке 17-1, на
котором имя хоста. связанное с интерфейсом, указано возле имени
интерфейса.

hardorsoft 26.10.10 в 01:20

0

Рисунок 17-1 как хост видит интерфейсы.

hardorsoft 26.10.10 в 01:21

0

Здесь укажем возможные значения сетевых адресов. Как только вы
поместите эти строки в /etc/networks, можно обращаться к сети по
имени. Указанные значения зарезервированы для персонального
использования.

hardorsoft 26.10.10 в 01:21

0

snullnet0 192.168.0.0
snullnet1 192.168.1.0

hardorsoft 26.10.10 в 01:21

0

Поместите в /etc/hosts следующие строки:

hardorsoft 26.10.10 в 01:21

0

192.168.0.1 local0
192.168.0.2 remote0
192.168.1.2 local1
192.168.1.1 remote1

hardorsoft 26.10.10 в 01:21

0

Важная особенность этих адресов в том, что часть
идентифицирующая хост в local0 та же, что и в remote1, а в local1 та же
что и в remote0. Вы можете использовать различные значения адресов,
соблюдая это.

hardorsoft 26.10.10 в 01:22

0

Для краткости будем считать, что ваш компьютер уже подсоединен
к сети. Выбранный вами адрес может уже быть в реальной сети Internet
или intranet, и назначение его вашему интерфейсу приведет к нарушению
связи с реальным хостом. Например, адрес не принадлежащий Internet,
уже может использоваться в вашей персональной сети.

hardorsoft 26.10.10 в 01:22

0

Любой адрес, выбранный вами, можно корректно назначить
интерфейсам, используя команды:

hardorsoft 26.10.10 в 01:22

0

ifconfig sn0 local0
ifconfig sn1 local1

hardorsoft 26.10.10 в 01:22

0

Если адрес не принадлежит сети класса С, вам необходимо добавить
параметр netmask 255.255.255.0,.

hardorsoft 26.10.10 в 01:22

0

Теперь удаленный интерфейс – доступен. Ниже показано, что хосту
доступны remote0 и remote1 через интерфейс snull.

hardorsoft 26.10.10 в 01:23

0

morgana% ping -c 2 remote0
64 bytes from 192.168.0.99: icmp_seq=0 ttl=64 time=1.6 ms
64 bytes from 192.168.0.99: icmp_seq=1 ttl=64 time=0.9 ms
2 packets transmitted, 2 packets received, 0% packet loss
morgana% ping -c 2 remote1
64 bytes from 192.168.1.88: icmp_seq=0 ttl=64 time=1.8 ms
64 bytes from 192.168.1.88: icmp_seq=1 ttl=64 time=0.9 ms
2 packets transmitted, 2 packets received, 0% packet loss

hardorsoft 26.10.10 в 01:23

0

Обратите внимание, что вам не будут доступны другие хосты,
принадлежащие обеим сетям. Это происходит, потому что при передаче
пакета, меняется адрес, и ваш компьютер будет отвергать пакеты, после
их принятия. Например, пакет, предназначенный для 192.168.0.32, уходит
через sn0, и приходит в sn1, с адресом назначения 192.168.1.32, который
не является адресом локального хоста.

hardorsoft 26.10.10 в 01:23

0

17.1.2. Физический транспорт пакетов.

hardorsoft 26.10.10 в 01:24

0

Поскольку нас интересует транспорт данных, скажем, что
интерфейс snull принадлежит классу Ethernet.

hardorsoft 26.10.10 в 01:24

0

snull эмулирует Ethernet, потому что большая часть сетей
базируется на Ethernet технологии, будь то 10base-T, 100base-T или
Gigabit.

hardorsoft 26.10.10 в 01:24

0

К тому же, ядро предлагает общую поддержку Ethernet-устройств,
и нет причин не использовать это. Преимущество существующих Ethernet-
устройств заключается в мощном plip интерфейсе (этот интерфейс
используется портом принтера), объявляющим себя как Ethernet-устройство.

hardorsoft 26.10.10 в 01:25

0

И последнее преимущество использования Ethernet для snull
заключается в том, что вы можете запускать tcpdump для просмотра
проходящих пакетов. Наблюдение за обоими интерфейсами с помощью
tcpdump, может быть полезно для их изучения.

hardorsoft 26.10.10 в 01:25

0

Как было сказано, snull работает только c IP пакетами. Это
ограничение связано с тем фактом, что snull читает и модифицирует
содержимое пакетов. Код модифицирует отправителя, получателя и
контрольную сумму в заголовке каждого пакета, и не проверяет,
действительно ли передается IP-пакет. Поэтому структура не IP-пакета
будет разрушена. Если вы хотите использовать другие протоколы с snull,
вы должны будете модифицировать модули исходного кода.

hardorsoft 26.10.10 в 01:25

0
Минутку...