🚦 HoL Blocking (Head-of-Line Blocking) 현상 설명
요청하신 HoL Blocking (Head-of-Line Blocking) 현상은 큐(Queue) 구조를 사용하는 시스템에서 발생하며, 큐의 맨 앞에 있는 요소(Head-of-Line)가 처리되지 못하고 지연될 때, 그 뒤에 있는 모든 요소의 처리를 막아 전체 시스템의 효율성과 처리량을 저해하는 현상입니다.
이는 주로 네트워크 프로토콜이나 네트워크 스위치 장비에서 관찰되는 중요한 성능 문제입니다.
1. 전송 계층에서의 HoL Blocking (TCP의 문제)
HoL Blocking이 가장 흔하게 발생하고 SCTP(Stream Control Transmission Protocol)의 등장 배경이 된 곳은 바로 전송 계층(Transport Layer)의 TCP(Transmission Control Protocol)입니다.
가. 현상 발생 원리
TCP는 데이터를 전송할 때 단일 스트림(Single Stream) 방식, 즉 바이트 스트림(Byte Stream) 모델을 사용하며, 데이터의 순서 보장(In-order Delivery)을 엄격하게 적용합니다.
- 단일 순서 보장: TCP 연결이 설정되면, 애플리케이션 데이터는 단일 파이프라인(스트림)을 통해 순차적으로 전송됩니다.
- 패킷 손실 발생: 만약 이 파이프라인을 통해 전송된 특정 세그먼트(패킷)가 손실되거나 순서가 바뀌어 도착하면, TCP는 수신된 모든 후속 패킷들을 수신 버퍼에 저장하고 대기시킵니다.
- 처리 지연: 손실된 패킷이 재전송되어 도착할 때까지, 그 뒤에 있는 모든 순서의 유효한 패킷들은 애플리케이션 계층으로 전달되지 못하고 대기 상태에 머무릅니다.
나. 기술적 영향
- 지연 시간(Latency) 증가: 손실된 패킷이 재전송되는 시간만큼 전체 스트림의 처리가 지연됩니다.
- 비효율적인 대역폭 사용: 이미 도착한 유효한 데이터를 처리하지 못하고 기다리게 되어 네트워크 자원의 활용도가 떨어집니다.
- 멀티미디어 환경에서의 문제: 실시간성을 요구하는 VoIP나 영상 스트리밍과 같은 환경에서 단 하나의 패킷 손실이 전체 서비스에 지연을 초래합니다.
다. 해결 방안 (SCTP의 등장)
앞서 설명드렸듯이, SCTP는 이 문제를 해결하기 위해 Multi-streaming (다중 스트림) 기능을 도입했습니다.
- 데이터를 여러 개의 독립적인 논리적 스트림으로 분할하여 전송합니다.
- 한 스트림에서 패킷이 손실되더라도, 다른 독립적인 스트림의 데이터는 영향을 받지 않고 정상적으로 애플리케이션에 전달될 수 있어 HoL Blocking을 회피합니다.
2. 네트워크 스위치에서의 HoL Blocking (버퍼링 문제)
HoL Blocking은 전송 계층 외에 네트워크 스위치(Network Switch) 장비의 내부 구조에서도 발생할 수 있습니다.
초기 스위치나 일부 저가형 스위치는 입력 포트(Input Port)에 큐를 두고 패킷을 처리합니다 (Input Port Queuing).
- 큐 대기: 입력 포트로 들어온 패킷들은 큐의 맨 앞에서 자신의 목적지 출력 포트가 사용 가능해지기를 기다립니다.
- 경합 발생: 큐의 맨 앞에 있는 패킷 A의 목적지 출력 포트가 현재 바쁘다고 가정합니다.
- 지연 전파: 패킷 A 뒤에 있는 패킷 B의 목적지 출력 포트는 사용 가능한 상태일 수 있지만, 패킷 B는 A가 처리될 때까지 무조건 기다려야 합니다.
- HoL Blocking 발생: 이로 인해 실제 대기할 필요가 없는 패킷 B까지 불필요하게 대기하여 전체 스위치 처리량이 저하됩니다.
나. 해결 방안 (Output Port Queuing)
현대의 고성능 스위치는 이 문제를 해결하기 위해 출력 포트(Output Port)에 큐를 두는 방식(Output Port Queuing)을 사용합니다.
- 모든 입력 패킷은 내부 패브릭을 통해 즉시 출력 포트 큐로 전송됩니다.
- 패킷들은 자신이 나갈 출력 포트 큐에서만 대기하므로, 다른 포트로 나가는 패킷의 처리 지연에 영향을 받지 않아 HoL Blocking 문제가 해결됩니다.
HoL Blocking은 시스템의 순서 보장(In-order delivery) 요구사항이나 자원 경합이 발생하는 환경에서 성능 저하의 주요 원인이 되는 핵심적인 개념입니다.