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. 그래 그럼 그 만큼만 생산한다 !