Accurate timing synchronization between two arduinos

The simplest protocol is to send a packet to the remote station, which places its value of micros() in the
reply packet.

You record your values of micros() before sending packet and after receiving reply packet and average them.

The discrepancy between your average timestamp and the remote's timestamp indicates the clock skew
between them (assuming packet transmission behaves the same in both directions). Any automatic
retry mechanism must be disabled for this to work. The packet and its reply must be the same size.