Packet structure (refer to doRead() for details):
PLEN    HLEN      HEADER     CHECKSUMS  DATA
32-bit  16-bit   <protobuf>  <variable length>
|--- lenThroughHeader ----|
|----------- lenThroughChecksums   ----|
|------------------- lenThroughData    ------|