네트워크/TCP

연결 설정 및 해제: 연결 종료 절차

shimdh 2025. 3. 8. 10:59
728x90

TCP(Transmission Control Protocol)는 연결 지향적(Connection-Oriented) 프로토콜로, 안정성과 신뢰성을 보장하기 위해 데이터를 전송하기 전 연결을 설정하고, 데이터 전송이 끝난 후에는 연결을 안전하게 종료하는 과정을 거칩니다.

연결 설정 과정3-way 핸드셰이크(Three-Way Handshake) 를 통해 이루어지며, 이를 통해 송신자와 수신자는 서로를 확인하고 신뢰할 수 있는 데이터 전송 환경을 구축합니다.

반면, 연결 종료 과정에서는 4-way 핸드셰이크(Four-Way Handshake) 를 통해 양측이 정상적으로 데이터를 주고받았음을 확인한 후 연결을 차례대로 종료합니다.

이번 글에서는 TCP 연결 설정 및 종료 과정을 심층적으로 살펴보고, 그 중요성을 이해해보겠습니다.


1. TCP 연결 설정: 3-way 핸드셰이크

TCP 연결을 설정하기 위해서는 클라이언트와 서버가 세 번의 메시지를 교환하는 과정을 거쳐야 합니다. 이를 3-way 핸드셰이크라고 합니다.

3-way 핸드셰이크 과정

  1. SYN (Synchronize) - 클라이언트 → 서버

    • 클라이언트는 서버와의 연결을 요청하는 SYN 패킷을 전송합니다.
    • 이때, 클라이언트는 자신의 초기 순서 번호(Sequence Number)를 포함하여 보냅니다.
  2. SYN-ACK (Synchronize-Acknowledge) - 서버 → 클라이언트

    • 서버는 클라이언트의 요청을 수락하고 SYN-ACK 패킷을 보냅니다.
    • 서버도 자체적인 초기 순서 번호를 포함하여 연결 준비가 되었음을 알립니다.
  3. ACK (Acknowledge) - 클라이언트 → 서버

    • 클라이언트는 서버의 응답을 확인한 후 ACK 패킷을 보내 연결을 완료합니다.
    • 이제 데이터 전송이 가능한 상태(Established) 가 됩니다.

실제 예시

웹사이트에 접속할 때, 브라우저(클라이언트)가 웹 서버와 TCP 연결을 맺는 과정은 다음과 같이 진행됩니다.

  1. 사용자가 웹사이트 주소(https://example.com)를 입력하면, 브라우저가 서버에 SYN 패킷을 보냅니다.
  2. 서버는 요청을 받고 SYN-ACK 패킷을 응답합니다.
  3. 클라이언트는 마지막으로 ACK 패킷을 보내며 연결이 성립됩니다.

이제 클라이언트와 서버는 서로 데이터를 주고받을 수 있습니다.


2. TCP 연결 해제: 4-way 핸드셰이크

TCP 연결이 완료된 후, 더 이상 데이터 전송이 필요하지 않을 경우 안전한 연결 종료가 필요합니다.

연결을 종료하는 과정에서 클라이언트와 서버는 네 번의 메시지를 주고받는 방식을 따르며, 이를 4-way 핸드셰이크(Four-Way Handshake) 라고 합니다.

4-way 핸드셰이크 과정

  1. FIN (Finish) - 클라이언트 → 서버

    • 클라이언트가 더 이상 데이터를 전송하지 않겠다는 FIN 패킷을 서버로 전송합니다.
    • 하지만 서버는 즉시 연결을 끊지 않고, 남아 있는 데이터가 있다면 계속 처리할 수 있습니다.
  2. ACK (Acknowledge) - 서버 → 클라이언트

    • 서버는 클라이언트의 요청을 확인하고 ACK 패킷을 보냅니다.
    • 이 단계에서 서버는 아직 데이터를 보낼 수 있으며, 연결이 완전히 끊긴 상태는 아닙니다.
  3. FIN (Finish) - 서버 → 클라이언트

    • 서버도 모든 데이터 전송을 완료한 후, 이제 자신도 더 이상 보낼 데이터가 없음을 FIN 패킷을 통해 클라이언트에게 알립니다.
  4. ACK (Acknowledge) - 클라이언트 → 서버

    • 클라이언트는 서버의 FIN 메시지를 확인하고, 마지막으로 ACK 패킷을 보내 연결을 완전히 종료합니다.
    • 이로써 TCP 연결이 완전히 해제(Closed) 됩니다.

실제 예시

  1. 사용자가 웹사이트를 다 이용한 후 브라우저의 탭을 닫습니다.
  2. 브라우저(클라이언트)는 서버에 FIN 패킷을 보내며 연결 종료를 요청합니다.
  3. 서버는 ACK를 응답하며, 아직 남아 있는 데이터를 모두 보냅니다.
  4. 서버가 전송을 마치면, FIN 패킷을 클라이언트로 보냅니다.
  5. 클라이언트는 ACK 패킷을 마지막으로 보내고 연결이 해제됩니다.

3. 연결 종료 시 발생할 수 있는 문제

1) TIME_WAIT 상태

TCP에서는 연결이 종료된 후, 일정 시간 동안 TIME_WAIT 상태를 유지합니다.

  • 이는 이전에 송수신된 패킷이 네트워크에서 지연되었을 가능성을 대비하기 위함입니다.
  • 보통 TIME_WAIT 상태는 약 2배의 최대 세그먼트 수명(2MSL, Maximum Segment Lifetime) 동안 유지됩니다.

2) 연결이 강제 종료될 경우 (RST 패킷)

  • 특정 상황에서 TCP 연결을 즉시 종료해야 할 경우, RST(Reset) 패킷이 사용됩니다.
  • 예를 들어, 서버가 다운되거나 연결이 비정상적으로 종료될 때 RST 패킷이 전송될 수 있습니다.
  • 그러나 이 방식은 정상적인 종료 방법이 아니므로, 데이터 손실이 발생할 가능성이 있습니다.

4. 결론

TCP는 신뢰성 있는 데이터 전송을 위해 연결 설정(3-way 핸드셰이크)연결 해제(4-way 핸드셰이크) 과정을 체계적으로 수행합니다.

3-way 핸드셰이크를 통해 송신자와 수신자는 서로 연결을 확인하고 데이터 전송 준비를 마칩니다.
4-way 핸드셰이크를 통해 양측이 데이터를 모두 전송했음을 확인하고 안전하게 연결을 종료합니다.
✔ 연결 해제 후 일정 시간 동안 TIME_WAIT 상태를 유지하여 네트워크 패킷을 관리합니다.
✔ 비정상적인 종료(RST 패킷)도 가능하지만, 데이터 손실이 발생할 수 있습니다.

이러한 구조 덕분에 TCP는 웹 브라우징, 이메일 송수신, 파일 다운로드, 온라인 게임 등 인터넷 전반에서 안정적인 통신 환경을 제공합니다.

📌 주요 포인트 정리

1️⃣ TCP 연결 설정은 3-way 핸드셰이크(SYN → SYN-ACK → ACK) 를 사용하여 신뢰성을 확보
2️⃣ 연결 해제는 4-way 핸드셰이크(FIN → ACK → FIN → ACK) 를 통해 안전하게 종료
3️⃣ TIME_WAIT 상태를 유지하여 데이터 손실을 방지
4️⃣ 비정상적인 종료 시 RST 패킷을 통해 즉시 연결 해제 가능
5️⃣ 웹 브라우징, 파일 전송, 온라인 게임 등에서 TCP의 신뢰성 덕분에 원활한 통신 가능

이처럼 TCP의 연결 설정 및 종료 절차는 단순한 데이터 전송을 넘어, 네트워크 전반의 안정성과 효율성을 유지하는 데 중요한 역할을 합니다.

728x90