TCP/IP State Diagram

Theory 2015. 2. 9. 00:13

다음에 기반함


http://www.tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm


TCP/IP 의 커넥션은 상태에 따라 여러 스테이트로 생명주기를 관리한다.

이를 이해하면 어떻게 TCP 가 커넥션을 연결하고 - 그후 어떤 함수들이 호출되는지들에 대한 전반적인 개념을 잡을 수 있을 것이다. 


크게 3개의 메시지가 TCP 의 상태간 전이를 제어하고, 그 기능의 메시지를 제공함을 나타내는 TCP 헤더 플래그와 일치한다. 


* TCP 상태 전이를 제어하는 3개의 메시지


SYN : 연결을 맺고 초기화하는데 사용되는 동기(sync) 메시지. 다중의 디바이스간의 시퀀스를 동기화해주므로 이런 이름이 붙여졌다.

FIN : 만약 어떤 connection 이 이 비트를 세팅했다면, 연결을 종료하려는 것을 의미한다.

ACK : SYN 이나 FIN 의 수신을 나타내는 데 사용



에러컨디션 또한 상태의 전이를 야기할 수 있다. ( 하지만 이런 전이는 단순화된 스테이트 다이어그램에선 볼 수 없다. )



 State

상태 설명 

이벤트와 상태 전이 

CLOSED 

연결을 맺기위한 절차가 시작되기 전의 상태. 

"가상의" 상태로 일컬어 지는데, 단말간의 어떤 연결도 없음을 의미하기 때문이다 

- 생성되적도, 파괴된적도 없음을 의미한다- 

 수동 오픈 : 서버는 TCP 포트를 수동적으로 여는 것으로 연결과정을 시작한다. 

동시에, 연결을 관리하기 위해 필요한 데이터 구조를(transmission control block or TCB) 구성한다. 

이후 LISTEN 상태로 전이된다. 

 적극적 오픈, SYN 발송 : 클라이언트는 SYN 메시지를 발송하는 것으로 연결을 시작하고, TCB 를 구성한다. 

그 후 SYN-SENT 상태로 전이된다. 

 LISTEN

장치(보통 서버)는 SYN 메시지를 클라이언트로부터 수신되기를 기다린다. 

아직, 본인은 SYN 메시지를 보낸적이 없다.  

 클라이언트의 SYN 메시지를 수신하고, SYN+ACK 발송 : 

서버 장치는 클라이언트로 부터 수신하여 SYN 과 응답을 다시 발송처로 전달한다. 

이제 서버는 SYN-RECIEVED 상태로 전이 된다. 

 SYN-SENT

장치(보통 클라이언트) 는 SYN 메시지를 보냈고 

이에 맞는 SYN 메시지를 다른 장치(보통 서버)로부터 기다린다.  

 SYN 수신, ACK 발송 : 만약 이 장치가 SYN 메시지를 받았지만 ACK 메시지를 받지 못한 경우, 

SYN-RECEIVED 상태로 전이되고 ACK 을 기다린다. 

 SYN + ACK 수신, ACK 발송 : 만약 둘다 수신이 되면, ESTABLISHED 상태로 전이된다. 

 SYN-RECEIVED

 장치는 SYN 를 보내기도 했고, 파트너로부터 SYN 를 받기도 했다. 이제 연결요청인 SYN 가 연결 준비를 모두 마치기 위해 ACK 을 기다린다.  

 ACK 수신 : ESTABLISHED 상태로 전이

 ESTABLISHED

TCP 커넥션을 오픈하는 '꾸준한 상태'. 

양쪽 장치 사이에서 자유롭게 데이터를 주고받을 수 있다. 

커넥션이 종료되기 전까지 지속된다.  

 종료, FIN 전송 : 장치는 FIN 메시지를 발송 함으로써 연결을 종료할 수 있다. FIN-WAIT-1 상태로 전이.

 FIN 수신 : 커넥션 상대로부터 연결 종료를 요청하는 FIN 메시지를 수신할 수 있다. CLOSE-WAIT 상태로 전이된다. 

 CLOSE-WAIT

장치가 FIN 요청을 상대로부터 받았다. 어플리케이션이 이 요청을 처리하기를, 이를 위한 요청을 구성하는 것을 기다린다.  

 종료, FIN 발송 : TCP 를 사용하는 어플리케이션은 다른 프로세스들에게 셧다운을 하고 싶음을 알리며, 연결종료 요청을 TCP 레이어에 전송한다. TCP 는 FIN 메시지를 원격 장치에 전송하고, 이 장치는 이제 LAST-ACK 상태로 전이된다. 

 LAST-ACK

 장치는 연결 종료요청을 수신하고 이를 인지하여 FIN 요청을 발송하고 이에 따른 ACK 을 대기하고 있다.

 FIN 에 대한 ACK 수신 : 장치는 연결 종료요청을 인지했다. FIN 메시지를 이에 따라 응답으로 전송했으며, 

ACK 을 수신하면 CLOSED 상태로 전이된다.  

 FIN-WAIT-1

장치는 FIN 을 발송하고 ACK 의 수신을 기다리고 있다. 혹은 다른 장치의 연결 종료 요청을 기다리고 있다.  

 FIN 에 대한 ACK 수신 : 장치는 연결 종료대한 응답을 수신했다. FIN-WAIT-2 상태로 전이.

 FIN 을 수신하고 ACK 을 발송 : 장치는 자신이 발송한 FIN 에 대한 ACK 을 받지 못하였지만 FIN 을 그 디바이스로부터 전송받았다. 이를 인지하여 CLOSING 상태로 전이된다. 

 FIN-WAIT-2

장치는 ACK 을 그것의 연결종료 요청에 대한 응답으로 수신하였으며 

이제 상대 장치로부터 일치하는 FIN 메시지를 기다리고 있다.  

 FIN 을 수신, ACK 발송 : 장치는 FIN 을 상대 디바이스로부터 전달 받았다. 이를 인지하여 TIME-WAIT 상태로 전이된다. 

CLOSING 

장치는 FIN 을 수신하여 ACK 를 응답으로 전송하였지만, 

그것이 요청한 FIN 메시지에 대해서는 ACK 를 받지 못하였다.  

 ACK 을 FIN 에 대한 응답으로 수신 : 장치는 연결 종료 요청에 대한 응답을 받았다. TIME-WAIT 상태로 전이된다.

TIME-WAIT 

장치는 FIN 메시지를 다른 장치로부터 수신하여, 그것의 FIN 메시지를 발송하여 ACK 메시지를 전달 받았다. ACK 이 새로운 연결에 의해 잠재적으로 덮어지는 예외 상황을 제외하면 모든 과정이 완료되었다. 

( 이 상태에 대해 좀더 알고 싶다면 다음을 참고하라. the topic describing connection termination ) 

 타이머만료 : 지정된 시간만큼 대기한후, 장치상태는 CLOSED 상태로 전이된다. 



'Theory' 카테고리의 다른 글

Neuron Network - Supervised  (2) 2010.11.04