¿Cómo puede ver una transmisión de paquetes en una red?

Me encantaría responder a esta pregunta ya que me gusta cavar estructuras de paquetes y hacer protocolos.
Los datos suelen ser bytes sin procesar enviados por la aplicación al núcleo. Cuando las llamadas de su aplicación envían una llamada al sistema (teniendo en cuenta C), sus datos se ubicarán en el búfer asignado a su socket en el núcleo.
Kernel toma sus datos del búfer y los antepone con los bytes sin procesar del encabezado del protocolo

Por ejemplo, tome la estructura UDP (versión simplificada de la estructura real en el kernel de Linux)
struct updhdr
{
uint16_t srcport;
uint16_t dstport;
uint16_t hdrlen;
uint16_t suma de comprobación;
};

Esta estructura se rellenará y sus datos se convertirán a bytes, se antepondrán y se enviarán a la siguiente capa debajo.
Todas las capas tienen su propia estructura para rellenar y sus módulos que ejecutan la lógica requerida para llenar paquetes y realizar funciones de protocolo.
Cuando los datos llegan a la tarjeta NIC, agrega los bytes de la estructura Ethernet antes y después (avance y encabezado) y esto también está en bytes.
Finalmente, el paquete que sale de su tarjeta de red no es más que un flujo de bytes sin procesar.
Imagine que lo que obtiene de su tarjeta de red es una secuencia de bytes larga y simple con protocolos ocultos dentro de ellos como una porción de bytes, pero estos bytes tendrán sentido cuando se desempaquetan en sus respectivas estructuras de protocolo una por una en el host receptor.

Wireshark, es una herramienta de red que captura este flujo de bytes largos y los interpreta como lo que hará una pila de protocolos en el núcleo. También los organiza en una representación gráfica para ver todos los campos en las estructuras. Es una buena herramienta que captura los datos en la tarjeta NIC, lo que significa que todos los protocolos se completarán en los paquetes que se capturan.

Tcpdump, que es la mejor herramienta para ver los paquetes en la línea de comandos, también captura los paquetes en la capa de enlace y los muestra en la interfaz de la línea de comandos. Se instala por defecto en todos los sistemas basados ​​en Linux.

Si desea profundizar más en los protocolos, le sugiero que consulte los sockets sin procesar, donde puede enviar sus propios formatos de paquetes a la red y divertirse diseñando sus propios protocolos. Esto hará que su comprensión sea aún más clara.

Este enlace lo ayudará, si ya es un programador en C con algunos antecedentes en la creación de sockets TCP, UDP.
Un breve tutorial de programación en C para sockets sin procesar

La implementación de algunos proyectos también será útil. Intente hacer una aplicación Ping utilizando conectores sin procesar donde diseñe el encabezado ICMP e inyecte en la red para obtener las respuestas ICMP.

Espero que haya ayudado.