Google
 
Web avtobazar.com.ua

4. Конфигурирование сетевых аппаратных средств.

4.1. Устройства, драйвера, и все это

     До  сих  пор,  мы  весьма  немного  говорили относительно сетевых
интерфейсов  и  общих  проблем  TCP/IP,  но  не  говорили  о  том, что
происходит,  когда  "сетевой  код"  в  ядре  обращается  к  аппаратным
средствам.  Для  этого,  мы  должны  немного  поговорить  о концепциях
интерфейсов и драйверов.

     Во-первых,  конечно, имеются непосредственно аппаратные средства,
например  Ethernet  карта:  пластина  из  эпоксидной  смолы, утыканная
большим  количеством  крошечных  чипов  с  глупыми  номерами на них, и
воткнутая  в  слот  вашего  PC.  Это  -  то  что  мы  обычно  называем
устройством.

     Для   того   чтобы   использовать   Ethernet   карту,  необходимы
специальные  функции, расположенные в ядре вашего Linux, которые знают
как   работать   с  этим  устройством.  Это  так  называемые  драйвера
устройств.  Например,  Linux  имеет драйвера устройства для нескольких
марок  Ethernet плат которые очень похожи по выполняемым функциям. Они
известны  как  "Becker  Series  Drivers" ,и называются так по имени их
автора,  Donald  Becker.  Другой  пример  -  D-link  драйвер,  который
работает  с  адаптером  D-link пакетов, присоединяемым к параллельному
порту.

     Но,  что  мы подразумиваем, когда говорим что драйвер "управляет"
устройством?  Давайте  вернемся  к  Ethernet  плата,  которую  мы  уже
упоминали.  Драйвер  должен  быть  способен работать с переферией этой
платы: он должен посылать команды и данные плате, в то время как плата
должна передать полученные данные драйверу.

     В PC, эта связь устанавливается через область памяти ввода-вывода
которая  является  отображением  регистров  платы и т.п. Все команды и
данные  которые  ядро  посылает плате проходят через эти регистраторы.
Память  ввода-вывода  описывается  указанием начального(или основного)
адреса Типичные основные адреса для Ethernet плат 0x300, или 0x360.

     Обычно,  Вы не должны волноваться относительно проблем аппаратных
средств,  типа  основного  адреса,  потому  что ядро делает попытку во
время   загрузки   обнаружить  местоположение  платы.  Это  называется
autoprobing(автоматический  поиск), который означает что ядро во время
загрузки  считывает  несколько  участков памяти и сравнивает считанные
данные  с  тем,  что  должны  быть, если установлена Ethernet. Однако,
существуют   Ethernet  платы,  которые  ядро  не  может  автоматически
обнаружить; это часто случается с дешевыми Ethernet картами.

     Также,  во  время загрузки, ядро будет пытаться обнаружить только
одно  Ethernet  устройство. Если вы используете больше чем одну плату,
Вы должны явно сообщить ядру об этой плате.

     Другой  параметр,  который Вы могли бы сообщить ядру -- interrupt
request  channel  (канал  прерывания  запроса).  Компоненты аппаратных
средств  обычно  прерывают  ядро  когда  они  нуждаются  во  внимании,
например  когда  прибыли  данные,  или произошли другие события. В PC,
прерывание может происходить на одном из 15 каналов (0, 1, 3 и до 15).
Номер  прерывания назначенный компоненту аппаратных средств называется
interrupt request channel или IRQ.

     Как  описано  в главе 3., ядро обращается к устройствам через так
называемый интерфейс. Интерфейсы предлагают абстрактный набор функций,
которые  являются стандартными для всех типов аппаратных средств, типа
посылки или получения дэйтаграм.

     Интерфейсы   идентифицируются   посредством   имен.   Эти   имена
определенны  внутри  ядра,  это  не файлы устройств в директории /dev.
Типичные  имена  для  интерфейсов  Ethernet.  -  eth0,  eth1,  и  т.д.
Назначение  интерфейсов  для  определенных устройств обычно зависит от
способа,   которым   устройства   конфигурированы;   например   первая
установленная  Ethernet  плата  станет  eth0, следующая -- eth1, и так
далее.   Исключение  из  этого  правила  -  SLIP  интерфейсы,  которые
назначаются  динамически;  То  есть  всякий раз, когда устанавливается
SLIP связь, последовательному порту назначается интерфейс

     Картинка  пробует  показать  связь  между аппаратными средствами,
драйверами устройств и интерфейсами.

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

     This processor honours the WP bit even when in supervisor mode. Good.
     Floppy drive(s): fd0 is 1.44M
     Swansea University Computer Society NET3.010
     IP Protocols: ICMP, UDP, TCP
     PPP: version 0.2.1 (4 channels) OPTIMIZE FLAGS
     TCP compression code copyright 1989 Regents of the University of California
     PPP line discipline registered.
     SLIP: version 0.7.5 (4 channels)
     CSLIP: code copyright 1989 Regents of the University of California
     dl0: D-Link DE-600 pocket adapter, Ethernet Address: 00:80:C8:71:76:95
     Checking 386/387 coupling... Ok, fpu using exception 16 error reporting.
     Linux version 1.1.11 (okir@monad) #3 Sat May 7 14:57:18 MET DST 1994

     Здесь  показано что ядро компилировалось с TCP/IP, и с драйверами
для  SLIP,  CSLIP,  и  PPP.  Третья  строка  c  низу сообщает, что был
обнаружен  адаптер d-link, и он установился как интерфейс dl0. Если Вы
имеете  Ethernet  карту,  ядро  обычно печатает строку, начинающуюся с
eth0,  и  сопровождаемую  типом  обнаруженной  карты.  Если  Вы имеете
Ethernet  карту,  но  не  увидели это сообщение, это означает что ядро
неспособно обнаружить вашу плату. Об этом мы поговорим позже.

4.2. Конфигурирование ядра

Большинство Linux распространяются вместе с загрузочными дискетами, работующими со всеми основными типами аппаратных средств PC. Это означает что ядро на этих дискетах имеет все виды драйверов, многие из которых Вам никогда не пригодятся, но занимают драгоценную память системы потому что части ядра не свопируются. Поэтому, Вы должны собрать ваше собственное ядро, включая только необходимые Вам драйвера. При управлении Linux системой, Вы должны быть знакомы со строением ядра. Основы этого объясняются в "Installation and Getting Started" написанной Matt Welsh, который является также частью проекта Linux документации. Потому, в этой секции мы будем обсуждать только те стороны конфигурации Linux, которые относятся к сети. При запуске make config, сначала Вас спрашивают общие вопросы конфигурации, например хотите ли Вы в ядре иметь математический эмулятор или нет, и т.д.. Один из этих вопросов -- хотите ли Вы поддержку TCP/IP сети. Вы должны ответить y, чтобы получить ядро способное работать с сетью. 

4.2.1. Опции ядра в Linux 1.0 и выше

После того, как основная часть вопросов задана, конфигуратор продолжит спрашивать Вас относительно различных особенностей типа SCSI драйверов, и т.д.. Последующий список вопросов относится к проблемам поддержки сети. Точный набор опций конфигурации постоянно меняется, из-за продолжающейся разработки. Типичный список опций предлагаемых большинством версий ядра (в основном в 1.0 1.1) напоминает этот ( комментарии даются italics шрифтом): * * Network device support * Network device support? (CONFIG ETHERCARDS) [y] Несмотря на макро название указанное в скобках, Вы должны ответить на этот вопрос y, если Вы хотите использовать любой тип сетевых устройств, независимо от того является ли оно Ethernet, SLIP, или PPP. При ответе y, поддержка для устройств Ethernet-типа разрешается автоматически. Поддержку для других типов сетевых драйверов нужно разрешить отдельно: SLIP (serial line) support? (CONFIG SLIP) [y] SLIP compressed headers (SL COMPRESSED) [y] PPP (point-to-point) support (CONFIG PPP) [y] PLIP (parallel port) support (CONFIG PLIP) [n] Эти вопросы касаются различных протоколов связи поддерживаемых Linux. SLIP позволяет Вам транспортировать IP дэйтаграмы через последовательные линии. Опция сжатия заголовков обеспечивает поддержку CSLIP, позволяющий сжимать TCP/IP заголовки всего в три байта. Обратите Внимание что эта опция ядра не включает CSLIP автоматически, она просто обеспечивает необходимые функции для него. PPP - другой протокол для построения сетей на последовательными линиях. Он еще более гибок чем SLIP, и не ограничен только IP, но также поддерживает IPX. Так как поддержка PPP была закончена только недавно, эта опция может быть не представлена в вашем ядре. PLIP обеспечивает пересылку IP дэйтаграм через параллельный порт. Он главным образом используется для того чтобы связаться с PC под управлением DOS. Следующие вопросы имеют отношение к Ethernet платами от различных поставщиков. Чем больше становится драйверов, тем больше станет вопросов. Если вы конфигурируете ядро для нескольких различных машин, Вы можете установить больше чем один драйвер. NE2000/NE1000 support (CONFIG NE2000) [y] WD80*3 support (CONFIG WD80x3) [n] SMC Ultra support (CONFIG ULTRA) [n] 3c501 support (CONFIG EL1) [n] 3c503 support (CONFIG EL2) [n] 3c509/3c579 support (CONFIG EL3) [n] HP PCLAN support (CONFIG HPLAN) [n] AT1500 and NE2100 (LANCE and PCnet-ISA) support (CONFIG LANCE) [n] AT1700 support (CONFIG AT1700) [n] DEPCA support (CONFIG DEPCA) [n] D-Link DE600 pocket adaptor support (CONFIG DE600) [y] AT-LAN-TEC/RealTek pocket adaptor support (CONFIG ATP) [n] * * CD-ROM drivers * Наконец, в секции файловой системы, скрипт конфигурации спросит Вас хотите ли Вы поддержку NFS. NFS позволяет Вам экспортировать файловые системы с других хостов, так что файлы и директории кажутся находящимися на одной машине. NFS filesystem support (CONFIG NFS FS) [y] 

4.2.2. Опции ядра в Linux 1.1.14 и выше

При запуске Linux 1.1.14, в который добавили поддержку IPX, процедура конфигурации слегка изменена. Общая секция опций теперь спросит хотите ли Вы поддержку сети вообще. Что немедленно сопровождается парой вопросов о разных сетях. * * Networking options * TCP/IP networking (CONFIG INET) [y] Чтобы использовать TCP/IP сеть, Вы должны ответить на этот вопрос y. Если Вы отвечаете n, Вы будете все еще способны собирать ядро с поддержкой IPX. IP forwarding/gatewaying (CONFIG IP FORWARD) [n] Вы должны здесь ответить Y, если ваша система действует как gateway между двумя Ethernet, или между Ethernet и SLIP, и т.д.. Хотя не причинит вреда установить ее по умолчанию, но чтобы отконфигурировать хост как так называемый firewall, вы должны ответить здесь нет. Firewalls -- хосты которые связаны с двумя или больше сетями, но не позволяют им общаться. Обычно они используются чтобы обеспечить пользователям сетей с доступом к Internet минимальный риск проникновения из вне. Пользователям позволяется входить на firewall и работать с Internet, но машины компании будут защищены от нападений из вне, потому что любые внешние хосты не могут пересечь firewall. * * (it is safe to leave these untouched) * PC/TCP compatibility mode (CONFIG INET PCTCP) [n] Эта опция работает с несовместимостью с некоторыми версиями PC/TCP, коммерческими TCP/IP выполненными для DOS. Если Вы разрешаете эту опцию, Вы все еще будете способны общаться с нормальной Unix машиной, но она вредна для медленных соединений. Reverse ARP (CONFIG INET RARP) [n] Эта функция включает RARP. RARP используется бездисковыми клиентами и X-терминалами во время загрузки для запроса своего IP адрес. RARP необходим только для работы с этими клиентами. Самый последний пакет сетевых утилит (net-0.32d) содержит небольшую утилиту rarp которая позволяет Вам добавлять системы в RARP кэш. Assume subnets are local (CONFIG INET SNARL) [y] При посылки данных по TCP ядро, перед передачей их IP, должно разбивать поток на несколько пакетов. Большие пакеты используются для работы в локальной сети типа Ethernet, меньшие в случае, когда данные посылаются куда-то далеко. Если Вы запрещаете SNARL, ядро будет работать только с локальными сетями, к которым он непосредственно подключен. Так, если Вы посмотрите на сеть класса B в Groucho Marx Университете, там большинство хостов подключены к только одному или двум подсетям. Если Вы разрешаете SNARL, ядро будет предполагать что все подсети местные и используют большие пакеты при разговоре с всеми хостами в университетском городке. Если Вы хотите использовать меньшие размеры пакетов для данных посланных определенным хостам (потому что, например, данные проходят через SLIP связь), Вы можете cделать это используя mtu опции маршрутизации, которые кратко обсуждены в конце этой главы. Disable NAGLE algorithm (normally enabled) (CONFIG TCP NAGLE OFF) [n] Правила Nagle используются чтобы избежать посылки маленьких IP пакетов, также названные tinygrams. Tinygrams обычно создаются диалоговыми сетевыми программами, которые передают отдельные символы, типа telnet или rsh. Tinygrams может стать особенно неудобными при связи по узкополосным линиям. Nagle алгоритм пытается избегать их сдерживая при некоторых обстоятельствах передачу TCP данных. Вам стоит отключить Nalge алгоритм, только если у вас есть серьезные проблемы с получением пакетов. The IPX protocol (CONFIG IPX) [n] Это опция включает поддержку IPX, транспортный протокол используемый Novell сетями. Он все еще в разработке и не очень полезен. Единственная польза -- обмен данными с IPX утилитами DOS и передача данных между вашими novell сетями через PPP связь. Поддержка протоколов высокого уровня для Novell сети в обозримом будущем не будет, так как спецификации бесплатно не достать. В ядре 1.1.16, Linux поддерживается еще один тип драйвера, dummy driver (фиктивный драйвер). Следующий вопрос появляется в начале секции драйверов устройств. Dummy net driver support (CONFIG DUMMY) [y] Фиктивный драйвер в действительности делает немного, но весьма полезен на автономном или SLIP хосте. Это в основном замаскированный loopback интерфейс. Этот вид интерфейса нужен на хостах, которые имеют SLIP но не имеют Ethernet, но хотят иметь интерфейс, который все время держит ваш IP адрес. Чуть больше он обсуждается в секции 6.7.7 в главе 6 .. 

4.3. Путешествие по сетевым устройствам Linux

Linux ядро поддерживает несколько драйверов для различных типов оборудования. Эта секция дает краткий обзор семейств доступных драйверов, и имен интерфейсов, используемых для них. В Linux имеются ряд стандартных имен интерфейсов, которые описаны ниже. Большинство драйверов поддерживают больше чем один интерфейс, тогда интерфейсы перечисляются как в eth0, eth1, и т.д.. lo локальный интерфейс для loopback. Он используется для отладки, а также парой сетевых приложений. Он работает подобно замкнутому циклу, возвращая все дэйтаграмы, переданные ему, сетевому уровню того же хоста. В ядре имеется всего одно loopback устройство, и нет большого смысла в наличии меньшего или большего количества. ethn n-ая Ethernet карта. Это имя интерфейса генерируется для большенства Ethernet плат. dln Это интерфейс доступа к D-Link DE-600 пакетному адаптеру (другое Ethernet устройство). Разница в том, что DE-600 работает через параллельный порт. sln n-ый SLIP интерфейс. Первая последовательная линия отконфигурируемая под SLIP становится sl0, и т.д.. Ядро поддерживает до четырех SLIP интерфейсов. pppn n-ый PPP интерфейс. Подобно SLIP интерфейсам, PPP интерфейс связан с последовательной линией, если только она отконфигурирована для PPP. В настоящее время поддерживается до четырех интерфейсов. plipn n-ый PLIP интерфейс. PLIP транспортирует IP дэйтаграмы по параллельным линиям. Поддерживается до трех PLIP интерфейсов. Они устанавливаются PLIP драйвером при загрузке системы, и отображают параллельные порты. Для других драйверов интерфейса, которые могут быть добавлены в будущем, подобно ISDN или AX.25, будут предоставлены другие имена. В следующих секциях, мы будем обсуждать детали использования драйверов описанных выше. 

4.4. Установка Ethernet

Сейчас Linux поддерживает различные марки Ethernet карт. Больше всего драйверов были написаны Donald Becker (becker@super.org). Он автор семейства драйверов для карт основанных на National Semiconductor 8390 чипе; они стали известными как серия Becker драйверов. Имеются также драйвера для пары изделий для D-Link, среди них D-Link адаптер, который предлагает доступ к Ethernet через паралельный порт. Драйвер для этот был написан Bjrn Ekwall (bj0rn@blox.se). DEPCA драйвер был написан David C. Davies (davies@wanton.lkg.dec.com). 

4.4.1. Прокладка Ethernet кабеля.

Если вы устанавливаете Ethernet впервые в вашей жизни, несколько сказанных здесь слов могут быть вам полезны. Ethernet - очень чувсвителен к правельности прокладки кабеля. Кабель должен с обоих концов закрыватся 50 Омным резистором и не каких ответвлений. Если Вы используете тонкий кабель с T-образными BNC переходами, эти переходы должны быть вкручены непосредственно в плату. Если Вы используете толстый кабель, Вы должны присоеденять ваш хост через transceiver. Вы можете воткнуть transceiver непосредственно AUI порт на вашей плате, но можете также использовать кусок кабеля. 

4.4.2. Поддержка платы

Полный список поддерживаемых плат доступен в Ethernet HOWTOs расположенных на comp.os.linux.announce Paul Gortmaker. Вот список наиболее широко известных платы, поддерживаемых Linux. Полный список в HOWTO приблизительно в три раза длиннее. Однако, даже если Вы нашли вашу плату в этом списке, проверите сначала HOWTO; иногда существуют важные детали относительно работы этих карт. На пример, некоторые DMA-основанные Ethernet платы используют тот же самый DMA канал что и Adaptec 1542 SCSI контролер. Если Вы не переместите один из них на другой DMA канал, не удивляйтесь, что ваша Ethernet плата пишет данные в произвольные места вашего жесткого диска. 3Com EtherLink поддерживаются и 3c503 и 3c503/16, как - 3c507 и 3c509. 3c501 также поддерживается, но слишком медленна, чтобы ее покупать. Novell Eagle NE1000 и NE2000, и разнообразные клоны. NE1500 и NE2100 также поддерживаются. Western Digital/SMC WD8003 и WD8013 ( то же самое что SMC Elite и SMC Elite Plus) поддержана также и более новая SMC Elite 16 Ultra. Hewlett Packard HP 27252, HP 27247B и HP J2405A. D-Link DE-600 pocket adaptor, DE-100, DE-200, и DE-220-T.. Имеется также комплект для DE-650-T, который является PCMCIA картой. (4) DEC DE200 (32K/64K), DE202, DE100, и DEPCA rev E. Allied Teliesis AT1500 and AT1700. Чтобы использовать одну из этих карт, Вы можете использовать ядро от одной из главных Linux дистрибуций. Они вообще имеют драйвера для всех из них. Однако, лучше собрать ваше собственное ядро и собирать с единственном драйвером, в котором Вы фактически нуждаетесь. 

4.4.3. Автоматическое определение Ethernet

Во время загрузки, Linux попробует найти вашу плату и определить ее тип. Карты ищутся по следующим адресам и в следующем порядке: ------------------------------------------------------ +--------------+-------------------------------------+ |карта | адреса поиска | +--------------+-------------------------------------+ |WD/SMC | 0x300, 0x280, 0x380, 0x240 | |SMC 16 Ultra | 0x300, 0x280 | |3c501 | 0x280 | |3c503 | 0x300, 0x310, 0x330, 0x350, 0x250, | | | 0x280, 0x2a0, 0x2e0 | |NEx000 | 0x300, 0x280, 0x320, 0x340, 0x360 | |HP | 0x300, 0x320, 0x340, 0x280, 0x2C0, | | | 0x200, 0x240 | |DEPCA | 0x300, 0x320, 0x340, 0x360 | +--------------+-------------------------------------+ +--------------+-------------------------------------+ Имеются два ограничения autoprobing. Во первых, он может не распознавать все платы должным образом. Это особенно касается некоторых из дешевых клонов известных плат, а также для некоторых WD80x3 плат. Вторая проблема состoит в том, что ядро находит не больше одной платы. Если Вы используете больше чем одну плату, или если autoprobe не в состоянии обнаружить вашу плату, Вы должны явно сообщить ядру основной адреса карты и имя. В Net-3, для этого Вы может использовать две различных схемы Один путь состoит в том, чтобы изменить или добавить информацию в файл drivers/net/Space.c в исходном коде ядра, который содержит всю информацию относительно драйверов. Это рекомендуются только, если Вы знакомы с сетевым кодом. Лучший путь состoит в том, чтобы обеспечить ядро этой информацией при загрузке. Если Вы используете lilo для загрузки вашей системы, Вы можете передавать параметры ядру, определяя их через опцию в lilo.conf. Чтобы сообщить ядру о Ethernet устройстве, Вы можете передавать следующий параметр: ether=irq,base addr,param1,param2,name Первые четыре параметра числовые, в то время как последний - имя устройства. Все числовые значения необязательные; если они опущены или равны нолю, ядро будет пробовать само обнаружить эти значения или использует значение установленное по умолчанию. Первый параметр устанавливает IRQ для устройства. Если он не указан, ядро будет пробовать обнаружить IRQ канал само. 3c503 драйвер имеет специальную особенность, которая позволяет ему выбирать свободный IRQ (из 5, 9, 3, 4) и конфигурировать плату для использования этой линии. addr параметр задает основной адрес ввода-вывода платы; значение ноль сообщает ядру исследовать адреса внесенные в следующий список. Следующие два параметра могут использоваться по-разному различными драйверами. Для плат с разделяемой памятью типа WD80x3, они определяют начальный и конечный адреса разделенной области памяти. Другие карты обычно используют param1 чтобы устанавливать уровень отладочной информации. От 1 до 7 обозначают увеличивающиеся уровни подробности, в то время как 8 выключает их; 0 обозначает значение установленное по умолчанию. 3c503 драйвер использует param2 чтобы выбрать внутренний transceiver (установленный по умолчанию) или внешний transceiver ( значение 1). Первый использует BNC; последний -- AUI порт. Если Вы имеете две Ethernet платы, Вы можете одну плату определять автоматически, а параметры второй платы с помощью lilo. Однако, Вы должны удостоверился, что драйвер случайно не находит вторую плату, в то время как первая не будет регистрироваться вообще. Это можно сделать, указывая в lilo избегать исследовать пространство ввода-вывода занятое второй платой. Например, прося Linux установить вторую Ethernet плату в 0x300 как eth1, Вы бы передали следующие параметры к ядру: Reserve=0x300,32 ether=0,0x300, eth1 reserve опция требует чтобы никакие драйверы не трогали при исследование пространство ввода-вывода некоторого устройства. Вы можете также использовать параметры ядра для управления авто поиском: Reserve=0x340,32 ether=0,0x340, eth0 Чтобы выключить autoprobing вообще, Вы можете определить addr в -1: Ether=0,-1, eth0 

4.5. PLIP Драйвер

PLIP основан на IP для параллельных линий и используется, если необходимо соединить две машины. Он использует параллельный порт и специальный кабель и позволяет достигать скоростей от 10Кбит/cек до 20Кбит/сек. PLIP был первоначально разработан компанией Crynwr. Довольно оригинальный проект: в течение длительного времени параллельные порты в PC использовались в основном для принтеров; то есть восемь линий использовались только чтобы послать данные с PC на периферийное устройство и никуда больше. PLIP работает, обходя это ограничение, используя пять линий состояний порта для ввода, что позволяет передавать по пол-байта за раз между машинами. Этот режим работы называется mode zero PLIP (0 способ PLIP). Сегодня, эти однонаправленные порты кажется больше нигде не используются. Поэтому, имеется также PLIP расширение, названное способом 1 который использует полный 8 разрядный интерфейс. В настоящее время, только Linux поддерживает 0 способ. В отличии От более ранних версий PLIP, теперь он пытается быть совместимым с PLIP сделанным на Crynwr, а также PLIP драйвером в NCSA telnet. Чтобы соединить две машины использующие PLIP, Вам требуется специальный кабель -- "Null Printer" или "Turbo Laplink" кабель. Вы можете сделать его и сами. Приложение 20.3 описывает как. РLIP поддерживало большое количество людей. В настоящее время его поддерживает Niibe Yutaka. Если PLIP компилируется в ядро, он устанавливает сетевой интерфейс для каждого из возможных портов принтера, plip0 соответствует параллельному порту lp0, plip1 -- lp1, и т.д.. В настоящее время интерфейсы отображаются на порты следующим образом: -------------------------------- +-----------+-----------+------+ | Интерфейс | I/O порт | IRQ | +-----------+-----------+------+ |plip0 | 0x3BC | 7 | |plip1 | 0x378 | 7 | |plip2 | 0x278 | 5 | +-----------+-----------+------+ +-----------+-----------+------+ Если Вы отконфигурировали ваш порт принтера по-другому, Вы должны изменить эти значения в drivers/net/Space.c в исходниках ядра Linux, и собрать новое ядро. Этот отображение не означает, однако, что Вы не можете использовать эти параллельные порты как обычные. PLIP драйвер обращается к ним только, когда соответствующий интерфейс отконфигурирован. 

4.6. SLIP и PPP Драйвера

SLIP (Serial Line IP), и PPP ( Point-to-Point Протокол ) - широко используемые протоколы для посылки IP пакетов через последовательное соединение. Ряд учреждений предлагают телефонный SLIP и PPP доступ на машины которые находятся в Internet, таким образом обеспечивая IP частным лицам. Чтобы запустить SLIP или PPP, не требуется модификации аппаратных средств. Вы можете использовать любой последовательный порт. Более подробно об этом написано в главе 5. 

5. Установка последовательных аппаратных средств

Ходят слухи, что где-то там существуют люди, которые имеют только один PC и не имеют денег на T1 Internet соединение. Чтобы получить свою ежедневную дозу новостей и почты, они полагаются на SLIP связь, UUCP сети, и системы информационных табло (BBS), которые используют телефонные сети. Эта глава написана для всех тех людей, кто полагается на модемы. Однако, существует большое количество деталей, в которые мы не будем вдаваться, например как конфигурировать ваш модем. Все эти темы будут охвачены в создающемся Serial HOWTO Greg Hankins, который регулярно отправляется по почте к comp.os.linux.announce. 

5.1. Коммуникационное программного обеспечения для модемной связи

Имеются ряд коммуникационных пакетов доступных для Linux. Многие из них -- это терминальные программы, которые позволяют пользователю на брать номер другого компьютера и работать как будто Вы сидите перед простым терминалом. Традиционная терминальная программа для Unix -- kermit. Имеются более удобные программы, которые поддерживают список телефонных номеров, языки для написания скриптов запросов и описания входа в удаленные системы, и т.д.. Один из них -- minicom, который близок к некоторый терминальным программам для DOS. Имеются также Х-основанные пакеты коммуникаций, например seyon. Также, доступны несколько linux-основанных BBS пакетов для людей, которые хотят управлять системой информационных табло. Некоторые из этих пакетов могут быть найдены на sunsite.unc.edu в /pub/Linux/system/Network. Кроме терминальных программ, имеется также программное обеспечение, которое использует последовательную связь в не интерактивном режиме для транспортировки данных к или от вашего компьютера. Преимущество этой техники в том, что требуется гораздо меньше времени, чтобы загрузить несколько дюжины килобайт автоматически, чем это мог бы отнять у Вас при чтении вашей почты интерактивно в некотором почтовом ящике на удаленной машине или при просмотре интересной информации на BBS. С другой стороны, она требует больше места на диске из-за большого количества бесполезной информации, которую Вы обычно получаете. Основной представитель этого вида программного обеспечения -- UUCP. UUCP -- это набор программы, которые позволяют копировать файлы с одного хоста на другой, выполнять программы на отдаленном хосте, и т.д.. Он часто используется для транспортировки почты или новостей в частных сетях. Ian Taylor's UUCP пакет, который работает под Linux, описан в следующей главе. Но есть и другое недиалоговое комуникационное программное обеспечение, например, используемое в Fido. Порты Fido приложений подобно ifmail также доступны. SLIP находится где-то посередине и используется как диалоговыми так и не-диалоговыми приложениями. Множество людей используют SLIP чтобы дозвонится до университетской сети или какого-либо другого общественного SLIP сервера, чтобы управлять FTP сессиями, и т.д.. SLIP может также использоваться для постоянной или полупостоянной связи сеть-сеть, хотя здесь полезен скорее ISDN. 

5.2. Представления последовательных устройств

Unix ядро обеспечивает обращение к последовательным устройствам, названым ttys. Это - сокращение от названия компании Teletype(tm), которая в прошлом был одним из основных изготовителей терминалов. Этот термин используется в настоящее время для любого основоного на символьных данных устройства. Повсюду в этой главе, мы будем использовать этот термин исключительно по отношению к устройствам ядра. В Linux существует три класса tty: (виртуальные) консоли, псевдо терминалы (подобные дуплексному каналу, используемому приложениями типа X11) и последовательные устройства. Последние также причисляется к ttys, потому что они позволяют создавать диалоговые сессии по последовательной связи; будь то интенсивно-зашитый терминал или удаленный компьютер соединенный с данным по телефонной линии. Ttys имеют ряд конфигурируемых параметров которые могут быть установлены с помощью ioctl запроса. Многие из них применяются только для последовательных устройств, так как они нуждаются в большой гибкости для того, чтобы работать с изменяющимися типами соединений. Среди наиболее видных параметров линии -- скорость линии и паритет. Но имеются также флаги для преобразования между верхним и нижним регистрами символов, и т.п. Tty драйвер может также поддерживать различные опции линии, которые заставляют драйвер вести себя совершенно по разному. На пример, SLIP драйвер для Linux может представляется в терминах специальных дисциплин. Существует также некоторая двусмысленность относительно того как измерять скорость линии. Правильно - bit rate(побитовое измерение), которое связано со скоростью линии измеренной в битах за секунду (или bps для краткости). Иногда, люди называют это Бод (Baud), что тоже верно. Эти два термина, однако, не взаимозаменяемы. Бод относит к физической характеристике некоторого последовательного устройства, а именно время за которое произошла передача импульса. Битовое измерение обозначает текущее состояние существующей последовательной связи между двумя точками, а именно средний число битов переданных за секунду. Важно знать что эти два значения обычно различны, поскольку большинство устройств кодируют больше чем один бит за электрический импульс. 

5.3. Доступ к последовательным устройствам

Подобно всем устройствам в Unix системах, последовательные порты доступны через специальные файлы, располагающиеся в директории /dev. Имеются два множества файлов устройств, связанных с последовательными драйверами, и для каждого порта, имеется один файл из каждого множества. В зависимости от файла к которому обращаются, устройство будет вести себя по-разному. Первые файлы требуются в случае, если порт используется для входа; они имеет главный номер 4, и файлы названы ttyS0, ttyS1, и т.д.. Вторые используется для выхода; файлы названы cua0, и т.д., и имеют главный номер 5. Незначительные номера одинаковы для обоих типов. Если ваш модем подключен к одному из портов от COM1 до COM4, незначительный номер будет номер COM порта плюс 63. Если ваша установка отлична от этой, например при использовании платы поддерживающей множество последовательных линий, пожалуйста обратитесь к Serial Howto. Предположим, что ваш модем находится на COM2. Таким образом незначительный номер будет 65, а главный номер для дозвона будет 5. Следовательно, должно иметься устройство cua1 которое имеет этот номер. Просмотрите список последовательный ttys в директрорие /dev. Колонки 5 и 6 должны показать главные и незначительные номера, соответственно: $ ls -l /dev/cua* crw-rw-rw- 1 root root 5, 64 Nov 30 19:31 /dev/cua0 crw-rw-rw- 1 root root 5, 65 Nov 30 22:08 /dev/cua1 crw-rw-rw- 1 root root 5, 66 Oct 28 11:56 /dev/cua2 crw-rw-rw- 1 root root 5, 67 Mar 19 1992 /dev/cua3 Если нет таких устройств, Вы должны создать их: войдите супер-пользователем и наберите # mknod -m 666 /dev/cua1 c 5 65 # chown root.root /dev/cua1 Некоторые Люди предлагают создание символической связи /dev/modem на ваше устройство модема, так, чтобы случайные пользователи не должны были запоминать несколько неинтуитивное cua1. Однако, Вы не можете использовать modem в одной программе, а реальное название файла устройства в другой. Это - потому что эти программы используют так называемые файлы замка (lock files) для обозначения того, что устройство используется. В соответствии с соглашением, имя файла замка для cua1, например, является LCK..cua1. Использование различных файлов устройства для того же самого порта приведет к тому, что программы окажутся не в состоянии распознавать файлы замка для каждого имени, и будут и использовать устройство в одно и то же время. В результате, оба приложения не будут работать вообще. 

5.4. Аппаратные Средства для последовательных линий.

Linux в настоящее время поддерживает разнообразные последовательные платы, которые используют стандарт RS-232. RS-232 в настоящее время наиболее общий стандарт для последовательных коммуникаций в мире PC. Хотя аппаратные средства handshake необязательны, но очень полезны. Они позволяют любой из двух станций сигнализировать о готовности получить данные или о том, что другая станция должна подождать пока приемник не обработает поступающие данные. Линии используемые для этот названы "Clear to Send" (Чистыми для посылки или CTS) и "Ready to Send"(Готовыми послать или RTS), соответственно, которые, объясняют второе название handshake аппаратных средств, а именно "RTS/CTS". В PC, интерфейс RS-232 обычно управляется UART чипом, полученным из 16450 чипа, или более новой его версии, NSC 16550A. Некоторые марки ( особенно внутренних модемов оборудованных набором чипов Rockwell) используют другие чипы, которые были запрограммированы, чтобы вести себя так же как 16550-ые. Главное различие между 16450 и 16550 то, что последний имеют FIFO буфер размером 16 Байт, в то время как первый только 1 байт Это делает 16450 подходящими для скорости в 9600 Бод, в то время как для больших скоростей требуются чипы совместимые с 16550. Кроме этих чипов, Linux также поддерживает 8250 чип, который был сделан специально для PC-AT. В стандартной конфигурации, ядро ищет четыре стандартных последовательных платы от COM1 до COM4. Они связываются с устройствами с незначительными номерами от 64 до 67, так как описано выше. Если Вы хотите отконфигурировать ваши последовательные порты по-другому, Вы должны установить Ted Tso's setserial команду в rc.serial скрипте. Этот скрипт должен вызываться из /etc/rc во время загрузки системы. Он использует setserial чтобы конфигурировать последовательные устройства. Типичный rc.serial скрипт напоминает это: # /etc/rc.serial - serial line configuration script. # # Do wild interrupt detection /sbin/setserial -W /dev/cua* # Configure serial devices /sbin/setserial /dev/cua0 auto irq skip test autoconfig /sbin/setserial /dev/cua1 auto irq skip test autoconfig /sbin/setserial /dev/cua2 auto irq skip test autoconfig /sbin/setserial /dev/cua3 auto irq skip test autoconfig # Display serial device configuration /sbin/setserial -bg /dev/cua* Пожалуйста обратитесь к документации, которая поставляется вместе с setserial для объяснения параметров. Если ваша последовательная карта не обнаружена, или setserial -bg команда показывает неправильные установки, Вы должны будете отконфигурировать его явно, используя правильные значения. Пользователи с внутренними модемами оборудованными Rockwell набором чипов как сообщается испытывают эту проблему. Так, например, UART чип называется NSC 16450, в то время как фактически это NSC 16550, Вы должны изменить конфигурационную команду для причиняющего неприятность порта /sbin/setserial /dev/cua1 auto irq skip test autoconfig uart 16550 Подобные опции существуют и для того чтобы изменить основной адрес, и IRQ COM порта. Пожалуйста обратитесь к man страницам, setserial(8). Если ваш модем поддерживает аппаратные средства handshake, Вы должны удостовериться, что вы разрешили работу сними. Большинство коммуникационных программ по умолчанию не пытаются этим пользоваться. Вы должны устанавливать его в ручную. Лучше всего это сделать в rc.serial скрипте, используя команду stty: $ Stty crtscts < /dev/cua1 Чтобы проверить действительно ли используется handshake $ Stty -a < /dev/cua1 Это команда выдаст Вам состояния всех флагов для данного устройства; флаг показанный с предшествующим минусом как и в -crtscts означает что флаг выключен. 

6. Конфигурирование TCP/IP сети

В этой главе, мы пройдем все шаги необходимые для создания TCP/IP сети на вашей машине. Начнем мы с назначения IP адресов и будем медленно проходить весь путь конфигурирования интерфейсов TCP/IP , и в конце рассмотрим несколько инструментов, которые весьма удобны для решения проблем с установкой сети. Большинство работ охваченных этой главой, Вы должны сделать только один раз. Впоследствии, Вы будете изменять конфигурационные файлы только в случае добавлении новой системы к вашей сети, или когда Вы повторно полностью переконфигурируйте вашу систему. Некоторые из команд конфигурирования TCP/IP, однако, должны выполнятся каждый раз когда загружается система. Это обычно делает /etc/rc скрипт. Обычно, специфическая сетевая часть этой процедуры содержится в скрипте названном rc.net или rc.inet. Иногда, Вы будете также видеть два скрипта названные rc.inet1 и rc.inet2, где вышеупомянутый скрипт инициализирует сетевую часть ядра, в то время как последние запускают основные сетевые приложения. Дальше я буду твердо придерживаться этой концепции. Ниже, Я буду обсуждать действия выполняемые в rc.inet1, в то время как приложения будут описаны в более поздних главах. После окончания этой главы, Вы должны установить последовательность команд, которые должным образом конфигурируют TCP/IP сеть на вашем компьютере. Вы можете заменить любые команды в rc.inet1 вашими командами, удостоверится что rc.inet1 выполняется при запуске системы, и перезагрузить вашу машину. Сетевые rc скрипты, которые вы получили наряду с вашим Linux должны быть хорошим примером. 

6.1. Установка файловой системы proc

Некоторые из инструментов конфигурации в Net-2 для связи с ядром используют файловую систему proc. proc -- интерфейс, разрешающий доступ к информации ядра времени выполнения через механизм похожий на файловую систему. Когда он установлен, Вы можете просматривать список его файлов и их содержание также как в любой другой файловой системе. Типичными представителями являются файл loadavg, который содержит среднее число загруженности системы и meminfo, который показывает текущее состояния памяти ядра и использование свопа. К этому, сетевой код добавляет сeтевую директорию. Она содержит ряд файлов, которые отображают состояние вещей типа ARP таблицы, TCP соединений, и таблиц маршрутизации. Большинство инструментов администрирования сети получают информацию из этих файлов. Proc файловая система (или procfs) обычно устанавливается во время загрузки в /proc. Самый лучший метод состoит в том, чтобы добавить следующую строку в /etc/fstab: # procfs mont point: none /proc proc defaults И выполнить "mount /proc" в вашем /etc/rc скрипте. Procfs в настоящее время отконфигурирован в большинстве ядер установленным по умолчанию. Если procfs нет в вашем ядре, Вы можете получить сообщение типа "mount: fs type procfs not supported by kernel". Тогда Вы должны будите повторно собрать ядро и ответить "да" когда вас спросят о поддержки procfs. 

6.2. Установка бинарников

Если Вы используете одну из пред-пакетных Linux дистрибуций, она вероятно содержит основные сетевые приложения и утилиты наряду с набором примеров. Единственный случай, когда Вам пришлось бы и устанавливать новые утилиты, тогда, когда Вы устанавливаете новый выпуск ядра. Поскольку в них иногда вносятся изменения в сетевом уровне, Вы должны будите модернизировать основные инструменты конфигурации. Это по крайней мере приводит к повторной компиляции, но иногда Вам может потребоваться последний набор бинарников. Они обычно распространяются вместе с ядром и находятся в архиве названном netXXX.tar.gz, где XXX - номер версии. Выпуск соответствующий Linux 1.0 -- 0.32b, самое последнее ядро ( 1.1.12 или позже ) требуют 0.32d. Если Вы хотите собрать и установить стандартные TCP/IP сетевые приложения самостоятельно, Вы можете получить исходники на большинстве Linux FTP серверов. Там лежат более или менее тяжело исправленные версий программ от Net-BSD и другие исходники. Другие приложения, типа Xmosaic, xarchie, или Gopher и IRC клиенты нужно получать отдельно. Большинство из них легко собирают, если Вы следуете всем инструкциям. Официальный FTP участок для Net-3 -- sunacm.swan.ac.uk, отраженный sunsite.unc.edu в system/Network/sunacm. Самый последний Net-2e комплект и бинарники к нему доступны на ftp.aris.com. Matthias Urlichs bsd сетевой код может быть взят на ftp.ira.uka.de в /pub/system/linux/netbsd. 

6.3. Другой пример

Для остатка этой книги, позвольте мне представить новый пример, который является менее сложным чем Groucho Marx Университет, и ближе к задачам, с которыми Вы будете фактически сталкиваться. Рассмотрим виртуальную пивоварню, маленькую компанию, которая варит пиво. Чтобы управлять этим бизнесом более эффективно, в пивоварне хотят создать сети из компьютеров, которые все оказались PC, управляемые Linux 1.0. На том же самом этаже, только через коридор, имеется виртуальная винодельня, которая работает рядом с пивоварней. Там используется собственный Ethernet. Весьма естественно, что две компании хотят связать свои сети. Как первый шаг, они хотят создать gateway, который будет передавать дейтограмы между двумя полсетями. Позже, они также за хотят иметь UUCP связь с внешним миром. В конечном счете, они захотят установить SLIP соединение чтобы соединяться иногда с Internet. 

6.4. Установка имени хоста

Большинство, если не все, сетевые приложения используют имя локального хоста, которое устанавливается к некоторому разумному значению. Чтобы установить имя хоста наберите # hostname name Существует общая практика использовать неквалифицированное имя хоста, то есть без указания названия области для него. Например, хосты в Виртуальной Пивоварне могли бы быть названы vale.vbrew.com, vlager.vbrew.com, и т.д.. Это их официальные, полностью квалифицированные имена области. Их локальные имена -- только первый компонент этого имени, типа vale. Однако, поскольку локальное имя часто используется для поиска IP адреса хоста, Вы должны удостоверится что resolver библиотека способна найти IP адрес данного хоста. Это обычно означает что Вы должны ввести имя в /etc/hosts ( см. ниже ). Некоторые Люди предлагают использовать команду domainname, чтобы развить идею ядра относительно имени области к остающейся части FQDN. Таким образом, Вы могли бы комбинировать вывод от hostname и domainname чтобы получить снова FQDN. Однако, это в лучшем случае правильно на половину . domainname вообще используется чтобы устанавливать NIS область хоста, которая может полностью отличатся от DNS области, к которой ваш хост принадлежит. NIS описан в главе 11 .. 

6.5. Назначение IP Адресов

Если Вы конфигурируете сетевое программное обеспечение для автономного действия (например, чтобы он мог запустить INN netnews программное обеспечение), Вы можете благополучно пропустить эту секцию, потому что Вы будете нуждаться в IP адресе только для интерфейса loopback, который всегда равен 127.0.0.1. Если Вы хотите соединить ваш хост с существующей сетью, Вы должны просить администраторов дать Вам IP адрес. При создании собственной сети, Вы должны назначать IP адреса самостоятельно как описано ниже. Хосты в пределах локальной сети обычно должны использовать адреса от той же самой логической IP сети. Если Вы имеете несколько физических сетей, Вы или должны назначить им различные сетевые номера, или использовать подсети, чтобы расколоть ваш диапазон IP адресов в несколько подсетей. Если ваша сеть не связана с Internet, Вы свободны выбрать любой правельный сетевой адрес. Вы только должны удостовериться, что выбрали его из классов A, B, или C, в противном случае большенство программ будут работать не правильно. Однако, если Вы намереваетесь в ближайшем будущем выйти в Internet, Вы должны получить официальный IP адрес. Самый лучший путь состoит в том, чтобы попросить вашего сетевого поставщика помочь Вам. Если Вы хотите получить сетевой номер только в случае когда вы выбираетесь в Internet, запросите бланк заявки на сетевой адреса от hostmaster@internic.net. Чтобы оперировать несколькими Ethernet (или другими сетями), Вы должны разбить вашу сеть в несколько подсетей. Обратите Внимание, что подсети требуются только в случае, если Вы имеете больше чем одну сеть; Point-to-point связь не учитывается. Например, если Вы имеете один Ethernet и один или более SLIP соединений с внешним миром, Вы не нуждаетесь в подсети. Причина этого объясняется в главе 8.. Как пример, менеджер сети пивоварни обращается к NIC за сетевым номером класс В, и получает 191.72.0.0. Чтобы разместить два Ethernet, он решает использовать восемь битов части хоста как дополнительные подсетевые биты. Это оставляет другие восемь битов для хоста, то есть по 254 хостов на каждой полсети. Он также назначает подсеть 1 пивоварне и 2 -- винодельне. Их соответствующие сетевые адреса таким образом 191.72.1.0 и 191.72.2.0. Сетевая маска 255.255.255.0. Vlager, который является gateway между двумя сетями, получил номер хоста, равный 1 на обоих из них, что дает ему IP адреса равные 191.72.1.1 и 191.72.2.1, соответственно. Картинка показывает две подсети, и gateway. Обратите Внимание что в этом примере Я использую сеть класса B для простоты; класс C сеть был бы более реалистичным. С новым сетевым кодом, деление на подсети не ограничено границами байта, так даже сеть класса C может быть раздроблена на несколько полсетей. Например, Вы могли бы использовать 2 бита части хоста для сетевой маски, что дает Вам четыре возможные подсети с 64 хостами на каждой.
                       Назад | Содержание | Вперед