¿Cómo viaja un paquete de mensajes desde el programa X en la casilla A al programa Y en la casilla B en detalle?

El programa X presumiblemente tiene un socket abierto. Por simplicidad, supongamos que es un socket TCP. Ahora realiza una escritura () en ese socket, pasando un búfer lleno de datos. Esto se convierte en una llamada al sistema que luego ingresa al núcleo.

El núcleo realiza las comprobaciones adecuadas y luego transfiere los datos del usuario a un búfer del núcleo. Luego formatea uno o más segmentos TCP con la información de encabezado adecuada. Realiza una búsqueda de enrutamiento para determinar cómo llegar al otro extremo de la conexión TCP. Esto da como resultado un próximo salto y una interfaz. El paquete se entrega a la (digamos) rutina de salida de Ethernet que busca la dirección MAC para el próximo salto en la tabla ARP, y agrega un encabezado L2. El paquete ahora se entrega al controlador del dispositivo para la interfaz física. Ese controlador cuelga el paquete en el anillo DMA de salida y, si la salida no está en progreso, arranca el motor DMA. El motor DMA envía el paquete, le dice al conductor, que luego libera el paquete.

En el lado del receptor, el hardware recibe el paquete y verifica la dirección MAC de destino. Si coincide, DMA envía el paquete a un búfer de recepción vacío. Si la rutina de recepción del controlador no se está ejecutando, el chip activa una interrupción para activar la CPU. Cuando la CPU se ha ocupado del búfer, marcará la entrada del anillo DMA como libre. Para tratar con el paquete, la CPU mirará el encabezado L2 y determinará que es un paquete IP. Luego entrega el paquete a la rutina de entrada IP, que a su vez determina que es un paquete TCP. La rutina TCP busca la conexión para el paquete y determina si los datos deben ACK y si están listos para enviarse a la aplicación. Si está listo para enviar, coloca el contenido en el zócalo. El programa Y ahora se activa desde un select () o similar, y lee los datos del socket.

Por favor, hágame saber qué calificación le da su profesor en esta respuesta de tarea.

Para tener una idea de lo que se está enviando entre las máquinas y lo que realmente está sucediendo, use tcpdump en ambas máquinas, capture el archivo pcap y luego use wireshark (descargue de Wireshark · Descargar) para ver los detalles

Primero ejecute el siguiente comando en ambas máquinas en una sesión de terminal separada

tcpdump -i any -vvv -w /home/user/documents/capture.pcap

Luego, inicie su programa y haga lo que debe hacer.

Una vez que su programa haya terminado en el terminal que abrió para tcpdump, presione Ctrl + C para finalizar la captura en ambos cuadros

luego abra los archivos pcap en wireshark. Creo que debería proporcionarle todo, desde la información del socket hasta los protocolos pasados, así como la información del puerto. Para entender la información, necesitará google mucho. Wireshark es una gran herramienta para verificar cómo se ve el tráfico de red dentro y fuera de la máquina.

En cuanto a las extensiones de comando de tcpdump, consulte las páginas de manual de tcpdump para obtener información completa; sin embargo, este comando debe capturar todo en todos los adaptadores de red. También tenga en cuenta que el tipo de archivo debe ser .pcap, de lo contrario se producirá un error.

Esto debería ayudar a lo que sus programas envían y reciben a nivel de red.

Necesitas pensar en capas.
En el nivel más bajo, el remitente tiene una trama de ethernet para enviar a B, y A conoce la dirección mac de B, escribe la trama en el controlador de hardware que emite la trama en el cable. El conmutador enruta el paquete a B.
B puede responder a A porque conoce el mac de A.

A conoce la dirección mac de B porque, en IPv4, se envía un “arp” de transmisión que dice quién es el propietario de esta IP o la aprendió de un intercambio anterior similar. Si es IPv6, usa un protocolo de descubrimiento.

A conoce la IP de B porque usó DNS para convertir el nombre de host en una dirección IP. Si R es un solucionador de DNS, A envía una solicitud de resolución de DNS a R.

Cuando la aplicación en A quiere enviar datos a B, el programa le pide al sistema operativo que haga un socket, y el sistema operativo comenzará la negociación TCP si usa TCP, si usa UDP simplemente permitirá que se escriban los datos. B aceptará la conexión y enviará los datos al lado del receptor si hay una aplicación que ha creado una toma de escucha.

Esto está muy simplificado, pero con suerte le dará algunos de los conceptos clave para investigar.