[CS공부] 네트워크 구조(1)-흐름제어와 혼잡제어 (Exception Handling)

Min Kim·2023년 2월 10일
0

CS 공부

목록 보기
2/15
post-thumbnail

1. 비교 전 개념 정리


TCP 통신이란?

  • 네트워크 통신에서 서로가 통신을 할 수 있는 상태를 먼저 인증하고 통신을 하는
    연결지향적인 양방항 통신
  • 신뢰적인 연결 방식을 추구하기 때문에 4가지 보편적인 문제가 발생한다.
    • 손실 : packet이 손실 될 수 있는 문제
    • 순서 바뀜 : packet의 순서가 바뀌는 문제
    • 혼잡(Congestion) : 네트워크가 혼잡한 문제
    • 오버로드(Overload) : 수신이 오버로드가 되는 문제

한눈에 보기

2. 흐름제어


흐름제어는 송신측과 수신측 사이의 데이터 처리 속도 차이를 해결하기 위한 기법입니다.
송신 측의 전송량이 수신측의 처리량보다 클 경우, 패킷이 수신 측의 큐를 넘어 손실될 수 있어서 송신측 패킷 전송량을 제어해줘야 하기 위한 것이죠! (손실 문제)

1) 흐름 제어 방식

정지-대기 (stop and wait)

  • 송신을 보낸 후에 수신되었다는 응답을 받고 나서 그 다음 패킷을 전송합니다.
  • 교통정리를 하면서 하나하나 차근차근 보내게 되는 거죠!
    하지만 이런 식으로 전송되면 어느 세월에 통신이 끝날까요? 통신의 핵심은 빠름정확함인데...

Sliding Window (Go Back N ARQ)

그래서 Sliding Window 기법이 필요합니다.

  • 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답 없이 세그먼트를 전송할 수 있게 해서 데이터 흐름을 동적으로 조절합니다.

  • 송신 측은 ACK 라는 프레임을 받게 되면 ACK 프레임에 따른 프레임의 수 만큼 오른쪽으로 경계가 확장되는 겁니다!

윈도우란?
수신, 송신 양쪽에서 만들어진 버퍼의 크기
ARQ란?
Automatic Repeat Request(자동 반복 요청)으로 에러가 발생한 경우 재전송을 요구합니다. Sliding Window의 경우 일정 시간 이상 응답(ACK)가 돌아오지 않으면 송신 측에서 데이터를 재전송합니다.


3. 혼잡 제어


이름 그대로 네트워크 혼잡을 피하기 위해 송신 측에서 보내는 데이터의 전송 속도를 제어하는 것입니다.(혼잡 문제)
송신 측 데이터 전달과 네트워크 데이터 처리 속도 차이를 해결하기 위한 기법으로 한 라우터에 데이터가 몰려서 모든 데이터를 처리할 수 없는 상황에 이르렀을 때, 호스트들은 계속해서 재전송을 하고 결과적으로 혼잡만 가중시켜 오버플로우나 데이터 손실이 발생하는 위험을 해결하기 위한 것입니다!

1) 혼잡 제어 방식

  • 4가지의 방식들이 있습니다.

    1. 슬로우 스타트(slow start)
    2. 혼잡 회피(congestion avoidance)
    3. 빠른 회복(fast recovery)
    4. 빠른 재전송(fast retransmit)

이 중 1번과 2번은 TCP의 필수 요소입니다. 다만 수신된 ACK들에 대응해 cwnd(congestion window) 크기를 얼마나 증가시키냐는 것이 서로 다릅니다. 3번은 TCP 송신자들에게는 필수 사항은 아닙니다.

cwnd 란?
혼잡 윈도우는 TCP 송신자가 네트워크로 트래픽을 전송할 수 있는 비율을 제한합니다.
특히 송신하는 쪽에서 확인응답이 안된 데이터의 양은 cwnd 와 rwnd의 최솟값을 초과하지 않습니다.

1. 슬로우 스타트


  • 전송 성공 시 ACK 패킷마다 cwnd를 1씩 증가시킵니다. 즉, 한 주기가 끝나고 나면 cwnd는 2배가 됩니다.
  • 혼잡 현상이 발생하면 cwnd 를 1로 떨어뜨립니다.
  • 한번 혼잡 현상이 발생하고 나면 혼잡 현상이 발생했던 cwnd 의 절반까지는 이전처럼 증가시키다가 그 이후부터는 완만하게 1씩 증가시킵니다.

  • 즉, 임계 값(ssthresh, slow start threshold)을 절반으로 줄입니다.

  • 매 전송마다 2배씩 증가하기 때문에 데이터의 크기가 지수함수적으로 증가합니다.

  • 파악한 임계 값에 도달하기 전까지 2배씩 증가, 임계값 도달 시 혼잡 회피 단계로 넘어갑니다.

    😜추가 지식

    • 혼잡 현상 : 네트워크 내에 패킷의 수가 과도하게 증가하는 현상
    • 임계 값 : 혼잡을 감지하는 최대값. 초기엔 최대 윈도우의 반으로 설정

    2. 혼잡 회피


  • 윈도우 크기가 임계 값에 도달한 이후에는 데이터의 손실이 발생할 크기가 올라갑니다.

  • 이를 회피하기 위해 cwnd 크기를 전송 시마다 1 씩 증가시킵니다.

  • 수신 측으로부터 일정 시간동안 ACK 를 받지 못하면, 타임 아웃이 발생해 cwnd 크기를 1로 줄입니다.

  • 동시에 임계 값을 패킷 손실이 발생했을 때의 cwnd 크기의 1/2로 줄입니다.

3. 빠른 회복

  • 혼잡한 상태가 되면 cwnd 를 1이 아니라 절반으로 줄이고 선형 증가 시키는 방법입니다.
  • 빠른 회복 정책이 적용되면 이후엔 순수한 AIMD 방식으로 동작하게 됩니다.

    😜추가 지식

    • AIMD(Additive Increase / Multiplicative Decrease)
      - 처음에 패킷을 하나씩 보내고 문제없이 도착하면 윈도우의 크기를 1씩 증가시켜가며 전송한다.
      - 만약 전송에 실패하면 윈도우 크기를 반으로 줄인다.
      - 윈도우 크기를 너무 조금씩 늘리기 때문에 네트워크의 모든 대역을 활용하여 제대로 된 속도로 통신하기까지 시간이 오래 걸린다.
      - 호스트가 하나의 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 불리하지만 시간이 지날수록 평형 상태로 수렴한다.

4. 빠른 재전송



  • 패킷을 받는 수신자 입장에서 세그먼트로 분할된 내용이 순서대로 도착하지 않는 경우에 필요합니다.
  • 수신 측에서 패킷을 받을 때 먼저 올 패킷보다 다음 패킷이 먼저 도착해도 ACK 를 보냅니다.
  • 단, 이 때 순서대로 잘 도착한 패킷의 마지막 순번을 ACK 에 실어서 보냅니다.
  • 따라서 중간에 패킷이 손실되면 송신 측에서는 순번이 중복된 ACK 패킷을 받게 되는 것입니다. 이것을 감지하면 문제가 되는 순번의 패킷을 재전송할 수 있습니다.
  • 빠른 재전송은 중복된 순번의 패킷을 3개 받으면 재전송합니다.
  • 재전송하는 경우 혼잡 상태로 간주하고 혼잡 회피를 합니다.

참고 사이트


해당 사이트의 내용을 참고로 작성했습니다. 추후에 더 알게 되는 내용들을 추가하겠습니다.

느리더라도 꾸준하게
이누의 개발성장기
개발자를 꿈꾸는 프로그래머
Tech Interview
순간이 영원해 지는 곳
TCP Congestion Control TCP 혼잡제어
즐거운 블로그
최신 트랜드와 지식창고
minsu.log

profile
Better & Better 꾸준히 성장하는 개발자

0개의 댓글