이더넷 흐름 제어(Ethernet flow control)는 이더넷 계열의 컴퓨터 네트워크에서 데이터 전송을 일시적으로 중지하는 메커니즘이다. 이 메커니즘의 목표는 네트워크 혼잡(congestion)이 발생했을 때 패킷 손실(packet loss)을 방지하는 것이다.
개요
송신 스테이션(컴퓨터 또는 네트워크 스위치)은 링크의 반대쪽 끝이 데이터를 수용할 수 있는 속도보다 더 빠르게 데이터를 전송할 수 있다. 흐름 제어를 사용하면 수신 스테이션이 수신자가 따라잡을 때까지 송신자에게 전송을 일시 중단하도록 신호를 보낼 수 있다. 이더넷에서의 흐름 제어는 데이터 링크 계층(data link layer)에서 구현된다.
표준화 역사
최초의 흐름 제어 메커니즘인 일시 정지 프레임(pause frame)은 IEEE 802.3x 표준에 의해 정의되었으며, 1997년에 발행되었다. 이 표준은 전이중 통신(full-duplex) 이더넷 링크 세그먼트를 정의한 IEEE 태스크포스에 의해 개발되었다.
이후 IEEE 802.1Qbb 표준에 정의된 우선순위 기반 흐름 제어(Priority-based Flow Control, PFC)는 IEEE 802.1p에 정의된 각 서비스 등급(Class of Service, CoS)에 대해 독립적으로 제어할 수 있는 링크 레벨 흐름 제어 메커니즘을 제공한다. 이는 데이터 센터 브리징(Data Center Bridging, DCB) 네트워크에 적용 가능하며, 일반 데이터 트래픽 및 대용량 파일 전송보다 VoIP, 비디오 over IP, 데이터베이스 동기화 트래픽의 우선순위를 높일 수 있도록 한다.
일시 정지 프레임(Pause Frame)
과부하가 걸린 네트워크 노드는 일시 정지 프레임을 보내 특정 기간 동안 송신자의 전송을 중지시킬 수 있다. 일시 정지 명령을 전달하기 위해 MAC(Media Access Control) 프레임(이더타입 0x8808)이 사용되며, 제어 오피코드(opcode)는 0x0001(16진법)로 설정된다. 전이중 통신 동작으로 구성된 스테이션만 일시 정지 프레임을 보낼 수 있다.
스테이션이 링크의 반대쪽 끝을 일시 중지하려면, 해당 링크의 고유한 48비트 대상 주소 또는 예약된 48비트 멀티캐스트 주소인 01-80-C2-00-00-01로 일시 정지 프레임을 전송한다. 이 잘 알려진 주소(well-known address)를 사용함으로써 스테이션이 링크 반대쪽 스테이션의 주소를 검색하고 저장할 필요가 없어진다.
이 멀티캐스트 주소는 IEEE 802.1D 표준에 의해 예약된 주소 범위에서 선택되었으며, 802.1D 호환 스위치는 이 주소로 전송된 프레임을 다른 포트로 전달하지 않고 스위치 내에서만 처리한다.
일시 정지 프레임에는 요청된 일시 정지 기간이 2바이트(16비트) 부호 없는 정수(0~65535) 형태로 포함된다. 일시 정지 시간은 퀀텀(quantum) 단위로 측정되며, 각 퀀텀은 512비트 시간(bit time)과 같다.
문제점
일시 정지 프레임의 원래 동기 중 하나는 전속력 수신을 처리하기에 충분한 버퍼링이 없는 네트워크 인터페이스 컨트롤러(NIC)를 처리하는 것이었다. 이 문제는 버스 속도 및 메모리 크기의 발전으로 더 이상 일반적이지 않다.
더 현실적인 시나리오는 스위치 내에서 발생하는 혼잡이다. 예를 들어, 유입 링크의 속도가 출력 링크보다 빠르거나, 여러 링크를 통해 들어오는 흐름의 합계가 출력 링크 대역폭보다 클 수 있다. 이는 스위치 내의 버퍼링을 소진시킨다. 그러나 송신 링크를 차단하면 정체를 유발하지 않는 흐름까지 포함하여 해당 링크를 통한 모든 흐름이 지연되는 헤드 오브 라인 블로킹(Head-of-Line blocking, HOL blocking)이 발생할 수 있다. 많은 스위치는 가상 출력 큐(Virtual Output Queue) 기술을 사용하여 내부적으로 HOL 블로킹을 제거하므로 일시 정지 프레임을 보내지 않는다.
우선순위 흐름 제어(Priority Flow Control, PFC)
이더넷 흐름 제어는 모든 우선순위의 데이터가 중지되므로 IEEE 802.1p에 정의된 서비스 등급을 방해한다. 이 문제에 대한 해결책으로 시스코 시스템즈(Cisco Systems)는 자체 우선순위 흐름 제어 확장을 정의했다. 이 메커니즘은 일반 일시 정지 프레임의 42바이트 패딩 중 14바이트를 사용하며, MAC 제어 오피코드는 0x0101이다. 원래의 일시 정지와 달리 우선순위 일시 정지는 8개의 우선순위 클래스 각각에 대한 일시 정지 시간을 퀀텀 단위로 별도로 나타낸다.
이 확장 기능은 2008년 3월 27일에 승인되어 IEEE 802.1Qbb로 표준화되었으며, 이는 데이터 센터 브리징(DCB) 태스크 그룹의 일부로 개발되었다. PFC는 RDMA over Converged Ethernet(RoCE)과 같은 초저지연 애플리케이션 환경에서 필수적인 기술로 사용된다.
혼잡 관리(Congestion Management)
2004년 3월 IEEE P802.3ar 혼잡 관리 태스크포스가 시작되었으며, 전송 데이터 속도를 약 1% 단위로 제한하는 메커니즘을 목표로 했으나 해당 요청은 철회되었고 태스크포스는 2008년에 해체되었다.