1. TCP 상태도
2. TCP 상태 상의 특징
ㅇ TCP 연결은 양방향이므로, 양 측에서 각각 다르게 상태 변화를 관리할 수 있음
- 즉, 다른 경로를 통해 `TCP 연결 설정` 및 `TCP 연결 종료`에 갈 수 있음
ㅇ 서로다른 `TCP 연결 설정` 경로
- (능동 개방) Closed -> Listen -> SYN-Received -> Establshed
. 자발적으로 SYN 세그먼트를 보내며 연결 설정하는 경우
.. 주로, 클라이언트 응용이 상대 서버에게 연결 요청
- (수동 개방) Closed -> SYN-Sent -> Established
. 수동적으로 SYN 세그먼트를 수신하며 연결 설정하는 경우
.. 주로, 서버 응용이 TCP에게 상시적 연결 수용 및 대기
ㅇ 서로다른 `TCP 연결 종료` 경로
- (수동 종료) Eatablished -> Close-Wait -> Last-ACK -> Closed
. 상대로부터 FIN 세그먼트를 받고, 이에대해 응답하며 종료하는 경로
- (능동 종료) Eatablished -> FIN-Wait-1 -> FIN-Wait-2 -> Time-Wait -> Closed
또는, Eatablished -> FIN-Wait-1 -> Closing -> Time-Wait -> Closed
. 자발적으로 FIN 세그먼트를 보내고, 응답을 기다리며 종료하는 과정
3. TCP 연결 설정과 관련된 상태들
ㅇ CLOSED
- 무 연결 상태
. 초기 시작 또는 원격 호스트가 ACK 수신 후 연결 닫음
ㅇ SYN-SENT (능동 개방 요청) ☞ TCP 연결 설정 참조
- 클라이언트가 능동적으로 SYN 세그먼트를 보내고, ACK를 기다리는 상태
. 이때, 적정 TCP 세그먼트 크기를 상대에게 통보코자, 송신측 TCP MSS 옵션을 채워보냄
ㅇ LISTEN (수동 개방 대기) ☞ TCP 연결 설정 참조
- SYN 세그먼트를 기다리며, 수동적으로 개방 대기중인 상태
- 만일, 서버가 SYN 세그먼트를 수신하면, SYN+ACK 세그먼트를 송신하고는,
. 이후, SYN-RECEIVED 상태로 전이됨
ㅇ SYN-RECEIVED (연결 준비) ☞ TCP 연결 설정 참조
- 상대방에게, SYN 세그먼트(연결 요청)을 받고,
- 자신의 SYN(즉, SYN+ACK 세그먼트)으로 응답한 상태로써,
. 이때부터, 상대방에서 ACK 세그먼트를 기다리는 상태 (ACK 세그먼트를 기다림)
- 결국, 상대방의 ACK 세그먼트가 수신되어야,
. 비로소 ESTABLISHED 상태로 전이됨
4. TCP 연결 성립 유지와 관련된 상태
ㅇ ESTABLISHED
- 양단간 연결 회선 성립 (데이터 교환)
- 의미
. 두 종단 간에 양방향 데이터 전송이 가능
. 종단 각각 자신 및 상대 ISN(초기순서번호)를 알게 됨
. 양단 간에 TCP 옵션에 의해 부가적인 정보가 전달됨
5. TCP 연결 종료와 관련된 상태들
ㅇ CLOSE-WAIT
- TCP가 어플리케이션 종료를 기다림
. 이 상태에서는, 계속 데이터를 상대에게 보낼 수 있음
ㅇ LAST-ACK
- 서버는 자신이 송신한 FIN 세그먼트에 대한 ACK 세그먼트를 기다림
ㅇ FIN-WAIT-1
- 자신이 보낸 FIN 세그먼트에 대한 ACK를 기다리고, 또한 상대측 FIN을 기다림
. 이 상태에서 자신은 더이상 데이터를 보낼 수 없지만,
. 상대측으로부터 오는 데이터는 계속 수신하게됨
ㅇ FIN-WAIT-2
- FIN 세그먼트를 송신하고, 상대측은 이에대한 ACK를 송신
ㅇ Closing
- 상대로부터 FIN 세그먼트를 받고 ACK를 보냈지만,
자신의 FIN 세그먼트에 대한 ACK는 받지못함
ㅇ TIME-WAIT
- 최대 세그먼트 수명(MSL,Maximum Segment Lifetime)의 2배를 기다림
- 지정된 시간이 지나면, Closed 상태로 전이됨
ㅇ CLOSED
- 연결이 종료됨 (연결 없음)