Reassembly happens at the destination, not routers.
The process:
Receive fragment, note ID
Buffer it, track offset
Continue until MF=0 fragment arrives
Verify contiguous offsets
Reassemble and pass up
Timeout applies. Incomplete fragments are discarded after - seconds.
Problems: lost fragment = lost packet. Modern practice avoids fragmentation via PMTUD.