Imagine we have data ,say 6000 bytes that we want to send on a data link with 1500 bytes MTU. We must fragment this data into chunks of 1500 bytes and when it gets to the destination, it will be reassembled.
So how does the destination know that if it received four fragments, those fragments are part of the same data that was fragmented? That is where the IDENTIFIER comes in. The fragments are marked with the same number in the Identifier field so that when the destination receives the four fragments, it will know that these are part of the same data flow.
But the fragments might not always arrive in sequence. The receiver must however reassemble to fragments in the right order to make sense of the data. That is where the FRAGMENT OFFSET comes in; which defines the position of each fragment in the flow so that the destination can reassemble in the right order.