On an ethernet network, data is nested and encapsulated in headers. For example, an ethernet link-level header might encapsulate an IP or ARP header. An IP header can encapsulate a UDP datagram which contains a DNS protocol message.
In this package, the relationships between these packet types are expressed via inheritance and the individual packet classes encapsulate the details of each specific protocol.
The class PacketFactory converts raw byte data into packet instances.
Other utility classes in this package provide store the many port numbers, message types and codes associated with different protocols.