INTEGRITY Документация

Simple Proxy Protocol Header

IP-адрес источника и порт клиента кодируются в заголовке фиксированной длины 38 октетов, который добавляется перед полезной нагрузкой каждой проксируемой UDP-датаграммы в формате, описанном ниже.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Magic Number         |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
|                                                               |
+                                                               +
|                                                               |
+                         Client Address                        +
|                                                               |
+                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
|                                                               |
+                                                               +
|                                                               |
+                         Proxy Address                         +
|                                                               |
+                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |         Client Port           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Proxy Port          |          Payload...           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Содержимое заголовка приведено ниже.

Магическое число

16-битное фиксированное значение 0x56EC для SPP. Это поле используется для идентификации протокола SPP и его 38-байтного заголовка SPP.

Client Address

128-битный адрес отправителя проксируемой UDP-дейтаграммы, то есть клиента. Адрес IPv6, если клиент использовал адресацию IPv6, либо адрес IPv6 с отображением IPv4 (см. RFC 4291 ↗) в случае клиента IPv4.

Адрес прокси

128-битный адрес получателя проксируемой UDP-дейтаграммы, то есть прокси. Содержимое следует интерпретировать так же, как адрес клиента.

Client port

16-битный номер порта источника проксируемой UDP-дейтаграммы. Другими словами, номер UDP-порта, с которого клиент отправил дейтаграмму.

Порт прокси

16-битный номер порта назначения проксируемой UDP-дейтаграммы. Другими словами, номер UDP-порта, на котором прокси получил дейтаграмму.

Полезная нагрузка

Данные, следующие за заголовком дейтаграммы. Магическое число, адреса и номера портов кодируются в сетевом порядке байтов.

Соответствующая структура C, описывающая заголовок, выглядит так:

struct {
    uint16_t magic;
    uint8_t  client_addr[16];
    uint8_t  proxy_addr[16];
    uint16_t client_port;
    uint16_t proxy_port;
};