The structure of FIX messages is such that nested structures are represented flattened in the parent. Their boundaries are not self-describing, and additional metadata about the format is required.
Header fields appear at the beginning of the message.
Up to FIX.4.4, the header contained three fields: 8 (BeginString), 9 (BodyLength), and 35 (MsgType) tags.
From FIXT.1.1 / FIX.5.0, the header contains five mandatory fields and one optional field: 8 (BeginString), 9 (BodyLength), 35 (MsgType), 49 (SenderCompID), 56 (TargetCompID) and 1128 (ApplVerID - if present must be in 6th position).
Further, messages which do not contain a valid header should be identified as erroneous.
The structure of FIX messages is such that nested structures are represented flattened in the parent. Their boundaries are not self-describing, and additional metadata about the format is required.
Header fields appear at the beginning of the message.
From Wikipedia:
Further, messages which do not contain a valid header should be identified as erroneous.