스터디 - 흐름제어&혼잡제어

정상화·2023년 4월 19일
0

스터디

목록 보기
6/10

Sliding window

tcp에서의 윈도우


tcp에서 데이터를 송수신할 땐 두 개의 윈도우를 사용한다.
Send윈도우와 Receive윈도우이다.


Send윈도우

  • 현재 200번까지 데이터는 수신자가 수신을 완료한 데이터이다.
  • 201번부터 260번까지는 이미 보냈으나 수신자로부터 수신완료가 확인되지 않은 데이터들이다.
  • 윈도우의 크기는 수신자에 의해 결정된다.

지금 그림에선 260번까지 데이터를 보냈으나 아직 수신자가 다 받았는지 알 수가 없다.

만약 수신자가 '다 받았어'라는 응답(ACK)을 주면 윈도우의 시작점이 261번으로 옮겨지게 된다.
반대로 수신완료했다는 응답이 없거나 뭔가 잘못됐다는 수신자의 응답이 있으면 201번부터 윈도우 사이즈만큼 데이터를 다시 보내게 되는 것이다.

Receive윈도우

  • 200번까지는 애플리케이션이 버퍼로부터 데이터를 가져다 읽은 것이다.
  • 현재 데이터는 260번까지 수신 받은 상태이고 201번부터 260번까지는 아직 애플케이션이 읽지 않았다.
  • 다음으로 받아야 할 데이터는 261번부터 시작해야한다. 그렇지 않다면 뭔가 잘못된 것이다.

흐름제어

송신 윈도우의 크기는 rwnd와 cwnd 중 작은 값이다.

  • rwnd : 수신자가 받을 수 있는 윈도우 크기
  • cwnd : 네트워크 혼잡을 피하기 위한 윈도우의 크기

  • 수신자 윈도우의사이즈(rwnd)는 수신 받은 데이터만큼 감소한다.
  • 수신자의 윈도우사이즈는 애플리케이션이 데이터를 읽은 만큼 증가한다.
  • 송신자 윈도우사이즈는 Min(rwnd, cwnd)이다. (그림에선 rwnd만 고려)

혼잡제어

라우터를 지나는 데이터 양이 라우의 Capacity를 넘어서면 처리량이 급도로 떨어지게 된다.

Slow start, exponential increase


cwnd의 크기를 임계점(threshold)가 될 때까지 지수적으로 증가시킨다.

Congestion avoidance, additive increase


혼잡이 감지될 때 까지 cwnd를 점진적으로 증가시킨다.



혼잡제어를 위한 cwnd를 조절하는 두 방법은 상황에 따라 사용된다.

  1. Slow start로 시작한다.
  2. cwnd가 임계점을 넘어서면 Congestion avoidance 방식으로 바꾼다.

혼잡이 발생했을 때

  • Timeout이 발생하면?
    임계점을 반으로 낮추고 cwnd를 1로 설정한다.

  • 중복 Ack이 발생하면?
    현재 cwnd를 반으로 낮춘다.


예시


참고자료

  • TCP/IP Protocol Suite 4th edition
profile
백엔드 희망

4개의 댓글

comment-user-thumbnail
2023년 4월 20일

그림예시가 많아서 이해하기 쉬워 좋았습니다.

답글 달기
comment-user-thumbnail
2023년 4월 20일

생소한 내용을 그림예시와 덧붙여서 차근차근 상황예시를 들어가며 자세히 설명해주셔서 이해하는데 큰 도움이 됐습니다!!

답글 달기
comment-user-thumbnail
2023년 4월 20일

다양한 시작자료가 있어서 더욱 글을 이해하기 좋았습니다 어렵긴하네요🥲

답글 달기
comment-user-thumbnail
2023년 4월 20일

혼잡제어에서의 cwnd가 어떻게 조절되는지 구체적으로 알 수 있어서 좋았습니다

답글 달기