Rendkívül furcsa (és furcsán rendkívüli) a leírás arról, hogyan néznek ki a csomagok. Számos eszköz van arra, hogy kövessük a csomagok ki-be érkezését a Linuxodon: a leggyakoribb ezek közül a "tcpdump" (manapság többet tud, mint a TCP), de ennél is szebb az "ethereal". Legtöbb program úgy ismert, mint "packet sniffers".
Kezdetben minden csomag megmondja hová megy, honnan jött, mi a típusa és más adminisztratív részletet. Ezt a részt hívjuk "packet header"-nek. A maradék része a csomagnak tartalmazza az aktuális adatot, amit közvetít, ezt általában "packet body"-nak nevezzük.
Szóval az IP csomag kezdõdik egy "IP header"-rel: legalább 20 byte hosszú. Így néz ki (RFC791-bõl lopott diagram):
.-------+-------+---------------+-------------------------------.
|Version| IHL |Type of Service| Total Length |
|-------+-------+---------------+-------------------------------|
| Identification |Flags| Fragment Offset |
|---------------+---------------+-------------------------------|
| Time to Live | Protocol | Header Checksum |
|---------------+---------------+-------------------------------|
| Source Address |
|---------------------------------------------------------------|
| Destination Address |
`---------------------------------------------------------------'
A fontos mezõk a protokollok, amellyel jelölik, vajon a TCP csomag (6-os szám), UDP csomag (17-es szám) vagy valami más, a source IP-cím és a destination IP-cím.
Most, ha a protokoll mezõk azt mondják, ez a TCP csomag, ekkor a TCP header azonnal követi ezt az IP headert: a TCP is legalább 20 byte hosszú:
.-------------------------------+-------------------------------.
| 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 |
`---------------------------------------------------------------'
A legfontosabb mezõk itt a source port és a destination port, amely megmondja, melyik szolgáltatáshoz menjen a csomag (vagy jön, abban az esetben, ha válaszcsomag). A sorozat és a visszaigazolási számok sorban tartják a csomagokat és megmondják a másik vége milyen csomagokat fogadott. Az ACK, SYN, RST és FIN zászlók (fentrõl lefelé írva) egyedüli bit, amely tárgyalja a nyitó (SYN) és záró (RST vagy FIN) csatlakozásokat.
Követve ezt a headert jön az aktuális üzenet, amelyet az Application küldött (packet body). A normál csomag 1500 byte fel és ez jelenti, hogy a legtöbb adatra 1460 byte felmehet (20 byte az IP header és 20 byte a TCP header): közel 97%.