![](https://habrastorage.org/getpro/habr/upload_files/60b/263/911/60b263911ba1cd52c37d072904e81b49.png)
Ранее мы опубликовывали статью «TAP или SPAN? Рекомендации по зеркалированию трафика для профессионалов», в которой описаны отличия подходов по съему трафика и проведен их анализ. Опрос и комментарии показали, что многие специалисты активно используют SPAN. Данной статьей мы дополним информацию о SPAN и расскажем, почему ее нельзя использовать для мониторинга и съема трафика в современной сети.
Как работает SPAN?
SPAN – это функция коммутатора или маршрутизатора, которая позволяет копировать пакеты с указанного порта/портов (порт зеркалирования) и отправлять на выбранный порт (порт мониторинга). Порт мониторинга при этом является обычным портом, который конфигурируется для передачи трафика от зеркалируемого порта/портов. При этом зеркалировать можно пакеты и на прием, и на передачу или только в одном направлении.
Для понимания работы функции SPAN схематично изобразим коммутатор (рисунок 1). На схеме мы оставляем только порты, коммутационную матрицу и буфер коммутационной матрицы. Как же работает коммутатор? На порт приходит пакет и поступает на коммутационную матрицу. Матрица сохраняет пакет в буфер, определяет порт назначения и передаёт в него пакет, освобождая буфер. Буфер коммутационной матрицы представляет собой память, в которую помещается пакет, ожидающий своей обработки.
![Рисунок 1 Рисунок 1](https://habrastorage.org/getpro/habr/upload_files/7a5/a09/852/7a5a0985237bd7a82ab1410f84e0bbe9.png)
Разберемся, как работает функция SPAN (рисунок 4). Для начала надо назначить зеркалируемые порты (все пакеты, поступающие с него или на него, в зависимости от конфигурации, будут копироваться) и порт мониторинга. Как только коммутационная матрица принимает или собирается передать пакет через зеркалируемые порты, она дополнительно передаёт копии пакетов на порт мониторинга. И пока пакет не будет передан на порт мониторинга, он остаётся в буфере.
Стоит отметить, когда пакет приходит на порт коммутатора/маршрутизатора, он проходит проверку целостности, а затем может быть модифицирован (добавление/замена заголовков) или отброшен. В итоге на порт мониторинга придёт не исходный пакет, а модифицированный. Или вовсе не придёт.
Поведение SPAN при нагрузке
Как же будет себя вести коммутатор при различных нагрузках и вариантах использования порта мониторинга? Ведь зеркалируемых портов может быть как один, так и десять, а количество SPAN-портов обычно не превышает 4. Кроме того, меняется загруженность зеркалируемых портов.
Самой важной характеристикой порта мониторинга является пропускная способность: если коммутационная матрица будет подавать на порт мониторинга больше пакетов, чем он сможет передать, то они будут отбрасываться. На графике (рисунок 2) показано зеркалирование трафика с одного порта: пропускной способности порта мониторинга хватает с запасом, чтобы передать все пакеты. Но что будет, если зеркалировать трафик с нескольких портов? Трафика будет в разы больше пропускной способности порта мониторинга (рисунок 3). Пропускной способности порта мониторинга не будет хватать, и часть пакетов будет отбрасываться.
![Рисунок 2 Рисунок 2](https://habrastorage.org/getpro/habr/upload_files/d82/b8b/f07/d82b8bf0773283b997da65344236a72b.png)
![Рисунок 3 Рисунок 3](https://habrastorage.org/getpro/habr/upload_files/d61/53b/889/d6153b889b4157072e116775f5db557c.png)
Поговорим про реализацию функции SPAN. Как мы уже упоминали, пока пакет не будет передан и на целевой порт, и на порт зеркалирования, он занимает место в буфере пакетов. Зеркалирование нескольких портов (или обоих направлений передачи одного порта) приводит к скапливанию пакетов в очереди на порт мониторинга и заполнению буфера. Некоторые производители ставят самый низкий приоритет для портов мониторинга, иными словами, оборудование под нагрузкой будет выбирать между передачей трафика на обычные порты или порты мониторинга. В таком оборудовании ситуация с превышением зеркалируемого трафика над пропускной способностью порта мониторинга будет сопровождаться отбрасыванием зеркалируемого трафика (рисунок 4). Некоторые производители делают отдельно буфер для порта мониторинга. Он необходим для того, чтобы исключить влияние порта мониторинга на работоспособность обычных портов. Но этот буфер меньше основного, и когда он переполняется, происходит такая же потеря зеркалируемых пакетов.
![Рисунок 4 Рисунок 4](https://habrastorage.org/getpro/habr/upload_files/db7/20e/ca4/db720eca46f373d449cad6d649dfdb34.png)
Влияние функции SPAN на сеть
Почему же производители оборудования ставят низкий приоритет и заранее закладывают потерю зеркалируемого трафика? Превышение объема зеркалируемого трафика над полосой пропускания портов мониторинга приводит к заполнению буфера и отбрасыванию пакетов по обычным портам (даже если они слабонагружены), ведь пакетный буфер - общий (рисунок 5). Критичный к задержкам трафик (например IP-телефония) при этом будет потерян. Переповторы остального трафика на транспортном уровне (преимущественно, это TCP) увеличат нагрузку, вызовут снижение пропускной способности и приведут к деградации производительности сети. Переповторы также передаются на порт мониторинга и усложняют анализ данных.
![Рисунок 5 Рисунок 5](https://habrastorage.org/getpro/habr/upload_files/2e4/05e/521/2e405e52142b1b1e4be3330567687e46.png)
Более того, даже с пониженным приоритетом все эти эффекты будут наблюдаться при повышенной нагрузке на коммутатор: пакетный буфер рассчитан на обычную работу устройства. Если половина буфера будет занята пакетами, ожидающими отправки на порт мониторинга, оставшейся половины для полноценный работы устройства уже не хватит.
Потери пакетов при низкой нагрузке на коммутатор
Даже в слабонагруженных сетях трафик передается неравномерно. Сетевые карты накапливают данные для передачи и затем передают их на скорости порта. Так называемые всплески трафика (Burst) вызывают эффект локальных по времени перегрузок портов (рисунок 6). Именно на их сглаживание при совпадении порта назначения закладываются ресурсы буфера в коммутаторе. Но даже в устройстве с 10G портами это единицы мегабайт, а соответственно, единицы миллисекунд превышения пропускной способности по одному порту. Назначая один из портов портом мониторинга, мы гарантируем переполнение буфера и потери, как минимум, зеркалируемых пакетов.
![Рисунок 6 Рисунок 6](https://habrastorage.org/getpro/habr/upload_files/42f/8f7/32c/42f8f732c34464aeafe21fc794c873c7.png)
Заключение
Функция SPAN была придумана уже давно для:
Выборочного мониторинга портов при поиске неисправностей и ошибок передачи в сети
Обеспечения информационной безопасности на слабонагруженных портах, выходящих за границы периметра
SPAN – вспомогательная функция коммутаторов или маршрутизаторов, фактически работающая в режиме "как есть". При этом в современной сети зеркалируемых трафик является уже не вспомогательным. Зеркалирование трафика необходимо для мониторинга внутрисетевой активности и одновременного подключения средств анализа и информационной безопасности.
В отличие от требований к SPAN-портам, сами порты зеркалирования за прошедшие десятилетия не изменились (если не считать возможности туннелирования, никак не решающих проблем потери трафика). В итоге дорогостоящие системы безопасности просто не получают полноценных исходных данных для корректной работы, не говоря уже о предобработке трафика для снижения нагрузки на системы DPI.