Per i più curiosi, (e per le curiosità eccezionali) segue qui una descrizione di come al momento si presentano i pacchetti. Ci sono molti tool che guardano quali pacchetti entrano ed escono dalla Linux box, il più noto è `tcpdump' (che oggi comprende molto più del solo TCP). Questi programmi sono noti come `packet sniffer'.
La parte iniziale di ciascun pacchetto dice dove il pacchetto è diretto, da dove proviene, che tipo è, e altri dettagli amministrativi. Questa parte è detta intestazione del pacchetto (`packet header'). Il resto del pacchetto, che contiene i dati da trasmettere, è nota come corpo del pacchetto (`packet body').
Ogni pacchetto IP comincia con un'intestazione IP lunga almeno 20 byte. Ecco come appare (questo diagramma è stato preso sfacciatamente da RFC 790):
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
I campi più importanti sono Protocol (protocollo), che indica se questo è un pacchetto TCP (numero 6), un pacchetto UDP (numero 17) o qualcos'altro, il Source Address (indirizzo IP sorgente), e il Destination Address (indirizzo IP destinazione).
Se i campi dei protocolli assicurano che questo è un pacchetto TCP, allora questa intestazione sarà seguita immediatamente da un'intestazione TCP: l'intestazione TCP ha dimensione di almeno 20 byte.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
I campi più importanti qui sono la Source Port (porta sorgente), e la Destination Port (porta destinazione), che dicono verso quale servizio sono destinati i pacchetti (o provengono, nel caso di pacchetti di risposta). I campi Sequence Number e Acknowledgment Number sono usati per mantenere i pacchetti in ordine, e per segnalare all'altra parte quali pacchetti sono stati ricevuti. I flag ACK, SYN, RST, FIN (presenti più in basso) sono dei semplici bit usati per negoziare l'inizio (SYN) e la fine (RST o FIN) delle connessioni.
Dopo questa intestazione segue il messaggio che l'applicazione vuole inviare (corpo del pacchetto). Un pacchetto normale si aggira sui 1500 byte, ciò significa che la maggior parte dello spazio che i dati possono occupare è di 1460 byte (20 byte sono riservati all'intestazione IP e 20 all'intestazione TCP): oltre il 97%.