Para el excepcionalmente curioso (y el curiosamente excepcional), aquí tenemos una descripción del aspecto real de un paquete. Hay varias herramientas que miran qué paquetes están entrando y saliendo de su máquina Linux: el más común es «tcpdump» (que comprende más que TCP actualmente). Estos programas se llaman «husmeadores de paquetes» (packet sniffers).
El principio de cada paquete dice a dónde va, de dónde viene, el tipo de paquete, y otros detalles administrativos. Esta parte se denomina «cabecera del paquete». El resto del paquete contiene los datos por transmitir propiamente dichos, y normalmente se denomina «cuerpo del paquete».
Por lo tanto, cualquier paquete IP comienza con la «cabecera IP»: de al menos 20 bytes de largo. Tiene un aspecto parecido al siguiente: (este diagrama ha sido sustraído sin ningún remordimiento de conciencia del RFC 790):
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Versión|  IHL  |Tipo de Servic.|          Tamaño Total         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Identificación        |Flags|  Desplaz. del Fragmento |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Tiempo de Vida |   Protocolo   |    Checksum de la cabecera    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Dirección de Origen                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Dirección de Destino                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Los campos importantes son el Protocolo, que indica si es un paquete TCP (número 6), UDP (número 17) u otra cosa, la Dirección IP de Origen y la Dirección IP de Destino.
Ahora, si el campo de protocolo dice que es un paquete TCP, entonces a esta cabecera IP le sigue inmediatamente una cabecera TCP: la cabecera TCP también tiene al menos 20 bytes de longitud:
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Puerto de Origen       |       Puerto de Destino       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Número de Secuencia                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Número de Confirmación                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Deplz. |           |U|A|P|R|S|F|                               |
   |de los | Reservado |R|C|S|S|Y|I|            Ventana            |
   | Datos |           |G|K|H|T|N|N|                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Checksum            |      Puntero de Urgencia      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Los campos más importantes son el puerto de origen y el de destino, que dicen a qué servicio está destinado el paquete (o de cual viene, en el caso de que sea un paquete de respuesta). Los números de secuencia y confirmación (acknowledgement) se utilizan para mantener el orden de los paquetes, y decirle al otro extremos cuántos paquetes se han recibido. Los indicadores (flags) ACK, SYN, RST y FIN (escritos de mayor a menor) son simples bits que se utilizan en la negociación de apertura (SYN) y cierra (RST o FIN) de las conexiones.
Siguiendo a esta cabecera viene el verdadero mensaje que la aplicación envió (el cuerpo del paquete). Un paquete normal puede tener hasta 1500 bytes: esto significa que el mayor espacio que pueden ocupar los datos es de 1460 bytes (20 bytes para la cabecera IP y 20 para la cabecera TCP): alrededor del 97%.