2009.05.07 20:18

Equal-Cost / Weighted Round-Robin Multi-Path (ECMP/WRRMP) Routing

ecmp는 equal-cost multipath 라고 하는 것으로 dynamic routing protocol에서는 목적지에 대한 경로가 여러개 이더라도 가장 metric 이 낮은 경로를best path로 설정 합니다. 이렇게 했을 경우에는 여러경로가 같은 metric을 가졌다 하더라도 하나의 경로만을 사용하게 됩니다.
이 때 같은 metric의 경로가 여러개 있을 때 이 경로를 모두 사용하도록 하는 방법입니다.
일반적으로 per-destination을 기본으로 load balancing이 되는데 packet별로도 할수 있습니다.

하여간 가장 적절한 경로를 선정할 때 사용되는 metric의 값이 서로 같은 여러 경로에 대하여 그 경로를 모두 사용하도록 하는 방법이 ecmp 입니다. 라우팅 프로토콜마다 사용하는 metric이 다르고 지원하는 multi path의 수도 조금씩 다릅니다.

ECMP/WRRMP는 kernel_menuconfig의 networking 옵션에서 advanced router를 선택하면 활성화된다. 이 옵션을 통해 라우터는 default 루트를 한개 이상 지정할 수 있게 되고, 패킷 헤더의 ip address들을 hash한 결과를 이용해 여러개의 루트 중 한개로 라우팅을 하게 된다. 이 때, hash의 결과값들은 디폴트로 각 루트에 동일하게 (equal-cost) 할당하며, weight 파라미터를 이용하면 특정 루트에 더 많은 weight를 줄 수 있다. 또한 mpath 파라미터로 next hop를 결정하는 특정한 방법을 선택할 수도 있다.

패킷이 라우터에 도착하면 라우터는 먼저 라우팅캐쉬에 패킷의 도착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.

DETAILED STEPS

 
Command or Action
Purpose

Step 1 

enable

Example:

Router> enable

Enables privileged EXEC mode.

Enter your password if prompted.

Step 2 

configure terminal

Example:

Router# configure terminal

Enters global configuration mode.

Step 3 

ip multicast multipath

Example:

Router(config)# ip multicast multipath

Enables load splitting of IP multicast traffic across multiple equal-cost paths.

Because this command changes the way an RPF neighbor is selected, it must be configured consistently on all routers in a redundant topology to avoid looping.

Step 4 

Repeat Steps 1 through 3 on all the routers in a redundant topology.


Trackback 0 Comment 0