
Как быстро снизить спам: всё, что нужно знать о Solana и QUIC
О чём эта статья?
Solana — самый быстрый и масштабируемый блокчейн на современном рынке. Он известен высокой скоростью транзакций и подходит для множества сценариев использования. Несмотря на эти достижения, сеть Solana сталкивалась со страхом, неопределённостью и сомнениями (FUD) из-за простоев. Раньше для такого беспокойства были основания, но сейчас оно неоправданно. Почему? В течение последнего года инженеры Solana Labs работали над несколькими обновлениями сети. Главное из них — замена собственного протокола Solana на базе необработанного UDP, который использовался для приёма транзакций, на QUIC.
В этой статье мы рассмотрим принципы работы сетевых протоколов TCP и UDP, а также разберём, как QUIC улучшает оба подхода. Затем мы сосредоточимся на Solana и обсудим конкретные преимущества QUIC для этой сети. Статья поможет вам подробно понять, почему это обновление сети стало важной технической вехой для Solana.
Обновления сети Solana
13 декабря 2022 года Solana Foundation опубликовала статью под названием «Обновления сети Solana». В ней организация перечислила несколько обновлений сети и описала ход их внедрения. Вот эти обновления:
QUIC
- Уже работает в Mainnet-beta
QoS с учётом доли стейкинга
- Уже работает в Mainnet-beta
Рынки комиссий
- Уже работают в Mainnet-beta, поддержка RPC и кошельков появится в ближайшее время
- Следить за ходом работ можно здесь
Увеличение размера транзакции
- Находится в разработке
Компактное состояние голосования
- Уже работает в Testnet
Одной из основных причин прошлых простоев Solana был спам. Вот несколько примеров:
- Спам во время Grape IDO 14 сентября 2021 года
- DDoS-атаки с 6 по 12 января 2022 года
- Спам во время выпуска NFT с 30 апреля по 1 мая 2022 года
После внедрения QUIC не было зарегистрировано ни одного случая простоя Solana из-за спама. Это делает QUIC важным достижением в обработке сетевого трафика и приёме данных в Solana. Прежде чем изучать QUIC, необходимо разобраться в принципах работы сетевых протоколов. Понимание основ сетевых технологий позволит оценить реальное влияние QUIC на сеть Solana.
Что такое сетевой протокол?
Сетевой протокол — это установленный набор правил передачи данных между устройствами в одной сети. Сетевые протоколы позволяют подключённым устройствам легко взаимодействовать независимо от их внутреннего устройства, структуры или конструкции.
Представьте, что вы сидите напротив друга в ресторане в Париже. Вы оба решаете говорить по-французски, поэтому ваша беседа идёт легко. Решение говорить по-французски означает, что вы договорились использовать понятные обеим сторонам правила грамматики, лексику и произношение.
Сетевые протоколы выполняют похожую функцию для подключённых к сети устройств — примерно как французский язык служит «протоколом» для беседы в парижском ресторане. Выбирая TCP, UDP или QUIC, стороны соглашаются использовать установленный набор правил и соглашений для обмена информацией. Соблюдение конкретного сетевого протокола гарантирует, что подключённые устройства смогут понимать друг друга без путаницы.
Что такое TCP?
Transmission Control Protocol (TCP) — стандартизированный интерфейс связи для передачи потоков данных между двумя конечными точками сети. Винт Серф и Боб Кан создали монолитный протокол Transmission Control Program, который затем разделили на модульную архитектуру из TCP и Internet Protocol (IP). Весь набор протоколов называется TCP/IP. В этой статье под сокращением TCP я подразумеваю именно Transmission Control Protocol, а не весь набор протоколов.
TCP ориентирован на соединение: перед отправкой данных клиент и сервер должны установить связь. TCP использует трёхэтапное рукопожатие: синхронизация (SYN), синхронизация с подтверждением (SYN-ACK) и подтверждение (ACK). SYN можно представить как протянутую для рукопожатия руку и вопрос, готов ли собеседник говорить. SYN-ACK — собеседник пожимает вашу руку, сообщает, что готов говорить, и спрашивает, хотите ли вы продолжить. ACK — вы отвечаете рукопожатием и подтверждаете, что хотите продолжить разговор. На этом этапе сеанс установлен. Обе стороны знают, что соединены друг с другом, и готовы обмениваться информацией.
TCP разбивает данные на пакеты и отправляет их по сети. В каждый пакет добавляется небольшой объём служебных данных. Они включают порядковый номер для обнаружения потерянных или нарушающих последовательность пакетов, а также контрольную сумму для выявления ошибок внутри пакета.
Когда разговор прерывается, мы просим собеседника повторить сказанное, чтобы убедиться, что правильно его услышали. TCP аналогичным образом обрабатывает прерывания с помощью автоматического запроса повторной передачи (Automatic Repeat Request, ARQ). При возникновении проблемы ARQ сообщает отправителю, что повреждённый или потерянный пакет нужно отправить повторно. Затем TCP снижает скорость передачи данных и ограничивает количество неподтверждённых пакетов, которые могут находиться в пути. После устранения ошибки TCP применяет механизмы предотвращения перегрузки и постепенно увеличивает скорость.
TCP подходит не для всех сценариев, поскольку упорядочивает весь трафик. Если часть данных потеряна или повреждена, все последующие пакеты вынуждены ждать. Но что, если ждать не обязательно?
Что такое UDP?
User Datagram Protocol (UDP) — стандартизированный интерфейс связи для передачи данных по сети. В отличие от TCP, UDP не устанавливает соединение и не гарантирует доставку, порядок или отсутствие дублирования пакетов данных. UDP не выполняет рукопожатий, поэтому на передачу данных может повлиять ненадёжность базовой сети. Благодаря отсутствию затрат времени на установление соединения с получателем UDP быстрее других протоколов. Однако по этой же причине его иногда называют «ненадёжным протоколом датаграмм».
UDP отправляет по сети датаграммы. Датаграммы — это более автономные блоки данных, содержащие информацию для маршрутизации от источника к получателю. Благодаря этой информации маршрутизация одной датаграммы не зависит от других. Датаграмма состоит из заголовка и данных. Заголовок содержит четыре 16-битных поля: необязательный порт источника, порт назначения, длину и необязательную контрольную сумму. Процесс отправки выглядит так:
- Отправляющее приложение создаёт UDP-сокет
- Отправляющее приложение помещает нужные данные в UDP-датаграмму с заголовком, содержащим порт назначения и другую необходимую информацию
- Датаграмма передаётся на уровень IP для маршрутизации и доставки
- Уровень IP принимает датаграмму, передаёт её на уровень UDP и удаляет заголовок
- Датаграмма отправляется приложению, которое прослушивает указанный порт
Представьте UDP как разговор с человеком на другом конце шумного помещения. Вы кричите ему, не проверяя, услышал ли он вас, и не ждёте ответа. Вы хотите быстро передать сообщение без долгого разговора. Это рискованно: собеседник может услышать не всё, но такой подход бывает очень эффективным.
Зачем использовать протокол связи без установления соединения, такой как UDP, если существует более надёжный TCP? UDP очень полезен для приложений, чувствительных ко времени, и сценариев, в которых допустима потеря части данных. Потерять несколько кадров во время видеоигры с друзьями гораздо лучше, чем постоянно сталкиваться с паузами и буферизацией. UDP также используется для вызовов VoIP, запросов Domain Name System (DNS), мониторинга и журналирования.
QUIC: баланс эффективности и надёжности
QUIC — современный протокол транспортного уровня, разработанный Джимом Роскиндом в Google в 2013 году. Он сочетает надёжность TCP с низкой задержкой UDP и создаёт оптимальную среду для быстрой и безопасной асинхронной связи. QUIC переносит защищённые сеансы и развитые механизмы управления потоком, характерные для TCP, в более гибкую и быструю среду UDP.
QUIC упрощает установление соединения, включая обмен криптографическими ключами и параметрами протокола в начальное рукопожатие, которое всегда защищено шифрованием Transport Layer Security (TLS). Протокол поддерживает мультиплексированные соединения через UDP. Несколько независимых потоков данных могут достигать конечных точек, не влияя друг на друга. QUIC управляет потоком каждого соединения отдельно. Даже если в одном потоке возникают ошибки, остальные продолжают работать. Это помогает предотвратить блокировку начала очереди, когда первый пакет задерживает всю очередь пакетов. Такая проблема часто возникает в TCP-соединениях.
Если пакет потерян или повреждён, QUIC интеллектуально выполняет повторную передачу данных, сохраняя целостность и непрерывность связи. Кроме того, QUIC устойчив к изменениям сетевой среды. Каждый пакет содержит идентификатор соединения, который однозначно определяет соединение с сервером независимо от источника. Соединение можно восстановить, отправив ещё один пакет: каждый пакет содержит этот идентификатор, поэтому исходное соединение остаётся действительным. Образно говоря, если вы перейдёте в другую комнату, разговор не прервётся и продолжится без помех.
Снова представьте, что вы пытаетесь поговорить с другом в шумном помещении. Но теперь у вас есть зашифрованные рации, которые обеспечивают безопасную и чёткую связь. Вы обсуждаете разные темы, а друг подтверждает каждое сообщение поднятым большим пальцем. Если он выглядит озадаченным, вы повторяете непонятное сообщение, чтобы ничего не потерялось. Даже если вы или ваш друг перейдёте в другую комнату, диалог не прервётся. В этом суть QUIC — надёжная, адаптивная и эффективная связь.
Как Solana реализует QUIC
QUIC даёт Solana несколько преимуществ:
- Сокращение времени установления соединения: QUIC оптимизирует рукопожатие и снижает задержку
- Мультиплексирование и эффективное управление пакетами: QUIC одновременно обрабатывает несколько потоков данных без блокировки начала очереди, повышая пропускную способность и эффективность транзакций
- Адаптивность и устойчивость: протокол адаптируется к изменяющимся условиям сети, что особенно важно для распределённой и децентрализованной системы вроде Solana
- Настройка для оптимизации сети: гибкость QUIC позволяет создавать специализированные реализации, в том числе реализацию Solana, для достижения конкретных целей производительности и безопасности сети
QUIC добавили на порты, принимающие пользовательские транзакции. Это позволяет ограничивать трафик отдельных участников, чтобы сеть могла сосредоточиться на обработке настоящих транзакций. QUIC работает в Solana и был полностью внедрён в Mainnet-beta в версии 1.13.4. После интеграции стабильность и пропускная способность сети заметно улучшились.
Несмотря на эти улучшения, недавняя перегрузка сети вызвала дискуссию о вычислительной эффективности QUIC по сравнению с прежней реализацией UDP в Solana. Критики отмечают, что подход с необработанным UDP позволял валидаторам сосредоточиться исключительно на обработке транзакций, а не на борьбе со спамом рукопожатий и управлении шифрованием. Кроме того, в реализации Solana обмен ключами и их проверка не входят в начальное рукопожатие. Solana использует предусмотренную QUIC возможность отправить «пакет проверки» для подтверждения IP-адреса. Его задача — не проверять сертификат на первом этапе рукопожатия, а выполнить проверку во второй части после подтверждения IP-адреса. Вопрос о том, сталкивалась ли Solana с простоями из-за спама или DDoS-атак, остаётся спорным, поскольку недавний сбой сети Solana в феврале можно считать отказом в обслуживании.
По мере развития сети важно постоянно анализировать и совершенствовать внедрённые решения. QUIC стремится устранить многие недостатки TCP и UDP, но его эффективность остаётся предметом споров. Важно учитывать, как решение будет работать на аппаратном уровне. Благодаря своей простоте TCP работает на аппаратном уровне гораздо эффективнее QUIC. Можно обоснованно утверждать, что с набором инструкций AES протокол на базе TCP обеспечил бы более высокую пропускную способность и эффективность с точки зрения TPS, чем QUIC.
Особенно стоит отметить команду Jump Crypto, которая расширяет возможности QUIC. При разработке Firedancer, нового клиента валидатора для Solana, команда создала собственную надёжную и масштабируемую реализацию. Сетевой стек Firedancer изначально спроектирован для использования Receive Side Scaling — аппаратно ускоряемой балансировки нагрузки. Благодаря параллельной архитектуре каждое ядро CPU может эффективно обрабатывать отдельный сегмент входящего трафика. Команда написала в X:
Демонстрацию и ветку публикаций о техническом достижении Firedancer в работе с QUIC можно найти здесь.
Заключение
Поздравляем! В этой статье мы рассмотрели основы сетевых протоколов, уделив особое внимание TCP и UDP, а также их развитию в QUIC. Мы также изучили реализацию QUIC в Solana и её ключевую роль в улучшении сети. QUIC повысил устойчивость сети Solana к спаму и DDoS-атакам, но рост сети выявил новые проблемы и вызвал дискуссии о вычислительной эффективности и нюансах реализации протокола.
QUIC воплощает главную цель Solana — обеспечить высокую пропускную способность и низкую задержку сети. Возможности мультиплексирования и восстановления после потери пакетов выводят Solana на передний план дискуссий о производительности и масштабируемости. Реализация команды Firedancer демонстрирует адаптивность QUIC и потенциал специализированных оптимизаций для меняющихся потребностей сети.
Понимание QUIC помогает разработчикам Solana принимать более обоснованные решения по самым разным вопросам — от архитектуры приложений до ошибок транзакций. Solana постоянно развивается, как и QUIC. Следить за последними изменениями сети — лучший способ создавать производительные приложения на базе Solana. Даже если вы не разработчик, более глубокое техническое понимание QUIC поможет разобраться, почему Solana — производительный блокчейн, известный своей скоростью и масштабируемостью.
Если вы дочитали до этого места, анон, спасибо! Укажите свой адрес электронной почты ниже, чтобы не пропускать новости Solana. Готовы узнать больше? Читайте новые статьи в блоге Helius и продолжайте знакомство с Solana уже сегодня.
Дополнительные ресурсы и материалы
Похожие статьи
Подпишитесь на Helius
Следите за новостями разработки на Solana и получайте уведомления о наших публикациях


