Usage¶
Packet allows the creation of diagrams to illustrate the structure and contents of bit fields such as a network packet.
A packet is created by defining the fields within it, then adding those fields to the packet instance.
A field can be specified by:
the start bit only; creates a one bit field
the start bit and end bit; start() must be called before end()
the start bit and length
the length only; the field starts immediately after the previous field
All fields must have a description.
Note
Fields must be added to the packet in the correct order
Example¶
A TCP packet
PHP¶
// The packet fields
$fields = [];
$fields[] = (new Field('Source Port'))->length(16);
$fields[] = (new Field('Destination Port'))->length(16);
$fields[] = (new Field('Sequence Number'))->length(32);
$fields[] = (new Field('Acknowledgment Number'))->length(32);
$fields[] = (new Field('Data Offset'))->start(96)->end(99);
$fields[] = (new Field('Reserved'))->start(100)->length(6);
$fields[] = (new Field('URG'))->start(106);
$fields[] = (new Field('ACK'))->start(107);
$fields[] = (new Field('PSH'))->start(108);
$fields[] = (new Field('RST'))->start(109);
$fields[] = (new Field('SYN'))->start(110)->end(110);
$fields[] = (new Field('FIN'))->start(111)->length(1);
$fields[] = (new Field('Window'))->start(112)->end(127);
$fields[] = (new Field('Checksum'))->start(128)->end(143);
$fields[] = (new Field('Urgent Pointer'))->start(144)->end(159);
$fields[] = (new Field('(Options and Padding)'))->start(160)->end(191));
$fields[] = (new Field('Data (variable length)'))->start(192)->end(255)');
// Create the packet
echo Mermaid::create(Packet::class)
->withTitle('TCP Packet')
->withFields(...$fields)
->render()
;
Generated Mermaid¶
<pre class="mermaid>
---
title: TCP Packet
---
packet
+16: "Source Port"
+16: "Destination Port"
+32: "Sequence Number"
+32: "Acknowledgment Number"
96-99: "Data Offset"
100-105: "Reserved"
106: "URG"
107: "ACK"
108: "PSH"
109: "RST"
110: "SYN"
111: "FIN"
112-127: "Window"
128-143: "Checksum"
144-159: "Urgent Pointer"
160-191: "(Options and Padding)"
192-255: "Data (variable length)"
</pre>
Mermaid Diagram¶
---
title: TCP Packet
---
packet
+16: "Source Port"
+16: "Destination Port"
+32: "Sequence Number"
+32: "Acknowledgment Number"
96-99: "Data Offset"
100-105: "Reserved"
106: "URG"
107: "ACK"
108: "PSH"
109: "RST"
110: "SYN"
111: "FIN"
112-127: "Window"
128-143: "Checksum"
144-159: "Urgent Pointer"
160-191: "(Options and Padding)"
192-255: "Data (variable length)"