It's called 3-way handshake, so it is transmitted three times: SYN -> SYN/ACK -> ACK. The minimum time required is two 1.5 times the round-trip time (RTT).
(Each side sees a 1x RTT delay for the handshake to happen while the server is one transmission delay / .5 RTT behind the client - assuming equal transmission delay for both directions.)
In your capture, the only transmission time is between SYN and SYN/ACK. The successive ACK is the reaction to the received SYN/ACK. The socket is established on this side and the local node fires away with GET.
On the client side, the sequence is
- SYN sent
- longer delay (RTT + remote stack overhead) - 0.020003
- SYN/ACK received
- very small delay (local stack overhead) - 0.000077
- final ACK is sent, socket is open
- very small delay (local stack & application overhead) - 0.000223
- GET sent
On the listener (server) side, this would look like
- SYN received
- very small delay (local stack overhead)
- SYN/ACK sent
- longer delay (RTT + remote stack overhead)
- final ACK is received, socket is open
- very small delay (remote stack & application overhead)
- GET is received