Clolent

1. FIN 을 보내고 ACK 을 받은 다음에 데이터는 못보내도 응답은 가능하다.

만약 FIN 을 보내고 ACK 을 받아서 연결이 종료됬다고 응답도 불가능하다면, 한쪽이 끊긴 다음에 반대쪽은 FIN 을 아무리 보내도 ACK 을 못받아 하염없이 기다리게 될 것이다. 

고로 응답은 가능하도록 설계 되었다.

밑의 그림과 함께 이해 하자.


2. TCP 의 상태들 ( TCP's States )

1 에서 언급된 연결은 끊겼는데 응답은 가능한 상태는 FIN-WAIT 상태이다


3. TIME-WAIT

TIME-WAIT 이란 위에 써져 있는대로 해석을 하면, 

'두번째 FIN 을 받고, ACK 을 보낸 상태로 2MSL 만큼 기다려 준다. ' 이다.

이녀석은 언제 일어나냐면

- Client 가 FIN 보냄 ▶ Server 가 수신

- Server 가 ACK 보냄 ▶ Client 가 수신

- Server 가 FIN 보냄 ▶ Client 가 수신

- Client 가 ACK 을 보냄


이 상태에 생기게 된다. 어? 문제가 없지 않나 라고 생각 할 수 있다.   

그러나 Client 가 ACK 를 보냈으나, Server 가 이를 수신했다는 증거는 어디에도 없다. 


만약 Client 가 ACK 보내고 " 음 나는 할 일 다했다 퇴근 ! " 했는데, 어떠한 문제로 인해 Server 가 그걸 못 받는 상황이 생길 수가 있다는 것이다.


부하직원이 상사에게 " 저 이제 퇴근합니다 " 메시지를 보내고, 

상사가 " 그래 알았다 " 라고 답장을 보냈으나 왜인지 부하직원이 수신을 못한상태

이제 부하직원은 퇴근을 한다했는데 왜 답이없지 퇴근하지 말란건가 하며....

하염없이 기다리게 되는 그런 상황이 벌어지는 것이다.


어쨋든 이러한 상황을 막기위한 것이 TIME-WAIT 이다. 

마지막 상태 Client 가 ACK 을 보냄 상태에서 TIME-WAIT 상태로 전환 되어서는

2MSL Time 동안 기다려준다! 만약 내가 보낸 ACK 을 못받았으면 다시 FIN 을 보내 겠지 하고!


부하 : 저 이제 퇴근합니다

부장 : 그래 알았다 - 미수신 -


부장 대기 중 한조 대기중 


부하 : 저 이제 퇴근해도 될까요 답이 없어셔서 ㅎㅎ

부장 : 어 아까 보냈는데 못 받았나보네 그래 퇴근해라 


경사났네 경사났어 



4. RST

SYN : 야 나좀 연결해줘

RST : 거절

SYN : 유감


5. TCP 에서 WINDOW 란

TCP 에서 WINDOW 라 하면 N 을 의미한다. 

이 N 은 크기인데, 한번에 상대가 수신할 수 있는 양의 Maximum 값을 의미한다. 

TCP 에서는 그냥 무작정 생산 하고 엄청 크게 포장해서 일단 보내! 이런 방식이 아니고, 

상대가 수신 할 수 있는 만큼을 포장해서 보내기 때문에 이 WINDOW 값은 유동적이다. 

( ACK 을 통해 WINDOW 가 전달된다. ) 


 

 

 

 200

201 

 ....

260 

261 

 ....

300 

301 

 

 

 


여기서 200 은 이미 상대가 소비한 부분이다. 

그리고 201 ~ 260 은 이미 보냈던 부분인데 신뢰성을 위해 아직 지우지 않고 가지고 있는 부분이다.

이제 ACK 으로 261이 들어온다면 저 빨간 선이 움직여서 260 까지 덮어서 Close 시킬 것이다.

이제 볼 필요가 없다는 뜻이다.


자 그럼 이제 초록색 부분은 뭘 의미하는가? 다음에 보낼 부분을 의미한다 즉 N 이다. 

저 파란색 선이 이제 N 이 늘어나면 오른쪽으로, 줄어들면 왼쪽으로 이동을 하면서 조절을 할텐데

오른쪽으로 즉 N 이 커지는 것을 Opens 라고 하고 왼쪽으로 줄어드는 것을 Shrinks 라고 한다.


※ ACK 때 보내는 rwnd 녀석이 있지 않았는가 이놈이 바로 Receiver 의 window size 이다.


5. FLOW CONTROL

FLOW CONTROL 이란 간단하게 말하면 

' Receiver 가 receive 하는 속도에 맞춰 Send 속도를 조절 하는 것 ' 또는

' 생산 속도를소비 속도와 같게 조절하는 것 ' 정도로 표현 할 수있다. 


어차피 받지도 못할 만큼 빠르게 만들어서 오버헤드를 발생시키고 할 필요 없이, 받을 수 있는 만큼만 만들고 보내는 속도를 조절해서 효율을 높여보자 라는 생각이다.  잘먹고 잘살아보자 


FLOW CONTROL 이 일너나는 과정을 지켜보자면


1. 생산한다 !

2. 보낸다 ! ( 받는다는 생략 )

3. 받아져 있는걸 소비한다 ! 

4. 이만큼 비었다 이 짜식아 !

5. 그래 그럼 그 만큼만 생산한다 !


댓글 로드 중…

블로그 정보

Clolent - 커피물조절달인

최근에 게시된 글