По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
В небольших сетевых устройствах с одним сетевым процессом (ASIC или NPU) переместить пакет из входной очереди в выходную просто. Оба интерфейса ввода и вывода используют общий пул памяти пакетов, поэтому указатель на пакет может быть перемещен из одной очереди в другую. Для достижения большего количества портов и более крупных устройств - особенно устройств шасси - должна быть внутренняя шина или матрица, которая соединяет механизмы обработки входных и выходных пакетов. Одним из распространенных типов структуры, используемой для соединения механизмов обработки пакетов в сетевом устройстве, является структура матрицы; Рисунок ниже иллюстрирует это. Размер и структура полотна матрицы зависят от количества подключенных портов. Если в коммутаторе больше портов, чем возможно для подключения через одну матрицу кросс-панелей, то коммутатор будет использовать несколько структур кросс-панелей. Распространенной топологией для такого типа полотна является многоступенчатая закрытая структура, соединяющая входную и выходную полотна матрицы вместе. Вы можете думать об этом как о матрице из матриц. Для работы матрицы требуется чувство времени (или, скорее, фиксированный временной интервал) и планировщик. В каждый интервал времени один порт вывода (отправки) соединяется с одним портом ввода (приема), так что в течение этого периода времени отправитель может передать пакет, кадр или набор пакетов получателю. Планировщик "соединяет" правильные точки пересечения на матрице, чтобы передачи происходили в нужный период времени. Например: Line card 1 (LC1) хочет отправить пакет в LC3. LC3 хочет отправить пакет в LC5. В течение следующего временного цикла планировщик может подключить строку A к столбцу 1 ("установить" соединение в A3) и подключить строку C к столбцу 5 ("установить" соединение в C5), чтобы между этими парами был установлен канал связи. Пересечения и конфликты Что произойдет, если два передатчика захотят отправить пакет одному получателю? Например, если в течение одного периода времени и LC1, и LC2 хотят отправить пакет в LC9 через полотно перекрестной матрицы? Это называется конфликтом, и это ситуация, которую должен обрабатывать планировщик структуры. Какому из двух входных портов должно быть разрешено отправлять свой трафик на выходной порт? А где же тем временем должны находится очереди входящего трафика? Один из вариантов - хранить пакеты во входной очереди; коммутаторы, использующие эту технику, называются коммутаторами с очередью ввода (input-queued switches). Такие коммутаторы испытывают head-of-line (HOL). Блокировка HOL - это то, что происходит, когда пакет в начале линии, ожидающий пересылки через структуру, блокирует другие пакеты, стоящие в очереди за ним. Другой вариант - использовать в коммутаторе несколько виртуальных очередей вывода (virtual output queues- VOQ) для каждого порта ввода. VOQ дают матрице перекрестной сети несколько мест для хранения входящих пакетов, пока они ожидают доставки на свои выходные порты. Во многих конструкциях коммутаторов один VOQ существует на каждый выходной порт, для которого предназначен входной трафик. Следовательно, входной порт может иметь несколько пакетов в очереди в нескольких разных VOQ, предполагая, что несколько разных выходных портов. Каждый из этих VOQ может обслуживаться в течение одного тактового цикла. Это означает, что блокировка HOL устраняется, потому что несколько разных пакетов из одной входной очереди могут проходить через матрицу кроссбара одновременно. Для порта ввода существует не одна очередь, а несколько разных очередей. Даже с VOQ остается потенциальная возможность разногласий по структуре перекрестной сети. Наиболее распространенный пример - это когда два или более входящих пакета должны покинуть коммутатор через один и тот же выходной порт в одно и то же время, или, точнее, в одном тактовом цикле. Выходной порт может отправлять только один пакет за такт. Определение того, какая входная очередь будет доставлять трафик на выходной порт первой, - это алгоритм, определяемый производителем коммутатора для максимального использования аппаратного обеспечения. iSLIP-это один из алгоритмов планирования, используемых коммутаторами для решения этой проблемы. Обзор алгоритма iSLIP Алгоритм iSLIP разрешает конфликты межсетевых экранов, распределяя трафик таким образом, чтобы сетевое устройство достигало неблокирующей пропускной способности. Для понимания этого полезно внимательно изучить iSLIP в его простейшей форме, проанализировав, что происходит, когда алгоритм iSLIP выполняется один раз. Во время выполнения iSLIP происходят три важных события: Запрос. Все входные точки (вход) на перекрестной матрице с поставленным в очередь трафиком спрашивают свои выходные точки (выход), могут ли они отправить. Предоставление (грант). Каждая точка вывода, получившая запрос, должна определять, какая точка ввода будет разрешена для отправки. Если есть один запрос, то грант предоставляется без дальнейшего обсуждения. Однако при наличии нескольких запросов точка вывода должна определять, какая точка ввода может отправлять. Это делается через циклического перебора, где одному запросу предоставляется грант, последующему запросу предоставляется грант во время следующего выполнения iSLIP, и так далее по кругу. Когда было принято решение об этом конкретном выполнении iSLIP, каждая точка вывода отправляет свое сообщение о предоставлении, эффективно сигнализируя о разрешении на отправку, в соответствующую точку ввода. Принятие. Входная точка рассматривает сообщения о предоставлении гранта, полученные ею от выходных точек, выбирая грант циклическим способом. После выбора входной сигнал уведомляет выходной сигнал о том, что грант принят. Если и только, если выходная точка уведомлена о том, что грант был принят, выходная точка перейдет к следующему запросу. Если сообщение accept не получено, то точка вывода попытается обслужить предыдущий запрос во время следующего выполнения iSLIP. Понимание процессов запроса, предоставления и принятия дает нам представление о том, как пакеты могут быть доставлены одновременно через матрицу кроссбара без конфликтов. Однако, если вы поразмыслите над сложным набором входов, VOQ и выходов, вы можете понять, что один запуск iSLIP не планирует доставки столько пакетов, сколько могло бы быть после одного выполнения. Понимание процессов запроса, предоставления и принятия дает нам представление о том, как пакеты могут быть доставлены одновременно через матрицу кроссбара без конфликтов. Однако, если вы поразмыслите над сложным набором входов, VOQ и выходов, вы поймете, что один запуск iSLIP не планирует доставки столько пакетов, сколько могло бы быть после одного выполнения. Конечно, некоторые входы были предоставлены выходам, и некоторые пакеты могут быть переадресованы, но возможно, что некоторые выходы никогда не были согласованы с ожидающим входом. Другими словами, если вы ограничите iSLIP одним исполнением за такт, мы оставим доступную выходную полосу пропускания неиспользуемой. Поэтому обычной практикой является запуск iSLIP через несколько итераций. В результате количество совпадений ввода-вывода максимально. За один раз через матрицу кроссбара может быть отправлено больше пакетов. Сколько раз нужно запускать iSLIP, чтобы максимально увеличить количество пакетов, которые можно коммутировать через матрицу кроссбара за такт? Исследования показывают, что для шаблонов трафика, преобладающих в большинстве сетей, запуск iSLIP четыре раза лучше всего сопоставляет входные и выходные данные в матрице. Выполнение iSLIP более четырех раз не приводит к значительному увеличению количества совпадений. Другими словами, запуск iSLIP пять, шесть или десять раз в большинстве сетевых сред ничего не даст. Выход за рамки iSLIP Это обсуждение до сих пор предполагало, что движение, протекающее через матрицу, имеет одинаковое значение. Однако в современных центрах обработки данных одни классы трафика имеют приоритет над другими. Например, фреймы хранилища Fibre Channel over Ethernet (FCoE) должны проходить через матрицу без потерь, в то время как сеанс TCP, попадающий в класс QoS, этого не делает. Обрабатывает ли iSLIP трафик с разными приоритетами, отдавая одни запросы раньше других? Да, но в модифицированной форме алгоритма, который мы рассмотрели. Варианты iSLIP включают Приоритетный, Пороговый и Взвешенный iSLIP. Помимо iSLIP, который здесь используется просто как удобный пример управления конфликтами, поставщики будут писать свои собственные алгоритмы, соответствующие аппаратным возможностям своей собственной коммутационной матрицы. Например, в этом разделе рассматривается только матрица перекрестных линий с входящей очередью, но многие структуры перекрестных линий предлагают также организацию очереди вывода на выходной стороне матрицы.
img
Ошибочно можно подумать, что на вопрос «Какой язык программирования самый быстрый?» можно легко ответить. На самом же деле, когда речь идет о скорости и о программировании, то здесь возникает множество технических нюансов. Для начала определим - быстрее не значит лучше, это зависит от варианта использования. (Но мы к этому еще вернемся.) Здесь мы подробно рассмотрим, что делает язык программирования «быстрым», почему это так важно и как вы можете начать изучать некоторые из самых быстрых языков программирования. Что делает язык программирования быстрым? Ключевая особенность языка программирования, которая определяет его скорость, заключается в том, компилируемый он или интерпретируемый. Компилируемые языки, такие как Lisp, C++, Go, Rust и Swift, должны быть преобразованы в машинный код (см. ассемблер ниже), который уже непосредственно взаимодействует с аппаратной составляющей. Интерпретируемые языки, такие как Python, JavaScript, Ruby и PHP, работают путем преобразования исходного кода в машинный код налету. Поскольку этот процесс преобразования происходит непосредственно во время выполнения кода и увеличивает нагрузку, то можно сделать вывод, что интерпретируемые языки работают медленнее, чем компилируемые. Есть несколько других факторов, определяющих скорость языка. Возьмите, например, Java и C#. Эти языки являются и компилируемыми, и интерпретируемыми. Однако вместо компиляции в код на языке ассемблера они компилируются в байт-код. Скомпилированный байт-код интерпретируется для запуска на виртуальной машине, оптимизированной для прямого взаимодействия с аппаратной составляющей. Байт-код – это своего рода язык ассемблера для виртуальной машины. Такой процесс делает эти языки более быстрыми, чем, например, JavaScript, который преобразует текстовый исходный код непосредственно в машинный. Другой фактор – это статическая или динамическая типизация. Языки со статической типизацией определяют типы всех переменных при компиляции языка, а языки с динамической типизацией проверяют тип переменных во время выполнения кода. Эта проверка типов в режиме реального времени несет за собой некоторые затраты вычислительных ресурсов, что делает языки с динамической типизацией медленнее, чем языки со статической типизацией. Какие языки программирования самые быстрые? Самый быстрый язык программирования должен напрямую взаимодействовать с машиной. Давайте рассмотрим некоторые из самых быстрых языков, с которыми вы можете столкнуться, а также посмотрим для чего они используются. Assembly (ассемблер) На самом деле язык ассемблера не является каким-то одним конкретным языком. Это просто название, которое дают любому низкоуровневому языку программирования, который напрямую взаимодействует с аппаратным обеспечением компьютера. Это означает, что ассемблер для вашего ноутбука будет отличаться от ассемблера для вашего мобильного телефона, поскольку у них разные процессоры, требующие разных инструкций. Обычно ассемблер используют только разработчики, которые работают непосредственно с аппаратной составляющей или которые создают языки программирования. Lisp Lisp – это один из первых языков программирования. Ему уже более 60 лет. Было множество разновидностей этого языка, и многие другие языки программирования использовали некоторый набор функциональных возможностей, характерный для Lisp. Clojure, например, - это современный диалект Lisp, реализованный для виртуальной машины Java. Однако Lisp находится в этом списке не благодаря Clojure. Common Lisp компилируется непосредственно на языке ассемблера, а это означает, что код, который вы пишете на Lisp, будет ассемблерным при запуске в качестве исполняемого файла. Lisp все еще используется, но чаще вы можете его встретить именно как Clojure, а не Common Lisp. C/C++ C и C++ также являются компилируемыми языками. С – это простой процедурный язык программирования, который был разработан в начале 1970-х годов и который широко используется и по сей день (в основном во встроенных приложениях из-за его скорости и небольшого размера). С++ - это язык, расширяющий С и добавляющий объектно-ориентированные функции. Именно из-за этого он заменил С во многих приложениях. С++ используется в тех случаях, когда важна производительность, например, при разработке 3D-видеоигр или операционных систем. Go Go, также известный как Golang, - это язык программирования, разработанный Google. Он компилируется в ассемблер, как и большинство других языков, упомянутых здесь, но у него гораздо больше современных функций, более простой синтаксис и на нем легче писать (в сравнении с давним лидером среди быстрых языков С/С++). Golang часто используется в сетевых серверах и распределенных системах, где его скорость может повысить производительность этих систем. Rust Rust – еще один компилируемый язык программирования, который также является более безопасной альтернативой С/С++. Он ориентирован на скорость, безопасность памяти и параллельную обработку. Он часто используется в игровых движках, компонентах браузера и движках моделирования виртуальной реальности, где скорость в приоритете. C# C# - это язык, подобный Java. Он сначала компилируется в байт-код, а затем интерпретируется виртуальной машиной. Это делает его похожим на интерпретируемый язык, но при этом добавляет скорости. C#, разработанный Microsoft, прост в освоении и содержит множество сторонних библиотек, которые упрощают и ускоряют разработку. Он часто используется для создания настольных приложений, видеоигр и веб-сервисов. Java Java компилируется в байт-код, который затем интерпретируется виртуальной машиной Java (JVM). Это один из первых языков, использующий такую процедуру, поэтому он быстро стал (и остается) таким популярным. Использование виртуальной машины подразумевает, что приложение Java может быть перемещено из одной операционной системы в другую без изменения кода, если для второй операционной системы доступна версия JVM. Эта кроссплатформенная функция в сочетании со скоростью делает Java популярным языком программирования для многих прикладных задач, включая веб-разработку, разработку настольных приложений, разработку игр, разработку мобильных приложений и т.д. Swift Swift – это современный язык программирования, разработанный Apple, который компилируется в ассемблер. Он был разработан с целью замены старого языка Objective-C. Он используется для разработки ваших любимых продуктов Apple, таких как Apple TV, Apple Watch, iPhone и iPad. Swift на сегодняшний день – самый популярный язык разработки для Mac OS X и iOS. Но при этом он также является кроссплатформенным и начинает использоваться и в других прикладных задачах. Не всегда дело в скорости Хотя скорость и важна при выборе языка программирования, но есть множество других факторов, о которых тоже не стоит забывать. При написании кода бывают ситуации, когда другие характеристики языка программирования могут оказаться важнее скорости. В конце концов, если бы скорость была в приоритете для каждого проекта, то языки программирования, не вошедшие в этот список, не применялись бы вовсе, и мы бы писали код на ассемблере. Так или иначе, правда в том, что некоторые из самых популярных языков программирования даже не вошли в этот список. Скорость относительна, и во многих случаях программа на С++ будет в 10 раз быстрее программы на Python, но в данном случае это не имеет значения. В конце концов, если операция завершится за 0,001 секунды, а не за 0,01 секунды, вы действительно почувствуете разницу? Однако разница будет заметна, если вам придется выполнять одну и ту же операцию тысячи раз в цикле. В большинстве случаев скорость разработки куда важнее скорости выполнения. Медленную программу можно масштабировать для повышения ее производительности, выделяя на нее больше ресурсов, а вычислительные ресурсы намного дешевле, чем оплата времени разработки для написания кода на более сложном для написания языке низкого уровня. Более медленные языки программирования популярны, потому что на них легче писать, они имеют множество доступных сторонних библиотек и могут быть быстрее развернуты. Все это ускоряет процесс разработки. Хотя скорость языка программирования не всегда является самой важной характеристикой, у нее все же есть определенные преимущества.
img
Также, как и системы электронной почты, системы VoIP телефонии есть практически у каждой компании. Это могут быть простые облачные АТС, арендуемые у провайдера или собственные выделенные под IP-АТС серверные мощности, но среда, по которой передаётся сигнализация и пользовательский трафик данных систем один – Интернет. Это делает систему VoIP телефонии одной из самых востребованных злоумышленниками целей, ведь получив к ней доступ, открывается масса возможностей для извлечения прибыли или нанесения другого ущерба. Если Вы банально откроете логи своего межсетевого экрана и поищите запросы, поступающие извне, то наверняка увидите, что тысячи сканеров каждую секунду пробуют узнать какие сервисы работают на вашем внешнем адресе. И даже если этот адрес никак не связан с IP-телефонией, то вы всё равно там увидите запросы, связанные с VoIP. Это говорит о том, что злоумышленники очень хотят найти уязвимые системы телефонии и знают как проэксплуатировать выявленную брешь. В этой статье разберём какой профит получают хакеры, взломавшие VoIP систему, основные методы атак и протоколы, на которые они направлены. Чего хотят плохие парни? Как только Ваша систему IP-телефонии будет зарегистрирована в сети VoIP провайдера – вы сможете позвонить в любой уголок мира - на мобильный телефон в Тайване, на такософон в одной из красных будок Лондона и даже на декадно-шаговую АТС в музее Франкфурта-на-Майне! Что сделает злоумышленник, получивший такую возможность? – Воспользуется ею за Ваш счёт! В большинстве плачевно известных случаев, получая доступ к системе по средствам какой-либо уязвимости, злоумышленники делают следующее: совершают дорогостоящие звонки на дальние расстояния (long-distance calls); перепродают возможность звонка третьим лицам, не подозревающим, что услуга предоставляется на украденных мощностях звонят на номера с премиум обслуживанием, зарабатывая кэшбэк на свой счёт Существует провайдеры телефонных номеров с премиум обслуживанием (international premium rate number - IPRN). Это такие номера, звонки на которые, происходят очень часто и со всего мира. Например, номера для технической поддержки, прогноза погоды, сервисы для взрослых. Провайдеры таких номеров платят часть прибыли тому, кто гонит на них трафик - генератору звонков (call generator). В некоторых случаях провайдер осознанно участвует в мошеннической схеме, а иногда и вовсе не подозревает, что платит кэшбэк злоумышленникам за трафик, сгенерированный на "угнанных" мощностях. В конечном итоге и провайдеры и call generator'ы остаются в выигрыше, а платить приходится тому кого взломали. Всё вышеописанное подпадает под одно определение, которому в английской литературе дали название - toll fraud. На русский язык это можно перевести как неправомочные действия и несанкционированное пользование чужими ресурсами телефонной связи. Злоумышленникам также может быть интересно вывести вашу систему телефонии из строя, устроив атаку типа DoS (Denial of service) - отказ в обслуживании, хотя это случается реже toll fraud'а. Нам известны случаи, когда целый ботнет из серверов FreePBX начинал забрасывать IP-АТС заказчика "мусорными" вызовами, в результате чего на какое-то время, пользоваться системой стало просто невозможно. Техническая реализация Согласно исследованию IBM наиболее атакуемыми VoIP протоколами являются SIP, SCCP и H.255. Самым распространённым VoIP протоколом на сегодняшний день является SIP, поэтому и большинство атак осуществляется именно на этот протокол. Всё начинается с поиска сервера для проведения атаки. Протокол SIP использует стандартный порт 5060, поэтому первое, что сделает потенциальный злоумышленник – это отправит SIP-запрос на данный порт, чтобы посмотреть какой придет ответ. Как правило, для поиска SIP-сервиса используются стандартные запросы INVITE, REGISTER или OPTIONS. Хорошей практикой является перенос SIP-сервиса со стандартного порта на какой-нибудь другой. Таким образом мы можем увести сервис из-под удара. Ещё лучше – ограничить доступ к этому порту только для доверенного списка IP-адресов. Однако, иногда такой возможности просто нет. Для изначального установления соединения в SIP используется метод “тройного рукопожатия” , начинающийся с запроса INVITE, который подтверждается ответом 200 OK. Однако, если этот ответ от вызывающей стороны не получен, то соединение не устанавливается. Если наблюдается много таких незаконченных соединений за коротких промежуток времени, то это может быть признаком того, что против сервера идёт DoS-атака. Кстати, точно таким же образом, злоумышленник может провести атаку против легитимного устройства пользователя, чтобы сбросить его регистрацию на сервере и зарегистрироваться самому. Существует также метод “флуда” запросами REGISTER. Для этого злоумышленник должен знать параметры зарегистрированного устройства, регистрацию которого он хочет сбросить, подделать заголовок Contact в SIP пакете и отправить много (достаточно раз в 15 секунд) запросов REGISTER на сервер. Такой метод называется Registration-hijacking. Эти атаки возможны благодаря тому, что протокол SIP передает информацию в открытом виде, а значит атакующий может её собрать, модифицировать и воспроизвести. Помимо этого, в протоколе SIP не предусмотрено проверки целостности сообщений, поэтому атаки с модифицированной информацией и воспроизведенными пакетами не детектируются. Злоумышленникам совсем не обязательно перехватывать ваш трафик, чтобы вытащить запросы регистраций легитимных пользователей, потом модифицировать их и подсовывать обратно серверу. После обнаружения открытого SIP-порта, можно просто устроить перебор зарегистрированных внутренних номеров, например, от 10 до 9999. Ответ от сервера на запрос регистрации по такой схеме будет однозначно свидетельствовать о том, какие номера есть на IP-АТС, а каких там нет. Например, я могу отправить запрос на регистрацию с номера 2526 с неправильным паролем. Если на сервере зарегистрирован такой номер, то я получу ответ, что пароль неверен (Wrong Password), а если нет – то сообщение о том, что номер не найден (Not Found). Собрав список зарегистрированных номеров можно потом применить против них метод перебора паролей и получить доступ к внутреннему номеру легитимного пользователя. Другой неприятные метод атаки на VoIP позволяет прослушивать ваши телефонные разговоры. Для этого необходимо перехватить сигнальную информацию и соответствующие медиа потоки определенного соединения. Медиа потоки, которые как раз и содержат пакеты с голосом, обычно передаются по UDP с использованием протокола RTP. Захватив достаточное количество пакетов, можно декодировать RTP поток, а затем сделать из них простой аудио файл, который и будет содержать голос. Сделать это можно с помощью программы Wireshark. Мы рассказали про базовые методы проведения атак на VoIP системы. В следующих статьях, мы обязательно расскажем как защититься от каждого типа атаки, как выявить признаки атак и какие инструменты можно для этого использовать.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59