사랑우주인 2024. 11. 20. 17:05

TCP(Transmission Control Protocol)

  • 신뢰성과 연결 지향을 특징으로 하는 전송 계층 프로토콜
  • 데이터를 정확하고 순서대로 전달하기 위해 다양한 메커니즘을 제공

왜 연결 지향이라고 하는거지?

TCP는 데이터 전송 전에 송신자와 수신자가 연결을 설정(3-way handshake)하고, 데이터가 제대로 전송되었는지 확인하며, 연결을 종료(4-way handshake)하는 과정이 있기 때문에 연결 지향(Connection-Oriented)이라고 한다.

3-way handshake?

3-way handshake는 TCP 연결을 설정하기 위해 반드시 필요한 과정이다. 이유는 아래와 같다.

  1. 양측의 통신 기능 여부 확인
  2. 초기 시퀀스 번호(ISN) 교환
  3. 연결 신뢰성 확보

3-way handshake 동작 과정

  1. A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 되는 것이다.
  2. B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.
  3. A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 B서버 상태가 ESTABLISHED 이다. 

4-way handshake?

3-way handshake가 TCP의 연결을 초기화할 때 사용한다면, 4-way handshake는 세션을 종료하기 위해 수행되는 절차이다.

4-way handshake 동작 과정

  1. 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.
  2. 서버는 일단 확인메시지를 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태가 TIME_WAIT상태다.
  3. 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
  4. 클라이언트는 확인했다는 메시지를 보낸다.