네트워크/TCP

고급 TCP 개념: TCP 연결 설정 및 해제

shimdh 2025. 3. 10. 09:24
728x90

TCP(Transmission Control Protocol)는 인터넷을 통한 신뢰성 있는 데이터 전송을 보장하는 핵심 프로토콜입니다. TCP는 패킷이 손실되지 않고 올바른 순서대로 전달되도록 설계되었으며, 이를 위해 연결 설정(3-way 핸드셰이크)과 연결 해제(4-way 핸드셰이크) 과정을 거칩니다.

본 장에서는 TCP 연결 설정 및 해제의 과정과 원리, 실용적인 예시 및 패킷 분석 방법을 자세히 살펴보겠습니다.


📌 1. TCP 연결 설정: 3-Way Handshake

TCP는 신뢰성을 보장하기 위해 데이터 전송을 시작하기 전에 클라이언트와 서버 간의 연결을 설정하는 과정을 수행합니다.
이 과정은 3-way handshake(3단계 핸드셰이크)라고 불리며, 상대방과의 통신이 가능한지 확인하고 데이터를 안정적으로 전송할 준비를 마치는 역할을 합니다.

🔹 3-Way Handshake 과정

1️⃣ SYN (Synchronize) – 클라이언트 → 서버

  • 클라이언트가 서버와의 연결을 요청하는 첫 번째 단계.
  • TCP 헤더의 SYN 플래그를 활성화한 패킷을 서버로 전송.
  • 초기 시퀀스 번호(Initial Sequence Number, ISN)가 포함됨.

2️⃣ SYN-ACK (Synchronize + Acknowledge) – 서버 → 클라이언트

  • 서버가 클라이언트의 요청을 수락하고 SYN-ACK 패킷을 응답.
  • 서버의 초기 시퀀스 번호(ISN)를 포함하며, 클라이언트의 SYN에 대한 확인 응답(ACK)도 함께 전송.

3️⃣ ACK (Acknowledge) – 클라이언트 → 서버

  • 클라이언트가 서버의 SYN-ACK에 대해 ACK 패킷을 응답.
  • 이제 클라이언트와 서버 간 정상적인 데이터 전송이 가능한 상태가 됨.

📌 3-Way Handshake의 흐름 (Wireshark 분석 예시)

Wireshark에서 아래와 같은 패킷 흐름을 확인할 수 있습니다.

1. 클라이언트 → 서버 : SYN (SEQ=100, WIN=8192)  
2. 서버 → 클라이언트 : SYN-ACK (SEQ=300, ACK=101, WIN=8192)  
3. 클라이언트 → 서버 : ACK (SEQ=101, ACK=301)  

💡 즉, 3번의 패킷 교환을 통해 TCP 연결이 확립되며, 이후 본격적인 데이터 전송이 이루어질 수 있습니다.


🎯 2. TCP 연결 설정의 실용 사례

웹사이트 접속 (HTTP/HTTPS 요청)

  • 사용자가 브라우저에서 웹사이트 URL을 입력하면,
  • 웹 브라우저(클라이언트)는 웹 서버와 TCP 연결을 설정한 후 HTTP 요청을 전송.
  • TCP 연결이 설정되기 전에 3-way 핸드셰이크가 반드시 수행됨.

게임 서버 접속

  • 온라인 게임을 실행하면 게임 클라이언트가 게임 서버와 TCP 연결을 설정.
  • 데이터 패킷이 안정적으로 송수신되도록 보장.

FTP 파일 전송

  • FTP 클라이언트가 서버에 연결할 때도 3-way 핸드셰이크가 수행됨.
  • 신뢰성 있는 파일 업로드/다운로드를 위해 TCP 연결을 설정.

🚀 3. TCP 연결 해제: 4-Way Handshake

TCP 연결 해제는 4-way handshake(4단계 핸드셰이크) 과정을 거칩니다.
이는 양쪽이 데이터 전송이 끝났음을 확인하고, 안전하게 연결을 종료하는 과정입니다.

🔹 4-Way Handshake 과정

1️⃣ FIN (Finish) – 클라이언트 → 서버

  • 클라이언트가 더 이상 데이터를 보낼 필요가 없음을 알림.
  • TCP 헤더의 FIN 플래그를 활성화한 패킷을 서버로 전송.

2️⃣ ACK (Acknowledge) – 서버 → 클라이언트

  • 서버가 클라이언트의 FIN 요청을 확인하고 ACK 패킷을 응답.
  • 그러나 이 시점에서 서버는 아직 데이터를 보낼 수 있음.

3️⃣ FIN (Finish) – 서버 → 클라이언트

  • 서버도 더 이상 보낼 데이터가 없을 경우 FIN 플래그가 활성화된 패킷을 클라이언트로 전송.

4️⃣ ACK (Acknowledge) – 클라이언트 → 서버

  • 클라이언트가 서버의 FIN을 확인하고 ACK 패킷을 마지막으로 전송.
  • 이제 연결이 완전히 종료됨.

📌 4-Way Handshake의 흐름 (Wireshark 분석 예시)

1. 클라이언트 → 서버 : FIN (SEQ=400)  
2. 서버 → 클라이언트 : ACK (SEQ=500, ACK=401)  
3. 서버 → 클라이언트 : FIN (SEQ=500)  
4. 클라이언트 → 서버 : ACK (SEQ=401, ACK=501)  

💡 이 과정을 통해 TCP 연결이 정상적으로 종료됩니다.


🎯 4. TCP 연결 해제의 실용 사례

사용자가 웹사이트에서 로그아웃할 때

  • 웹 브라우저는 서버와의 TCP 연결을 닫기 위해 4-way handshake를 수행.
  • 정상적으로 세션을 종료하고 리소스를 해제.

파일 다운로드가 완료되었을 때

  • FTP 또는 HTTP 다운로드가 끝나면,
  • 클라이언트와 서버 간 TCP 연결이 해제됨.

VoIP 통화 종료 시

  • 인터넷 전화(VoIP) 통화가 끝나면 TCP 연결이 해제됨.
  • 통화가 끝났음을 양쪽이 확인한 후 안전하게 연결 종료.

🔍 5. TCP 연결 설정 및 해제의 중요성

신뢰성 있는 데이터 전송 보장

  • 3-way 핸드셰이크를 통해 데이터 전송 전 양측이 통신 준비가 되었음을 확인.

안정적인 연결 종료

  • 4-way 핸드셰이크를 통해 데이터 손실 없이 연결이 종료됨.

보안 및 네트워크 최적화

  • 정상적인 연결 해제를 수행하지 않으면 타임아웃으로 인해 서버 리소스가 낭비될 수 있음.
  • 보안 공격(예: TCP RST 공격, SYN Flooding 등)을 방지하는 데도 중요한 역할을 함.

🔥 6. 결론

TCP의 연결 설정과 해제 과정은 인터넷에서 신뢰성 있는 데이터 통신을 위한 필수적인 과정입니다.

🔹 3-Way Handshake → 안정적인 연결 설정
🔹 4-Way Handshake → 안전한 연결 종료

이 과정이 없다면 데이터가 손실되거나, 연결이 불안정해지는 문제가 발생할 수 있습니다.
따라서 네트워크 엔지니어나 보안 전문가라면 TCP 핸드셰이크 과정을 철저히 이해하고, 이를 기반으로 최적화 및 보안 강화 전략을 마련해야 합니다. 🚀"

728x90