Предлагаю так же учесть доводы user456 насчет указания направления пакета, и расширить это поле с 1 до 4 байт, заодно, сделав размер заголовка чанка кратным 4:
Код:
struct ChunkHeader
{
char direction[4]; // 'RECV' и 'SEND', либо 'SMSG' и 'CMSG', либо то, что вы предложите.
uint unixTime;
uint tickCount;
uint optionalDataLength;
uint dataLength;
};
// sizeof(ChunkHeader) == 4 + 4 + 4 + 4 + 4 = 20 байт (align == 1)
Сразу после ChunkHeader следуют optional-данные, затем данные пакета.
P.S. Подстроился с учетом мнения LordJZ о порядке следования данных.