웹 초창기에는 모든 데이터에 이 3-way handshake를 해야 했기에 효율이 매우 나빴습니다. 그래서 HTTP/1.1 부터는 'HTTP 지속 연결 상태'(persistence connection) 이라는 개념을 도입, 모든 바이트에 3-way handshake를 하는 것이 아니라 최초에 핸드쉐이크를 하고 이후에는 계속 연결을 유지하는 방식을 도입하였습니다.그 후, 4-way handshake로 모든 연결이 끝났을때 헤더에 연결 종료를 알림으로써 TCP 연결을 끊는 식입니다.
HTTP/3.0에서는 아예 TCP가 아닌 UDP 방식으로 데이터를 전송함으로써 3-way handshake를 아예 하지 않아도 되는 식으로 발전하고 있습니다.
그래서 TCP는 동기, UDP는 비동기라고 불립니다.
연결 상태를 유지하기 위해, TCP는 Keep-Alive 기능을 사용할 수 있습니다.
Keep-Alive는 클라이언트와 서버 사이에 일정한 간격으로 빈 패킷을 보내고, 상대방이 이에 대한 응답을 하지 않으면 연결이 끊어졌다고 판단하여 연결을 종료합니다.
또한, TCP는 시간 대기(Timeout)을 사용하여 연결이 일정 시간동안 활동하지 않을 경우 연결을 끊어버립니다.