신뢰성이 없는 인터넷을 통해 종단간에 신뢰성 있는 바이트 스트림을 전송

연결 설정(connection establishment)는 3-way handshake를 통해 행해진다.

3-way handshake (연결 요청)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/defc8444-976f-4ab1-8b39-003546bce99f/Untitled.png

  1. 클라이언트가 서버에 접속 요청하는 SYN(a) 패킷을 보낸다.
  2. 서버는 클라이언트 요청 SYN(a)을 받고 클라이언트에게 ACK(a + 1)과 SYN(b) 패킷을 보낸다.
  3. 클라이언트는 서버가 보낸 패킷들을 받고 ACK(b + 1)을 서버로 보내면 연결이 성립된다.

4-way handshake (연결 해제)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4c7f0d43-d1a5-43ee-8f4b-fe06afb06cfa/Untitled.png

  1. 클라이언트가 연결 종료 FIN 플래그를 보낸다
  2. 서버는 해당 요청을 받고 확인했다는 ACK를 보낸다.
  3. 데이터 처리가 모두 완료되었다면 연결 종료 FIN 플래그를 서버→ 클라이언트에게 보낸다.
  4. 클라이언트가 그 메시지를 받고 ACK를 보낸다.
  5. 서버는 이를 받고 소켓 연결을 종료하지만, 클라이언트는 서버로부터 아직 받지 못한 데이터가 있을 수 있기에 일정 시간동안 기다리고 종료한다.