Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
17.1. Как появился snull
hardorsoft
26.10.10 в 01:16
|
|
Этот подраздел описывает концепцию сетевого интерфейса snull. Хотя эта информация может показаться незначительной, пробел в этой области может вызвать проблемы даже при работе с простым кодом.
hardorsoft
26.10.10 в 01:16
|
|
Первое и главное – в этой книге предполагалось использовать простой и независимый от реальной аппаратуры интерфейс, и простой код. Это наводит на мысль о сходстве с loopback интерфейсом. Snull не является loopback, в отличии от него он позволяет взаимодействовать с удаленным хостом, и хорошо демонстрирует процесс написания сетевого драйвера. Драйвер Linux loopback – прост, его можно найти в файле drivers/net/loopback.c.
hardorsoft
26.10.10 в 01:18
|
|
Еще одна особенность snull в том, что он поддерживает только транспорт IP Это следствие внутреннего устройства интерфейса – snull. . анализирует содержимое и интерпретирует пакеты, чтобы представлять два аппаратных интерфейса. Реальный интерфейс не зависит от протокола передачи, и это ограничение snull не будет затронуто во фрагментах кода этой главы.
hardorsoft
26.10.10 в 01:17
|
|
17.1.1. Назначение IP-адресов.
hardorsoft
26.10.10 в 01:18
|
|
Модуль snull создает два интерфейса. Эти интерфейсы отличаются от простого loopback тем, что один интерфейс позволяет посылать данные только самому себе, а другой интерфейс - не только себе.
hardorsoft
26.10.10 в 01:18
|
|
К сожалению, этот эффект не может быть достигнут посредством назначения IP-адреса, потому что ядро не отослало бы пакет через интерфейс A, который был бы направлен к интерфейсу B, этого же хоста. Для этого используется канал loopback, без прохождения через snull. Пакеты, посланные через один интерфейс, могут быть приняты через другой, но получателем пакета не может быть локальный хост. (?????????)
hardorsoft
26.10.10 в 01:19
|
|
Чтобы стать «скрытым loopback», интерфейс snull инвертирует младший бит 3-го октета в адресах получателя и отправителя. Это изменяет IP-адреса класса C сети и хоста. В результате пакет, посылаемый в сеть A(соединение sn0, первый интерфейс), появляется на интерфейсе sn1, как пакет сети B.
hardorsoft
26.10.10 в 01:19
|
|
Чтобы не использовать большое количество чисел, назначим символические имена IP-адресам:
hardorsoft
26.10.10 в 01:20
|
|
snullnet0 – сеть, соединенная с интерфейсом sn0. Так же snullnet1 соединен с sn1. Адреса этих сетей различаются только младшим битом 3-го октета. Эти сети должны иметь 24-битную маску сети.
hardorsoft
26.10.10 в 01:20
|
|
local0 – IP адрес назначенный интерфейсу sn0, это относиться и к snullnet0. Адрес sn1 – local1. local0 и local1 должны отличаться в младшем бите 3-го октета и четвертым октетом.
hardorsoft
26.10.10 в 01:20
|
|
remote0 это хост в snullnet0, и его четвертый октет – тот же что и в local1. Любой пакет, посланный в remote0, доходит до local1, после этого сетевой адрес модифицируется кодом интерфейса. Хост remote1 принадлежит snullnet1 и его четвертый октет – тот же что и в local0.
hardorsoft
26.10.10 в 01:20
|
|
Операции snull интерфейса изображены на рисунке 17-1, на котором имя хоста. связанное с интерфейсом, указано возле имени интерфейса.
hardorsoft
26.10.10 в 01:20
|
|
Рисунок 17-1 как хост видит интерфейсы.
hardorsoft
26.10.10 в 01:21
|
|
Здесь укажем возможные значения сетевых адресов. Как только вы поместите эти строки в /etc/networks, можно обращаться к сети по имени. Указанные значения зарезервированы для персонального использования.
hardorsoft
26.10.10 в 01:21
|
|
snullnet0 192.168.0.0 snullnet1 192.168.1.0
hardorsoft
26.10.10 в 01:21
|
|
Поместите в /etc/hosts следующие строки:
hardorsoft
26.10.10 в 01:21
|
|
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
|
|
Важная особенность этих адресов в том, что часть идентифицирующая хост в local0 та же, что и в remote1, а в local1 та же что и в remote0. Вы можете использовать различные значения адресов, соблюдая это.
hardorsoft
26.10.10 в 01:22
|
|
Для краткости будем считать, что ваш компьютер уже подсоединен к сети. Выбранный вами адрес может уже быть в реальной сети Internet или intranet, и назначение его вашему интерфейсу приведет к нарушению связи с реальным хостом. Например, адрес не принадлежащий Internet, уже может использоваться в вашей персональной сети.
hardorsoft
26.10.10 в 01:22
|
|
Любой адрес, выбранный вами, можно корректно назначить интерфейсам, используя команды:
hardorsoft
26.10.10 в 01:22
|
|
ifconfig sn0 local0 ifconfig sn1 local1
hardorsoft
26.10.10 в 01:22
|
|
Если адрес не принадлежит сети класса С, вам необходимо добавить параметр netmask 255.255.255.0,.
hardorsoft
26.10.10 в 01:22
|
|
Теперь удаленный интерфейс – доступен. Ниже показано, что хосту доступны remote0 и remote1 через интерфейс snull.
hardorsoft
26.10.10 в 01:23
|
|
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
|
|
Обратите внимание, что вам не будут доступны другие хосты, принадлежащие обеим сетям. Это происходит, потому что при передаче пакета, меняется адрес, и ваш компьютер будет отвергать пакеты, после их принятия. Например, пакет, предназначенный для 192.168.0.32, уходит через sn0, и приходит в sn1, с адресом назначения 192.168.1.32, который не является адресом локального хоста.
hardorsoft
26.10.10 в 01:23
|
|
17.1.2. Физический транспорт пакетов.
hardorsoft
26.10.10 в 01:24
|
|
Поскольку нас интересует транспорт данных, скажем, что интерфейс snull принадлежит классу Ethernet.
hardorsoft
26.10.10 в 01:24
|
|
snull эмулирует Ethernet, потому что большая часть сетей базируется на Ethernet технологии, будь то 10base-T, 100base-T или Gigabit.
hardorsoft
26.10.10 в 01:24
|
|
К тому же, ядро предлагает общую поддержку Ethernet-устройств, и нет причин не использовать это. Преимущество существующих Ethernet- устройств заключается в мощном plip интерфейсе (этот интерфейс используется портом принтера), объявляющим себя как Ethernet-устройство.
hardorsoft
26.10.10 в 01:25
|
|
И последнее преимущество использования Ethernet для snull заключается в том, что вы можете запускать tcpdump для просмотра проходящих пакетов. Наблюдение за обоими интерфейсами с помощью tcpdump, может быть полезно для их изучения.
hardorsoft
26.10.10 в 01:25
|
|
Как было сказано, snull работает только c IP пакетами. Это ограничение связано с тем фактом, что snull читает и модифицирует содержимое пакетов. Код модифицирует отправителя, получателя и контрольную сумму в заголовке каждого пакета, и не проверяет, действительно ли передается IP-пакет. Поэтому структура не IP-пакета будет разрушена. Если вы хотите использовать другие протоколы с snull, вы должны будете модифицировать модули исходного кода.
hardorsoft
26.10.10 в 01:25
|
|