ельных линий. Есть модификация SLIP -- CSLIP, или сжимаемый SLIP, который использует сжатие IP заголовков чтобы оптимизировать IP для относительно низкой пропускной способности последовательной связи. PPP, или Point-to-Point протокол -- еще один протокол для последовательных линий. PPP имеет еще большее число особенностей чем SLIP, включая стадии переговоров о начале связи. Его главное преимущество по сравнению SLIP, то что он не ограничивается только транспортировкой IP дэйтаграм, а предназначен для передачи любого типа дэйтаграм. - 23 - 2.3.6. Протокол Контроля Передачи (TCP) Но конечно, посылка дэйтаграм от одного хоста к другому это не все если Вы вошли на quark, Вы хотите иметь надежную связь между вашим процессом rlogin на erdos и процессе оболочки на quark. Таким образом, информация посылаемая туда и обратно должна быть разбита на пакеты отправителем, и повторно собираться в поток приемником. Хотя это кажется тривиальным, здесь появляется несколько достаточно сложных задач. Очень важно знать об IP, что он не надежен. Предположим что десять людей на вашем Ethernet начали загружать самый последний выпуск XFree86 с GMU FTP сервера. Такая активность может оказаться слишком большой для того чтобы gateway переварил ее, потому что он слишком медленен, и ограничен количеством памяти. Теперь если Вы пошлете пакет от quark, у sophus может не хватить места в буфере и поэтому он не сможет отправить этот пакет. IP решает эту проблему просто забывая про данный пакет. Пакет безвозвратно потерян. Таким образом ответственность за целостность данных перекладывается на поддерживающие связь хосты. Это происходит в соответствии c другим протоколом, TCP, или Протоколом Контроля Передачи, который надстраивается над IP для создания связи с проверкой целостности данных. Существенный плюс TCP то, что он использует IP, что создает иллюзию простой связи между двумя процессами на вашем хосте и отдаленной машине, так, что Вы не заботитесь о том как и по которому маршрут ваши данные фактически путешествуют. A TCP создает дуплексную связь, позволяющую одновременно как посылать так и получать информацию. Представте телефонную беседу. В TCP точки связи определяются IP адресами хостов , и номерами так называемых портов на каждом из хостов. Порты служат для определения процесса с которым устанавливается связь. Если опять обратится к примеру с телефоном, то IP адрес соответствует кодам городов, а номер порта местному номеру телефона. В примере с rlogin, приложение-клиент (rlogin) открывает порт на erdos, и соединяется с портом 513 на quark, который прослушивает rlogind сервер. Таким образом и устанавливает TCP связь. Используя эту связь, rlogind - 24 - выполняет процедуру определения прав доступа, и запускает оболочку. Стандартный ввод/вывод этой оболочки перенаправляются на TCP связь, таким образом все, набранное вами в rlogin на вашей машине будет передано через TCP поток на стандартный ввод оболочки. 2.3.7. Пользовательский протокол дэйтаграм(UDP) Конечно, TCP не единственный протокол пользователя в TCP/IP сетях. Хоть он и подходит для приложений подобных rlogin, но он излишне надежен и не нужен для приложений типа NFS. Вместо, него в них использует UDP, или протокол пользовательских дэйтаграм. Подобно TCP, UDP также позволяет приложению войти в контакт с приложением, обслуживающим определенный порт на отдаленной машине, но он не устанавливает связь для этого. Вместо этого, Вы можете использовать его чтобы посылать отдельные пакеты к месту назначения. Предположим, что Вы установили директорию TeX с центрального NFS сервера, galois, и Вы хотите просмотреть документ, описывающий как использовать LaTeX. Вы запускаете ваш редактор, который сначала читает указанный файл. Однако, требуется слишком много времени чтобы установить TCP связь с galois, послать файл , и повторять это снова. Вместо этого, на запрос посланный к galois, тот посылает файл в паре UDP пакетов, что происходит гораздо быстрее. Однако, UDP не приспособлен для борьбы с потерей пакетов. Этим приходится заниматься NFS. 2.3.8. Дополнительно о портах Порты могут рассматриваться как точки присоединения сетевых связей. Если приложение (сервер) хочет предложить некий сетевой сервис, оно ассоциирует себя с портом и ждет клиентов (это называется слушать порт). Клиент, который хочет использовать этот сервис получает порт на местном хосте и соединяется с портом сервера на отдаленном хосте. Важная особенность портов то, что пока существует связь между клиентом и сервером, другая копия сервера может присоединиться к тому же порту и ждать подключения других клиентов. Это разрешает, например, - 25 - несколько параллельных отдаленных входов на один и тот же хост, причем все используют один самый 513 порт. TCP способен отличать этим связи друг от друга, потому что они все прибывают от различных портов или хостов. Например, если Вы дважды войдете на quark от erdos, тогда первый rlogin клиент будет использовать местный порт 1023, а второй будет использовать порт 1022. Однако, будут соединяться с тем же самым портом 513 на quark. Этот пример показывает использование портов как пункты, где клиент входит в контакт с определенным портом чтобы получить определенное обслуживание. Клиенту необходимо знать надлежащий номер порта, соглашение о назначении этих номеров должно быть достигнуто между администраторами обеих систем. Для услуг которые широко используются, типа rlogin, эти номера должны устанавливаться централизованно. Этим занимается IETF (или Проектирующая задачи Internet сила), которая регулярно выпускает RFC статьи. Которые, среди прочего, назначают номера портов для общеизвестных услуг. Linux использует файл, в котором регистрируют названия доступного другим сервеса и номера портов, к которым определенный сервес прикреплен, называется он /etc/services. Он описан в секции 10.3. Стоит заметить, что хотя и TCP и UDP полагаются на порты, эти номера не находятся в противоречии. Это означает что TCP порт 513, например, отличается от UDP порта 513. Фактически, эти порты служат как точки доступа для двух различных услуг, а именно rlogin (TCP) и rwho (UDP). 2.3.9. Библиотека гнезд(socket) В Unixоидных операционных системах программное обеспечение, выполняющее все задачи и протоколы описанные выше, обычно является частью ядра, аналогично и в Linux. Интерфейс программирования наиболее общий для мира Unix - Библиотека Гнезд Berkeley. Свое название она получила из-за популярной аналогии которая рассматривает порты как гнезда(розетки). Она обеспечивает (bind(2)) запрос, который определяет отдаленный хост, транспортный протокол, и сервис, к которому программа может присоединится или слушать (используя connect(2), listen(2), and accept(2)). - 26 - Библиотека гнезд однако несколько более общая, она обеспечивает не только класс TCP/IPоснованных гнезд (AF INET гнезда), но также класс, который управляется локальной связью машины (AF UNIX класс). Некоторые версии могут также управляться другими классами типа XNS ( Система Организации Сети Ксерокса ) протокол, или X.25. В Linux, библиотека гнезд -- часть стандартной libc C библиотеки. В настоящее время, она поддерживает только AF INET и AF UNIX гнезда, но ведется работа над включением поддержки для Novell протоколов, так, чтобы в конечном счете один или больше классов гнезд для него были бы добавлены. 2.4. Linux сети Будучи результатом концентрации усилие программистов всего мира, Linux не был бы возможен без глобальной сети. Так что не удивительно, что уже на ранних стадиях разработки, несколько людей начали работать над сетевыми возможностями. UUCP появился в Linux почти с самого начала, а работа над tcp/ip-основанной сетью была начата осенью 1992, когда Ross Biro и другие создали то, что теперь стало известным как Net-1. Ross прекратил активную разработку в Мае 1993, Fred van Kempen начал работать над новой версией, переделывая главные части кода. Это усилие известно как Net-2. Первый общественный релиз, Net-2d, был сделан летом 1992 (как часть 0.99.10 ядра), и с тех пор поддерживался и расширялся несколькими людьми, наиболее сильно Alan Cox, как Net-2Debugged. После тяжелой отладки и многочисленных усовершенствований кода, он сменил название на Net-3. Эта версия кода в настоящее время включена в официальные выпуски ядра. Net-3 предлагает драйвера устройств для разнообразного Ethernet, а также для SLIP (для работы сети по последовательным линиям), и PLIP ( для параллельных линий). С Net-3, Linux получил TCP/IP приложения, которые очень хорошо ведут себя в локальной сети и часто работают быстрее некоторых коммерческих. Существует несколько проектов, развитие которых будет увеличивать многосторонность Linux. Драйвер для - 27 - PPP ( протокол point-to-point, другой способ работы по последовательным линиям), является в стадии Beta версии в настоящее время, а AX.25 драйвер для радио - в Alpha версии. Alan Cox создал драйвер для Novell's IPX протокола, но завершающие усилия для создания сети совместимой с Novell были отложены из-за нежелания Novell обеспечить необходимую документацию. Еще один проект - samba, свободный NetBIOS сервер, написанный Andrew Tridgell. 2.4.1. Другие пути развития В это время, продолжая разработку, Fred предложил Net-2e, в которой сильно пересмотрено вся структура организации сети. Во время написания этой книги, Net-2e все еще Beta программное обеспечение. Наиболее интересен в Net-2e - объединение DDI, Интерфейса Драйвера Устройства. DDI предлагает однотипный доступ и метод конфигурации для всех устройств сети и протоколов. Пока используется TCP/IP сеть написанная Matthias Urlichs, написавшего ISDN драйвер для Linux и FreeBSD. Для этого, он встроил BSD сетевой код в ядро Linux. В течение обозримого будущего, Net-3 скорее всего останется. Alan в настоящее время работает над AX.25 протоколом, используемого любителями радио. Несомненно, скоро будет разработан "модуль" для ядра, который позволит Вам добавлять драйвера к ядру не переустанавливая систему. Хотя эти различные реализации сети борются за обеспечение одного и того же сервеса, основные их различия находятся на уровне ядре и устройств. Поэтому, Вы не сможете отконфигурировать систему используя Net-2e ядро с утилитами от Net-2d или Net-3, и наоборот. Это относится только к командам, которые имеют дело с ядром; приложения и общие сетевые команды типа rlogin или telnet пойдут на любом из них. Однако, все эти различные версии сети не должны волновать Вас. Если Вы не участвуете в активной разработке, Вы не должны волноваться относительно версии сода TCP/IP. Официальные выпуски ядра будут всегда сопровождаться набором сетевых инструментов, которые являются - 28 - совместимыми с кодом представленным в ядре. 2.4.2. Где получить код Самая последняя версия сетевого кода может быть получена на различных анонимным FTP. Официальный 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. Самые последние ядра могут быть найдены на nic.funet.fi в /pub/OS/Linux/PEOPLE/Linus; sunsite и tsx-11.mit.edu отражают эту дерикторию. 2.5. Поддержка Вашей системы Повсюду в этой книге, мы в основном будем иметь дело с проблемами конфигурации и установки. Администрирование, однако, гораздо труднее-- после установки сервеса, Вы должны сохранить его работоспосбность Для большенства из них, будет необходимо достаточно мало внимания, в то время как некоторые, типа почты и новостей, требуют постоянного внимания. Мы будем обсуждать все это в более поздних главах. Абсолютный минимум в обслуживании -- регулярная проверка системы и просмотр log файлов на ошибки и необычные случаи. Вы конечно захотите сделать это с помощью написания административных скриптов и периодически запуская их. Исходная дистрибуция некоторых основных приложений, типа smail или C news, содержат такие скрипты. Вы должны только попросить их удовлетворить ваши потребности. Результат работы любого такого скрипта должен быть отправлена по почте администратору. По умолчанию, большенство приложений будут посылать сообщения об ошибках, обычную статистику, или резюме logfile к root. Этот имеет смысл только если Вы часто входите в систему под root; еще лучше, если почту root перенаправлять на ваше имя, как описано в главе 15. - 29 - Однако как бы тщательно Вы не конфигурировали ваш участок, по закону Мерфи проблемы обязательно появятся. Поэтому, при обслуживании системы от жалоб не отвертеться. Обычно, люди ожидают что администратор системы может по крайней мере быть найден через email как root, но имеются также другие адреса, которые обычно используются чтобы найти лицо ответственное за определенный аспект управления. Например, жалобы относительно сбоев в конфигурации почты будут обычно адресованы postmaster, а проблемы с системой новостей могут быть сообщены newsmaster или usenet. Обращения к hostmaster должны быть перенаправлены лицу отвечающему за основные услуги сети и службу имен DNS. 2.5.1. Безопасность системы Другой очень важный аспект администрирования системы в сети -- защита системы и пользователей от злоумышленников, которые могут вредить вам не только фальшивыми сообщениями, но и стиранием данных или нарушения секретности ваших пользователей. Мы будем yпоминать некоторые специфические проблемы при обсуждении случаев, когда они могут происходить, и предложим несколько общих способов защиты. Здесь мы будет обсуждать несколько примеров и основных методов обеспечения безопасности системы. Конечно, охваченные темы не могут решить всех проблем безопасности, с которыми вы столкнетесь; они просто служат иллюстрацией проблем, которые могут возникнуть. Поэтому, необходимо прочитать хорошую книгу по безопасности, особенно администратору сетевой системы. Simon Garfinkel "Практическая UNIX Безопасность" ( см. [ GETST "безопасность"]) -- очень рекомендую. Безопасность системы начинается с хорошего администрирования системы. Это включает в себя проверку собственности и разрешений всех жизненено важных файлов и каталогов, контроль использования привилигерованных прав, и т.д.. COPS программа, например, будет проверять вашу файловую систему и общие файлы конфигурации на необычных разрешения и другие аномалии. Также следует ввести определенные правила по созданию пользовательских паролей, которые позволяли бы уменьшить вероятность их подбора. Например, потребовать чтобы пароль имел по крайней мере пять букв, и содержал как верхние - 30 - так и низкие регистры и цифры. При создании сервиса доступного по сети, постарайтесь дать ему "наименьшие привилегии," удастовертесь что Вы не разрешаете ему делать вещи, которые не требуются для его работы. Например, Вы должны делать программы с привилегии root только, когда они действительно нуждаются в этом. Например, если Вы хотите разрешить бездисковым хостам загружаться от вашей машины, Вы должны обеспечить TFTP (тривиальный сервис передачи файла) так, чтобы они загружали основные файлы конфигурации из дириктории /boot. Однако, когда используется неограниченный TFTP, это позволяет любому прочитать общедоступные файлы с вашей машины. Если это не то, что Вы хотите, почему бы не ограничить TFTP сервис дирикторией /boot? По той же самой причине, Вы могли бы захотеть ограничить доступ к определенным услугам пользователям с определенных хостов. В главе 10., мы представляем tcpd, который делает это для разнообразных сетевых приложений. Другой важный пункт -- избегайте "опасного" программного обеспечения. Конечно, любое программное обеспечение, которое Вы используете может быть опасно, потому что программное обеспечение может иметь ошибки, так что умные люди могли бы использовать их чтобы получить доступ к вашей системе. Подобные вещи случаются и нет никакой полной защиты против этого. Эта проблема касается как бесплатного, так и коммерческого программного обеспечения. Однако, программы, которые требуют специальных привилегий несоизмеримо опаснее чем другие, потому что любая лазейка может иметь непоправимые последствия. Если Вы устанавливаете сетевую программу будте вдвойне осторожны и ничего не пропускаете в документации, чтобы случайно не нарушить безопасность системы. Вы не можете исключить того, что ваши предосторожности могут потерпеть неудачу, независимо от того насколько осторожный Вы были. Поэтому Вы должны удостовериться, что Вы обнаружите злоумышленников сразу же после их появления. Хорошее начало -- проверка log файлов системы, но злоумышленник вероятно умный человек, и будет удалять любые очевидные следы перед уходом. Однако, имеются инструменты подобно tripwire, которые позволяют Вам проверять жизненно важные системные файлы и регистрировать были ли их содержание или разрешения - 31 - изменены. Tripwire вычисляет различные сильные контрольные суммы по этим файлам и хранит их в базе данных. Потом контрольные суммы повторно вычисляются и сравниваются с сохраненными для обнаружения любых модификации. 2.6. Обзор следующих глав Следующие несколько глав будут иметь дело с конфигурированием Linux для TCP/IP сети, и с управлением некоторыми главными приложениями. Прежде чем пачкать наши руки редактированием файлов и подобными вещами мы немного исследуем IP в 3 главе. Если Вы уже знаете относительно IP маршрутизации, и как выполняется address resolution, Вы можете пропустить эту главу. Глава 4. Обсуждение основных проблем конфигурации, типа установка ядра и введения вашей Ethernet карты. Конфигурация ваших последовательных портов охвачена в отдельной главе, потому что их обсуждение не относится только к TCP/IP сети, но и к UUCP. Глава 6. Помогает Вам отконфигурировать вашу машину для TCP/IP. Она также описывает несколько полезных инструментов, которые Вы можете использовать для проверки и отладки ваших установок Следующая глава рассказывает как конфигурировать hostname resolution и объясняет как установить сервер имен. Это сопровождается двумя главами показывающими конфигурирование и использование SLIP и PPP. Глава 8. Объясняет как установить SLIP связь и дает детальные рекомендации по запуску программ, которые позволяют автоматизировать большинство необходимых шагов. Глава 9. охватывает PPP и pppd. Глава 10. Дает короткое представление о некоторых из наиболее важных сетевых приложений, типа rlogin, rcp, и т.д., Она также охватывает услуги inetd и описывает как Вы можете ограничить определенные услуги для набора каких-либо хостов. Следующие две главы обсуждают NIS, Сетевую Информационную Систему, и NFS, Сетевую Файловую Систему. NIS - полезный инструмент - 32 - для распространения административной информации типа паролей пользователя в локальной сети. NFS позволяет Вам распределить файлы между несколькими хостами в вашей сети. Глава 13. Дает Вам представление об администрированию Taylor UUCP, бесплатного UUCP пакета. Остаток книги посвящен детальному путешествию по электронной почте и Usenet Новостям. Глава 14. представляет Вам основные концепциям электронной почты, типа того как выглядит адрес электронной почты и как система обработки почты получает ваше сообщение Главы 15. И 16. Охватывают установку smail и sendmail, два агента транспортировки почты, которых Вы можете использовать в Linux. Эта книга описывает оба из них, потому что smail более легкий для установки (для начинающих), в то время как sendmail более гибок. Главы 17. И 18. Объясняют пути управления новостями в Usenet и как установить и использовать C news, популярный пакет программ для управления Usenet новостями. Глава 19. Кратко охватывает запуск NNTP daemon, чтобы обеспечить доступ к новостям для вашей локальной сети. Глава 20. Наконец показывает Вам как конфигурировать и обслуживать различные newsreader. . - 33 - 3. Проблемы TCP/IP сети Теперь обратимся к деталям того как вы будете присоединять вашу Linux машину к сети TCP/IP, включая работу с IP адресами, именами хостов, и чуть-чуть проблемы маршрутизации. Эта глава дает Вам основу, которая поможет Вам понять, что требуется для установки системы, в то время как следующие главы будут охватывать инструменты, с помощью которых это достигается. 3.1. Сетевой интерфейс Чтобы скрыть разнообразное оборудование, которое может использоваться в сетевой среде, TCP/IP определяет абстрактный интерфейс, через который можно обращаться к аппаратным средствам ЭВМ. Этот интерфейс предлагает набор действий который является одинаковым для всех типов аппаратных средств и в основном имеет дело с посылкой и получением пакетов. Для каждого переферийного устройства, которое Вы хотите использовать, в ядре должен быть представлен соответствующий интерфейс Например, Ethernet интерфейсы в Linux названы eth0 и eth1, а интерфейсы SLIP -- sl0, sl1, и т.д.. Эти названия интерфейса используются при конфигурировании, когда Вы хотите определить ядру специфическое физическое устройство. Они не имеют никакого назначения кроме этого. Чтобы работать в TCP/IP сети, данному интерфейсу должен быть назначен IP адрес, который служит как идентификатор при общении с остальным миром. Этот адрес различен в зависимости от названия интерфейса упоминаемого выше; если Вы сравниваете интерфейс с дверью, тогда адрес подобен пластине с именем, прикрепленной на ней. Конечно, имеются другие параметры устройства которые необходимо отрегулировать; один из них - максимальный размер дэйтаграм который может быть обработан данной частью аппаратуры, также называемый Maximum Transfer Unit, или MTU. Другие параметры будут представлены - 34 - позже. 3.2. IP адреса Kак упоминается в предыдущей главе, адреса понятные в соответствии c IP -- это 32-битовые числа. Каждая машине в данной сети должен быть назначена уникальный адрес. В локальной сети, которая не использует TCP/IP для связи с другими сетями, Вы может назначить эти номера согласно вашим персональным предпочтениям. Однако, для участков Inetrnet, номера назначаются NIC. Для более легкого чтения, IP адреса разбивают на четыре 8 битовых числа, названных octets. Например, quark.physics.groucho.edu имеет IP адрес 0x954C0C04, который записывается как 149.76.12.4. Этот формат часто называют dotted quad notation. Другая причина для такой записи то, что IP адреса разбиваются на номер сети, который написан в первых octets, и номер хоста, который является остатком. При обращении к NIC за адресами, Вы не получаете адрес для каждого отдельного хоста, которые Вы планируете поставить. Вместо этого, Вам дают сетевой номер, и позволяющий назначать машинам любые IP адреса из заданного таким образом диапазона. В зависимости от размера сети, хост часть можем быть меньшей или большей. В зависимости от различные потребностей имеются несколько классов сетей, определяющих различное разбиение IP адресов. Класс A включает сети от 1.0.0.0 до 127.0.0.0. Сетевой номер содержится в первом octet, что предусматривает 24 разрядную хост часть, сеть приблизительно из 1.6 миллион хостов. Класс B содержит сети от 128.0.0.0 до 191.255.0.0; сетевой номер находится в первых двух octets. Это предполагает 16320 сетей с 65024 хостами каждый. Класс C диапазон сетей от 192.0.0.0 до 223.255.255.0, с сетевой номер - 35 - содержится в первых трех octets. Это предполагает почти 2 миллиона сетей по 254 хоста. Классы D, E, и F Адреса попадающие в диапазон от 224.0.0.0 до 254.0.0.0 являются или экспериментальным, или сохранены для будущего использования и не определяют какую-либо сеть. Если мы вернемся к примеру в предыдущей главе, мы увидим что 149.76.12.4, адрес quark, относится к хосту 12.4 в сети 149.76.0.0 класса B. Вы можете заметить, что в вышеупомянутом списке для каждого octet в части хоста возможны не все значения. Это потому что номера хоста со всеми octets равными 0 или 255 сохранены для специальных целей. Адрес в котором все биты хост части -- ноль относится ко всей сети, а где все биты хост части 1 назван broadcast (широковещательным) адресом. Он относится ко всем хостам из указанной сети. Таким образом, 149.76.255.255 не существующий адрес хоста, он относится ко всем хостам сети 149.76.0.0. Имеются еще два зарезервированных адреса, 0.0.0.0 и 127.0.0.0. Первый назван default route(путь по умолчанию), последний loopback (кольцевым) адресом. default route используется при маршрутизации IP дэйтаграм, с которыми мы будет иметь дело ниже. Сеть 127.0.0.0 сохранена для IP работы внутри хоста. Обычно, адрес 127.0.0.1 будет назначен специальному интерфейсу на вашем хосте, так называемому интерфейсу loopback, который действует подобно закрытому кругообороту. Любой IP пакет переданный ему от TCP или UDP будет возвращен к ним как будто он только что прибыл из некоторой сети. Это позволяет тестировать сетевое программное обеспечение без использования "реальной" сети. Также он полезен, когда Вы хотите использовать сетевое программное обеспечение на автономном хосте. Например, большое количество UUCP участков не имеют IP связи вообще, но все же хотят управлять INN системой новостей. Однако для правильной работы под Linux, INN требует интерфейса loopback. 3.3. Address Resolution(поиск по адресу). - 36 - Теперь, когда вы видели как создаются IP адреса, Вы можете спросить как же они используются в Ethernet при адресации различных хостов? В конце концов Ethernet протокол опознает хосты по шести байтовому адресу, который не имеет абсолютно ничто общего с IP адресом. Именно поэтому необходим механизм, переводящий IP адреса в адреса Ethernet. Это так называемый Address Resolution Protocol (Протокол Решения Адреса), или ARP. Фактически, ARP не ограничен Ethernet, он используется и на сетях других типов. Идея, лежащая в основе ARP аналогична способу применяемому большинством людей, когда они хотят найти господина X. Они ходят по толпе и выкрикивают его имя. И если он там, он откликнется. Когда ARP хочет выяснять Ethernet адрес соответствующий данному IP адрес, он использует особенность Ethernet известную как "broadcast"(широковещательное), когда дэйтаграмы адресовываются одновременно всем станциям в сети. Широковещательная дэйтаграма посланная ARP содержит запрос с IP адресом. Каждый хост сравнивает его с собственным адресом, и если они совпадают, возвращает ARP-ответ на спрашивающий хост. Спрашивающий хост может теперь извлечь Ethernet адрес отправителя из этого ответа. Конечно Вы могли бы удивиться как хост может знать на котором из миллионов Ethernet во всем мире должен находить желаемый хост, и почему это вообще должен быть Ethernet. Все это называется Routing(маршрутизация), а именно выяснение физического местоположения хоста в сети. Это и будет темой следующей секции. Давайте пока еще поговорим об ARP. Если хост обнаружил Ethernet адрес, он сохранит его в ARP кэше, чтобы, когда в следующий раз потребуется послать дэйтаграму рассматриваемому хосту, не требовалось тратить время на его поиск. Однако, он не знает сохранить ли эту информацию навсегда; например, на удаленном хосте могут поменять Ethernet карту, так что хранимая информация окажется не верной. Что потребует через некоторое время еще раз полностью повторить описанную процедуру. - 37 - Иногда, также необходимо выяснять IP адрес связанный с данным Ethernet адресом. Это случается, когда бездисковая машина хочет загрузится с сервера по сети, что является весьма общей ситуацией для локальных сетей. Бездисковый клиент, однако, не имеет никакой информацию относительно себя кроме Ethernet адреса! Он посылает широковещательное сообщение содержащее просьбу к серверу сообщить ему его IP адрес. Для этого существует другой протокол, называемый Reverse Address Resolution Protocol (Реверсивный ARP), или RARP. А также BOOTP протокол, который служит для определения процедуры загрузки бездисковых клиентов по сети. 3.4. IP маршрутизация 3.4.1. IP Сети <> Когда Вы пишете письмо, Вы обычно помещаете на конверте полный адрес: страну, штат, почтовый индекс, и т.д.. После того, как Вы опускаете его в почтовый ящик, почта доставит его по месту назначения: оно будет послано обозначенной стране, чья национальное почта пошлет его в требуемый штат, и т.д.. Преимущество этой иерархической схемы довольно очевидно: Везде, где Вы отправляете по почте письмо, местный начальник почтового отделения будет точно знать, куда передать это письмо, и не должен заботиться, которым путем письмо будет путешествовать. IP сети построины подобным образом. Весь Inetrnet состоит из набора сетей, названных автономными системы. Каждая такая система производит всю маршрутизацию между своими членами так, что задача посылки дэйтаграм сведена к обнаружению пути к сети с требуемым хостом. Это означает, что как только дэйтаграма вручена любому хосту который находится в той же сети, обработка выполняется исключительно данной сетью. 3.4.2. Подсети Эта структура отражена в разбиении IP адреса на хост и сетевую части, как объяснено выше. ПО умолчанию, сеть мест назначения - 38 - получается из сетевой части IP адреса. Таким образом, хосты с идентичными IP адресами сети должны располагаться в пределах одной сети, и наоборот. (2) Имеет смысл предложить подобную схему также и внутри сети, так как она может состоять из набора сотен меньших сетей, где самыми маленькими единицами являются физические сети типа Ethernets. Поэтому, IP позволяет Вам поделить IP сеть на несколько подсетей. Подсеть принимает ответственность за доставку дэйтаграм для определенного диапазона IP адресов. Как с классами A, B, или C, она идентифицируется сетевой частью IP адресов. Однако, сетевая часть теперь расширена, чтобы включить некоторые биты от хост части. Число битов которые интерпритируются как номер в подсети задается так называемой subnet(подсетевой) маской, или netmask. Это - 32 разрядное число, которое определяет разрядную маску для сетевой части IP адреса. Сеть Groucho Marx Университета - пример такой сети. Она имеет класс B с сетевым номером 149.76.0.0, и netmask поэтому равен 255.255.0.0. Внутри, сеть GMU состоит из нескольких меньших сетей, типа локальных сетей различных отделов. Так что диапазон IP адресов разбит на 254 подсети, от 149.76.1.0 до 149.76.254.0. Например, отдел теоретической физики имеет номер 149.76.12.0. Университетский оптиковолоконный кабель тоже сеть с собственным номером 149.76.1.0. Эти подсети имеют одинаковый сетевой IP адрес, в то время как третья octet используется, чтобы различать их между собой. Таким образом они будут использовать подсетевую маску 255.255.255.0. Картинка 3.4.2 показывает как 149.76.12.4, адрес quark, интерпритируется по-разному когда адрес принят как обычный адрес сети класса B, и когда используется с подсетью. Стоит заметить что subnetting (так названа техника создания подсетей) -- чисто внутреннее дело сети. Подсети создаются сетевым владельцем ( или администратором). Часто, подсети создаются чтобы - 39 - отразить существующие границы, будь они физические (два Ethernets), административные (между двумя отделами) или географические. Однако, эта структура воздействует только на внутреннее поведение сети, и полностью невидима для внешнего мира. 3.4.3. Gateways Subnetting - не только организационная деление, но часто и естественное следствие границ аппаратных средств. Знания хоста о строении данной физической сети, типа Ethernet, являются очень ограниченными: Единственные хосты, с которыми они способны говорить непосредственно, те, что находятся в той же сети. Ко всем другим хостам они могут обращаться только через так называемый gateways. Gateway -- хост который связан с двумя или больше физическими сетями одновременно и конфигурирован так, чтобы перекачивать пакеты между ними. IP достаточно легко распознать находится ли хост на местной физической сети, различные физические сети должны принадлежать различным IP сетям. Например сетевой номер 149.76.4.0 сохранен для хостов в локальной сети математиков. При посылке дэйтаграм к quark, сетевое программное обеспечение на erdos немедленно видит по IP адресу, 149.76.12.4, что хост места назначения находится в другой физической сети, и поэтому может быть достигнут только через gateway (sophus по умолчанию). Sophus непосредственно связан с двумя отличными подсетями: отделом математики, и университетской магистралью. Они доступы через различные интерфейсы (eth0 и fddi0 соответственно). Но какой IP адрес мы ему назначаем? 149.76.1.0 или 149.76.4.0? Ответ: оба. При разговоре с сервером в локальной сети математиков, sophus использует IP адрес 149.76.4.1, а при разговоре с хостом на магистраль, он должен использовать 149.76.1.4. Таким образом, gateway получает по одному IP адресу на каждую сеть, к которой он подключен. Эти адреса (вместе с netmask) привязаны к интерфейсу через, который обращаются подсети. Таким образом, - 40 - интерфейсы и адреса sophus связаны так: ---------------------------------------- +-------+-------------+----------------+ | Интерфейс| адрес | Netmask | +-------+-------------+----------------+ +-------+-------------+----------------+ | Eth0 | 149.76.4.1 | 255.255.255.0 | | fddi0 | 149.76.1.4 | 255.255.255.0 | | Lo | 127.0.0.1 | 255.0.0.0 | +-------+-------------+----------------+ +-------+-------------+----------------+ Последняя запись описывает loopback интерфейс lo. На картинке 3.4.3 изображена топология части сети Groucho Marx Университета (GMU). Хосты, находящиеся в двух подсетях в то же самое время показываются с обоими адресами. Вообще, Вы можете не обращать внимание на различия между адресами хоста и интерфейса. Относитесь к адресу хоста, который находятся только в одной сети, как к адресу того и другого, хотя строго говоря это Ethernet интерфейс имеет IP адрес. Однако, это различие ощутимо только, когда Вы работаете с gateway. 3.4.4. Таблица маршрутизации Теперь сосредоточим наше внимание на том, как IP выбирает gateway при доставке дэйтаграм к определенной сети. Как мы видели раньше erdos, когда передавал дэйтаграмы для quark, проверил место назначения и нашел, что его нет в местной сети. Поэтому он посылает ее gateway, sophus, который теперь сталкивается с той же самой задачей. Sophus определяет, что quark не находится в сетях, с которыми он непосредственно связан, так что он передает эту дэйтаграм другому gateway, чтобы он перенаправил ее дальше. Правильный выбор был бы niels (gateway Отдела Физики). Но sophus нуждается в некоторой информации чтобы определить подходящий gateway. - 41 - Для этого используется таблица IP маршрутизации, которая определяет какие сети присоединены с помощью каких gateways. Обязательно должен быть указан маршрут по умолчанию (the default route), по которому будут направляться все пакеты с адресами в неизвестных сетях. Этот gateway связан с сетью 0.0.0.0.. На sophus, эта таблица могла бы напоминать эту: ----------------------------------------- +------------+-------------+------------+ | Сеть | Gateway | Интерфейс | +------------+-------------+------------+ +------------+-------------+------------+ | 149.76.1.0 | - | Fddi0 | | 149.76.2.0 | 149.76.1.2 | fddi0 | | 149.76.3.0 | 149.76.1.3 | fddi0 | | 149.76.4.0 | - | Eth0 | | 149.76.5.0 | 149.76.1.5 | fddi0 | |... | ... | ... | | 0.0.0.0 | 149.76.1.2 | fddi0 | +------------+-------------+------------+ +------------+-------------+------------+ Маршруты к сетям, с которыми sophus связан непосредственно обозначаются "-" в столбце gateway. Таблицы маршрутизации могут быть построены различными средствами. Для маленькой сети, наиболее эффективно строить их вручную и передавать их IP, используя маршрутизирующую команду во время загрузки системы. (см. главу 6.). Для больших сетей, они строятся и регулируются во время работы маршрутизирующих демонов; они запускаются на центральном хосте и обмениваются информацией с другими компьютерами для вычисления "оптимального" маршрута между членами сетей. В зависимости от размера сети используются различные протоколы маршрутизации. Для маршрутизации в автономной системе (типа университетского городка), лучше подходит RIP, Routing Information Protocol (протокол маршрутной информации), который предложен в BSD - 42 - демоне. Для маршрутизации между автономными системами используются внешние протоколы маршрутизации типа EGP (Внешний Gateway Протокол), или BGP ( Пограничный Gateway Протокол); они ( а также RIP) были предложены в gated демоне( University of Cornell's). 3.4.5. Метрические значения Динамическая маршрутизация основанная на RIP выбирает самый лучший маршрут к некоторому хосту или сети, основываясь на наборе "hops"(перелетов), то есть gateways дэйтаграм, рассылаемых перед передачей основной информации. Чем более короткий маршрут, тем лучше RIP его оценивает. Очень длинные маршруты с 16 или больше перелетов рассматриваются как неподходящие и отвергаются. Чтобы использовать RIP для управления информацией, маршрутизируемой внутри вашей сети, Вы должны запустить gated на всех хостах. Во время загрузки gated проверяет все активные сетевые интерфейсы. Если имеется больше чем один активный интерфейс ( не считая loopback ), это предполагает что хост передает пакеты между несколькими сетями, и будет активно обмениваться маршрутной информацией. Иначе, он будет только пассивно получать RIP пакеты и модернизировать локальную таблицу маршрутизации. Получив информацию от локальной таблицы маршрутизации, gated вычисляет длину маршрута по так называемому метрическому значению связанному с записью в таблице. Это метрическое значение задается администратором системы при конфигурировании маршрута и должна отражать фактическую трудоемкость использования этого маршрута. Поэтому, размер маршрута к подсети, с которой хост непосредственно связан, должно всегда быть установлено в ноль, в то время как ма