들어가며

  • 왜 흐름 제어와 혼잡 제어를 4계층에서 수행해야 하는가?
  • 흐름 제어란 무언인가?
  • 혼잡 제어란 무엇인가?

왜 흐름제어(flow control)와 혼잡제어(congestion control)이 필요할까?

  • 송신 노드와 수신 노드의 용량 및 처리 속도는 정해져 있다.
    • 각 노드의 한계가 있기 때문에 데이터가 너무 많이 전송될 경우 노드가 죽을 가능성이 존재한다.
  • 현실에서 사용하는 네트워크는 비신뢰성을 가지고 있기 때문에.
    • 순서가 바뀌거나 데이터를 잃어 버릴 수 있다.
    • 네트워크에 데이터가 너무 많아 혼잡하거나 수신자가 과부화가 걸릴 수 있다.

흐름 제어 (Flow Control)

  • 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
  • 수신자에게 받는 rwnd(로 제어.흐름 제어가 필요한 이유
  • 수신측의 데이터 처리 속도(or 용량)이 송신측보다 더 빠르면 아무 문제가 없다.
    하지만 송신측의 데이터 처리 속도가 더 빠르다면, 수신측에서 데이터 손실이 발생할 수 있다.
    -> 이를 방지하기 위해서 데이터 흐름을 제어해야 함.

흐름제어에서 속도를 제어하기 위한 두가지 방식

  • Stop and wait
    • 매번 전송한 패킷에 대해 확인 응답을 받아야지만 그 다음 패킷을 전송하는 방법
    • 간단하고 확실한 방법이다.
    • 하지만 앞서 보낸 데이터에 대한 응답이 도착했을 때만 보낼 수 있으므로 비효율적이여서 잘 사용하지 않는다.

  • Sliding Window
    • 수신 측에서 설정한 윈도우 크기만큼 송신측에서 데이터를 전송
    • 윈도우 크기는 수신측의 여유공간을 바탕으로 동적으로 변경됨.Sliding Window

 

혼잡 제어 (Congestion Control)

  • 송신측의 전송 속도와 네트워크의 처리속도의 차이를 해결하기 위한 기법
  • 송신측에서 가지고 있는 cwnd로 제어혼잡 제어가 필요한 이유
  • 현재 네트워크에 너무 많은 데이터가 보내지고 있는 상황에서 송신자가 데이터를 보내려고 하는 상황
    -> 라우터가 너무 많은 데이터를 처리하지 못해 손실이 나며 느려짐
    -> 네트워크 전체가 느려지게 됨.

  • 이 그림에서 만약 빨간 선 쪽에서 데이터 손실이 일어나게 된다면 포함된 라우터들이 느려지면서 다른 모든 데이터 흐름이 같이 느려지게 된다.

혼잡 제어의 방식

  • AIMD 기법
    • Additive Increase Multplicative Decrease
    • cwnd (congestion window)를 기준으로 해결
    • 처음에 패킷을 1MSS(Maximum segment size, 전송할 수 있는 최대 세그먼트 크기)로 전송하다가, 패킷 전송에 실패하게 되면 네트워크가 혼잡하다고 판단하여 보내는 패킷의 양을 반으로 줄임
  • Slow Start
    • 패킷 전송을 1MSS씩 증가시키는것이 아니라 2의 지수승으로 늘린다.
    • 만약 패킷이 손실될 경우 다시 window size를 1 MSS로 줄인다.
    • 임계점 (ssthresh)
      • 임의로 slow start를 여기까지 사용하겠다! 라는 의미
      • 임계점은 패킷 손실이 날 경우 줄어들고, 그렇지 않을 경우 늘어난다. (동적이다)
  • Fast Retransmit
    • 손실 감지 알고리즘으로 ACK Duplicated나 Timeout이 발생하면 본인의 윈도우를 수정
    • 패킷 손실이 발생하면 cwnd를 초기의 윈도우 크기로 재설정
  • Fast Recovery
    • 패킷 손실이 났을 때 3 duplicate ack과 time out으로 구분
    • 중복 상태에서는 수신측으로 전달이 된다는 의미이므로 cwnd를 현재의 반으로 설정
    • time out이 났을 때에는 네트워크가 혼잡하다고 생각하여 cwnd를 초기화
     

  • TCP Tahoe
    • Slow Start, AIMD, Fast Retransmit의 결합

 

  • TCP Reno
    • TCP Taeho에서 Fast Recovery 추가

기준 Flow Control Congestion Control
목적 데이터 송수신 측 간의 효율적인 데이터 전송 관리 전체 네트워크 내에서 데이터 전송의 효율성 및 안정성 유지
사용 이유 수신자의 버퍼 오버플로 방지 네트워크 혼잡 방지
사용되는 메커니즘 수신 측의 버퍼 크기에 기반 (예: TCP의 rwnd) 네트워크의 혼잡 상태에 기반 (예: TCP의 cwnd)
조절 방식 수신 측에서 처리할 수 있는 데이터의 양을 조절 네트워크의 혼잡 상태에 따라 전송 데이터량 조절
주요 알고리즘/기술 TCP의 Sliding Window, GBN TCP의 Slow Start, Fast Recovery

 

기타

  • 만약 cwnd와 rwnd의 크기가 다르면 tcp는 무엇을 기준으로 보낼까?
    -> 둘다 만족하기 위해서 둘중에 작은 것을 기준으로 삼아 통신을 한다.
  • mac에서 window size 확인하기
    sudo tcpdump -i any -n #tcp 패킷을 캡쳐하는 명령
     

-> 여기서 나오는 win이 바로 window size (rwnd, cwnd 실시간으로 네트워크의 상황을 반영해 추론하므로 직접적으로는 표시되지 않는다.)

 

'CS' 카테고리의 다른 글

HTTPS와 SSL Handshake  (0) 2024.01.13
SSL/TLS란?  (1) 2024.01.05

+ Recent posts