ECMP
Equal-Cost Multi-Path
동일 메트릭 경로 여러 개를 FIB에 올려 L3에서 트래픽을 분산하는 라우팅 기법이다. 같은 비용의 경로를 동시에 활용해 대역폭을 키우고 경로 이중화를 얻는다.
라우팅 프로토콜이 동일 코스트 경로 여러 개를 계산하면, RIB에 모두 등록되고 그중 ECMP 대상이 FIB에 next-hop 여러 개로 설치된다. 실제 포워딩 시 장비는 패킷의 헤더 필드를 해시해 어느 next-hop으로 보낼지 정한다. (같은 플로우의 패킷은 항상 같은 경로로 간다 — 아래 로드 밸런싱 방식 참고)
LAG / LACP 와의 차이
LACP와 ECMP는 둘 다 "여러 링크로 트래픽을 분산한다"는 점이 같지만, 동작 계층이 다르다.
| 구분 | LAG / LACP | ECMP |
|---|---|---|
| 계층 | L2 (논리 링크 묶음) | L3 (라우팅 경로 분산) |
| 묶는 대상 | 같은 두 장비 사이의 물리 포트들 | 서로 다른 next-hop으로 가는 경로들 |
| 결정 주체 | LACP 협상 + 해시 | 라우팅 프로토콜(동일 코스트) + 해시 |
| 통합 여부 | 하나의 논리 인터페이스로 보임 | 별개의 L3 경로, 묶이지 않음 |
| 토폴로지 | 인접한 한 쌍 | 멀티 홉, 서로 다른 경로 가능 |
핵심 차이는 LAG는 같은 상대 장비로 가는 물리 링크를 하나로 묶는 것이고, ECMP는 서로 다른 next-hop(다른 장비)으로 가는 경로를 병렬로 쓰는 것이다. 실제 Leaf-Spine 구조에서는 두 기술이 함께 쓰인다 — 서버↔Leaf 구간은 LAG, Leaf↔Spine 구간은 ECMP.
동작 조건
ECMP가 성립하려면 경로들의 메트릭이 동일해야 한다. 메트릭은 프로토콜마다 다르다.
- OSPF — 누적 Cost가 동일해야 함. 기본적으로 동일 코스트 경로를 자동으로 ECMP로 사용한다.
- EIGRP — 기본은 동일 메트릭만 ECMP. 단,
variance명령으로 부등코스트(unequal-cost) 로드 밸런싱도 지원하는 점이 특징이다. - Static Route — 같은 목적지에 같은 AD로 next-hop을 여러 개 적으면 ECMP가 된다.
- BGP — 기본은 단일 베스트 경로만 설치.
maximum-paths(iBGP는 추가로 동일 IGP 메트릭, eBGP는bgp bestpath as-path multipath-relax등) 설정을 해줘야 멀티패스가 동작한다.
장비별로 FIB에 설치 가능한 ECMP 경로 수에 상한이 있다(maximum-paths N). 동일 코스트 경로가 상한보다 많으면 일부만 선택된다.
로드 밸런싱 방식
ECMP도 LACP처럼 하나의 플로우는 항상 같은 경로로 보낸다. 여기서 플로우(flow)란 해시 입력이 같은(보통 출발지와 목적지 IP/포트 + 프로토콜, 5-tuple) 패킷들의 묶음으로, 흔히 하나의 TCP 연결이 여기에 해당한다. 같은 플로우는 해시 입력이 같아 늘 같은 next-hop이 선택된다.
Per-Flow (권장)
패킷 헤더의 필드(5-tuple)를 해시해 플로우 단위로 경로를 고정한다. 같은 플로우는 항상 같은 경로 → 순서 보장. 현대 장비의 기본값이며 거의 항상 이것을 쓴다.
Per-Packet
패킷마다 라운드로빈으로 경로를 바꾼다. 분산은 가장 균등하지만 순서가 뒤섞여 TCP 재정렬과 성능 저하를 유발하므로 일반적으로 쓰지 않는다.
해시 입력에 L4 포트가 빠지면, 단일 서버 쌍 사이 트래픽이 한 경로로만 몰리는 해시 불균형이 ECMP에서도 똑같이 발생한다.
Polarization (해시 편향)
multi-stage 구조(예: Leaf-Spine)에서 모든 장비가 동일한 해시 알고리즘과 입력을 쓰면, Leaf에서 특정 경로로 분류된 플로우가 Spine에서도 같은 쪽으로 쏠려 일부 경로만 포화되는 현상이다.
해결책은 장비/계층마다 해시 시드(seed)나 입력 필드를 다르게 두어 분류를 흩뜨리는 것이다. 대부분의 데이터센터 스위치는 장비별로 랜덤 시드를 적용해 이를 자동으로 완화한다.
장애 시 동작
ECMP 경로 중 하나가 다운되면 해당 next-hop이 FIB에서 빠지고, 나머지 경로로 트래픽이 재분산된다. 단, 보통 해시값 mod N(N = 살아있는 next-hop 수)으로 경로를 정하므로, N이 바뀌면 해시 매핑이 다시 계산(rehashing) 되어 장애와 무관하던 플로우들의 일부가 다른 경로로 이동할 수 있다. 이때 순간적인 패킷 순서 변화가 생길 수 있다.
이를 줄이기 위한 기법:
- Resilient Hashing / Consistent Hashing — 경로 하나가 빠질 때 영향받지 않는 플로우는 기존 경로를 그대로 유지하도록 해, 불필요한 rehashing을 최소화한다.
- BFD 연동 — 라우팅 프로토콜의 느린 감지 대신 BFD로 밀리초 단위로 경로 장애를 감지해 FIB에서 즉시 제거한다.
활용 사례
- 데이터센터 Leaf-Spine — STP로 링크를 차단하는 전통 3-tier 대신, L3 라우팅 + ECMP로 모든 업링크를 동시에 활용한다. 스파인을 늘리면 대역폭이 선형 증가하는 Scale-out 구조의 핵심
- RoCE v2 / RDMA 네트워크 — UDP/IP 위에서 동작하므로 ECMP로 부하를 분산한다. 다만 RDMA는 순서·무손실에 민감해 해시 편향과 QoS(PFC/ECN) 설계가 까다롭다
- BGP 멀티홈 / 인터넷 회선 이중화 — 동일 코스트의 복수 ISP 경로로 아웃바운드 트래픽 분산
- NAT/방화벽 클러스터 분산 — 다중 장비로 동일 코스트 경로를 두어 부하 분산