ecmp는 equal-cost multipath 라고 하는 것으로 dynamic routing protocol에서는 목적지에 대한 경로가 여러개 이더라도 가장 metric 이 낮은 경로를best path로 설정 합니다. 이렇게 했을 경우에는 여러경로가 같은 metric을 가졌다 하더라도 하나의 경로만을 사용하게 됩니다.
이 때 같은 metric의 경로가 여러개 있을 때 이 경로를 모두 사용하도록 하는 방법입니다.
일반적으로 per-destination을 기본으로 load balancing이 되는데 packet별로도 할수 있습니다.
하여간 가장 적절한 경로를 선정할 때 사용되는 metric의 값이 서로 같은 여러 경로에 대하여 그 경로를 모두 사용하도록 하는 방법이 ecmp 입니다. 라우팅 프로토콜마다 사용하는 metric이 다르고 지원하는 multi path의 수도 조금씩 다릅니다.
패킷이 라우터에 도착하면 라우터는 먼저 라우팅캐쉬에 패킷의 도착IP주소와 관련된 라우팅정보가 들어있는지 확인한다. 만일 캐쉬에 이 정보가 들어있으면 그 라우팅정보에 따라 패킷을 포워딩한다. 만일 캐쉬에 들어있지 않으면 라우팅테이블의 default 라우팅정보를 참조하게 되는데, 이때 multipath로 설정이 되어 있다면 next hop을 결정하는 알고리즘에 따라 루트를 결정한다. 가장 기본적인 round-robin 알고리듬은 다음과 같다.
(1) 초기화: 각 루트(route_1,route_2,...,route_n)에 할당된 weight값들(W1,W2,...,Wn)과 이 값들의 총합(Wt=SUM(Wk))을 계산한 후, 이를 power라는 변수(P1,...Pn,Pt)에 각각 저장한다. 그리고, 각 루트는 [0,...,Wt-1]의 숫자들을 각 power 크기만큼 순서대로 나눠가지게 되는데, 각각이 포함하는 숫자의 초기범위는 route_1:[0,...,W1-1], route_2:[W1,....,W2-1],...,route_n:[Wt-Wn,...,Wt-1]이 된다.
(2) 루트 선택: [0,...,Pt-1]중의 한 숫자를 임의로 고른 후에 그 숫자가 포함되는 루트를 선택한다. 그리고나서, 그 루트에 해당되는 power값에서 1을 뺀다. 만일 route_k가 선택되었다면, Pk=Pk-1, Pt=Pt-1를 실행한후, 이를 바탕으로 각 루트가 가지는 숫자의 범위를 새로 계산한다. 만일 Pt=0이 되면 (1)의 초기화과정을 반복한다.
[커널 컴파일시 도움말]
CONFIG_IP_ROUTE_MULTIPATH:
Normally, the routing tables specify a single action to be taken in
a deterministic manner for a given packet. If you say Y here however,
it becomes possible to attach several actions to a packet pattern,
in effect specifying several alternative paths to travel for those
packets. The router considers all these paths to be of equal "cost"
and chooses one of them in a non-deterministic fashion if a matching
packet arrives.
Symbol: IP_ROUTE_MULTIPATH [=y]
Prompt: IP: equal cost multipath
Defined at net/ipv4/Kconfig:107
Depends on: NET && INET && IP_ADVANCED_ROUTER
Location:
-> Networking
-> Networking support (NET [=y])
-> Networking options
-> TCP/IP networking (INET [=y])
[스크립트 설정]
### Wired Router (2 DL, 1 UL) ###
# Set up wired interfaces (DL)
ifconfig eth1 10.10.0.1 netmask 255.255.255.0
ifconfig eth2 10.10.1.1 netmask 255.255.255.0
# Set the routing table
ip route del 10.10.2.0/24
ip route add 10.10.2.0/24 mpath rr nexthop via 10.10.0.2 dev eth1 weight 2 nexthop via 10.10.1.2 dev eth2 weight 1
ip route del default
ip route add default via *.*.*.* dev eth0
ip route show
### Wireless Router (2 UL, 1 W-DL) ###
# Set up wired (UL) and wireless (W-DL) interfaces
ifconfig eth0 10.10.0.2 netmask 255.255.255.0
ifconfig eth1 10.10.1.2 netmask 255.255.255.0
wlanconfig wlan0 create wlandev wifi0 wlanmode master
iwconfig wlan0 essid test-ecmp
iwconfig wlan0 chan 156
ifconfig wlan0 10.10.2.1 netmask 255.255.255.0
# Set the routing table
ip route del default
ip route add default nexthop via 10.10.0.1 dev eth0 weight 2 nexthop via 10.10.1.1 dev eth1 weight 1
ip route show
### Wireless Client (1 W-UL) ###
# Set up a wireless (W-UL) interface
ifconfig eth0 down
ifconfig eth1 down
wlanconfig wlan0 create wlandev wifi0 wlanmode managed
iwconfig wlan0 essid test-ecmp
iwconfig wlan0 chan 156
ifconfig wlan0 10.10.2.2 netmask 255.255.255.0
# Set the routing table
ip route del default
ip route add default via 10.10.2.1 dev wlan0
ip route show
root@failsafe:/etc/quagga# cat zebra.conf
hostname router
password xiocom
enable password xiocom
!
debug zebra events
debug zebra kernel
!
interface lo
ip address 127.0.0.1/32
interface wlan0
ip address 10.10.2.1/24
interface eth0
ip address 10.10.0.1/24
interface eth1
ip address 10.10.1.1/24
!
ip route 0.0.0.0/0 10.10.0.1
ip route 0.0.0.0/0 10.10.1.1
root@failsafe:/etc/quagga# cat ospfd.conf
hostname router-ospf
password xiocom
enable password xiocom
!
interface wlan0
no ip ospf authentication-key
!
interface eth0
ip ospf cost 20
no ip ospf authentication-key
!
interface eth1
ip ospf cost 20
no ip ospf authentication-key
!
router ospf
ospf router-id 127.0.0.1
network 10.10.2.0/24 area 0
network 10.10.0.0/24 area 0
network 10.10.1.0/24 area 0
!
log file /etc/quagga/ospfd.log
출처 : http://loveyuna.egloos.com
## Cisco
Enabling Native Load Splitting Across Equal-Cost Paths
Perform this task to load split IP multicast traffic across multiple equal-cost paths.
Native Multicast Load Splitting Across Equal-Cost Paths
If two or more equal-cost paths from a source are available, unicast traffic will be load split across those paths. However, by default, multicast traffic is not load split across multiple equal-cost paths. In general, multicast traffic flows down from the Reverse Path Forwarding (RPF) neighbor. According to Protocol Independent Multicast (PIM) specifications, this neighbor must have the highest IP address if more than one neighbor has the same metric.
Configuring load splitting with the ip multicast multipath command causes the system to load split multicast traffic across multiple equal-cost paths. When the ip multicast multipath command is configured and multiple equal-cost paths exist, the path in which multicast traffic will travel is selected based on the source IP address. Multicast traffic from different sources will be load split across the different equal-cost paths. Load splitting will not occur across equal-cost paths for multicast traffic from the same source sent to different multicast groups.
Note The ip multicast multipath command load splits the traffic and does not load balance the traffic. Traffic from a source will use only one path, even if the traffic far outweighs traffic from other sources.
The ip multicast multipath command does not support configurations in which the same PIM neighbor IP address is reachable through multiple equal-cost paths. This situation typically occurs if unnumbered interfaces are used. Use different IP addresses for all interfaces when configuring the ip multicast multipath command.
SUMMARY STEPS
1. enable
2. configure terminal
3. ip multicast multipath
4. Repeat Steps 1 through 3 on all the routers in a redundant topology.
댓글