En los mensajes de ICMP se incluye el tipo, código y 8 primeros bytes del datagrama IP que causó el error, pero en los primeros 8 bytes de un datagrama IP no solo no cabe el header entero sino que ni siquiera se incluye la parte que contiene la IP de origen e IP de destino, entonces cómo se identifica el datagrama? Supongo que será por el campo ID del header IP, que entonces debe llevar un valor aunque no se haya fragmentado el datagrama.
El RFC https://www.rfc-editor.org/rfc/rfc792 dice lo siguiente de este campo:
Internet Header + 64 bits of Data Datagram
The internet header plus the first 64 bits of the original
datagram's data. This data is used by the host to match the
message to the appropriate process. If a higher level protocol
uses port numbers, they are assumed to be in the first 64 data
bits of the original datagram's data.
The internet header plus the first 64 bits of the original
datagram's data. This data is used by the host to match the
message to the appropriate process. If a higher level protocol
uses port numbers, they are assumed to be in the first 64 data
bits of the original datagram's data.
O sea que los 8 bytes se refiereren al payload de IP. En particular, si el payload es UDP o TCP esto incluye el dato de los puertos.