Logo
  • ГЛАВНАЯ
  • ОБО МНЕ
  • СЕРТИФИКАТЫ
nocip.ssh@mail.ru
Главная  >  Cisco Routing

Типы сообщений BGP: OPEN, UPDATE, KEEPALIVE, NOTIFICATION


Создана 28.09.2026
Отредактирована 02.10.2026
Введение
Представьте, что два маршрутизатора хотят обменяться маршрутами. Сначала они устанавливают TCP-соединение (порт 179). Но TCP — это лишь «труба» для доставки пакетов. Чтобы договориться о параметрах, передать маршруты, поддержать связь и сообщить об ошибке, BGP использует четыре типа сообщений — OPEN, UPDATE, KEEPALIVE, NOTIFICATION. В этой статье мы разберём каждый тип подробно, покажем последовательность их отправки и объясним структуру BGP-сообщения.
Последовательность сообщений при установке сессии

R1 R2 │──── TCP SYN ────────────►│ │◄─── TCP SYN-ACK ─────────│ │──── TCP ACK ────────────►│ │──── OPEN ───────────────►│ │◄─── OPEN ────────────────│ │──── KEEPALIVE ──────────►│ │◄─── KEEPALIVE ───────────│ │──── UPDATE ─────────────►│ │◄─── UPDATE ──────────────│ │──── KEEPALIVE ──────────►│ │◄─── KEEPALIVE ───────────│

Пояснение к схеме, какие состояния проходит сессия:

Idle → Connect → Active → OpenSent → OpenConfirm → Established

Заголовок протокола BGP

Всем BGP-сообщениям предшествует общий заголовок, формат которого показан на рис. 1. Заголовок имеет следующие поля:
  • Заголовок (Header): 19 октет.
  • Marker (16 октет).
  • Length (2 октета).
  • Type (1 октет) — код типа сообщения.
Рис. 1. Общий заголовок BGP
Marker
Поле маркера используется в целях обеспечения безопасности и контроля синхронизации BGP-партнёров. Значение этого поля зависит от типа отправляемого сообщения.
Length
Это поле определяет общую длину BGP-сообщения, включая заголовок.
Type
Поле Тип представляет собой код разновидности сообщения и может принимать значения, перечисленные в таблице 1.
Таблица 1. Коды типов сообщений
Код
Тип
Назначение
1
OPEN
Установка сессии
2
UPDATE
Обмен маршрутами
3
NOTIFICATION
Ошибка / закрытие
4
KEEPALIVE
Поддержание сессии
Обратимся теперь к различным типам сообщений.

Сообщение типа OPEN

Это первое сообщение, отправляемое после установления TCP-сеанса между одним или несколькими равноправными партнёрами. Оно содержит номер автономной системы маршрутизатора, а также служит для согласования параметров протокола и установки значений таймеров, которые будут использоваться сеансом. Дополнительные поля заголовка BGP-сообщения типа OPEN показаны на рис. 2.
Рис. 2. Поля, добавляемые в заголовок BGP-сообщения типа OPEN
Поле Версия (Version)
Это поле содержит номер версии протокола BGP, которую использует маршрутизатор - отправитель сообщения OPEN. Благодаря этой информации маршрутизаторы выбирают самую новую версию протокола, которую они оба могут поддерживать. Если маршрутизатор отправляет сообщение с указанием версии 4, а получатель работает с более ранней версией протокола BGP, он уведомляет отправителя, что не знаком с версией 4 и прекращает TCP-сеанс. Тогда отправитель должен вновь открыть сеанс с параметрами, соответствующими ранней версии протокола BGP.
Поле Моя автономная система (My Autonomous System)
Данное поле определяет номер AS отправителя (ASN). Каждая AS присваивается уникальный номер.
Поле Время сохранения (Hold Time)
Это поле характеризует время, которое отправитель сообщения OPEN предлагает занести в таймер сохранения. Значение таймера определяет максимальный интервал времени, в течение которого маршрутизатор ожидает сообщений UPDATE или KEEPALIVE от соседа, прежде чем сеанс будет считаться прекращенным. Нулевое значение таймера говорит о том, что отправитель не собирается обмениваться KEEPALIVE-сообщениями. Использовать данный режим не рекомендуется, иначе конечное устройство не узнает о потере связи с соседом.
Обычно в таймер сохранения заносится наименьшее значение из тех, что получено в сообщении OPEN и определено при конфигурировании получателя. Если значение таймера не равно нулю, оно не должно быть меньше 3 секунд. Соседний маршрутизатор может отклонить сообщение OPEN, если в поле Время сохранения указана неприемлемая величина.
Поле Идентификатор BGP (BGP Identifier)
Это поле содержит значение, определяющее маршрутизатор BGP. Маршрутизатор задаёт идентификатор BGP случайным образом при отправке сообщения OPEN. Идентификатор должен быть уникальным в пределах всей автономной системы (AS) — это важно для корректной работы BGP и предотвращения конфликтов. Хотя идентификатор BGP и может быть случайной величиной, как правило, маршрутизатор выбирает логический IP-адрес, присвоенный интерфейсу. В этом случае выбранное значение используется во всех сеансах BGP.
Поле Длина списка необязательных параметров (Optional Parameters Length)
Здесь указывается длина поля Необязательные параметры, которое имеется в сообщении OPEN. Если необязательные параметры отсутствуют, длина поля равна нулю.
Поле Необязательные параметры (Optional Parameters)
Это поле содержит любые необязательные параметры, включаемые в сообщение OPEN. Каждый из них представлен в формате: тип (1 октет), длина параметра (1 октет) и значение, которое имеет переменную длину.

Сообщение UPDATE

Сообщение этого типа содержит текущую информацию о топологии сети. Оно может содержать данные о новом маршруте или объявить о закрытии маршрутов, либо передавать ту и другую информацию одновременно. Одно UPDATE-сообщение может содержать один или несколько новых маршрутов (префиксов), если они имеют одинаковые атрибуты пути. 
Сообщения UPDATE всегда включают заголовок BGP фиксированного размера, а также другие поля, показанные на рисунке 3 (отметим, что некоторые из этих полей являются необязательными).
Рис. 3. Поля, добавляемые в заголовок BGP-сообщения типа UPDATE
Обсудим подробнее эти поля.
Поле Длина списка отменённых маршрутов (Withdrawn Routes Length)
Согласно официальной спецификации BGP поле имеет название Длина списка неосуществимых маршрутов. Оно указывает длину поля Отменённые маршруты в октетах.
Поле Отменённые маршруты (Withdrawn Routes)
Это поле содержит список IP-адресных префиксов маршрутов, которые более не существуют или стали недоступными вследствие изменения политики. Каждая такая запись, в свою очередь, содержит 2 поля: Длина префикса (1 октет) и IP-префикс. Последнее поле имеет переменную длину и указывает IP-префикс отменённого маршрута, причём за этим полем следуют разряды, дополняющие префикс до полного числа октетов.
Поле Полная длина списка атрибутов пути (Total Path Attribute Length)
Указывает размер поля Атрибуты пути.
Поле Атрибуты пути (Path Attributes)
Это поле может содержать большое количество атрибутов. Каждый из них включает код типа (где каждому биту соответствует определённый тип) и несколько бит, описывающих применение атрибута. Атрибуты соответствуют IP-префиксам, представленным в поле Информация о доступности сетевого уровня (NLRI - Network Layer Reachability Information). В таблице 2 приведены типы атрибутов в зависимости от того, какое значение принимает тот или иной бит.
Таблица 2. Типы атрибутов (Attribute Flags)
Бит (нумерация с 1)
Бит (RFC 4271)
Флаг
Тип атрибута
1 (старший)
0
Optional
1 - дополнительный (optional)
0 - стандартный (well-known)
2
1
Transitive
1 - переходной (transitive)
0 - непереходной (non-transitive)
3
2
Partial
1 - частичный (partial)
0 — полный (complete)
Примечание: Для стандартных (well-known) и дополнительных непереходных (optional non-transitive) атрибутов этот бит ДОЛЖЕН быть установлен в 0 
4 (младший)
3
Extended Length
1 — расширенная длина (extended length): длина атрибута > 255 октетов
0 — длина атрибута 1 октет
💡 Пояснение: В RFC 4271 биты нумеруются с 0 (от старшего к младшему): бит 0 — старший, бит 3 — младший. В таблице используется нумерация с 1 для удобства чтения. Оба варианта эквивалентны.
Если первый бит равен 1, это означает, что все стандартные атрибуты должны включаться в маршрутную информацию и отправляться другим маршрутизаторам после того, как партнер (peer) получит и обработает сообщение. Не каждое BGP-приложение поддерживает все дополнительные атрибуты. Второй бит (флаг переходного атрибута) определяет, как обрабатываются нераспознанные дополнительные атрибуты. Если этот бит равен 1, то атрибут будет передаваться соседям. При нулевом значении бита атрибут игнорируется и далее не передаётся.
💡 Внимание

Все стандартные атрибуты считаются переходными.

Некоторые атрибуты могут относиться только к iBGP или только к eBGP. Мы будем исходить из того, что iBGP и eBGP - это один и тот же протокол с вариациями, относящимися к отношению между парнёрами и типами атрибутов. Напомним, в каких случаях используется каждый из них. Протокол iBGP служит для обмена данными между партнёрами внутри AS, а протокол eBGP обеспечивает обмен маршрутной информацией между BGP-операторами различных AS.
Атрибуты пути можно рассматривать как метрику, используемую BGP-маршрутизаторами, данные о которой передаются другим партнёрам вместе с UPDATE-сообщениями. Эти сообщения могут содержать информацию о локальных или внешних маршрутах и об изменениях топологии сети.
Все атрибуты пути можно разделить на 4 категории:
  • Стандартный обязательный (well-known mandatory)
  • Стандартный на усмотрение оператора (well-known discretionary)
  • Дополнительный переходной (optional transitive)
  • Дополнительный непереходной (optional non-transitive)
Ниже рассматриваются все категории и те атрибуты, которые к ним относятся.
Стандартные обязательные атрибуты
Используются партнёрами для передачи данных обо всех своих соседях. Эти атрибуты должны присутствовать во всех сообщениях об обновлении маршрутов (т.е. они должны быть в каждом из маршрутов) и поддерживаться любыми BGP-приложениями. К стандартным обязательным атрибутам относятся:
AS_PATH (Autonomous System Path - путь через автономные системы, код типа 2) Это стандартный обязательный атрибут. Он составлен из совокупности сегментов пути переменной длины и представляет автономные системы, через которые доставлена маршрутная информация. Каждому сегменту соответствуют следующие поля: тип сегмента пути, длина сегмента и оценка сегмента. Тип сегмента пути представляет собой поле длиной в 1 октет. Различные типы сегментов представлены в таблице 3.
Поля атрибута AS_PATH, изменяются только BGP-операторами, которые распространяют маршруты за пределы автономной системы. BGP-операторы присоединяют данные о своих собственных AS к вектору пути в каждом из полей. Когда BGP-оператор создаёт описание маршрута, он должен включить номер своей AS в  UPDATE-сообщения, отправляемые другим автономным системам. Если же сообщение отправляется iBGP-оператору в пределах той же самой AS, соответствующее поле остаётся пустым. Это позволяет избежать зацикливания при работе протокола iBGP, поскольку путь, полученный iBGP-оператором от другого iBGP-оператора, будет игнорироваться.
Применение атрибута AS_PATH делает протокол BGP протоколом вектора расстояния. BGP-сообщения содержат последовательность номера AS, описывающих полный путь, который прошло сообщение.
NEXT_HOP (следующий транзитный узел, код типа 3) Стандартный обязательный атрибут, определяющий IP-адрес маршрутизатора, являющегося следующим шагом на пути к точке назначения. Следующие транзитные узлы на пути ко всем сетям назначения перечисляются в поле информации о доступности сетевого уровня (NLRI) UPDATE-сообщений. BGP-маршрутизатор не должен объявлять следующим транзитным узлом того партнёра, кому он передаёт созданное им описание маршрута. Точно так же маршрутизатор не должен создавать маршрут, в котором он сам будет следующим транзитным узлом, если при его конфигурировании не применялась опция next-hop-self.
При отправке iBGP-соседу BGP-маршрутизатор не изменяет NEXT_HOP (если не настроена опция next-hop-self). Если маршрут локально инициирован, в качестве NEXT_HOP используется адрес интерфейса, через который достижима анонсируемая сеть.
Маршрутизатор BGP может объявить следующим транзитным узлом внешний маршрутизатор, если IP-адрес последнего получен от одного из партнёров.
ORIGIN (происхождение маршрута, код типа 1) Стандартный обязательный атрибут, определяющий тип источника информации о маршруте, содержащейся в поле NLRI.  Типы атрибута ORIGIN и соответствующие им коды представлены в таблице 4.
Таблица 3. Типы сегментов пути
Код
Тип сегмента пути
0
Не определён
1
AS_SET (неупорядоченный список AS в UPDATE-сообщении). AS_SET используется для агрегированных маршрутов, чтобы указать, что путь проходит через набор автономных систем без указания их порядка. Это важно для предотвращения петель.
2
AS_SEQUENCE (упорядоченный список AS в UPDATE-сообщении)
3
AS_CONFED_SET (неупорядоченный список AS, через которые прошло UPDATE-сообщение в локальной конфедерации)
4
AS_CONFED_SEQUENCE (упорядоченный список AS, через которые прошло UPDATE-сообщение в локальной конфедерации)
Таблица 4. Типы атрибута ORIGIN
Код
Тип
0
IGP (информация о доступности сетевого уровня (NLRI) является внутренней по отношению к исходной AS).
1
EGP (NLRI-информация получена с помощью внешнего протокола маршрутизации).
2
INCOMPLETE (NLRI соответствует статическому маршруту). Этот код также может использоваться, если маршрут, распространяемый из IGP в BGP, имеет флаг incomplete.
Стандартные атрибуты на усмотрение оператора
Эти атрибуты могут включаться в описание маршрута, но это не обязательно. К стандартным атрибутам на усмотрение оператора относятся:
LOCAL_PREF (Local Preference - степень предпочтительности маршрута для собственной AS, код типа 5) Содержит информацию лишь об одной AS и используется только протокол iBGP.
ATOMIC_AGGREGATE (агрегирование, код типа 6) Информирует BGP-операторов о маршрутной политике, применяемой при наличии перекрывающихся маршрутов. В основном служит для указания того, следует ли использовать префикс. Этому атрибуту соответствует длина пути, равная 0.
Дополнительные переходные атрибуты
Дополнительные переходные атрибуты могут не распознаваться некоторыми BGP-приложениями. Эти атрибуты применяются во многих частных сетях, работающих под управлением BGP-протоколов. Если BGP-приложение не распознаёт дополнительный переходной атрибут в сообщении, оно помечает данное сообщение как имеющее частичную информацию о маршруте, но при этом отправляет его далее своим соседям. Дополнительными переходными атрибутами являются:
AGGREGATOR (агрегирующий маршрутизатор, код типа 7) Имеет длину 6 октетов: 2 октета занимает номер AS, а 4 - IP-адрес маршрутизатора. Этот атрибут включается в сообщение для того, чтобы указать маршрутизатор, выполнивший агрегирование (группировку) маршрутов, и его автономную систему.
COMMUNITIES (сообщества, код типа 8) Позволяет маршруту принадлежать к одному и более сообществам. Сообществом является группа маршрутов, имеющих какое-либо общее свойство. Этот атрибут включён в BGP для упрощения формирования сложных маршрутных политик. Пусть, например, сеть научной организации обрабатывает как собственный, так и коммерческий трафик. В этом случае для управления процессом маршрутизации может применяться маршрутная политика acceptable-use (допустимые правила пользования). Тогда соответствующее значение атрибута COMMUNITIES для маршрутов, относящихся к научной организации, будет указывать на то, что эти маршруты удовлетворяют требованиям политики допустимых правил пользования. Каждый маршрут может относиться к нескольким сообществам.
Атрибут COMMUNITIES имеет переменную длину. В настоящее время используются 32-битовые атрибуты, состоящие из 2 частей. Первые 16 бит заполнены нулями (т.е. это "широко известное " сообщество, о котором знает весь Интернет) или содержат номер AS, являющейся "владельцем" кода сообщества. Вторые 16 бит (собственно код) определяются автономной системой (владельцем), а в случае широко известных сообществ - Комитетом технического обслуживания Интернета (IETF).
Дополнительные непереходные атрибуты
Эти атрибуты могут не распознаваться некоторыми BGP-приложениями. Они применяются во многих частных сетях. Даже если BGP-приложение распознаёт дополнительный непереходной атрибут, сообщение всё равно не передаётся далее.
Маршрутизатор, получивший сообщение с данным атрибутом, расстанется с этим сообщением, т.е. удалит его и не будет передавать соседям. К дополнительным непереходным атрибутам относятся:
MED (MULTI_EXIT_DISCRIMINATOR - дискриминатор маршрута, код типа 4) Применяется в BGP как дополнительный критерий выбора маршрута. Процедура отбора маршрута по этому критерию запускается ещё до начала основного процесса вычисления наилучшего пути. Прежде этот атрибут назывался межсистемной метрикой или BGP-метрикой. Ранее обсуждавшиеся нами метрики сообщали локальным маршрутизаторам AS о том, какой путь следует выбрать для выхода из автономной системы, а MED информирует соседние AS, по какому каналу им нужно принимать трафик.
Атрибут MED используется в тех случаях, когда две автономные системы соединяются несколькими линиями (каналами) или с помощью нескольких маршрутизаторов. Значение MED не передаётся другим AS и рассматривается только как компонент BGP, необходимый для выбора маршрута.
ORIGINATOR_ID (ID инициатора, код типа 9) и CLUSTER_LIST (список кластеров, код типа 10) Применяются для поддержки функции рефлектора маршрутов. Эти атрибуты подробно освещаются в руководствах по протоколу BGPv2 и здесь не обсуждаются. Длина атрибута ORIGINATOR_ID равна 4 октетам, а атрибут CLUSTER_LIST имеет переменную длину, кратную 4 октетам.
Атрибут ORIGINATOR_ID служит для указания маршрутизатора, который первоначально посылает информацию о маршруте в логическую сеть iBGP. Если iBGP-маршрутизатор повторно получает информацию о маршруте, он уже знает о происхождении этой информации и не пересылает её тем партнёрам, которым она была отправлена ранее.
Атрибут CLUSTER_LIST применяется для обнаружения тех обновлений маршрутов, которые связаны с циклами, проходящими через определённые кластеры. Если оказывается, что маршрут ранее объявлялся кластеру, сообщение об обновлении отбрасывается.
Атрибуты ORIGINATOR_ID и CLUSTER_LIST используются только в контексте Route Reflection (RR) и являются дополнительными непереходными (optional non-transitive).
MP_REACH_NLRI (Multiprotocol Reachable NLRI - маршрут, достижимый с помощью многопротокольного расширения BGP, код типа 14) Применяется в многопротокольных расширениях BGP. Это атрибут определяет новый маршрут, относящийся к специфическому семейству адресов и недостижимый с помощью протокола IP версии 4. Атрибут в данном обзоре не рассматривается.
MP_UNREACH_NLRI (Multiprotocol Unreachable NLRI - отменён маршрут, достижимый с помощью многопротокольного расширения BGP, код типа 15) Содержит в UPDATE-сообщениях протокола BGP, для которых атрибуты ORIGIN и AS_PATH являются обычными атрибутами BGPv4. Код типа 15 указывает на то, что маршрут отменён. Атрибут в данном обзоре не рассматривается.
💡 Внимание

Атрибут Destination Preference (степень предпочтительности маршрута для сети назначения, код 11) определён MCI. Атрибуты Advertiser (код 12) и RCID_PATH (код 13) определены Baynet. Код типа 255 зарезервирован на будущее. Все эти атрибуты в этом обзоре не рассматриваются.

Информация о доступности сетевого уровня

Поле информации о доступности сетевого уровня (Network Layer Reachability Information, NLRI) содержит значения IP-префиксов. Причём все префиксы, находящиеся в этом поле, должны соответствовать всем атрибутам, которые содержатся в поле Атрибуты пути.
Одно UPDATE-сообщение может содержать несколько новых маршрутов (префиксов), если они имеют одинаковые атрибуты пути. Отменять маршруты также можно несколькими записями в одном сообщении. В сообщении UPDATE длина списка всех отменённых маршрутов указывается в одном поле. Но информация о длине префикса относится к каждому конкретному маршруту. Нулевая длина префикса соответствует маршруту по умолчанию.
Информация о префиксах в поле NLRI состоит из двух частей: длина префикса (1 октет) и префикс, который имеет переменную длину, причём не обязательно содержит IP-адрес.

Сообщение NOTIFICATION

Сообщение NOTIFICATION генерируется при возникновении ошибки в сеансе  BGP. После того как BGP-оператор посылает это сообщение, он разрывает BGP-соединение. Сетевой администратор может воспользоваться информацией, содержащейся в сообщении NOTIFICATION, чтобы выяснить причину прекращения сеанса. Сообщение NOTIFICATION содержит 2 типа кода ошибок, которые помещаются в различные поля: код ошибки и субкод ошибки (см. рис. 4).
Рис. 4. Поля сообщения NOTIFICATION, добавляемые к общему заголовку BGP
Поле  Код ошибки (Error сode) 
Это 1-октетное целое число без знака показывает тип сообщения NOTIFICATION. Коды типов перечислены в таблице 5.
Таблица 5. Коды ошибок
Код 
Описание
1
Message Header Error - ошибка в заголовке сообщения
2
OPEN Message Error - ошибка в сообщении OPEN
3
UPDATE Message Error - ошибка в сообщении UPDATE
4
Hold Timer Expired - истекло время удержания
5
Finite State Machine Error - ошибка машины конечных состояний
6
Cease - разрыв соединения
Поле  Субкод ошибки (Error subсode) 
Это 1-октетное целое число без знака содержит более конкретную информацию о природе ошибки. С каждым кодом ошибки (Error Code) может быть связан один или несколько субкодов (Error Subcode). При отсутствии субкода для ошибки в поле Error Subcode помещается нулевое значение. В следующих трёх таблицах описываются субкоды ошибок.
Таблица 6. Субкоды ошибок заголовка сообщения (Message Header Error)
Субкод
Описание
0
Unspecified - не указан.
1
Connection Not Synchronized - соединение не синхронизировано.
2
Bad Message Length - некорректный размер сообщения.
3
Bad Message Type - некорректный тип сообщения.
Таблица 7. Субкоды ошибок сообщения OPEN (OPEN Message Error)
Субкод
Описание
0
Unspecified - не указан.
1
Unsupported Version Number - неподдерживаемый номер версии.
2
Bad Peer AS - некорректный номер AS у партнёра.
3
Bad BGP Identifier - некорректный идентификатор BGP.
4
Unsupported Optional Parameter - неподдерживаемый дополнительный параметр.
5
Ошибка идентификации [Не используется, см. Приложение A в RFC 4271].
6
Unacceptable Hold Time - недопустимое значение времени удержания.
Таблица 8. Субкоды ошибок сообщения UPDATE (UPDATE Message Error)
Субкод
Описание
0
Unspecified - не указан.
1
Malformed Attribute List - некорректно сформированный список атрибутов.
2
Unrecognized Well-known Attribute - нераспознанный общеизвестный атрибут.
3
Missing Well-known Attribute - отсутствует обязательный атрибут.
4
Attribute Flags Error - некорректные флаги атрибута.
5
Attribute Length Error - некорректный размер атрибута.
6
Invalid ORIGIN Attribute - некорректный атрибут ORIGIN.
7
[Не используется, см. Приложение A в RFC 4271].
8
Invalid NEXT_HOP Attribute - некорректный атрибут NEXT_HOP.
9
Optional Attribute Error - ошибка в дополнительном атрибуте.
10
Invalid Network Field - некорректное указание сети.
11
Malformed AS_PATH - некорректный формат AS_PATH.
Поле  Данные (Data) 
Это поле переменной длины служит для диагностики причины генерации сообщения NOTIFICATION. Содержимое поля Данные (Data) зависит от значений полей Error Code и Error Subcode. Размер поля Data можно определить по формуле:
Length (в заголовке) = 21 + размер поля Data
где 21 октет — это минимальный размер сообщения NOTIFICATION: 19 октетов общего заголовка BGP + 1 октет Error Code + 1 октет Error Subcode. Если поле Data отсутствует, размер сообщения равен 21 октету.

Сообщение KEEPALIVE

BGP не использует на уровне TCP каких-либо механизмов для проверки доступности других узлов. Вместо этого используются сообщения KEEPALIVE, которыми партнёры обмениваются достаточно часто, чтобы между двумя сообщениями не истекло время, заданное таймером удержания (Hold Timer). Разумным значением максимального интервала между передачей двух последовательных сообщений KEEPALIVE является треть интервала, заданного значением Hold Time. Недопустимо передавать сообщения KEEPALIVE чаще одного раза в секунду. Если Hold Time = 0, периодическая передача сообщений KEEPALIVE недопустима. Сообщение KEEPALIVE состоит только из заголовка, следовательно, размер такого сообщения равен 19 октетам.

Приветствуем всех любителей ретро-игровой индустрии на канале RetraR
Сувенирная и брендированная продукция с персонажами из любимых игр.
RetraR — Компьютерные игры для Nintendo Game Boy
RetraR - Computer games for Nintendo Game Boy 🌌🛸👽👾☄️🤖
RetraR - 任天堂ゲームボーイ用コンピュータゲーム 🎮🕹️👾

RetraR в VK
Канал - RetraR в Telegram
Канал - RetraR в Telegram

Оформить заказ

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

Спасибо за заказ

Ваш заказ принят в обработку. 

Мы свяжемся с вами в ближайшее время.