← Cloudflare Spectrum / spectrum / reference
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;
};