Доброго времени суток. Решил поделиться с вами своим пониманием этого вопроса, и механизма его решения, используемого в устройствах WAN оптимизации Silver Peak.
Итак, практическое большинство современных сетей, использует в своей основе пакетную передачу и протокол IP. Информация передается через сеть кусочками информации, и обычно размер этих кусочков варьируется от 1 байта до 1500 байт (Я имею ввиду полезную нагрузку). По пути через WAN сеть, такие пакеты могут пройти через великое множество маршрутизаторов и шлюзов. Некоторые из этих перевалочных пунктов вы можете увидеть при помощи утилиты Traceroute. Но это далеко не все реальные транзитные узлы, например вы не увидите здесь те узлы, через которые трафик прошел туннелированным (MPLS VPN, GRE и т.д.). При этом, с ненулевой долей вероятности, какой-нибудь из транзитных узлов будет в данный момент сильно загружен, и уничтожит ваш пакет, чтобы не допускать перегрузки сети. И чем больше таких транзитных узлов, тем больше вероятность потери пакета в сети.
В качестве примера, приведу картинку, показывающую то, как может меняться процент потерянных пакетов, с течением времени, на одном и том же канале связи:
Теоретически, такое отбрасывание пакета, вещь вполне безопасная и нормальная – за целостность передачи данных следит специальный протокол TCP. Но как всегда, есть нюансы. Нюансы состоят в том, что протокол TCP, в случае потери пакета, должен будет послать его через сеть заново. Но для того, чтобы принять решение о перепосылке, нужно дождаться уведомления от приемной стороны, что очередной пакет не получен. И тут на первый план выходит такой параметр сети, как задержка сигнала. Чем она дольше, тем дольше передающая сторона будет в неведении, и тем медленнее будет происходить передача информации.
Ниже приведены графики зависимости скорости передачи трафика от задержки в канале связи и процента потери пакетов. Из него видно, что на самом деле, основная потеря в скорости передачи в канале с типовой для WAN задержкой 50-100 миллисекунд, происходит при еще вполне, казалось бы, незначительном проценте потерь: 1-2%.
Если же говорить о приложениях, работающих через UDP, и ориентированных на работу в режиме реального времени, например телефония или видеоконференции, то в них не предусмотрен и не оправдан механизм повторной передачи. И если есть потери, то, как ни крути, вылезают артефакты в виде «кваканий», «заиканий», и рассыпающейся периодически картинке.
Оказывается, на потерю пакетов можно посмотреть несколько по другим углом, и решить ее достаточно элегантным способом, как это сделали инженеры Silver Peak. Наверняка многие из вас слышали, про специальные методы кодирования, позволяющие выявлять ошибки, а некоторые из них даже исправлять ошибки в информации. Например, ECC коды и коды Рида-Соломона, впервые промышленно использованные еще в 70-х годах при появлении CD дисков. Общий смысл таких кодов, в том, что они вносят некоторую избыточность, причем избыточность эта, может адаптивно подстраиваться под текущие характеристики канала. Другим, более наглядным примером, может служить технология защиты информации на дисковых массивах RAID5, которая предусматривает один избыточный дисковый накопитель на каждые 3, 4, 5 и более дисков с данными. В случае пакетной передачи, аналогом дисков, является непосредственно пакет — на каждые N пакетов, создается один избыточный.
Беда в том, что такие технологии, имеющее общее англоязычное название Forward Error Correction (FEC) применяются, обычно, только на физическом уровне канала передачи данных. И никоим образом не могут устранить потери информации, связанные с перегрузками в сети, динамическими перестроениями топологии и т.д. Инженеры Silver Peak реализовали технологию FEC на канальном уровне, так, что между любыми двумя устройствами Silver Peak, создается свой «туннель», в котором поддерживается и адаптивно подстраивается некоторое количество избыточных пакетов. Типовая топология канала связи с применением этого решения и технологии FEC, показана на следующей картинке:
Из нее видно, как устройство не передающей стороне генерирует избыточный пакет, а устройство на приемной воссоздает на его основе, другой, потерянный пакет.
Чтобы оценить эффективность применения FEC для устранения потерь пакетов, можно посмотреть на время передачи файла через сеть, с определенным процентом потери трафика. Из следующей картинки видно, что даже незначительный процент избыточности, позволяет в несколько раз повысить скорость передачи файла, а про заикания, и картины в стиле кубизма во время видеоконференции можно с облегчением забыть:
Автор: ykochubeev