3 way HandShake ( connection )
1. Client가 Server로 요청 SYN 패킷 전송 후 SYN_SENT 상태로 응답 대기
2. Server가 요청 SYN 패킷을 받고 수락하는 ACK 패킷과 SYN패킷 전송 후 SYN_RCVD(SYN_RECEIVED)상태로 Client의 ACK 패킷 응답 대기
3. Client가 SYN 패킷을 받고 ACK 패킷을 보낸 뒤 ESTABLISHED 상태가 되어 통신 가능해짐.
- SYN : 연결확인을 위한 무작위 숫자값
- ACK : SYN ( 요청 값 ) + 1d, 응답
- SYN-RECEIVED : SYN 요청을 받고 응답 대기 상태
- ESTABLISHED : 연결 수립 상태 ( 데이터 교환 가능 )
4 way HandShake ( deconnection )
1. Client가 CLOSE함수 호출 후 Server로 FIN segment 전송 후 FIN_WAIT1 상태로 대기
2. Server가 Client의 호출을 알고 CLOSE_WAIT 상태가 된 후 Client로 ACK segment 전송
3. Client가 ACK segment를 받고 FIN_WAIT2 상태로 변환 후 Server 는 CLOSE() 함수를 호출하고 Client로 FIN segment 전송
4. Client가 FIN segment을 받고 Server로 ACK segment를 전송 후 TIME_WAIT 상태로 전환 후 CLOSED 상태로 변환
- CLOSE : 연결 전 기본 상태 ( 연결 없음 )
- FIN : 종료 요청
- CLOSE-WAIT : 상대의 FIN( 종료 요청 ) 을 받은 상태, 해당 FIN에 대한 ACK 를 전송 후 어플리케이션 종료를 알림
- FIN-WAIT-1 : 자신이 보낸 FIN에 대한 ACK 또는 상대 FIN 응답 대기 상태
- FIN-WAIT-2 : 자신이 보낸 FIN에 대한 ACK를 받고 상대 FIN 응답 대기 상태
- TIME-WAIT : 모든 FIN에 대한 ACK를 받고 연결 종료 된 상태
( 새 연결과 겹치지 않게 일정 시간 대기했다 CLOSED 됨 )