흐름 제어(Flow Control)란?

수신 측이 넘치지 않도록 송신 측이 보내는 양이나 속도를 조절하는 구조. TCP에서는 수신 측이 비어 있는 버퍼의 크기(수신 윈도)를 알리고, 송신 측은 그것을 넘어 보내지 않는다. UART의 RTS/CTS, 이더넷의 PAUSE 프레임, PCI Express의 크레딧 방식 등도 흐름 제어의 일종이다. 네트워크 전체의 혼잡 정도에 맞추는 혼잡 제어와는 별개의 것이다.

일본어 명칭: フロー制御

흐름 제어(Flow Control)은(는) I/O 인터페이스와 버스, 네트워크 기초 등 2개 분야의 연습 문제 2개에 나와요.

분야: 네트워크 기초

도전해 보기: 흐름 제어(Flow Control) 관련 문제

PCI Express에서 사용되는 크레딧 방식 흐름 제어에 대한 설명으로 올바른 것은?

  1. A수신 측이 버퍼의 빈 용량을 크레딧으로 송신 측에 알리고, 송신 측은 크레딧 범위 안에서만 패킷을 보낸다
  2. B송신 측은 수신 측 상태와 무관하게 보내고, 넘친 패킷은 버린다
  3. C보내는 데이터 양에 따라 이용자에게 요금을 청구한다
정답과 해설 보기

정답: A. 수신 측이 버퍼의 빈 용량을 크레딧으로 송신 측에 알리고, 송신 측은 크레딧 범위 안에서만 패킷을 보낸다

수신 측 버퍼가 가득 찼을 때 패킷을 보내면 버리고 다시 보내는 낭비가 생깁니다. 크레딧 방식에서는 수신 측이 "앞으로 이만큼 받을 수 있다"는 양을 송신 측에 알리고, 송신 측은 그 범위 안에서만 보내며, 수신 측은 처리하여 버퍼가 빌 때마다 크레딧을 반환합니다. 넘침이 발생하지 않으므로 버리고 재전송하는 수고가 없습니다.

TCP의 흐름 제어에서 수신 측이 윈도 크기(수신 윈도)를 송신 측에 알리는 목적으로 올바른 것은?

  1. A네트워크 혼잡을 감지하여 경로상의 라우터가 전달 속도를 낮추게 한다
  2. B세그먼트 하나로 보내는 데이터의 최대 길이를 정하여 IP에서의 분할을 피한다
  3. C수신 측 버퍼가 넘치지 않도록, 확인 응답(ACK)을 기다리지 않고 보내도 되는 데이터의 양을 송신 측에 알린다
정답과 해설 보기

정답: C. 수신 측 버퍼가 넘치지 않도록, 확인 응답(ACK)을 기다리지 않고 보내도 되는 데이터의 양을 송신 측에 알린다

TCP의 송신 측은 확인 응답(ACK)을 기다리지 않고 여러 세그먼트를 한꺼번에 보낼 수 있습니다. 그러나 수신 측 애플리케이션이 데이터를 읽는 속도가 느리면 수신 버퍼가 넘쳐 버립니다. 그래서 수신 측은 ACK를 돌려보낼 때마다 버퍼의 빈 공간을 윈도 크기로 알리고, 송신 측은 아직 확인되지 않은 데이터가 이 양을 넘지 않도록 보냅니다. 빈 공간이 0이 되면 송신 측은 공간이 생길 때까지 기다립니다. 이것이 흐름 제어로, 송신 측과 수신 측 두 당사자 사이의 조정입니다. 네트워크 혼잡에 맞춰 보내는 양을 바꾸는 것은 별개의 구조인 혼잡 제어이며, 세그먼트 하나의 최대 길이는 연결 시에 MSS로 알립니다.

해설 속 흐름 제어(Flow Control)

흐름 제어(Flow Control)이(가) 나오는 문제 (2)

  1. PCI Express에서 사용되는 크레딧 방식 흐름 제어에 대한 설명으로 올바른 것은?
  2. TCP의 흐름 제어에서 수신 측이 윈도 크기(수신 윈도)를 송신 측에 알리는 목적으로 올바른 것은?

관련 용어

PCI Express 패킷(Packet) ARQ(자동 재전송 요구) TCP(전송 제어 프로토콜) 혼잡 제어(Congestion Control) 3-way 핸드셰이크(Three-way Handshake) 기본 게이트웨이(Default Gateway) 라우터(Router) 라우팅(경로 제어) 서브넷 마스크(Subnet Mask)

용어집으로 돌아가기