Введение в сети


Сеть — это способность двух и более компьютеров узнавать о существовании друг друга и обмениваться между собой данными. В век Internet сеть может предложить буквально все: и отправку электронной почты, и HTML-страницы с информацион-ного сервера, и большие мультимедийные файлы (типа видеофильмов), и музыку в mрЗ-формате. Таким образом, сферы применения сетевого компьютера значительно шире, чем предполагает тот комплект программ, который имеется в распоряжении пользователя. Появление сетей изменило способы ведения бизнеса и породило новые виды развлечений. По сути, Internet стал движущей силой компьютерной революции.

В наши дни почти все действующие компьютерные сети построены на основе стандартного стека (набора) протоколов TCP/IP. Набор протоколов TCP/IP, струк-тура которого детально рассматривается далее, прошел почти тридцатилетний путь развития. Универсальность и модульность данного стандарта способствовали его признанию и успешному распространению. Появление первой компьютерной сети ARPAnet (проект министерства обороны США), объединившей четыре компьютера в четырех разных западноамериканских университетах, датируется 1969 годом. Но протокол TCP/IP начинает свою историю только с 1974 года, с того самого момента, когда увидел свет документ под названием "Протокол для пакетной передачи данных по сети", написанный пионерами Internet — Винтом Серфом (Vint Cerf) и Бобом Каном (Bob Kahn). Вначале это была просто программа управления передачей дан-ных. Позднее она превратилась в два протокола — TCP (Transmission Control Protocol - протокол управления передачей) и IP (Internet Protocol — межсетевой протокол). Этот набор протоколов дал миру надежный способ отправки и приемки данных по сетям с пакетной коммутацией, чья полезность и пригодность находились в то время в процессе изучения. Затем, в 1977 году, в лаборатории Bell Labs были реализованы первые UNIX-системы, которые сыграли большую роль в популяризации этого стека протоколов. В его состав к этому времени вошли новые структурные уровни, пред-ставленные протоколами UDP (User Datagram Protocol, протокол пользовательских дейтаграм) и ICMP (Internet Control Message Protocol, протокол управления сообще-ниями в сети Internet).

Стек протоколов TCP/IP формирует базовую структуру Internet и определяет все ее атрибуты. Данный стандарт пока что является единственно возможным способом реализации глобальных сетей, чьи магистрали соединяют между собой города (WAN). И он же в большинстве случаев используется при построении локальных сетей (LAN), которые, в принципе, можно реализовать и на более простых протоколах. Так, мно-гие предприятия и университеты используют высокоскоростные сети на базе Ethernet. Протокол TCP/IP — многоуровневое коммуникационное решение.

Модель архитектуры TCP/IP рассматривает обмен данными как совокупность че-тырех наборов взаимозависимых процессов. Эти процессы сгруппированы в следую-щие 4 уровня: уровень приложений, транспортный уровень (взаимодействие хост -хост), межсетевой уровень (Internet) и уровень доступа к сети. Примерами протоко-лов, поддерживаемых на уровне приложений, служат FTP, Telnet, NFS и DNS. Про-токолы TCP и UDP соответствует транспортному уровню. Протоколы межсетевого уровня — это IP (Internet Protocol) и RIP (Route Information Protocol). Уровень до-ступа к передающей среде представлен драйверами устройств. Далее рассматривает-ся, как все эти протоколы укладываются в понятия TCP/IP-структуры и как с ними оперирует FreeBSD.

Топологии сетей

Различные сети отличаются друг от друга структурой, логическим и физическим размещением устройств, механизмами передачи данных и т.д. — вариантов очень много. Есть несколько типичных способов подключения FreeBSD-компьютера к сети: это хост в университетской сети, это узел компьютерной сети корпорации и, нако-нец, домашний компьютер, подсоединенный к Internet по коммутируемой линии (альтернативный вариант — выделенная линия).

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

Любой из вариантов реализации подобной схемы подразумевает подключение к глобальной сети по линиям связи Т1, ТЗ, DSL (или же через модемные соединения). Пропускная способность глобальных соединений колеблется в широком диапазоне — от килобит в секунду для модемных соединений (33-56 Кбит/с) до гигабит в секунду для соединений по стандартам ОС-48 и ОС-192, применяемых телекоммуникационными операторами. Основные типы глобальных соединений и их характеристики приведе-ны в таблице 22.1.

Таблица 22.1 Типы последовательных глобальных соединений и

соответствующие

им скорости передачи данных.

Типы соединений Скорость передачи данных Примечания



Модем До 56 Кбит/с

ISDN 56 —128 Кбит/с

DSL 192 Кбит/с — 1,5 Мбит/с

Кабельный модем 1 — 5 Мбит/с

Т1 1,5 Мбит/с

ТЗ 43,2 Мбит/с

ОС-3 155 Мбит/с

ОС-12 622 Мбит/с

ОС-48 2,5 Гбит/с

ОС-192 9,6 Гбит/с

Соответствует 24 линиям DSO Соответствует 28 линиям Т1 Соответствует 100 линиям Т1 Соответствует 4 линиям ОС-3 Соответствует 4 линиям ОС-12 Соответствует 4 линиям ОС-48

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

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

Когда глобальный сетевой трафик проходит через DSU (Data Service Unit, устройство обработки данных) или CSU (Central Switching Unit, центральное устройство коммутации) и маршрутизатор, происходит его преобразование, дабы он соответствовал транспортным механизмам локальной сети, например Ethernet. Физическая реализация связи в локальной сети позволяет компьютерам, подключенным к сети, общаться между собой.

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



Сетевые компоненты

В данном разделе рассмотрены различные сетевые аппаратные средства. Пра-вильное понимание их назначения и функционирования поможет построить сеть наиболее оптимально. Начнем, пожалуй, с сетевых кабелей.

Кабели

Основное преимущество локальных Ethernet-сетей состоит в том, что при низкой стоимости они обеспечивают скорости передачи данных, достижимые только в глобаль-ных магистралях: 10 Мбит/с в стандартном Ethernet, 100 Мбит/с в большинстве современ-ных локальных сетей (Fast Ethernet) и даже 1 Гбит/с в сетях на базе самого нового стандарта Gigabit Ethernet. Эти скорости могут быть достигнуты с помощью дешевых кабелей и сравнительно недорого оборудования.

Обратной стороной дешевизны и скорости Ethernet-соединений является невозмож-ность их использования на больших расстояниях (максимум в пределах соседних зданий). Это объясняется тем, что данные при передаче не усиливаются специальным оборудова-нием, а сигнал при передаче по кабелю затухает, особенно это касается Ethernet-кабелей, как тонкого, так и толстого. Сводная информация по кабелям для различных видов Ethernet приведена в таблице 22.2.

Таблица 22.2 Различные типы Ethernet-кабеля

Тип кабеля Названи сети е Максимальная скорость передачи данных, Мбит/с Кабель Тип коннектора Максимальная длина сегмента сети

10Base-2 Тонкий Ethernet 10 Тонкий коаксиал ВNС 185 м

10Base-5 Толстый Ethernet 10 Толстый коаксиал DB-15, DIX/AUI 500 м

10Base-T Ethernet 10 UTP Категории RJ-45 3, 5 100 м

100Base-TX Fast Ethernet 100 UTP Категория RJ-45 5 100 м

1000Base-T Gigabit Ethernet 1 Гбит/с UTP Категория RJ-45 5 100 м

ПРИМЕЧАНИЕ

Некоторые широко используемые аббревиатуры

DIX: Digital, Intel, Xerox

AUI: Attachment Unit Interface — интерфейс устройства подключения

BNC: Bayonet Nail Concelman — штыревой разъем с байонетным замком, или

British Naval Connector — британский военно-морской коннектор UTP:

Unshielded Twisted Pair — неэкранированная витая пара

Архитектура Ethernet ориентирована на шинную топологию. Это значит, что все узлы сети подключаются к единой магистрали. Максимальное количество узлов, ко-торые могут быть подключены к одному магистральному кабелю, зависит от типа используемого кабеля. На каждом конце магистрального сегмента должен быть установлен терминатор (сопротивлений в 50 Ом), имеются ограничения на число сегментов сети и их длину. Сети, построенные на толстом коаксиале, кроме того, весьма громоздки. В наши дни более распространенным является сети на витой паре, ввиду относительной дешевизны и простоты их создания. Сети Ethernet на витой паре строятся по топологии "звезда", при которой сетевая карта каждого компьютера соединена непосредственно с хабом. Более того, витая пара в отличие от коаксиала намного проще в монтаже благодаря большей гибкости кабеля и простым "телефонным" коннекторам. До недавних пор сетевые карты выпускались с разъемами для подключения разных типов кабеля, но теперь становится все труднее найти сетевую карту, рассчитанную на что-либо другое, а не на стандартный RJ-45 (разъем под витую пару).

Рисунок 22.4

Сетевая карта с разъемами для трех типов кабеля: витой пары (RJ-45), толстого (DB-15) и тонкого (BNC) Ethernet.

Такая стандартизация связана со снижением стоимости построения локальных сетей на витой паре и ростом их популярности. Сегодня из BNC-коннекторов и терминаторов чаще создаются загадочные металлические скульптуры, а толстый коаксиал годится разве что для рукопашного боя.

Витая пара стоит недорого и может применяться практически везде. Сам кабель, коннекторы RJ-45 и обжимной инструмент доступны в любом магазине электронного оборудования. Информация о раскладке контактов витой пары и их правильном обжиме дана в следующем разделе.

Прямое и перекрестное соединения

Существует две схемы подключения разъема RJ-45 к кабелю — для получения прямого и перекрестного кабеля (Straight-through and Crossover Cables). Схемой разводки называется порядок подключения проводов кабеля к контактам разъема. В чем разница между прямым и перекрестным подключением? В прямом кабеле на обоих концах коннекторы подключены идентично, а в перекрестном — по-разному.

Устройства с коннекторами RJ-45 подразделяются на два типа: компьютерные и хабы (концентраторы). К компьютерным устройствам относятся компьютеры, мар-шрутизаторы и другие конечные устройства, а к хабам — концентраторы и комму-таторы. Чтобы подключить компьютер к хабу, нужен прямой кабель. Он же необходим для соединения компьютера с коммутатором, или маршрутизатора с хабом. Это соединения разнородных по своей природе устройств. А вот для подключения друг к другу однородных устройств, например для соединения между собой двух хабов (с целью увеличения числа портов) или хаба с коммутатором, а также для соединения двух компьютеров необходим перекрестный кабель. Правило простое: прямой кабель нужен для соединения разнородных устройств, а перекрестный — для однородных.

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

А как определить, какой из кабелей является прямым, а какой — перекрестным? Согните кабель так, чтобы его концы оказались рядом друг с другом. Если цветовая последовательность обжатых проводов кабеля в обоих разъемах совпадает, то это прямой кабель, в противном случае — перекрестный. Разводка прямого кабеля показана на рис. 22.5, перекрестного — на рис. 22.6.

Хабы

Хаб (концентратор) — это устройство, которое служит центром для подключения нескольких узлов сети. Оно имеет несколько гнезд RJ-45, или портов, обычно от 4 до 24, к которым можно подключить соответствующее число кабелей. Стоимость хабов колеблется от $40 до нескольких сотен долларов, все зависит от их качества, числа портов и способности взаимодействовать с сетевыми устройствами типа 10base-T и 100base-TX. Большинство хабов способны работать только на одной из скоростей (либо 10 Мбит/с, либо 100 Мбит/с). Хабы, которые могут определять скорость авто-матически (N-Way), стоят значительно дороже. Выпускаются хабы самых разных размеров — от малюток величиной с ладонь, до 19-дюймовых устройств, монтируемых в стойки. В связи с большим значением хабов для нормальной работы сети рекомендуется подключать их к источникам бесперебойного питания. Существуют управляемые хабы: подключившись к ним по telnet, можно, используя командную строку, конфигурировать производительность каждого порта индивидуально. Естественно, что такие хабы относятся к разряду дорогостоящих.

ПРИМЕЧАНИЕ

Пару слов относительно терминологии. Английское слово hub обозначает концентраторы, к которым подключаются узлы с одинаковой сетевой архитектурой, а слово concentrator обозначает концентраторы, к которым можно подключать узлы с различными сетевыми архитектурами. Различие между двумя этими терминами, вообще говоря, весьма размыто, поэтому в обиходе концентраторы любых типов называют хабами.

Хаб является эффективным повторителем, т.е. весь сетевой трафик передается одновременно на все порты. Таким образом, компьютер, подключенный к данному концентратору, способен видеть входящий и исходящий трафик любого компьютера, подключенного к тому же хабу. Как правило, один из портов концентратора резер-вируется в качестве uplink-порта, что позволяет с помощью прямого кабеля подклю-чаться к хабу, коммутатору или маршрутизатору, принадлежащему более высокому уровню сетевой иерархии. Этот порт помогает избежать применения перекрестного кабеля для соединения хаба с вышестоящим устройством (upstream device). В неко-торых хабах Uplink-порт и один из стандартных портов устроены таким образом, что являются взаимоисключающими, т.е. их нельзя использовать одновременно — рабо-тает либо uplink-порт, либо стандартный. Например, 5-портовый хаб может либо объединить в сеть 4 компьютера, подключенных к стандартным портам (uplink-порт игнорируется), либо 3 компьютера подключаются к вышестоящему маршрутизатору (игнорируется один стандартный порт на хабе). Порты могут быть соединены кон-структивно или переключаться с помощью тумблеров или DIP-переключателей. В некоторых хабах все порты могут функционировать одновременно. И это далеко не все, чем хабы могут отличаться друг от друга.

Еще одна важная характеристика хаба — поддерживаемый им режим обмена данными — полудуплекс (Half Duplex) или дуплекс (Full Duplex). При полудуплексе узел может либо передавать информацию, либо принимать ее, т.е. делать это поочередно. При дуплексном режиме это делается одновременно. Так, сеть Fast Ethernet с полным дуплексом обеспе-чивает скорость передачи данных 100 Мбит/с в каждом из направлений, а полудуплекс — дает 100 Мбит/с суммарно в обоих направлениях.

Коммутаторы

Внешне коммутатор (switch) выглядят почти так же, как и концентраторы, но портов у них поменьше, а стоят они гораздо дороже. Коммутаторы, как и концен-траторы, оснащены несколькими портами — гнездами RJ-45. Они бывают всевоз-можных размеров и выпускаются одними и теми же компаниями, так что на полках магазинов их немудрено перепутать. Они даже кое в чем схожи по своим функциям и принципам работы, так что вы можете строить сеть как на основе коммутатора, так и на основе концентратора. Однако различия между ними все же есть, и весьма существенные.

В хабе все порты используют одну внутреннюю шину. Иначе говоря, все компь-ютеры, подключенные к хабу, равно как и компьютеры, подключенные к другому хабу, работающему в паре с первым, относятся к так называемому домену коллизий (collision domain). Под этим термином подразумевается сетевое пространство, на которое будут распространяться конфликты в случае их возникновения. Пакет, по-сланный одному компьютеру, получат и все остальные компьютеры, входящие в домен. Когда пакет достигает компьютера, сетевая карта сравнивает адрес назначе-ния пакета с адресом компьютера: если они совпадают, то данные принимаются, если нет, то отвергаются. В каждый момент времени передавать информацию может только один компьютер, в противном случае неизбежны коллизии. Они обычно возникают в том случае, когда два узла считают сеть свободной и начинают передачу информации практически одновременно. Сталкивающиеся между собой пакеты разрушаются, и их приходится передавать заново. Это снижает эффективность работы сети.

Коммутатор имеет куда более сложную структуру. Каждый порт коммутатора пред-ставляет собой отдельный домен коллизий, поэтому устройство, подключенное к порту, получает только ту часть трафика, которая предназначается ему. В состав коммутатора входит программное обеспечение, осуществляющее анализ заголовка каждого сетевого пакета с целью определения адреса назначения данного пакета. Затем данный пакет транслируется только на тот порт коммутатора, к которому подключено устройство с соответствующим сетевым адресом. Все это автоматически означает наличие у коммутатора ARP-кэша и динамически обновляемой таблицы маршрутизации. Это позволяет управляющим коммутатором программам определять, что и к какому порту подключено. Иногда подключение устройства к другому порту коммутатору, может привести к его зависанию. Потребуется выключить его и снова включить, чтобы была обновлена таблица маршрутизации. Выпускаются управляемые коммутаторы, допускающие удаленное (telnet) конфигурирование из командной строки. Понятно, что это отражается на их сложности и стоимости.

Важнейший аспект функционирования коммутатора заключается в эффективном ис-пользовании (с минимумом потерь) пропускной способности сети. Так, 8-портовый хаб типа 100base-TX вынужден распределять пропускную способность сети, равную 100 Мбит/с, между 8 портами. И когда устройства, подключенные к его портам, начинают одновременно передавать большой объем данных, в сети происходят мно-гочисленные коллизии. Это влечет за собой повторные попытки передачи тех же данных на физическом уровне (самый нижний уровень сетевой модели OSI). В свою очередь, это резко снижает реальную скорость передачи данных по сравнению с теоретически достижимой — 100 Мбит/с. Данную проблему успешно решают ком-мутаторы. Так, если 8-портовый 100-мегабитный хаб обеспечивает скорость 100 Мбит/с на своей внутренней шине, то межпортовая шина 8-портового 100-мегабитного ком-мутатора имеет пропускную способность 800 Мбит/сек. Вот почему коммутаторы намного дороже, чем концентраторы с аналогичным числом портов.

Сеть, построенная на основе коммутаторов, выигрывает и в плане безопасности, так как компьютер в такой сети просто не способен "увидеть" не предназначенный ему трафик. Да, вы можете запустить программу-сниффер (tcpdump или EtherPeek), вы можете установить вашу сетевую карту в promiscuous mode, дабы она принимала все пакеты, которые видит. Вы попытаетесь шпионить за всем трафиком внутри вашего домена коллизий. Но коммутаторы дают возможность разделить трафик так, чтобы это было невозможно. Еще один метод атаки — умышленная генерация каким-либо хостом агрессивного трафика (при этом сеть наводняется большим количеством ненужных пакетов, использующих всю ею пропускную способность) — малоэффективен в сети с коммутатором. Вот и получается, что коммутаторы стоят своих денег, ведь они, в отличие от концентраторов, существенно повышают производи-тельность сети, ее надежность и безопасность.

В заключение остается добавить, что, как правило, у коммутаторов отсутствует uplink-порт, хотя некоторые из портов (один или два) могут быть оснащены специальным переключателем для перевода порта из режима, требующего перекрестный кабель, в режим работы с прямым кабелем. Основное правило: коммутатор является устройством типа хаба, поэтому для соединения двух коммутаторов используется перекрестный кабель, а для подключения коммутатора к uplink-порту хаба применяется прямой кабель.

Мосты

Мосты (bridges) — это устройства, работающие по тем же принципам, что и ком-мутаторы. Однако они выполняют и ряд функций. Для понимания функций мостов, необходимо понимать назначение 4-го уровня стека TCP/IP. Подробно эти вопросы мы рассмотрим немного позже, пока же можно считать, что мост — это разновидность коммутатора, соединяющего между собой различные сети так, что компьютер из одной сети способен общаться с компьютером из другой сети без помощи маршрутизаторов. Это очень полезно, в частности, при соединении двух сетей разной архитектуры, например Ethernet и Token Ring.

Маршрутизаторы

Маршрутизаторы (routers) — самые сложные и дорогостоящие из всех сетевых ус-тройств. И хотя само понятие маршрутизации в деталях рассматривается в одном из следующих разделов данной главы, уже сейчас необходимо объяснить функции мар-шрутизаторов и то, как они применяются в сетевой топологии.

Маршрутизаторы оснащены операционными системами и хранят таблицы маршрути-зации, которые содержат адреса устройств, по которым устройства сети могут быть найдены. Большинство сетей имеет только один маршрутизатор, определяющий номер этой сети (адрес подсети в терминологии TCP/IP). Он однозначно идентифицирует эту локальную сеть в масштабах глобальной сети. В принципе, можно установить любое количество маршрутизаторов в пределах локальной сети, разбивая ее тем самым на са-мостоятельные подсети более низкого уровня.

Маршрутизаторы отвечают за вычисление кратчайшего пути следования пакета от передатчика к приемнику, принадлежащих различным подсетям, общаясь с другими маршрутизаторами при помощи множества различных протоколов. При отправке пакета он путешествует от маршрутизатора к маршрутизатору, продвигаясь на все более высокие уровни сети до тех пор, пока не будет достигнут маршрутизатор искомой зоны. С этого момента начинается "спуск" пакета от маршрутизатора к маршрутизатору вплоть до хоста с искомым адресом. Пакет спускается вниз по уровням до тех пор, пока не достигнет искомой подсети, где местный локальный маршрутизатор направляет его

на искомый хост в данной подсети. Процесс маршрутизации — это то, на чем основана работа Internet. Более подробно маршрутизация будет рассмотрена в главе 28. Большинство маршрутизаторов снабжены одним или двумя портами с разъемами типа RJ-45 или AUI, представляющими собой интерфейс к локальной сети. При помощи последовательных кабелей маршрутизаторы соединяются с устройствами обработки данных/обслуживания каналов DSU/CSU или другими высокоскоростными преобразователями, за которыми начинаются скоростные глобальные магистрали (Т1, например). В целом маршрутизаторы сильно отличаются по своим характеристикам, как-то: физические габариты, сложность, число и тип портов, возможности управления и стоимость. А понимание их работы, пожалуй, самый важный аспект в понимании сетевых технологий.

Сетевые протоколы

Ранее уже упоминалось, что большая часть Internet-трафика передается с исполь-зованием стека протоколов TCP/IP, в который входит несколько различных прото-колов. Стек означает набор; в сетевых технологиях это совокупность взаимосвязан-ных сетевых протоколов, функциональность которых полностью или частично соответствует всем уровням используемой сетевой модели. IP — Internet-протокол. На его основе построена передача большей части Internet-трафика. Этот протокол относится к сетевому уровню модели OSI (Open Systems Interconnection). Internet-протокол описывает формат и способ маршрутизации пакетов данных. Вторая составляющая стека TCP/IP — это TCP, потоковый протокол транспортного уровня, ориентированный на установление соединений и осуществляющий доставку пакетов данных. Существуют и другие важные протоколы, например ICMP, на основе которого работают утилиты ping и traceroute. Далее каждый из перечисленных здесь протоколов будет описан более детально.

TCP: Transmission Control Protocol

Главная отличительная особенность TCP от UDP — это высокая надежность пер-вого и сравнительно низкая надежность второго. Так, TCP обладает множеством реализованных в нем механизмов, позволяющих с высокой степенью вероятности гарантировать, что трафик, передаваемый по этому протоколу, в целости и сохран-ности достигнет места назначения. Помимо этого, TCP обладает функциями по раз-бивке больших пакетов на подходящих размеров фрагменты с целью более эффек-тивной передачи данных.

По сути, в TCP реализован двухступенчатый механизм, подразумевающий квитиро-вание данных (подтверждение их успешной доставки). При посылке TCP-пакета переда-ющий компьютер в течение некоторого времени ожидает получения подтверждения приема (Acknowledge — АСК). Причем для повышения скорости работы во время ожидания первого подтверждающего пакета продолжается передача последующих пакетов данных. Если же по истечении тайм-аута от принимающего компьютера не пришло АСК, то передающий компьютер вторично отправляет "потерявшийся" пакет с данными, считая, что отосланный пакет не дошел до места назначения. Данный алгоритм известен как повторная передача, и хотя подобное квитирование суще-ственно повышает надежность передачи, оно же служит причиной снижения скорости работы сети (часть пропускной способности расходуется служебными пакетами, да и повторные передачи тоже отнимают время и ресурсы).

Еще одним фундаментальным аспектом в реализации TCP служит работа в режиме полного дуплекса, что означает одновременную передачу и прием данных в обоих направлениях с использованием однотипных пакетов. Кроме того, в TCP существует еще целый ряд интересных особенностей, таких как проверка контрольной суммы, обеспечивающая целостность принятых данных, автоматическая фрагментация пакетов и сборка фрагментов в единое целое, а также упорядочивание данных, пришедших в неправильной последовательности. Все эти функции в UDP просто не реализованы.

Таким образом, TCP активно используется тогда, когда целостность и надежность приема/передачи данных является критически важным параметром. Под эту категорию подпадает множество приложений, таких как электронная почта, HTTP-доступ в Internet, пересылка файлов по FTP и т.д.

UDP: User Datagram Protocol

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

В принципе, UDP-пакеты по пути к адресату могут легко затеряться на просторах сети, и нет никакой возможности отследить факт их успешной доставки по адресу. Поскольку UDP-пакеты не обладают специфическими номерами, передатчик просто "извергает" их из себя в сеть, а уж дойдут ли они до места назначения — это как бог даст. Другими словами, обеспечение надежности UDP-пакетов должно осуществляться теми приложениями, которые используют данный протокол. Так, система NFS, обеспечивающая доступ к сетевым дискам так, как будто они локальные, является приложением, работающим на основе UDP-пакетов, подробнее об этом рассказано в главе 31. Почему же приложение, разработанное для работы с файлами по сети, использует ненадежный протокол UDP? Причина такого выбора заключается в том, что в локальной сети NFS-ресурсы могут использоваться одновременно множеством хостов, причем каждый из них может исчезнуть из сети в любой момент без предуп-реждения. Чтобы не реализовывать достаточно сложную процедуру соединения и поддержки связи по протоколу TCP со всеми этими недолговечными хостами, было решено использовать UDP, а о вопросах надежности позаботится на прикладном уровне средствами NFS. Это возможно, поскольку в UDP-пакетах содержится ин-формация о полноте передачи, так что система NFS может судить о целостности данных (нет ли потерявшихся или поврежденных пакетов).

В наши дни наибольшая польза от UDP состоит в работе с потоковыми медиа-данными. Для таких сетевых приложений, как телеконференции, широковещатель-ная музыка и потоковое видео, работающих в режиме реального времени, потеря пары-тройки пакетов не критична. Такие данные при передаче разбиваются на множество маленьких пакетов-фрагментов, которые передаются сплошным потоком и собираются в единое целое на компьютере-получателе с моментальным выводом результата на динамик и монитор компьютера. Если утеряна небольшая часть данных, это, как правило, проходит незамеченным для пользователя. Если же случается перегрузка сети в целом, то пакеты просто теряются на уровне маршрутизатора (он отслеживает свои собственные тайм-ауты и обладает буфером принимаемых/передаваемых данных). Затем поток возобновляется в реальном времени при условии, что передающий хост исчез из сети не надолго. При таком подходе нет нужды повторно посылать все утерянные пакеты, это просто несущественно. Именно в этой области проявляются преимущества UDP и не имеют значения его недостатки.

ICMP: Internet Control Message Protocol

Некоторые относят ICMP к сетевому уровню, приравнивая его к таким протоколам, как IP и IPX; другие рассматривают его как транспортный протокол, подобный TCP и UDP. Правы обе стороны: одна часть ICMP принадлежит сетевому уровню, другая — транспортному. Дело в том, что ICMP-сообщения обрабатываются именно на сетевом уровне, но содержат IP-заголовок, что затрудняет четкую классификацию данного протокола по уровням сетевой модели.

ICMP был разработан в качестве диагностического протокола. Наиболее частыми его применениями являются утилиты ping и traceroute, которые возвращают информацию, извлекаемую из фундаментальной структуры ICMP. Работа этих утилит построена на способности ICMP запрашивать удаленный хост, дабы получить от него ответ, подтверждающий его существование в сети и работоспособность. Этот факт подтверждается так называемым эхо-ответом (echo-reply). Кроме того, ICMP может быть использован для передачи сообщений об ошибках протоколам транспортного уровня, например, передатчик UDP-пакета может получить сообщение о том, что порт недоступен (Port Unreachable), если UDP-пакет направлен на неактивный (закрытый) порт. В ICMP встроены 16 кодов возможных ошибок и ряд дополнительных функций.

TCP/IP



Как же различные сетевые компоненты и протоколы работают совместно друг с другом? Стек протоколов TCP/IP

представляет собой совокупность следующих друг за другом протоколов разных уровней, а также их обработчиков, которые получают данные от выше- или нижележащего протокола, преобразуют полученные данные и передают их на вход следующего уровня. На рисунке 22.7 изображен один из двух возможных путей прохождения данных через стек протоколов — сверху вниз — начиная с высшего, пользовательского уровня (прикладная программа), далее через множество протоколов и так до самого нижнего, физического уровня (сетевой кабель).

Прикладная программа передает свои данные, которые необходимо отослать по сети, на транспортный уровень. Они поступают на вход либо TCP-, либо UDP-обработчика, который в полученный пакет данных добавляет заголовок, содержащий информацию о способах декодирования этих данных на транспортном уровне принимающего хоста (это действие называется инкапсуляцией). Затем преобразованный пакет направляется на сетевой уровень, здесь IP-обработчик добавляет к пакету свой заголовок, содержащий информацию для аналогичного IP-обработчика на приемнике. Потом пакет данных достигает физического уровня, на котором драйвер сетевой карты инкапсулирует весь пакет (со всеми ранее созданными заголовками) в соответствующий стандартам данной сети физический сигнал. Он-то и передается сетевой картой в кабель.

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

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

Детальные сведения о заголовках, которые добавляются к пакету на каждом из уров-ней, потребуются нам намного позднее, когда мы будем рассматривать, как эти механизмы применяются во FreeBSD. Достойно прочтения иллюстрированное руководство Ричарда Стивенса по стеку протоколов TCP/IP, издательство Addison-Wesley, 1994. В этом документе просто и понятно описаны все подробности работы протоколов, включая аспекты их взаимодействия между собой, а также внутреннюю реализацию и работу каждого протокола в отдельности.

IP-адреса

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

IP-адрес представляет собой 32-битную строку, содержащуюся в IP-заголовке, причем заголовок содержит в себе два таких адреса: куда и откуда. Это 32-битное двоичное число можно рассматривать как совокупность четырех октетов по 8 бит каждый, т.е. значение каждого октета лежит в диапазоне от 0 до 255. Выглядит это примерно так: 111.112.113.114. Такая структура IP-адреса, кроме лучшей читаемости, обеспечивает должную иерар-хию, в соответствии с которой адреса делятся на классы (А, В и С).

Как правило, один IP-адрес привязан к одной сетевой карте, хотя в некотором роде это условность. На самом деле единственное ограничение заключается в том, что две сетевые карты в пределах одной сети не могут обладать одним и тем же IP-адресом. Каждая сетевая карта должна для нормальной работы иметь, как минимум, один IP-адрес, но при желании к одной сетевой карте можно привязать несколько IP-адресов. Впрочем, более распространенным является вариант с наличием на компьютере двух или нескольких сетевых карт, у каждой из которых свой IP-адрес. В этом случае компьютер становится шлюзом между подсетями (т.е. он представлен в обеих подсетях одновременно). К примеру, один адрес связан с Ethernet-картой, а другой - с картой беспроводной сети по стандарту 802.11.

Определить IP-адрес любой из сетевых карт на компьютере, равно как и прочих сетевых интерфейсов, можно с помощью утилиты ifconfig, типичный вывод которой показан в листинге 22.1. Опция -а выводит список всех сетевых устройств (интерфейсов) в системе. Можно также указать конкретный интерфейс (например, х10) для получения информации только по нему одному. Строка inet отображает искомый IP-адрес; в данном примере, к интерфейсу х!0 привязаны несколько IP-адресов для одной сетевой карты.

Листинг 22.1 Типичный вывод утилиты ifconfig

# ifconfig -a

xlO: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500

inet 64.41.131.102 netmask OxffffffOO broadcast 64.41.131.255

inet6 fe80::201:2ff:fe55:1256%xlO prefixlen 64 scopeid Oxl

inet 209.154.215.246 netmask Oxffffffff broadcast 209.154.215.246

ether 00:01:02:55:12:56

media: autoselect (lOObaseTX) status: active

supported media: autoselect lOObaseTX <full-duplex> lOObaseTX

lObaseT/UTP <full-duplex> lObaseT/UTP lOObaseTX <hw-loopback>

1pO: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500

gifO: flags=8010<POINTOPOINT,MULTICAST> mtu 1280

gifl: flags=8010<POINTOPOINT,MULTICAST> mtu 1280

gif2: flags=8010<POINTOPOINT,MULTICAST> mtu 1280

gif3: flags=8010<POINTOPOINT,MULTICAST> mtu 1280

loO: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet6 fe80::l%loO prefixlen 64 scopeid 0x7 inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask Oxff000000

pppO: flags=8010<POINTOPOINT,MULTICAST> mtu 1500

slO: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552

faithO: flags=8000<MULTICAST> mtu 1500

Существует несколько специальных IP-адресов, которые очень важны. Во-первых, это адрес сети — адрес, в котором один или несколько последних байтов равны нулю, например 64.41.131.0. Этот адрес относится ко всей сети 64.41.131 и, как правило, исполь-зуется при настройке маршрутизаторов. Еще более важным является адрес, у которого последний байт равен 255. Это так называемый широковещательный адрес. Например, адрес 64.41.131.255 относится ко всем компьютерам, составляющим сеть 64.41.131, а адрес 64.41.255.255 относится ко всем хостам, входящим в состав сети 64.41. Применение этих адресов будет подробно изложено при рассмотрении организационных принципов маршрутизации.

JNTERNET-ПРОТОКОЛ ВЕРСИИ В (IPV6]

Возникает вопрос, а достаточен ли диапазон адресного пространства, обеспечиваемый 32-битной длиной адреса? На первый взгляд, 232 — это приблизительно 4,3 млрд. возможных комбинаций, а сегодня в сети зарегистрировано около 30 млн. хостов. Однако число компьтеров, подключенных к Internet, растет с каждым годом все быстрее, и адресное пространство, вероятно, будет очень быстро исчерпано. Особенно если учесть, что на самом деле в сети доступно менее 4,3 млрд. адресов. Давайте подсчитаем. Существует только 256 сетей класса А, по 16,7 млн. потенциальных хостов в каждой. И те компании, которые являются владельцами зарегистрированных сетей класса А вряд ли используют все 16,7 млн. адресов внутри сети.

Многие предприятия решают эту проблему при помощи NAT (Network Address Translation — трансляция сетевых адресов) и IP-маскарадинга. Эти средства позволяют всю внутреннюю сеть представить единственным IP-адресом, хотя сама внутренняя сеть может при этом состоять из большого количества хостов. Однако при этом внешние компьютеры не могут непосредственно обращаться к внутренним компьютерам сети. И единственный способ избежать этого, обеспечив полноценное соединение между двумя компьютерами, — это назначить каждому компьютеру в сети IP-адрес в стандартном 32-битном виде.

Поэтому ряд независимых групп разработали новый стандарт IP-адресации, так называемого IPv6. Этот стандарт обеспечивает 128-битное адресное пространство, с адресами в четыре раза более длинными, чем в ныне действующем стандарте IPv4. В результате мы получим 3,4x1038 возможных адресов. Новый стандарт включает также такие возможное™, как встроенное шиф-рование данных и аутентификация, дифференциация соединений при помощи плавающих меток, полностью автоматическая настройка хостов и др.

Проблема в том, что новый стандарт очень медленно входит в обиход Построение сетей — процесс дорогостоящий, а их перевод на новый стандарт означает замену всего устаревшего сетевого оборудования, неспособного работать с IPv6, и требует значительных средств. Пока очень немногие компании решились на такой шаг. Тем не менее FreeBSD предоставляет полную поддержку IPv6 и может обеспечить вам преимущества данного стандарта, даже если соответствующей инфраструктуры еще нет.

ARP и МАС-адреса

Хотя пользователь может работать с IP-адресами, задавая их в таких сетевых при-ложениях, как FTP-программы или браузеры, на самом деле эти адреса — искусст-венная конструкция, предназначенная для того, чтобы на уровне операционной системы связать хост и соответствующий ему реальный сетевой интерфейс. Есте-ственно, что IP-адрес, назначенный тому или иному компьютеру, может быть в любой момент изменен на другой IP-адрес. Что же касается самого нижнего уровня стека протоколов TCP/IP, то на нем IP-адрес не играет никакой роли. Сетевая карта ничего не знает о том, какой логический адрес назначен ей операционной системой. А драйверы устройств работают на более высоком уровне, чем уровень, на котором происходит процесс коммуникации.

На нижнем сетевом уровне значение имеют только так называемые физические адре-са, также известные как аппаратные адреса, или МАС-адреса (Media Access Controller). Каждое сетевое устройство имеет уникальный МАС-адрес, присваиваемый производите-лем. Теоретически, МАС-адрес — это что-то вроде отпечатков пальцев для сетевых карт. Это однозначный идентификатор каждой сетевой карты, а значит и компьютера, в кото-ром она установлена, поскольку в мире не существует двух сетевых карт с одинаковыми МАС-адресами. На практике, однако, все не так просто. Не существует механизма мар-шрутизации, способного работать с МАС-адресами, но есть механизм, работающий с обычными IP-адресами. Давайте разберем способ взаимодействия .этих различных типов адресов.

В листинге, отображающем результаты работы утилиты ifconfig, есть строка ether. В этой строке указан аппаратный адрес данной сетевой карты 00:01:02:55:12:56, ха-рактерный для карт от 3Com. Каждый сетевой адаптер имеет уникальный 48-разряд-ный адрес, байты которого разделены двоеточием. Адрес длиною в 6 байт обеспечи-вает доступное адресное пространство в 2 800 000 000 000 000 потенциально возможных адресов — значительно больше, чем те 30 млн. компьютеров, которые сегодня под-ключены к сети. Первые три байта адреса однозначно определяют производителя сетевой карты. Каждый зарегистрированный производитель имеет в своем распоря-жении одну или несколько 3-байтных сигнатур, выделенных ему IEEE (Institute of Electrical and Electronics Engineers — Институт инженеров по электротехнике и элек-тронике). А оставшиеся 3 байта — серийный номер адаптера. Так что на рынке может существовать до 16,7 млн. производителей сетевых карт, каждый из которых может выпустить до 16,7 млн. единиц продукции.

Теперь о том, как работает система адресации в целом. Когда пакет переходит на физический уровень стека протоколов, то сетевая карта (под управлением драйвера) должна отправить этот пакет в сеть, адресовав его на компьютер, имеющий IP-адрес, указанный в заголовке пакета. Естественно, что сетевой адаптер использует для отправки и адресации МАС-адреса, поскольку он ничего не знает про IP-адреса. Но откуда же тогда стеку протоколов известен МАС-адрес удаленного компьютера в сети, если пришедший пакет снабжен заголовком только с IP-адресом? Для перевода одного адреса в другой используется ARP.

ARP (Address Resolution Protocol) — протокол преобразования адресов, который служит для преобразования IP-адресов в МАС-адреса. Когда приложение посылает данные на компьютер с IP-адресом 10.5.6.100, пакет с этими данными перед отправкой попадает на физический уровень стека протоколов, где соответствующая программа-обработчик консультируется с ARP-кэшем, который представляет собой таблицу соответствия IP- и МАС-адресов, хранимую и обновляемую средствами операционной системы. Разумеется, если пакет на адрес 10.5.6.100 еще ни разу не отправлялся, то соответствующая запись в ARP-кэше отсутствует, и стеку протоколов еще только предстоит выяснить, какой же аппаратный адрес соответствует данному IP-адресу. Это делается посылкой специального широковещательного пакета запроса с вложенным в него искомым IP-адресом. Этот запрос адресован всем аппаратным адресам в локальной сети (путем указания адреса назначение 255 — ff:ff:ff:ff:ff:ff). Получают этот пакет все компьютеры в локальной сети, но отвечает только тот, чей IP-адрес совпал с запрашиваемым в пакете. Причем в заголовке ответного пакета содержится не только аппаратный адрес назначения, но и аппаратный адрес отправителя — с этого момента для IP-адреса 10.5.6.100 становится известен его МАС-эквивалент, и в ARP-кэш заносится соответствующая запись для использования ее в будущем. И в дальнейшем все пакеты, адресованные хосту 10.5.6.100, передаются на уже известный аппаратный адрес.

ПРИМЕЧАНИЕ

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

Команда аrр

Протокол ARP прозрачен для прикладных программ и стека протоколов TCP/IP. Однако существуют ситуации, когда администратор сети должен вручную поработать с ARP-кэшем. Содержимое этого кэша можно проверить, введя команду аrр -а:

# аrр -а

w001.sjc-ca.dsl.cnc.net (64.41.131.1) at 0:0:с5:7с:7:fO [ethernet] w013.sjc-ca.dsl.cnc.net (64.41.131.13) at 0:30:65:а4:9а:5е [ethernet] w063.sjc-ca.dsl.cnc.net (64.41.131.63) at ff:ff:ff:ff:ff:ff permanent ? [ethernet]

Записи в ARP-кэше хранятся определенное время, после чего кэш автоматически обновляется. При этом выполняется серия запросов (это необходимо, поскольку IP-адреса, в отличие от аппаратных, могут меняться). Но иногда приходится проводить ручную очистку кэша, например,если на сетевой компьютер устанавливается новая сетевая карта, то в сети появляется новый аппаратный адрес, к которому привязан старый IP-адрес. В этом случае данный хост некоторое время будет недосягаем из-за несоответствия записей в кэше реальному положению дел. Удалять такие записи можно тотально для всего кэша, либо выборочно — по имени записи или по содержащемуся в ней IP-адресу:

# arp -d w001.sjc-ca.dsl.cnc.net

# arp -d 64.41.131.13

# arp -d -a

Подсети и сетевые маски

Сетевые маски — один из самых трудных моментов в понимании работы TCP/IP-сетей, с другой стороны — это самая элегантная часть конфигурации. Главная задача сетевой маски (netmask) — указать маршрутизатору, к какой из подсетей, внутренней (локальной) или внешней (глобальной), принадлежит IP-адрес получателя. Когда маршрутизатор получает пакет (не ARP-запрос, а обычный TCP/IP-пакет) и должен решить, что с ним делать, он принимает решение, сравнивая IP-адрес получателя, со своей сетевой маской.

Сетевая маска представляет собой 32-битную строку, похожую на IP-адрес, одно из ее типичных значений — 255.255.255.0. Как и для IP-адресов, для маски подсети используется десятичная нотация. Единицы в маске сети обозначают сетевую часть IP-адреса, нули соответствуют адресу хоста в IP-адресе. Предположим, что маршрутизатор отвечает за сеть с номером 64.41.131 и получает пакет с адресом назначения 64.41.131.45. Маршрутизатор сравнивает IP-адрес пакета со своей сетевой маски, выполняя логическую операцию and, а затем результат сравнивается с адресом сети, к которой относится маршрутизатор. Поскольку результат совпал с номером локальной сети, пакет направляется в локальную сеть. Если адрес пакета не совпадает с адресом локальной подсети, то пакет перенаправляется в глобальную сеть.

Аналогичный процесс имеет место на любом компьютера, использующем TCP/IP. Если результат проверки показал принадлежность получателя к внешнему миру (гло-бальной сети), то отправитель направит пакет на адрес указанного в его настройках шлюза, т.е. маршрутизатора заданного по умолчанию. Если же результат проверки показал принадлежность искомого IP-адреса к локальной сети, но соответствующая запись в кэше отсутствует, то формируется ARP-запрос.

Этот механизм делает возможной тонкую настройку локальной сети, а точнее ее разбиение на подсети. Предположим, организация закупила для использования диа-пазон адресов сети класса В 64.41.ххх.ххх (64.41 — номер данной подсети, .ххх.ххх -адрес хоста в пределах подсети). Главный маршрутизатор под именем R1 управляет всей этой подсетью, но предположим, что в ней существует еще и маршрутизатор R2, заведующий двумя подсетями класса С — 64.41.131.ххх и 64.41.132.ххх. Компьютеры в подсети 64.41.131.ххх могут быть подключены к тому же концентратору, что и компьютеры подсети 64.41.132 (см. рис. 22.8), но они не смогут непосредственно общаться между собой, если их сетевые маски имеют одинаковое значение — 255.255.255.0, типичное для сетей класса С. Но если установить на отправителе значение сетевой маски 255.255.0.0, типичное для сетей класса В, то отправитель из сети 64.41.131. окажется в той же подсети, что и получатель в сети 64.41.132, а значит, пакет пойдет напрямую от хоста к хосту. Тем не менее получатель не сможет ответить отправителю непосредственно, так как сам он принадлежит к сети класса С, а не В (если быть еще более точным, то при значении сетевой маски равным 255.255.0.0, компьютер вообще не знает, что адрес 64.41.13l.xxx принадлежит к подсети класса С, сетевая маска класса В заставляет рассматривать этот адрес как номер подсети 64.41 и иско-мый хост в ней с номером 13l.xxx!)

Причем значение сетевой маски может быть задано и в шестнадцатиричном виде типа OxffffffOO (255.255.255.0) или OxfffffcO (255.255.255.192), последнее значение за-дает подсеть из 64 хостов с номерами от 1 до 64.

В сетях с заданными сетевыми масками существует еще одна запись, достойная упоминания, так называемая CIDR (Classless Inter-Domain Routing — безклассовая меж-доменная маршрутизация), представленная в форме номера подсети, слэша и количества бит, составляющих сетевую маску. Например, маска 255.255.255.0 в сети с номе-ром 64.41.131 в нотации CIDR будет записана как 64.41.131/24, поскольку маска содержит 3 байта (24 бита), установленных в 1. А вот маска 255.255.255.192 в нотации CIDR будет представлена как 64.41.131/26, поскольку она содержит 26 битов, установленных в единицу. Такая форма записи сетевой маски встречается как в таблицах маршрутизации, так и в других конфигурационных записях.

Маршрутизация

Вообще говоря, конфигурирование маршрутизаторов — это один из главнейших навыков настройки сетей. Поэтому, чтобы успешно администрировать сети, очень важно правильно понимать работу маршрутизатора, в частности работу с таблицами маршрутизации при помощи утилиты portsentry, которая подробно описывается в главе 29.

Любой маршрутизатор работает с так называемой таблицей маршрутизации, пред-ставляющей набор правил, согласно которым пакеты с определенными IP-адресами перенаправляются на следующий маршрутизатор. Поскольку FreeBSD можно настроить в качестве маршрутизатора, давайте внимательно разберем таблицу маршрутизации, использовав для вывода информации утилиту netstat -rn:

# netstat -rn Routing tables



Internet:

Gateway Flags Refs Use Netif Expir

hsrp-gw.netnation .UGSc 126 1379327 xlO

localhost UGScB 0 3 loO

link#l UC О О xlO =>

0:50:bа:bЗ:98:13 OHLW 2 357107 xlO 735

0:50:ba:bЗ:95:bb UHLW 0 2272 xlO 500

0:1:2:55:12:56 UHLW 0 118941 loO =>

localhost UGScB 0 0 loO

0:0:c:7:ac:le UHLW 119 8814 xlO 405

localhost UGScB 0 0 loO

.localhost UGScB 0 0 loO

localhost ИН 45 45210727 loO

e localhost UGScB 0 0 loO

Destination

default

64.41.53.101/32

net-64-40-lll.netn

ip3.somewhere.com

ip4.somewhere.com

ip6.somewhere.com

ip6.somewhere.com

hsrp-gw.netnation.

64.77.63.139/32

Toronto-ppp218408

localhost

goo. cs.und. nodak.

Каждая запись в таблице содержит следующую информацию:

• Место назначения (Destination). Это может быть IP-адрес, имя хоста, сетевой адрес (который FreeBSD отображает в формате CIDR) или несколько специаль-ных значений, например, маршрут по умолчанию (default route). По сути, значение этого поля совпадает с адресом получателя, содержащимся в каждом пакете.

• Адрес шлюза (Gateway address). Это адрес вышестоящего по иерархии маршрути-затора, куда должны перенаправляться определенные пакеты, адресованные хос-там, не входящим в данную локальную сеть. Это может быть как IP-адрес, так и МАС-адрес, если вышестоящий маршрутизатор охватывает ту локальную сеть (ни-жестоящий маршрутизатор расположен в одной из ее подсетей), к которой при-надлежит отправитель. FreeBSD также отображает запись для шлюза link#l, кото-рый является маршрутом для основного сетевого интерфейса, откуда могут быть узнаны новые, ранее неизвестные маршруты (исходя из значения С флага).

• Флаги (flags). Служат для указания типа соответствующего им маршрута. Каждая буква представляет собой отдельный флаг. Как видно из данного примера, для каждой записи присутствует от 2 до 5 флагов. Для уточнения значений каждого из флагов необходимо свериться с man netstat.

• Сетевой интерфейс (Network Interface). Если адрес назначения совпадает с оп-ределенным правилом, этот пакет отправляется посредством указанного для данного правила интерфейса.

Система IP-маршрутизации выросла на базе стандартов первой сети АRРА (со-зданной министерством обороны США). С тех пор она постоянно совершенствуется, отвечая новым условиям в быстро растущей сети Internet. Большие телекоммуника-ционные концентраторы содержат совершенно невообразимые таблицы маршрутизации, в которых присутствует множество резервных ссылок на альтернативные маршруты от хоста к хосту, предусмотренных на случай, если оптимальные маршруты по каким-либо причинам недоступны. Ни один из маршрутизаторов не хранит полной информации обо всех возможных маршрутах в Internet, но каждый знает некоторое, ограниченное число важнейших маршрутов. Кроме того, каждый маршрутизатор хранит адреса вышестоящих маршрутизаторов, а те, в свою очередь, обладают сведениями о всех маршрутизаторах, отстоящих от них на один уровень вниз. Любой не локальный адрес перенаправляется на вышестоящий маршрутизатор. Так продолжается до тех пор, пока пакет не попадет на маршрутизатор, хранящий в своей таблице запись, содержащую маршрут к искомому IP-адресу. Иначе говоря, все

пакеты, адресованные во внешний мир, перенаправляются с надеждой, что рано или поздно, путешествуя с маршрутизатора на маршрутизатор, эти пакеты найдут своего адресата.

На своем пути вверх пакет достигает самого верхнего маршрутизатора, отвечающего за домен верхнего уровня, в который адресован пакет. Это можно гарантировать с большой степенью вероятности. Затем начинается путь пакета вниз по цепочке маршрутизаторов в нужном направлении. И вот тут-то очень важно, чтобы каждый из маршрутизаторов на пути пакета был правильно сконфигурирован. Иначе пакет, спустившись на уровень вниз, неожиданно обнаружит, что маршрутизатор, который должен бы знать его маршрут еще на один уровень вниз, почему-то его не знает. В таком случае неправильно сконфигурированный маршрутизатор вернет пакет вверх, а маршрутизаторы верхнего уровня попытаются вновь отправить его вниз, по тому же самому маршруту — возникнет кольцо маршрутизации (router loop):

traceroute to arclight.net (209.237.26.189), 30 hops max, 40 byte packets

3 r2-72-core-van.netnation.com (10.10.4.253) 101.878 ms 135.377 ms 85.218 ms

4 dis2-vancouver-atml-0-0-33.in.bellnexxia.net (206.108.110.189) 132.023 ms ? 80.653 ms 81.686 ms

5 core2-vancouver-posll-l.in.bellnexxia.net (206.108.101.45) 102.365 ms ? 61.537 ms 68.561 ms

6 core2-seattle-posl2-0.in.bellnexxia.net (206.108.102.209) 79.989 ms 109.389 ? ms 115.587 ms

7 bx3-seattle-pos5-0.in.bellnexxia.net (206.108.102.202) 86.434 109.678 129.128



12 seal-bellnexxia-ocl2.seal.above.net (208.184.233.73) 91.201 67.287 79.369

13 core2-corel-oc48.seal.above.net (208.185.175.178) 74.219 79.480 93.121

14 sjc2-seal-oc48.sjc2.above.net (216.200.127.117) 188.692 212.627 181.123

15 corel-sjc2-oc48.sjcl.above.net (208.184.102.25) 195.260 194.973 272.053



10 mainl-corel-ocl2.sjcl.above.net (208.185.175.246) 344.104 318.313

11 corel-sjc2-oc48.sjcl.above.net (208.184.102.25) 195.260 194.973 272.053

12 mainl-corel-ocl2.sjcl.above.net (208.185.175.246) 344.104 318.313

13 corel-sjc2-oc48.sjcl.above.net (208.184.102.25) 195.260 194.973 272.053

14 mainl-corel-ocl2.sjcl.above.net (208.185.175.246) 344.104 318.313

15 corel-sjc2-oc48.sjcl.above.net (208.184.102.25) 195.260 194.973 272.053

16 mainl-corel-ocl2.sjcl.above.net (208.185.175.246) 344.104 318.313

17 corel-sjc2-oc48.sjcl.above.net (208.184.102.25) 195.260 194.973 272.053

18 mainl-corel-ocl2.sjcl.above.net (208.185.175.246) 344.104 318.313

Ситуация с отбрасыванием пакета будет продолжаться до тех пор, пока нижестоящий маршрутизатор не исправит свою таблицу маршрутизации. К счастью, проблема зацикливания бывает временной, рано или поздно сбойный маршрутизатор построит новую таблицу маршрутизации, и работоспособность сети будет восстановлена.

Шлюзы и трансляция сетевых адресов (Gateways and Network Address Translation)

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

При настройке стека протоколов на сетевом компьютере необходимо задать адрес шлюза, т.е. адрес вышестоящего маршрутизатора. Посмотрите на рисунок 22.8: шлюзы устройства H1 и Н2 сконфигурированы так, что они могут связываться с хостами, чьи адреса не совпадают с сетевой маской данных устройств. Обычно в сетевой топологии такого типа роль шлюза выполняет устройство R2. Устройства H1 и Н2 не всегда способны напрямую связаться с R1. А это бывает важно с точки зрения аварийных ситуаций в сети. Если появится необходимость выключить R2, то маловероятно, что он будет пропускать через себя сетевой трафик; хотя и существуют устройства, способные в выключенном состоянии пропускать сквозь себя данные без обработки, но маршрутизаторы редко относятся к таковым.

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

Чтобы использовать FreeBSD в качестве NAT-маршрутизатора, необходимо сконфи-гурировать и запустить демон natd, который подробно описан в главе 28.

Имена хостов и доменов

На заре развития Internet все хосты, его составлявшие, адресовались исключитель-но в числовом виде, т.е. в виде IP-адресов. Когда сеть Internet выросла, число хостов в ней увеличилось, и стало просто невозможно удержать в голове все эти длинные числовые последовательности. Чтобы решить эту проблему, была создана система доменных имен, которая поставила в соответствие IP-адресам осмысленные тексто-вые имена. Ею мы и пользуемся сегодня.

DNS-записи хранятся в базе данных на многочисленных корневых серверах, которые поддерживаются компанией Network System Inc. Эти серверы обновляют свои базы бла-годаря считыванию информации с серверов, которые являются уполномоченными про-давцами доменных имен. Причем каждый такой DNS-сервер хранит в своей базе данных запись о себе самом. FreeBSD использует демон BIND, который хранит свои DNS-записи в файле /etc/namedb. Подробное описание настройки этого демона приводится в главе 30.

Внутри каждого домена, каждый его компьютер обладает своим именем хоста, например tiger или Pluto, с соответствующей записью в базе доменного сервера. Сочетание этого имени и имени домена дает полное имя хоста в Internet, например

tiger, somethere.com.

Очень важно понимать, что иерархическая структура доменных имен не имеет ничего общего со структурой IP-адресов. Так, например. домен somethere.com может иметь любой IP-адрес, главное, чтобы это доменное имя и соответствующий ему IP-адрес был правильно указан на сервере, контролирующем данную зону доменных имен. Например, HTTP-сервер с именем www.somethere.com может иметь адрес 64.41.131.45, а FTP-сервер с именем ftp.somethere.com — адрес 213.11.31.221. Кажуще-еся несоответствие адресов в одном домене не мешает нормальной работе, поскольку DNS полностью вне стека протоколов TCP/IP.

Однако доменные имена играют важную роль на прикладном уровне. Можно провести такую аналогию: IP-адреса — это логическая абстракция над реальными МАС-адресами, а доменные имена — это логическая абстракция над IP-адресами. И точно так, как ARP находит соответствие между IP- и МАС-адресами, DNS находит соответствие между доменными именами и IP-адресами. Итак, на прикладном уров-не — доменные имена, на сетевом — IP-адреса, а на физическом — МАС-адреса.

DHCP

Ранее уже обсуждалось, как осуществляется привязка IP-адресов к сетевым Ethernet-интерфейсам, подробное рассмотрение этого вопроса ждет вас в 23 главе, а мы обратим внимание на DHCP (Dynamic Host Configuration Protocol, протокол динамического конфигурирования хостов). Этот протокол по мере надобности динамически назначает IP-адреса сетевому интерфейсу.

Если интерфейс сконфигурирован как пользователь DHCP, то при загрузке он посылает запрос на DHCP-сервер. Этот запрос (по сути, он является обратным ARP-запросом) содержит аппаратный адрес интерфейса. В ответ на него DHCP-сервер высылает временный IP-адрес и сетевую маску, назначенную данному интерфейсу на время его работы (значение адреса сервер извлекает из пула свободных адресов, при этом выдаваемому адресу назначается некий период использования). Подробное описание данного протокола приводится в главе 33.

Обновлено: 12.03.2015