TCP 연결 수립과 해제 과정 완벽 가이드

TCP 프로토콜에서 연결을 수립하는 3-way handshake와 연결을 해제하는 4-way handshake 과정에 대한 상세 설명이다.



TCP 연결 수립: 3-way handshake

TCP는 신뢰성 있는 데이터 전송을 위해 연결 지향적 프로토콜로 설계되었다. 연결을 수립하기 위해 3-way handshake 과정을 거친다.



3-way handshake 단계별 과정

  1. 클라이언트 → 서버: SYN 패킷 전송

    • 클라이언트는 서버에 연결 요청을 위해 SYN(Synchronize) 패킷을 전송한다
    • 이 패킷에는 클라이언트의 초기 시퀀스 번호(ISN)가 포함된다
    SYN 패킷 구조:
    - 플래그: SYN=1
    - 시퀀스 번호: 클라이언트 ISN(예: 100)
    
  2. 서버 → 클라이언트: SYN+ACK 패킷 전송

    • 서버는 클라이언트의 연결 요청을 수락하고 SYN과 ACK 플래그가 설정된 패킷을 전송한다
    • 이 패킷에는 서버의 초기 시퀀스 번호와 클라이언트 ISN+1 값이 포함된다
    SYN+ACK 패킷 구조:
    - 플래그: SYN=1, ACK=1
    - 시퀀스 번호: 서버 ISN(예: 300)
    - 확인 응답 번호: 클라이언트 ISN+1(예: 101)
    
  3. 클라이언트 → 서버: ACK 패킷 전송

    • 클라이언트는 서버의 응답을 확인하고 ACK 패킷을 전송하여 연결 수립을 완료한다
    • 이 패킷에는 서버 ISN+1 값이 포함된다
    ACK 패킷 구조:
    - 플래그: ACK=1
    - 시퀀스 번호: 클라이언트 ISN+1(예: 101)
    - 확인 응답 번호: 서버 ISN+1(예: 301)
    

3-way handshake를 통해 양방향 통신이 가능한 TCP 연결이 수립되며, 양쪽 모두 상대방의 초기 시퀀스 번호를 인지하게 된다.



TCP 연결 해제: 4-way handshake

TCP 연결을 종료할 때는 4-way handshake 과정을 통해 안전하게 연결을 해제한다.



4-way handshake 단계별 과정

  1. 클라이언트 → 서버: FIN 패킷 전송

    • 클라이언트가 연결 종료를 요청하기 위해 FIN(Finish) 패킷을 전송한다
    • 이 시점에서 클라이언트는 FIN_WAIT_1 상태로 전환된다
    FIN 패킷 구조:
    - 플래그: FIN=1, ACK=1
    - 시퀀스 번호: 클라이언트의 현재 시퀀스 번호
    
  2. 서버 → 클라이언트: ACK 패킷 전송

    • 서버는 클라이언트의 연결 종료 요청을 확인하고 ACK 패킷을 전송한다
    • 서버는 CLOSE_WAIT 상태로 전환되고, 클라이언트는 FIN_WAIT_2 상태로 전환된다
    • 이 시점에서 클라이언트→서버 방향의 연결은 종료되지만, 서버→클라이언트 방향의 연결은 유지된다
    ACK 패킷 구조:
    - 플래그: ACK=1
    - 확인 응답 번호: 클라이언트의 시퀀스 번호+1
    
  3. 서버 → 클라이언트: FIN 패킷 전송

    • 서버가 남은 데이터를 모두 전송한 후, 서버도 연결 종료를 위해 FIN 패킷을 전송한다
    • 서버는 LAST_ACK 상태로 전환된다
    FIN 패킷 구조:
    - 플래그: FIN=1, ACK=1
    - 시퀀스 번호: 서버의 현재 시퀀스 번호
    
  4. 클라이언트 → 서버: ACK 패킷 전송

    • 클라이언트는 서버의 연결 종료 요청을 확인하고 ACK 패킷을 전송한다
    • 클라이언트는 TIME_WAIT 상태로 전환되고, 일정 시간(보통 2MSL) 후에 CLOSED 상태가 된다
    • 서버는 ACK를 받은 즉시 CLOSED 상태가 된다
    ACK 패킷 구조:
    - 플래그: ACK=1
    - 확인 응답 번호: 서버의 시퀀스 번호+1
    

💡 TIME_WAIT 상태의 중요성:

  • 지연된 패킷이 나중에 도착했을 때 새로운 연결에 영향을 주지 않도록 한다
  • 서버가 마지막 ACK를 제대로 받았는지 확인하기 위한 시간을 제공한다

4-way handshake는 양방향 연결을 각각 독립적으로 종료하는 과정으로, 데이터 손실 없이 안전하게 연결을 해제한다.



TCP 연결 상태 변화

TCP 연결 수립과 해제 과정에서 각 호스트는 다양한 상태를 거치게 된다.

연결 수립 시 상태 변화

클라이언트: CLOSED → SYN_SENT → ESTABLISHED
서버: CLOSED → LISTEN → SYN_RECEIVED → ESTABLISHED

연결 해제 시 상태 변화

클라이언트: ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
서버: ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED

TCP 연결 관리의 핵심 포인트:

  • 3-way handshake는 연결을 수립하는 과정
  • 4-way handshake는 연결을 해제하는 과정
  • 각 과정에서 시퀀스 번호와 확인 응답 번호를 교환하여 신뢰성을 보장한다

TCP의 연결 수립과 해제 과정은 신뢰성 있는 데이터 전송을 위한 기본 메커니즘으로, 네트워크 프로그래밍과 문제 해결에 있어 필수적인 지식이다.

댓글남기기