TCP 연결 수립과 해제 과정 완벽 가이드
TCP 프로토콜에서 연결을 수립하는 3-way handshake와 연결을 해제하는 4-way handshake 과정에 대한 상세 설명이다.
TCP 연결 수립: 3-way handshake
TCP는 신뢰성 있는 데이터 전송을 위해 연결 지향적 프로토콜로 설계되었다. 연결을 수립하기 위해 3-way handshake 과정을 거친다.
3-way handshake 단계별 과정
-
클라이언트 → 서버: SYN 패킷 전송
- 클라이언트는 서버에 연결 요청을 위해 SYN(Synchronize) 패킷을 전송한다
- 이 패킷에는 클라이언트의 초기 시퀀스 번호(ISN)가 포함된다
SYN 패킷 구조: - 플래그: SYN=1 - 시퀀스 번호: 클라이언트 ISN(예: 100)
-
서버 → 클라이언트: SYN+ACK 패킷 전송
- 서버는 클라이언트의 연결 요청을 수락하고 SYN과 ACK 플래그가 설정된 패킷을 전송한다
- 이 패킷에는 서버의 초기 시퀀스 번호와 클라이언트 ISN+1 값이 포함된다
SYN+ACK 패킷 구조: - 플래그: SYN=1, ACK=1 - 시퀀스 번호: 서버 ISN(예: 300) - 확인 응답 번호: 클라이언트 ISN+1(예: 101)
-
클라이언트 → 서버: 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 단계별 과정
-
클라이언트 → 서버: FIN 패킷 전송
- 클라이언트가 연결 종료를 요청하기 위해 FIN(Finish) 패킷을 전송한다
- 이 시점에서 클라이언트는 FIN_WAIT_1 상태로 전환된다
FIN 패킷 구조: - 플래그: FIN=1, ACK=1 - 시퀀스 번호: 클라이언트의 현재 시퀀스 번호
-
서버 → 클라이언트: ACK 패킷 전송
- 서버는 클라이언트의 연결 종료 요청을 확인하고 ACK 패킷을 전송한다
- 서버는 CLOSE_WAIT 상태로 전환되고, 클라이언트는 FIN_WAIT_2 상태로 전환된다
- 이 시점에서 클라이언트→서버 방향의 연결은 종료되지만, 서버→클라이언트 방향의 연결은 유지된다
ACK 패킷 구조: - 플래그: ACK=1 - 확인 응답 번호: 클라이언트의 시퀀스 번호+1
-
서버 → 클라이언트: FIN 패킷 전송
- 서버가 남은 데이터를 모두 전송한 후, 서버도 연결 종료를 위해 FIN 패킷을 전송한다
- 서버는 LAST_ACK 상태로 전환된다
FIN 패킷 구조: - 플래그: FIN=1, ACK=1 - 시퀀스 번호: 서버의 현재 시퀀스 번호
-
클라이언트 → 서버: 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의 연결 수립과 해제 과정은 신뢰성 있는 데이터 전송을 위한 기본 메커니즘으로, 네트워크 프로그래밍과 문제 해결에 있어 필수적인 지식이다.
댓글남기기