La cap?alera ¨¦s present a tots els missatges de petici¨® i de resposta entre els components de Áú»¢¶Ä²©. ?s necessari determinar la longitud del missatge, si ¨¦s comprimit o no, i si ¨¦s o no un paquet gros.
El protocol de comunicacions de Áú»¢¶Ä²© tenen una mida limitada de paquet d'1Go per connexi¨®. El l¨ªmit d'1Go s'aplica tant a la longitud de les dades del paquet rebut com a la de les dades no comprimides.
Quan s'envia la configuraci¨® al proxy de Áú»¢¶Ä²©, el l¨ªmit de mida del paquet s'incrementa a 4Go per permetre sincronitzar configuracions grans. Quan la longitud de les dades abans de la compressi¨® passa de 4Go, el servidor de Áú»¢¶Ä²© engega autom¨¤ticament l'¨²s de format de paquets grans (flag 0x04), que augmenta el l¨ªmit de la mida del paquet a 16Go.
Veieu que mentre un format de gran paquet pot emprar-se per enviar qualsevol informaci¨®, actualment nom¨¦s el sincronitzar de configuraci¨® del proxy Áú»¢¶Ä²© pot manejar els paquets superiors a 1Go.
La cap?alera es composa de quatre camps. Tots els nombres de la cap?alera s¨®n amb format little-endian.
Camp | Mida | Mida (paquet gros) |
¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨® |
---|---|---|---|
<PROTOCOL> |
4 | 4 | "ZBXD" or 5A 42 58 44 |
<FLAGS> |
1 | 1 | Indicadors de protocol:0x01 - Protocol de comunicacions Áú»¢¶Ä²© 0x02 - compressi¨®0x04 - paquet gros |
<DATALEN> |
4 | 8 | Longitud de les dades. |
<RESERVED> |
4 | 8 | Quan la compressi¨® sigui emprada (0x02 flag) - la longitud de les dades no comprimides Quan no s'empra la compressi¨® - 00 00 00 00 |
Aqu¨ª hi ha alguns extractes de codi que ensenyen com afegir una cap?alera de protocol Áú»¢¶Ä²© a les dades que volem enviar dins l'ordre per obtindre el paquet que hem d'enviar a Áú»¢¶Ä²©, per tal que sigui interpretat correctament. Aquestes mostres de codi suposen que les dades no s¨®n superiors a 1Go i, per tant, el format de paquet gros no s'empra pas.
or
def zbx_create_header(plain_data_size, compressed_data_size=None):
protocol = b"ZBXD"
flags = 0x01
if compressed_data_size is None:
datalen = plain_data_size
reserved = 0
else:
flags |= 0x02
datalen = compressed_data_size
reserved = plain_data_size
return protocol + struct.pack("<BII", flags, datalen, reserved)
packet = zbx_create_header(len(data)) + data
or
sub zbx_create_header($;$)
{
my $plain_data_size = shift;
my $compressed_data_size = shift;
my $protocol = "ZBXD";
my $flags = 0x01;
my $datalen;
my $reserved;
if (!defined($compressed_data_size))
{
$datalen = $plain_data_size;
$reserved = 0;
}
else
{
$flags |= 0x02;
$datalen = $compressed_data_size;
$reserved = $plain_data_size;
}
return $protocol . chr($flags) . pack("(II)<", $datalen, $reserved);
}
my $packet = zbx_create_header(length($data)) . $data;
or
function zbx_create_header($plain_data_size, $compressed_data_size = null)
{
$protocol = "ZBXD";
$flags = 0x01;
if (is_null($compressed_data_size))
{
$datalen = $plain_data_size;
$reserved = 0;
}
else
{
$flags |= 0x02;
$datalen = $compressed_data_size;
$reserved = $plain_data_size;
}
return $protocol . chr($flags) . pack("VV", $datalen, $reserved);
}
$packet = zbx_create_header(strlen($data)) . $data;