Appearance
[TCP] 3 way handshake & 4 way handshake
연결을 성립하고 해제하는 과정을 말한다
3 way handshake - 연결 성립
TCP는 연결 지향 프로토콜이므로 통신 전에 3 way handshake로 연결을 성립한다.
이 과정의 목적은 단순히 "연결 시작"만이 아니다.
- 양 끝이 서로 도달 가능한지 확인
- 초기 sequence number를 동기화
- MSS, Window Scale, SACK Permitted, Timestamp 같은 TCP 옵션 협상

클라이언트가 서버에게 SYN 패킷을 보냄 (sequence : x)
서버가 SYN(x)을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보냄 (sequence : y, ACK : x + 1)
클라이언트는 서버의 응답은 ACK(x+1)와 SYN(y) 패킷을 받고, ACK(y+1)를 서버로 보냄
이렇게 3번의 통신이 완료되면 연결이 성립된다. (3번이라 3 way handshake인 것)
4 way handshake - 연결 해제
TCP는 양방향(full-duplex) 통신이므로, 연결 해제도 각 방향이 독립적으로 종료된다. 그래서 보통 4 way handshake가 된다.

먼저 종료를 시작한 쪽(active closer)이 상대에게
FIN을 보낸다.상대는 이를 확인하는
ACK를 보낸다. 이때 상대는 남은 데이터를 더 보낼 수 있다. (예:CLOSE_WAIT)상대도 자신의 전송을 마치면
FIN을 보낸다.active closer는 마지막
ACK를 보내고TIME_WAIT상태로 들어간다.
상대는 마지막 ACK를 받은 뒤
CLOSED로 간다.TIME_WAIT시간이 끝나면 active closer도CLOSED가 된다.
이렇게 4번의 통신이 완료되면 연결이 해제된다.
참고: TIME_WAIT 상태
- 마지막 ACK를 보낸 쪽은 바로 연결을 완전히 닫지 않고
TIME_WAIT상태에서 일정 시간 대기한다. - 흔히
2MSL이라고 설명하지만, 실제 대기 시간은 구현체마다 다를 수 있다. - 이유:
- 지연된 이전 세그먼트가 뒤늦게 도착하는 상황 방지
- 마지막 ACK가 유실되었을 때 상대의 FIN 재전송에 다시 ACK로 응답하기 위함
참고: 예외 상황
- 경우에 따라
RST로 즉시 연결을 끊을 수 있다. - 양쪽이 거의 동시에
FIN을 보내는 simultaneous close도 가능하다. TIME_WAIT에 들어가는 쪽은 항상 "클라이언트"가 아니라,마지막 ACK를 보낸 active closer이다.