맨틀 이야기

TCP 프로토콜 본문

CS

TCP 프로토콜

jbilee 2024. 11. 23. 01:28

TCP(Transmission Control Protocol)는 TCP/IP 모델의 3계층에 해당하는 전송 계층(Transport Layer)에서 동작하는 데이터 전송 관련 프로토콜이다. TCP 프로토콜의 특징은 아래와 같이 요약할 수 있다.

  • 송신자와 수신자를 확실히 지정한 후에 데이터를 전송하는 연결 지향적 프로토콜이다.
  • 데이터가 발송된 순서대로 도착하도록 보장한다.
  • 흐름 제어, 혼잡 제어 등의 기술을 통해 데이터의 전송을 제어한다.
  • 전송할 데이터를 세그먼트(패킷) 단위로 나눠서 어떤 순서로 이어붙여야 하는지 순번을 달아둔다.
  • 중간에 손실되는 데이터 패킷을 다시 송신해 데이터가 온전히 전달될 수 있도록 한다.

위와 같은 특징으로 인해 TCP는 상당히 신뢰할 수 있는 프로토콜로 여길 수 있다. 통신하는 기기들이 연결됐음을 보장하고, 지정된 루트로 데이터 패킷을 순서대로 전달하는 것이 TCP 프로토콜의 주 기능이다.

 

3-way handshake

TCP 프로토콜로 데이터를 전송하려면 먼저 TCP를 사용하는 기기들끼리 접속을 성립(establish a connection)해야 하고, 그러기 위해서는 TCP 3-way handshake를 거쳐야 한다. 3-way handshake는 아래 과정을 통해 이루어진다:

  1. SYN: 클라이언트가 SYN 패킷을 보내 서버에 접속 요청
    • 이때 클라이언트는 SYN-SENT 상태가 됨 (서버의 SYN-ACK 응답을 기다리는 상태)
  2. SYN-ACK: 서버가 클라이언트의 요청을 수락하고, 반대로 클라이언트의 포트도 열어달라는 의미로 SYN과 ACK 플래그가 함께 설정된 패킷을 회신
    • 이때 서버는 SYN-RECEIVED 상태가 됨 (클라이언트의 ACK 응답을 기다리는 상태)
  3. ACK: 클라이언트가 서버의 응답을 확인하고 서버에 ACK 패킷을 회신
    • 클라이언트와 서버는 각각 ACK를 받는대로 ESTABLISHED 상태로 변경됨

 

4-way handshake

4-way handshake는 TCP 연결을 끊을 때 거치는 과정이다. 아래 과정을 통해 클라이언트와 서버가 연결을 종료한다:

  1. FIN: 클라이언트가 연결 종료 요청 (FIN 플래그가 설정된 패키지 전송)
    • 클라이언트는 서버로부터 FIN 패킷을 받을 때까지 연결을 유지하면서 FIN-WAIT-1 상태가 됨
  2. ACK: 클라이언트의 요청을 확인한 서버는 포트에 연결돼있는 앱에게 종료 요청을 하고 클라이언트에 ACK를 응답
    • 서버는 앱이 종료되기를 기다리는 CLOSE-WAIT 상태가 됨
    • ACK 응답을 받은 클라이언트는 FIN-WAIT-2 상태로 변경됨
  3. FIN: 서버쪽에서 앱이 종료되면 클라이언트에 FIN 패킷 전송
    • 이때 서버는 클라이언트의 최종 ACK를 기다리는 LAST-ACK 상태가 됨
  4. ACK: 클라이언트가 FIN 요청을 확인하고 서버에 ACK를 회신
    • ACK를 회신할 때 클라이언트는 TIME-WAIT 상태가 됐다가 일정 시간이 지난 후에 CLOSED로 변경
    • 서버는 클라이언트의 ACK 패킷을 받은 후 CLOSED 상태로 변경

'CS' 카테고리의 다른 글

공인 IP vs 사설 IP  (0) 2024.11.26
IP 주소  (0) 2024.11.25
UDP 프로토콜  (0) 2024.11.22
웹 리소스 전송 관련 정책  (0) 2024.11.16
쿠키, 세션, JWT 토큰으로 사용자 세션 유지  (0) 2024.11.15