Generic hardware and software stacks that implement PTP don't have the ability to add a precise timestamp to a message they are in the process of generating. So you send a Sync message with a time estimate and measure the exact time the message is sent as it is actually sent out onto the network. For all it knows there are 15 queued packets in front of the one it is generating.
So, since you've sent out a sync message without an accurate time, you send a follow-up message with the actual time the original sync message went out.
On the Slave side, you need 4 times to calculate the offset correctly. T1 is the actual time the SYNC message was sent by the Master (from the FOLLOWUP message). T2 is the time the original SYNC message arrived at the Slave. T3 is the time the DELAY REQUEST message is sent by the Slave. T4 is the time the DELAY REQUEST message arrived at the Master. (sent back in the DELAY RESPONSE).
From those four times you can calculate the network delay and then the offset you are running at on the Slave that has to be corrected.