Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

4.5. Маршрутизация с помощью IP-адресов

Рассмотрим теперь принципы, на основании которых в сетях IP происходит выбор маршрута передачи пакета между сетями.

Сначала необходимо обратить внимание на тот факт, что не только маршрутизаторы, но и конечные узлы - компьютеры - должны принимать участие в выборе маршрута.

В стеке TCP/IP маршрутизаторы и конечные узлы принимают решения о том, кому передавать пакет для его успешной доставки узлу назначения, на основании так называемых таблиц маршрутизации (routing tables).

Альтернативой одношаговому подходу является указание в пакете всей последовательности маршрутизаторов, которые пакет должен пройти на своем пути. Такой подход называется маршрутизацией от источника - Source Routing. В этом случае выбор маршрута производится конечным узлом или первым маршрутизатором на пути пакета, а все остальные маршрутизаторы только отрабатывают выбранный маршрут, осуществляя коммутацию пакетов, то есть передачу их с одного порта на другой. Алгоритм Source Routing применяется в сетях IP только для отладки, когда маршрут задается в поле Резерв (IP OPTIONS) пакета.)

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

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

НЕ нашли? Не то? Что вы ищете?

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

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

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

Одношаговая маршрутизация обладает еще одним преимуществом - она позволяет сократить объем таблиц маршрутизации в конечных узлах и маршрутизаторах за счет использования в качестве номера сети назначения так называемого маршрута по умолчанию - default, который обычно занимает в таблице маршрутизации последнюю строку. Если в таблице маршрутизации есть такая запись, то все пакеты с номерами сетей, которые отсутствуют в таблице маршрутизации, передаются маршрутизатору, указанному в строке default. Поэтому маршрутизаторы часто хранят в своих таблицах ограниченную информацию о сетях интерсети, пересылая пакеты для остальных сетей в порт и маршрутизатор, используемые по умолчанию. Подразумевается, что маршрутизатор, используемый по умолчанию, передаст пакет на магистральную сеть, а маршрутизаторы, подключенные к магистрали, имеют полную информацию о составе интерсети.

Особенно часто приемом маршрутизации по умолчанию пользуются конечные узлы. Хотя они также в общем случае имеют в своем распоряжении таблицу маршрутизации, ее объем обычно незначителен, так как маршрутизация для компьютера - не основное занятие. Главная роль в маршрутизации пакетов в концепции протокола IP отводится, естественно, маршрутизаторам, которые должны обладать гораздо более полными таблицами маршрутизации, чем конечные узлы. Конечный узел часто вообще работает без таблицы маршрутизации, имея только сведения об IP-адресе маршрутизатора по умолчанию. При наличии одного маршрутизатора в локальной сети этот вариант - единственно возможный для всех конечных узлов. Но даже при наличии нескольких маршрутизаторов в локальной сети, когда проблема их выбора стоит перед конечным узлом, задание маршрута по умолчанию часто используется в компьютерах для сокращения объема их маршрутной таблицы.

Другим способом разгрузки компьютера от необходимости ведения больших таблиц маршрутизации является получение от маршрутизатора сведений о рациональном маршруте для какой-нибудь конкретной сети с помощью протокола ICMP.

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

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

Записи в таблице маршрутизации, относящиеся к сетям, непосредственно подключенным к маршрутизатору, в поле "Расстояние до сети назначения" содержат нули.

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

("22") Существуют различные алгоритмы построения таблиц для одношаговой маршрутизации. Их можно разделить на три класса:

    алгоритмы фиксированной маршрутизации, алгоритмы простой маршрутизации, алгоритмы адаптивной маршрутизации.

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

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

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

Алгоритмы простой маршрутизации подразделяются на три подкласса:

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

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

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

4.6 Фрагментация IP – пакетов

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

В большинстве типов локальных и глобальных сетей определяется такое понятие как максимальный размер поля данных кадра или пакета, в которые должен инкапсулировать свой пакет протокол IP. Эту величину обычно называют максимальной единицей транспортировки - Maximum Transfer Unit, MTU. Сети Ethernet имеют значение MTU, равное 1500 байт, сети FDDI - 4096 байт, а сети Х.25 чаще всего работают с MTU в 128 байт.

4.7. Основные характеристики маршрутизаторов и многофункциональных корпоративных концентраторов

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

Поэтому типичный маршрутизатор является мощным вычислительным устройством с одним или даже несколькими процессорами, часто специализированными или построенными на RISC-архитектуре, со сложным программным обеспечением. То есть сегодняшний маршрутизатор - это специализированный компьютер, имеющий скоростную внутреннюю шину или шины (с пропускной способностью Мбит/с), часто использующий симметричное или асимметричное мультипроцессирование и работающий под управлением специализированной операционной системы, относящейся к классу систем реального времени. Многие разработчики маршрутизаторов построили в свое время такие операционные системы на базе операционной системы Unix, естественно, значительно ее переработав.

Маршрутизаторы могут поддерживать как один протокол сетевого уровня (например, IP, IPX или DECnet), так и множество таких протоколов. В последнем случае они называются многопротокольными маршрутизаторами. Чем больше протоколов сетевого уровня поддерживает маршрутизатор, тем лучше он подходит для корпоративной сети.

("23") Большая вычислительная мощность позволяет маршрутизаторам наряду с основной работой по выбору оптимального маршрута выполнять и ряд вспомогательных высокоуровневых функций.

По областям применения маршрутизаторы делятся на несколько классов.

Магистральные маршрутизаторы (backbone routers) предназначены для построения центральной сети корпорации. Центральная сеть может состоять из большого количества локальных сетей, разбросанных по разным зданиям и использующих самые разнообразные сетевые технологии, типы компьютеров и операционных систем. Магистральные маршрутизаторы - это наиболее мощные устройства, способные обрабатывать несколько сотен тысяч или даже несколько миллионов пакетов в секунду, имеющие большое количество интерфейсов локальных и глобальных сетей. Поддерживаются не только среднескоростные интерфейсы глобальных сетей, такие как Т1/Е1, но и высокоскоростные, например, АТМ или SDH со скоростями 155 Мбит/с или 622 Мбит/с. Чаще всего магистральный маршрутизатор конструктивно выполнен по модульной схеме на основе шасси с большим количеством слотов - до 12-14. Большое внимание уделяется в магистральных моделях надежности и отказоустойчивости маршрутизатора, которая достигается за счет системы терморегуляции, избыточных источников питания, заменяемых «на ходу» (hot swap) модулей, а также симметричного муль-типроцессирования. Примерами магистральных маршрутизаторов могут служить маршрутизаторы Backbone Concentrator Node (BCN) компании Nortel Networks (ранее Bay Networks), Cisco 7500, Cisco 12000.

Маршрутизаторы региональных отделений соединяют региональные отделения между собой и с центральной сетью. Сеть регионального отделения, так же как и центральная сеть, может состоять из нескольких локальных сетей. Такой маршрутизатор обычно представляет собой некоторую упрощенную версию магистрального маршрутизатора. Если он выполнен на основе шасси, то количество слотов его шасси меньше: 4-5. Возможен также конструктив с фиксированным количеством портов. Поддерживаемые интерфейсы локальных и глобальных сетей менее скоростные. Примерами маршрутизаторов региональных отделений могут служить маршрутизаторы BLN, ASN компании Nortel Networks, Cisco 3600, Cisco 2500, NetBuilder II компании 3Com. Это наиболее обширный класс выпускаемых маршрутизаторов, характеристики которых могут приближаться к характеристикам магистральных маршрутизаторов, а могут и опускаться до характеристик маршрутизаторов удаленных офисов.

Маршрутизаторы удаленных офисов соединяют, как правило, единственную локальную сеть удаленного офиса с центральной сетью или сетью регионального отделения по глобальной связи. В максимальном варианте такие маршрутизаторы могут поддерживать и два интерфейса локальных сетей. Как правило, интерфейс локальной сети - это Ethernet 10 Мбит/с, а интерфейс глобальной сети - выделенная линия со скоростью 64 Кбит/с, 1,544 или 2 Мбит/с. Маршрутизатор удаленного офиса может поддерживать работу по коммутируемой телефонной линии в качестве резервной связи для выделенного канала. Существует очень большое количество типов маршрутизаторов удаленных офисов. Это объясняется как массовостью потенциальных потребителей, так и специализацией такого типа устройств, проявляющейся в поддержке одного конкретного типа глобальной связи. Например, существуют маршрутизаторы, работающие только по сети ISDN, существуют модели только для аналоговых выделенных линий и т. п. Типичными представителями этого класса являются маршрутизаторы Nautika компании Nortel Networks, Cisco 1600, Office Connect компании 3Com, семейство Pipeline компании Ascend.

Маршрутизаторы локальных сетей (коммутаторы 3-го уровня) предназначены для разделения крупных локальных сетей на подсети. Основное требование, предъявляемое к ним, - высокая скорость маршрутизации, так как в такой конфигурации отсутствуют низкоскоростные порты, такие как модемные порты 33,6 Кбит/с или цифровые порты 64 Кбит/с. Все порты имеют скорость по крайней мере 10 Мбит/с, а многие работают на скорости 100 Мбит/с. Примерами коммутаторов 3-го уровня служат коммутаторы CoreBuilder 3500 компании 3Com, Accelar 1200 компании Nortel Networks, Waveswitch 9000 компании Plaintree, Turboiron Switching Router компании Foudry Networks.

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

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

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

Перечень поддерживаемых сетевых протоколов обычно включает протоколы IP, CONS и CLNS OSI, IPX, AppleTalk, DECnet, Banyan VINES, Xerox XNS.

Перечень протоколов маршрутизации составляют протоколы IP RIP, IPX RIP, NLSP, OSPF, IS-IS OSI, EGP, BGP, VINES RTP, AppleTalk RTMP.

Перечень поддерживаемых интерфейсов локальных и глобальных сетей. Для локальных сетей - это интерфейсы, реализующие физические и канальные протоколы сетей Ethernet, Token Ring, FDDI, Fast Ethernet, Gigabit Ethernet, 100VG-AnyLAN иАТМ.

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

Поддерживаются интерфейсы последовательных линий (serial lines) RS-232, RS-449/422, V.35 (для передачи данных со скоростями до 2-6 Мбит/с), высокоскоростной интерфейс HSSI, обеспечивающий скорость до 52 Мбит/с, а также интерфейсы с цифровыми каналами Т1/Е1, ТЗ/ЕЗ и интерфейсами BRI и PRI цифровой сети ISDN. Некоторые маршрутизаторы имеют аппаратуру связи с цифровыми глобальными каналами, что исключает необходимость использования внешних устройств сопряжения с этими каналами.

В набор поддерживаемых глобальных технологий обычно входят технологии Х.25, frame relay, ISDN и коммутируемых аналоговых телефонных сетей, сетей АТМ, а также поддержка протокола канального уровня РРР.

Общая производительность маршрутизатора. Высокая производительность маршрутизации важна для работы с высокоскоростными локальными сетями, а также для поддержки новых высокоскоростных глобальных технологий, таких как frame relay, ТЗ/Е3, SDH и АТМ. Общая производительность маршрутизатора зависит от многих факторов, наиболее важными из которых являются: тип используемых процессоров, эффективность программной реализации протоколов, архитектурная организация вычислительных и интерфейсных модулей. Общая производительность маршрутизаторов колеблется от нескольких десятков тысяч пакетов в секунду до нескольких миллионов пакетов в секунду. Наиболее производительные маршрутизаторы имеют мультипроцессорную архитектуру, сочетающую симметричные и асимметричные свойства - несколько мощных центральных процессоров по симметричной схеме выполняют функции вычисления таблицы маршрутизации, а менее мощные процессоры в интерфейсных модулях занимаются передачей пакетов на подключенные к ним сети и пересылкой пакетов на основании части таблицы маршрутизации, кэшированной в локальной памяти интерфейсного модуля.

Магистральные маршрутизаторы обычно поддерживают максимальный набор протоколов и интерфейсов и обладают высокой общей производительностью в один-два миллиона пакетов в секунду. Маршрутизаторы удаленных офисов поддерживают один-два протокола локальных сетей и низкоскоростные глобальные протоколы, общая производительность таких маршрутизаторов обычно составляет от 5 до 20-30 тысяч пакетов в секунду.

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

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

Большинство крупных фирм-производителей сетевого оборудования предлагает модульные концентраторы в качестве «коммутационного центра» корпоративной сети. Такие концентраторы отражают тенденцию перехода от полностью распределенных локальных сетей 70-х годов на коаксиальном кабеле к централизованным коммуникационным решениям, активно воздействующим на передачу пакетов между сегментами и сетями. Модульные корпоративные концентраторы представляют собой многофункциональные устройства, которые могут включать несколько десятков модулей различного назначения: повторителей разных технологий, коммутаторов, удаленных мостов, маршрутизаторов и т. п., которые объединены в одном устройстве с модулями-агентами протокола SNMP, и, следовательно, позволяют централизованно объединять, управлять и обслуживать большое количество устройств и сегментов, что очень удобно в сетях большого размера.

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

Пример структуры корпоративного концентратора приведен на (рис. 4.13)

3"

Рис. 4.13. Структура корпоративного модульного концентратора

Он имеет несколько шин для образования независимых разделяемых сегментов Ethernet 10 Мбит/с, Token Ring и FDDI, а также высокоскоростную шину в 10 Гбит/с для передач кадров и пакетов между модулями коммутации и маршрутизации. Каждый из модулей имеет внешние интерфейсы для подключения конечных узлов и внешних коммуникационных устройств - повторителей, коммутаторов, а также несколько интерфейсов с внутренними шинами концентратора. Концентратор рассчитан на подключение конечных узлов в основном к внешним интерфейсам повторителей (для образования разделяемых сегментов) и коммутаторов (для поддержки микросегментации). Уже готовые сегменты, то есть образованные внешними повторителями и коммутаторами, могут подключаться к внешним интерфейсам коммутаторов и маршрутизаторов корпоративного концентратора. Дальнейшее соединение разделяемых сегментов и коммутируемых узлов и сегментов происходит модулями коммутации и маршрутизации концентратора по внутренним связям с помощью высокоскоростной шины. Конечно, модули могут связываться между собой и через внешние интерфейсы, но такой способ нерационален, так как скорость обмена ограничивается при этом скоростью протокола интерфейса, например 10 Мбит/с или 100 Мбит/с. Внутренняя же шина соединяет модули на гораздо более высокой скорости, примерно 10/N Гбит/с, где N - количество портов, одновременно требующих обмена. Внешние связи между модулями превращают корпоративный концентратор просто в стойку с установленными модулями, а внутренний обмен делает эту стойку единым устройством с общей системой программного управления трафиком. Обычно для конфигурирования модулей и связей между ними производители корпоративных концентраторов сопровождают их удобным программным обеспечением с графическим интерфейсом. Отдельный модуль управления выполняет общие для всего концентратора функции: управления по протоколу SNMP, согласование таблиц коммутации и маршрутизации в разных модулях, возможно использование этого модуля как межмодульной коммутационной фабрики вместо общей шины.

Примерами корпоративных многофункциональных концентраторов могут служить устройства System 5000 компании Nortel Networks, MMAC-Plus компании Cabletron Systems, CoreBuilder 6012 компании 3Com.

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

Стирание граней между коммутаторами и маршрутизаторами

В классическом понимании терминов коммутатор - это устройство, принимающее решение о продвижении пакетов на основании заголовков протоколов 2-го уровня, то есть протоколов типа Ethernet или FDDI, а маршрутизатор - устройство, принимающее аналогичное решение на основании заголовков протоколов 3-го уровня, то есть уровня протоколов IP или IPX. В настоящее время наблюдается отчетливая тенденция по совмещению в одном устройстве функций коммутатора и маршрутизатора.

Соотношение коммутации и маршрутизации в корпоративных сетях

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

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

Сегодня ситуация в корпоративных сетях быстро меняется. Количество пользователей стремительно растет. Пользователи избавляются от устаревающих текстовых приложений, отдавая предпочтение Web-интерфейсу. А завтра эти же пользователи будут работать с аудио, видео, push и другими, абсолютно новыми приложениями, основанными на новых технологиях распространения пакетов, таких как IP Multicast и RSVP. Не работает и старое правило 80/20, сегодня большое количество информации берется из публичных серверов Internet, а также из Web-серверов других подразделений предприятия, создавая большой межсетевой трафик. Существующие сети не оптимизировались для таких непредсказуемых потоков тра-фика, когда каждый может общаться почти с каждым. А с проникновением в корпоративные сети технологии Gigabit Ethernet эта проблема обострится еще больше. Таким образом, сегодня образовался большой разрыв между производительностью типичного маршрутизатора и типичного коммутатора. В этой ситуации возможны два решения: либо отказаться вообще от маршрутизации, либо увеличить ее производительность.

5. РЕАЛИЗАЦИЯ PING С ПОМОЩЬЮ ICMP API

При работе в сети Интернет в некоторых случаях необходимо знать текущее состояние как локального, так и удаленных хостов (имеет ли локальный хост в данный момент возможность выхода в сеть Интернет, доступен ли некий удаленный хост и т. д.)

Общеизвестно, что для указанных целей используется утилита ping. В данной работе описана реализация на Delphi возможностей этой программы с помощью ICMP API.

Принцип работы ping-а основан на использовании протокола ICMP - Internet Control Message Protocol (протокол управляющих, или контрольных, сообщений).
С помощью ICMP хосты в сети обмениваются различной служебной информацией (информацией о смене маршрута, уменьшении скорости передачи, недоступности какого-либо адреса и т. д.) В основе протокола ICMP лежит понятие сообщений. Сообщения ICMP протокола, как правило, оповещают об ошибках, возникающих при обработке датаграмм. ICMP использует основные свойства протокола IP, как если бы он являлся протоколом более высокого уровня. На самом же деле ICMP является составной частью IP.

Одним из типов сообщений протокола является т. н. "эхо-запрос". Получив "эхо-запрос" хост обязан ответить пославшему "эхо-ответом". По сути, "эхо-запрос" и "эхо-ответ" отличаются лишь адресами отправителя и получателя и кодом типа сообщения (тип 8 - "эхо-запрос", тип 0 - "эхо-ответ").
Более подробно протокол ICMP описан в RFC792.

Реализации утилиты ping на различных платформах существенно отличаются. Так, в ОС UNIX используются RAW sockets (необработанные, "сырые" сокеты), а в ОС Windows всех версий - т. н. ICMP API. Использование ICMP API оправдано только в ОС Windows NT и 2000, т. к. для использования RAW sockets в этих ОС необходимы права Администратора.

Из документации Microsoft:
"Icmp. dll предоставляет возможность разрабатывать приложения, использующие ICMP (ping, traceroute) без использования Winsock. Если разработчик пишет под платформу, поддерживающую Winsock, предпочтительнее использовать механизм Winsock RAW sockets.
Однако, при написании программ под Windows NT и Windows 2000 следует учитывать, что механизм RAW sockets доступен для использования только членам группы Administrators. Все функции в icmp. dll не рассматриваются как часть Win 32 API и не будут поддерживаться в следующих реализациях".

("25") На практике, во всех 32-разрядных версиях Windows есть и используется библиотека icmp. dll. Так что, на данный момент, можно безбоязненно ее использовать.

ICMP API

Определения типов и прототипы функций для Microsoft icmp. dll:

type

ip_option_information = packed record // Информация заголовка IP (Наполнение

// этой структуры и формат полей описан в RFC791.

Ttl : byte; // Время жизни (используется traceroute-ом)

Tos : byte; // Тип обслуживания, обычно 0

Flags : byte; // Флаги заголовка IP, обычно 0

OptionsSize : byte; // Размер данных в заголовке, обычно 0, максимум 40

OptionsData : Pointer; // Указатель на данные

end;

icmp_echo_reply = packed record

Address : u_long; // Адрес отвечающего

Status : u_long; // IP_STATUS (см. ниже)

RTTime : u_long; // Время между эхо-запросом и эхо-ответом

// в миллисекундах

DataSize : u_short; // Размер возвращенных данных

Reserved : u_short; // Зарезервировано

Data : Pointer; // Указатель на возвращенные данные

("26") Options : ip_option_information; // Информация из заголовка IP

end;

PIPINFO = ^ip_option_information;

PVOID = Pointer;

function IcmpCreateFile() : THandle; stdcall; external 'ICMP. DLL' name 'IcmpCreateFile';

function IcmpCloseHandle(IcmpHandle : THandle) : BOOL; stdcall; external 'ICMP. DLL' name 'IcmpCloseHandle';

function IcmpSendEcho(

IcmpHandle : THandle; // handle, возвращенный IcmpCreateFile()

DestAddress : u_long; // Адрес получателя (в сетевом порядке)

RequestData : PVOID; // Указатель на посылаемые данные

RequestSize : Word; // Размер посылаемых данных

RequestOptns : PIPINFO; // Указатель на посылаемую структуру

// ip_option_information (может быть nil)

ReplyBuffer : PVOID; // Указатель на буфер, содержащий ответы.

ReplySize : DWORD; // Размер буфера ответов

Timeout : DWORD // Время ожидания ответа в миллисекундах

) : DWORD; stdcall; external 'ICMP. DLL' name 'IcmpSendEcho';

Функция IcmpSendEcho() посылает ICMP эхо-запрос по заданному IP адресу и помещает все ответы, полученные за время заданного таймаута, в буфер ответов (ReplyBuffer). Перед использованием функций Icmp. dll необходимо вызвать функцию WSAStartup() из Winsock.
Если этого не сделать, то первый же вызов функции IcmpSendEcho() приведет к ошибке 10091 (WSASYSNOTREADY).

Следует заметить, что ответы, помещенные в буфер, необязательно будут сообщениями "эхо-ответ". Возможно, что в ответ на "эхо-запрос" придут сообщения ICMP о возникших ошибках. Естественно, эти сообщения так же будут помещены в ReplyBuffer.
Размер буфера ответов должен быть достаточным для приема хотя бы одного ответа, будь то "эхо-ответ" или сообщение об ошибке. Отсюда, указанный размер складывается из размера самой сруктуры icmp_echo_reply плюс Max(RequestSize, 8), т. к. сообщение ICMP об ошибке составляет 8 байт.
Функция IcmpSendEcho() возвращает количество ответов (или структур icmp_echo_reply) в массиве ReplyBuffer. Если функция возвратила 0, то для более детальной диагностики возникшей ошибки используется функция GetLastError().

Возможные значения поля Status структуры icmp_echo_reply (IP_STATUS):

("27") IP_STATUS_BASE 11000
IP_SUCCESS 0
IP_BUF_TOO_SMALL 11001
IP_DEST_NET_UNREACHABLE 11002
IP_DEST_HOST_UNREACHABLE 11003
IP_DEST_PROT_UNREACHABLE 11004
IP_DEST_PORT_UNREACHABLE 11005
IP_NO_RESOURCES 11006
IP_BAD_OPTION 11007
IP_HW_ERROR 11008
IP_PACKET_TOO_BIG 11009
IP_REQ_TIMED_OUT 11010
IP_BAD_REQ 11011
IP_BAD_ROUTE 11012
IP_TTL_EXPIRED_TRANSIT 11013
IP_TTL_EXPIRED_REASSEM 11014
IP_PARAM_PROBLEM 11015
IP_SOURCE_QUENCH 11016
IP_OPTION_TOO_BIG 11017
IP_BAD_DESTINATION 11018
IP_ADDR_DELETED 11019
IP_SPEC_MTU_CHANGE 11020
IP_MTU_CHANGE 11021
IP_UNLOAD 11022
IP_GENERAL_FAILURE 11050
MAX_IP_STATUS IP_GENERAL_FAILURE
IP_PENDING 11255

Ниже приведен базовый фрагмент кода, необходимый для однократного посыла эхо-запроса:

procedure TForm1.Button1Click(Sender: TObject);

var

hIP : THandle;

pingBuffer : array [0..31] of Char;

pIpe : ^icmp_echo_reply;

pHostEn : PHostEnt;

wVersionRequested : WORD;

lwsaData : WSAData;

error : DWORD;

destAddress : In_Addr;

begin

// Создаем handle

hIP := IcmpCreateFile();

GetMem( pIpe,

sizeof(icmp_echo_reply) + sizeof(pingBuffer));

pIpe. Data := @pingBuffer;

pIpe. DataSize := sizeof(pingBuffer);

wVersionRequested := MakeWord(1,1);

("28") error := WSAStartup(wVersionRequested, lwsaData);

if (error <> 0) then

begin

Memo1.SetTextBuf('Error in call to '+

'WSAStartup().');

Memo1.Lines. Add('Error code: '+IntToStr(error));

Exit;

end;

pHostEn := gethostbyname('delphi. ');

error := GetLastError();

if (error <> 0) then

begin

Memo1.SetTextBuf('Error in call to'+

'gethostbyname().');

Memo1.Lines. Add('Error code: '+IntToStr(error));

Exit;

end;

destAddress := PInAddr(pHostEn^.h_addr_list^)^;

// Посылаем ping-пакет

Memo1.Lines. Add('Pinging ' +

("29") pHostEn^.h_name+' ['+

inet_ntoa(destAddress)+'] '+

' with '+

IntToStr(sizeof(pingBuffer)) +

' bytes of data:');

IcmpSendEcho(hIP,

destAddress. S_addr,

@pingBuffer,

sizeof(pingBuffer),

Nil,

pIpe,

sizeof(icmp_echo_reply) + sizeof(pingBuffer),

5000);

error := GetLastError();

if (error <> 0) then

begin

Memo1.SetTextBuf('Error in call to '+

'IcmpSendEcho()');

Memo1.Lines. Add('Error code: '+IntToStr(error));

Exit;

("30") end;

// Смотрим некоторые из вернувшихся данных

Memo1.Lines. Add('Reply from '+

IntToStr(LoByte(LoWord(pIpe^.Address)))+'.'+

IntToStr(HiByte(LoWord(pIpe^.Address)))+'.'+

IntToStr(LoByte(HiWord(pIpe^.Address)))+'.'+

IntToStr(HiByte(HiWord(pIpe^.Address))));

Memo1.Lines. Add('Reply time: '+IntToStr(pIpe. RTTime)+' ms');

IcmpCloseHandle(hIP);

WSACleanup();

FreeMem(pIpe);

end;

6. ЗАКЛЮЧЕНИЕ

Для тестирования работоспособности протокола TCP/IP используются утилиты Windows.

Утилита ping используется для отправки эхо-запросов ICMP по IP адресу и ожиданию эхо-ответов ICMP. Ping сообщает количество принятых ответов и интервал времени между отправкой запроса и приемом ответа. Утилита ping имеет много различных опций, доступных с помощью ключа. Команда Ping лежит в основе диагностики сетей TCP/IP. Используется для проверки получения приемником TCP/IP пакетов. Если до системы не удается «достучаться» с помощью этой команды, вероятнее всего, с такой системой связаться не удастся.

Утилита tracert используется для трассировки маршрута. Tracert работает путем отправки эхо-запросов ICMP по определенному IP-адресу, увеличивая время жизни (time-to-live, TTL) в поле IP-заголовка, начиная с 1. Затем она анализирует возвращаемые ошибки ICMP. Каждый последующий эхо-запрос должен пройти по сети на один маршрутизатор дальше прежде, чем значение в поле TTL достигнет нуля, и маршрутизатор, который перенаправит этот пакет, возвратит ошибку ICMP Time Exceeded (время закончилось). Tracert просто отображает на экране упорядоченный список маршрутизаторов на пути прохождения пакетов, которые возвращают сообщения об ошибках. Tracert фиксирует число переходов или «прыжков» (hop), которые потребовалось совершить на пути к станции назначения. Если использовать эту утилиту с ключем –d (что означает указание не делать поиска DNS для каждого IP адреса), тогда в отчет заносится IP адрес самого ближнего интерфейса маршрутизатора.

Pathping – одна из самых полезных новых команд диагностики TCP/IP. Она объединяет функциональность Ping и Tracert. Команда Pathping опрашивает каждый маршрутизатор на пути между источником и приемником сигнала, после чего фиксирует задержки при каждой ретрансляции сигнала и потери пакетов.

В данной работе рассматривались основные протоколы сети Internet, а так же принип их работы и задачи. На основе этих теоретических сведений была разработана программа ping, которая проверяет конфигурацию TCP/IP в сети Iternet.

Программа реализована на языке Delphi, с использованием протокола ICMP - Internet Control Message Protocol (протокол управляющих, или контрольных, сообщений).

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

("31") 1. http://www. *****/

2. http://www. /

3. Компьютерные сети. Принципы, технологии, протоколы. – ,

4. Принципы маршрутизации в Internet, 2-е издание – С. Хелби

5. http://www. *****/articles/delphi/

6. Ю. Блэк "Сети ЭВМ : протоколы стандарты интерфейсы " Москва ,Изд-во "Мир" 1990

7. "Разработка и эксплуатация сетей ЭВМ" Москва, Изд-во "Финансы и статистика" 1990

8. Д. Бертсекас, Р. Галлагер "Сети передачи данных" Москва, Изд-во "Мир" 1989

9. "Локальные сети ЭВМ" Москва, Изд-во "Мир " 1990.

ПРИОЖЕНИЕ А

Листинг программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, WinSock, Buttons;

type

TForm1 = class(TForm)

Memo1: TMemo;

Button1: TButton;

Edit1: TEdit;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

("32") procedure Button1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

type

ip_option_information = packed record // Èíôîðìàöèÿ çàãîëîâêà IP (Íàïîëíåíèå

// ýòîé ñòðóêòóðû è ôîðìàò ïîëåé îïèñàí â RFC791.

Ttl : byte; // Âðåìÿ æèçíè (èñïîëüçóåòñÿ traceroute-îì)

Tos : byte; // Òèï îáñëóæèâàíèÿ, îáû÷íî 0

Flags : byte; // Ôëàãè çàãîëîâêà IP, îáû÷íî 0

OptionsSize : byte; // Ðàçìåð äàííûõ â çàãîëîâêå, îáû÷íî 0, ìàêñèìóì 40

OptionsData : Pointer; // Óêàçàòåëü íà äàííûå

end;

icmp_echo_reply = packed record

Address : longint; // Àäðåñ îòâå÷àþùåãî

Status : longint; // IP_STATUS (ñì. íèæå)

RTTime : longint; // Âðåìÿ ìåæäó ýõî-çàïðîñîì è ýõî-îòâåòîì

("33") // â ìèëëèñåêóíäàõ

DataSize : short; // Ðàçìåð âîçâðàùåííûõ äàííûõ

Reserved : short; // Çàðåçåðâèðîâàíî

Data : Pointer; // Óêàçàòåëü íà âîçâðàùåííûå äàííûå

Options : ip_option_information; // Èíôîðìàöèÿ èç çàãîëîâêà IP

end;

PIPINFO = ^ip_option_information;

PVOID = Pointer;

function IcmpCreateFile() : THandle; stdcall; external 'ICMP. DLL' name 'IcmpCreateFile';

function IcmpCloseHandle(IcmpHandle : THandle) : BOOL; stdcall; external 'ICMP. DLL' name 'IcmpCloseHandle';

function IcmpSendEcho(

IcmpHandle : THandle; // handle, âîçâðàùåííûé IcmpCreateFile()

DestAddress : longint; // Àäðåñ ïîëó÷àòåëÿ (â ñåòåâîì ïîðÿäêå)

RequestData : PVOID; // Óêàçàòåëü íà ïîñûëàåìûå äàííûå

RequestSize : Word; // Ðàçìåð ïîñûëàåìûõ äàííûõ

RequestOptns : PIPINFO; // Óêàçàòåëü íà ïîñûëàåìóþ ñòðóêòóðó

// ip_option_information (ìîæåò áûòü nil)

ReplyBuffer : PVOID; // Óêàçàòåëü íà áóôåð, ñîäåðæàùèé îòâåòû.

ReplySize : DWORD; // Ðàçìåð áóôåðà îòâåòîâ

Timeout : DWORD // Âðåìÿ îæèäàíèÿ îòâåòà â ìèëëèñåêóíäàõ

("34") ) : DWORD; stdcall; external 'ICMP. DLL' name 'IcmpSendEcho';

var

Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var

hIP : THandle;

pingBuffer : array [0..31] of Char;

pIpe : ^icmp_echo_reply;

pHostEn : PHostEnt;

wVersionRequested : WORD;

lwsaData : WSAData;

error : DWORD;

destAddress : In_Addr;

g: PChar;

begin

// Ñîçäàåì handle

hIP := IcmpCreateFile();

("35") GetMem( pIpe,

sizeof(icmp_echo_reply) + sizeof(pingBuffer));

pIpe. Data := @pingBuffer;

pIpe. DataSize := sizeof(pingBuffer);

wVersionRequested := MakeWord(1,1);

error := WSAStartup(wVersionRequested, lwsaData);

if (error <> 0) then

begin

Memo1.SetTextBuf('Error in call to '+

'WSAStartup().');

Memo1.Lines. Add('Error code: '+IntToStr(error));

Exit;

end;

Edit1.Text:=g;

pHostEn := gethostbyname(g);

error := GetLastError();

if (error <> 0) then

begin

Memo1.SetTextBuf('Error in call to'+

'gethostbyname().');

("36") Memo1.Lines. Add('Error code: '+IntToStr(error));

Exit;

end;

destAddress := PInAddr(pHostEn^.h_addr_list^)^;

// Ïîñûëàåì ping-ïàêåò

Memo1.Lines. Add('Pinging ' +

pHostEn^.h_name+' ['+

inet_ntoa(destAddress)+'] '+

' with '+

IntToStr(sizeof(pingBuffer)) +

' bytes of data:');

IcmpSendEcho(hIP,

destAddress. S_addr,

@pingBuffer,

sizeof(pingBuffer),

Nil,

pIpe,

sizeof(icmp_echo_reply) + sizeof(pingBuffer),

5000);

error := GetLastError();

("37") if (error <> 0) then

begin

Memo1.SetTextBuf('Error in call to '+

'IcmpSendEcho()');

Memo1.Lines. Add('Error code: '+IntToStr(error));

Exit;

end;

// Ñìîòðèì íåêîòîðûå èç âåðíóâøèõñÿ äàííûõ

Memo1.Lines. Add('Reply from '+

IntToStr(LoByte(LoWord(pIpe^.Address)))+'.'+

IntToStr(HiByte(LoWord(pIpe^.Address)))+'.'+

IntToStr(LoByte(HiWord(pIpe^.Address)))+'.'+

IntToStr(HiByte(HiWord(pIpe^.Address))));

Memo1.Lines. Add('Reply time: '+IntToStr(pIpe. RTTime)+' ms');

Memo1.Lines. Add('DataSize: '+IntToStr(pIpe. DataSize));

IcmpCloseHandle(hIP);

WSACleanup();

FreeMem(pIpe);

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

("38") begin

Form2.Show;

end;

end.

preview_end()  

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5