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

Neuron Network - Supervised

Theory 2010. 11. 4. 22:02


신경망에 대해서 수업을 들었지만 사실 이해가 잘 가지 않는다. 
되는대로;; 간략히 정리하자면

사람의 뇌가 Synapse 끼리의 의사소통으로 정보를 전달하는 것은 모두 알고 있을 것이다.


하나의 시냅스에 여러 입력이 들어오고, 그에 따라 단복수의 아웃풋이 있을 것인데,
사람의 이런 인지 메커니즘을 따와서 모델링 한 것이 신경망이다. Perceive + Neuron 으로 Perceptron 이라고도 한다.

다음과 같은 이미지가 될 것이다 .


X1, X2, X3는 인풋이고, F는 시냅스에서 할 내부적인 작업, 그리고 O는 아웃풋이다.
이 아웃풋이 다른 F의 X1, X2, X3가 될 것이다.

그런데 X1, X2, X3는 이대로 들어올 수도 있지만, 시냅스마다 인풋마다 다른 가중치를 적용 할 수도 있다. 그렇게 되면 이미지는

와 같은 형태가 된다.

F의 입장에서, 자신이 가지고 있는 정보는

X_vector = [ x1 x2 x3 ] , W_vector = [ w1 w2 w3 ] 이며,
w1x1 + w2x2 + w3x3 = 0 과 같은 직선의 식을 형성하게 된다. (각 시냅스 별로)

여기서 직선의 식을 형성한다는 말은, Classify에서 각 Class 간을 구분짓는 직선을 만드는 것이 이 초창기 신경망의 주 목적이라는 점을 생각하면 된다.
숫자 인식이라면, 0, 1, 2 ,...9 의 10가지 class가 있는데, 0 그룹들은 2차원(사실 feature에 따라 2차원보다 훨씬많지만) 평면에 맵핑시켰을때 왼쪽 구석에 몰려있었고, 9는 오른쪽 하단 구석에 몰려있었다면, 그 중앙에 직선을 그어주면 된다.
신경망은 직선을 어디에 그을지 학습을 하는 녀석이고,
테스트시에 받은 입력을 갖다가 feature 그래프에 맵핑시켜보니 왼쪽구석에 있었다면 0이라고 출력해주는 형태이다.

예컨데, feature 1과 feature 2 를 특징으로 가지고있고, 이에 따라 확연히 구분되는 O와 X를 고려해보자.


이 둘을 나누기 위한 직선은 무수히 많지만, 그 중 하나를 고를 수 있다.

이 예제는 대단히 classify 하기 쉽지만, 실제 데이터는 이렇게 정갈하지 못한 것이 일반적이다.


위와 같은 분포에서는 불가피하게 두개 이상의 직선을 그릴 수 밖에 없다. 이와 같은 직선을 Peicewise - linear라고 한다.
그러나 위와 같은 linear도 대단히 좋은 경우다.
사실 feature에 따라 엄청나게 복잡한 곡선을 그려야 하며, 인공지능 연구자들은 보다 효율적인 방안을 강구해 내야 했다.

1985 . PDP의 등장

사실 사람이 어떤 정보를 저장할때 3이라는 숫자를 기억한다고하면 "3" 전체를 하나의 세포에 우겨 넣는 것이 아니라,
3을 몇개로 쪼개서 세포 하나하나에 저장한다.

글자 3에서 끝부분이 마저 적어져 있지 않아도 "이건 3이구나!"라고 알아낼 수 있는것도,
어떤 친구가 모자를 안쓰다가 쓰고왔다고 해서 못알아보는 일은 없는것도 이런 PDP(Parallely Distributed Processing)의 속성때문이다.

Neuron Network는 PDP를 충분히 활용한 사례다.
Layer의 노드들이 각각 어떤 정보의 일부분을 저장하고 있으며, 복잡하게 얽혀서 (Massively Connected)그 정보를 저장하고 있다.

Neuron Network의 구조는 다음과 같다.


위와같은 네트워크에서 식은 x1*w11 *a(output레이어로의 간선) + x1*w12*b + x2*w21*a  + x2*w22*b = o 와 같은 형태가 된다.
히든레이어수와 노드가 많아질 수록 식은 훨씬 복잡해지고, 다양한 직곡선을 그릴 수 있게 된다.

학습시키는 방법은 ,

먼저 w들의 값을 초기값으로 아무렇게나 주고, 입력과 아웃풋의 결과를보고 그 MSE( min sqaure error )를 확인,
만약 MSE가 크다면 w들의 값을 조금씩 수정해가는 형태다.
먼저 O의 결과를 보고 A와 B의 간선으로(최종히든레이어 두개) 에러값 만큼 수정 요구를 하면 ,
그 히든레이어는 역시 에러값을 앞으로 전파(propagation)하여 학습을 한다.

'Theory' 카테고리의 다른 글

TCP/IP State Diagram  (0) 2015.02.09