That is in order to:
1. keep data in the structs always in the host native byte order, this
is more natural and less error prone as we might forget to use
htole32() when setting struct fields or le32toh() when accessing
them;
2. be more portable: this way the buffer sent to the wire is
independent of struct alignments or paddings introduced by
compilers or required by a particular architecture.