
ECMP/UCMP를 알기 위해선 먼저 Multi-Path Routing부터 알아보겠습니다.
보통 라우터는 목적지까지 가는 경로(Route)를 보고 패킷을 전송합니다.
예를 들어
PC
|
R1
|
R2
|
Server
이 구조라면 R1 입장에서 Server로 가는 길은 하나입니다.
하지만 만약 아래와 같은 구조라면
R2
/ \
PC -- R1 R4 -- Server
\ /
R3
R1에서 Server로 가는 경로가 두개가 생깁니다.
경로 1 : R1 → R2 → R4 → Server
경로 2 : R1 → R3 → R4 → Server
이렇게 하나의 목적지에 대해 여러 경로를 사용할 수 있는 방식을 Multi-Path Routing이라고 합니다.
간단히 말하자면 목적지는 하나인데, 갈 수 있는 길이 여러 개 있는 상황이라고 볼 수 있습니다.
한 경로만 사용하면 그 경로가 꽉 차거나 고장이 생겼을 때 문제가 생깁니다.
반대로 여러 경로를 사용하면
의 장점이 있습니다.
경로가 여러 개가 되면 라우터는 어느 경로가 좋은 경로인지 탐색하게 됩니다.
그래서 라우팅 프로토콜은 경로를 비교하기 위해 점수를 사용합니다.
이걸 보통 Metric 또는 Cost라고 부릅니다.
예를 들어
경로 A -> Cost 10
경로 B -> Cost 30
이라면 일반적으로 더 작은 값인 Cost 10 경로가 더 좋은 경로로 선택이 됩니다.
Multi-Path Routing이 도로라고 생각하면 Metric이나 Cost는 시간이 더 적은 길로 선택하는 네비게이션이라고 생각하면 이해가 쉽습니다.
하지만 프로토콜마다 기준이 다릅니다.
예를 들어 OSPF에서는 링크의 Cost를 보고, RIP은 Hop Count를 보고, BGP는 여러 Attribute를 종합해서 경로를 판단합니다.
중요한 요점은 Metric/Cost는 여러 경로 중 어떤 경로가 더 좋은지 판단하기 위한 기준이라는 점입니다.
ECMP는 Equal-Cost Multi-Path의 약자입니다.
의미는 비용이 같은 여러 경로를 동시에 사용하는 방식입니다.
예를 들어
경로 A -> Cost 10
경로 B -> Cost 10
이면 둘 다 같은 비용이니까 한쪽만 쓰지 않고 둘 다 사용이 가능합니다.
구조로 보면
Path A
/
Traffic <
\
Path B
이렇게 됩니다.
라우터가 목적지까지 가는 동일한 비용의 경로를 여러 개 가지고 있으면, 트래픽을 여러 경로로 나눠 보냅니다.
다만 보통 패킷 하나씩 번갈아 보내는 방식은 패킷 순서가 꼬일 수 있기 때문에 잘 사용하지 않습니다.
예를 들어
Packet 1 → Path A
Packet 2 → Path B
Packet 3 → Path A
인데 Path B가 조금 느리다고 하면
Packet 1
Packet 3
Packet 2
순서로 도착할 수도 있습니다.
그래서 실제로는 Flow 단위로 경로를 나눠 쓰는 경우가 많습니다.
첫 번째는 대역폭 활용입니다.
한 링크만 사용하게 되면
Path A → 100%
Path B → 0%
Path B가 놀게 됩니다.
하지만 여기서 ECMP를 사용하면
Path A → 일부 트래픽
Path B → 일부 트래픽
으로 트래픽을 나눌 수 있게 됩니다.
두 번째는 고가용성입니다.
Path A 장애
Path B 정상
이라면 다른 장애가 아닌 정상적인 경로를 이용할 수 있게 됩니다.
즉 ECMP는 성능과 장애 대응을 동시에 챙길 수 있는 방식이 됩니다.
ECMP에서 굉장히 중요한 역할을 합니다.
라우터가 각 연결을 어느 경로로 보낼지 결정할 때 Hash를 사용할 수 있습니다.
대표적으로 다음과 같은 값들을 조합합니다.
Source IP
Destination IP
Source Port
Destination Port
Protocol
위의 다섯 개를 보통 5-Tuple이라고 합니다.
예를 들어
10.0.0.10:50000
→
10.0.0.20:443
TCP
이 정보를 해시 함수에 넣어서 결과가
Hash 결과 → Path A
가 나오게 되면 해당 Flow는 Path A로 보낼 수 있습니다.
다른 사용자는 Hash 결과가 Path A가 아니라 Path B라면 그쪽으로 보내게 되는겁니다.
그래서
Flow 1 → Path A
Flow 2 → Path B
Flow 3 → Path A
Flow 4 → Path B
처럼 분산되게 됩니다.
중요한 점은 같은 Flow는 가급적 같은 경로를 사용하게 해서 패킷 순서가 꼬이는 문제를 줄여주게 된다는 것입니다.
UCMP는 Unequla-Cost Multi-Path의 약자로
의미는 비용이 서로 달라도 여러 경로를 함께 사용할 수 있는 방식입니다.
예를 들어
Path A → Cost 10
Path B → Cost 20
위의 경로대로 ECMP 기준이라면 Path A가 선택될 가능성이 높습니다.
하지만 UCMP에서는 Path A와 Path B를 둘 다 사용할 수 있습니다.
가장 이해하기 쉽게 설명한다면
ECMP
= 같은 비용의 경로 여러 개
UCMP
= 다른 비용의 경로 여러 개
라고 할 수 있습니다.
그런데 UCMP는 단순하게 “둘 다 사용한다”에서 의미가 끝나지 않고 경로 성능이나 비용에 따라 트래픽 비율도 다르게 줄 수 있다는 점입니다.
위에서 말한 경로 성능이나 비용에 따라 트래픽 비율도 다르게 줄 수 있다는 것을 Weighted Load Balancing이라고 합니다.
예를 들어
Path A → 10Gbps
Path B → 1Gbps
두 경로에 똑같이 50:50으로 트래픽을 보내게 되면 Path B가 꽉 차게 됩니다.
그래서 이 부분을 해결하기 위해 아래와 같이
Path A → 90%
Path B → 10%
가중치를 다르게 줄 수 있습니다.
이 부분이 UCMP에서 중요한 개념입니다.
쉽게 이해할 수 있게 설명하자면
길의 성능이 다르니까 좋은 길에는 더 많이 보내고, 상대적으로 약한 길에는 적게 보내는 것
입니다.
| 구분 | ECMP | UCMP |
|---|---|---|
| 이름 | Equal-Cost Multi-Path | Unequal-Cost Multi-Path |
| 경로 비용 | 같음 | 다를 수 있음 |
| 여러 경로 사용 | 가능 | 가능 |
| 트래픽 분산 | 보통 균등 또는 해시 기반 | 가중치 기반 가능 |
| 난이도 | 상대적으로 단순 | 더 복잡 |
| 활용 목적 | 동일한 품질의 여러 경로 활용 | 성능이 다른 여러 경로까지 활용 |
핵심만 짚고 넘어가자면
ECMP
→ 같은 조건의 여러 길
UCMP
→ 다른 조건의 여러 길
현재 데이터센터에서는 서버가 굉장히 많습니다.
그래서 단순하게
Server → Switch → Router
이런식으로 구성하지 않고, Spine-Leaf 구조를 많이 사용합니다.
예를 들면
Spine1 Spine2
/ \ / \
/ \ / \
Leaf1 Leaf2 Leaf3 Leaf4
| | | |
Server Server Server Server
Leaf 스위치는 서버와 연결되고, Spine 스위치는 Leaf들을 서로 연결해줍니다.
여기서 Leaf1이 Leaf3로 통신한다고 하면
갈 수 있는 경로가
Leaf1 → Spine1 → Leaf3
Leaf1 → Spine2 → Leaf3
두 개가 생깁니다.
그래서 보통 구조가 대칭적이라 Cost도 같게 설계되는 경우가 많기 때문에 Cost가 비슷하면 경로를 다 사용하는 ECMP가 보통 많이 사용됩니다.
하이브리드 네트워크를 예로 생각해 볼 수 있습니다.
온프레미스
│
├── Direct Connect
│
└── VPN
│
Cloud
Direct Connect는 대역폭과 안정성이 높고, VPN은 상대적으로 느릴 수 있습니다. 이런 경로들이 동시에 사용 가능한 구조라면, 같은 비율로 보내기보다 성능 차이를 고려해서 트래픽 비율을 다르게 가져가는 개념인 UCMP를 활용할 수 도 있습니다.
ECMP/UCMP에 대해 학습하면서 머리속으로는 이해됐지만 뭔가 아쉽다는 느낌이 많이 남았습니다. 다음에는 실습을 통해 구조적인 부분에서 더 파보면서 학습을 해봐야겠다는 생각이 들었습니다.
다음 포스팅은 이전에 네트워크 책을 통해 배웠던 라우팅에 대한 실습과 6장에서 배울 로드밸런싱 실습에 대한 포스팅을 올릴 생각입니다.