目錄

前言
設定 SLA
以 SLA 作 Route Track
以 SLA 作為 Traffic Generator

前言

IP Service Level Agreement (IP SLA) 可以用作測量網絡的效能,也是一個很好的診斷工具。SLA 通過發送封包到一個目的地和接收目的地的回應來計算出 Round Trip Time、Packet Loss 等等參數並作出記錄。

設定 SLA

sla

以上網絡的 Router 起始設定如下:

hostname R1
!
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0
!
ip route 3.3.3.3 255.255.255.255 192.168.12.2
hostname R2
!
interface Ethernet0/0
 ip address 192.168.23.2 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.12.2 255.255.255.0
!
ip route 1.1.1.1 255.255.255.255 192.168.12.1
ip route 3.3.3.3 255.255.255.255 192.168.23.3
hostname R3
!
interface Loopback0
 ip address 3.3.3.3 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.23.3 255.255.255.0
!
ip route 1.1.1.1 255.255.255.255 192.168.23.2

於是,1.1.1.1 能夠 Ping 通 3.3.3.3。

R1#ping 3.3.3.3 source 1.1.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 60/91/124 ms

第一部是 SLA 的設定,現在以 R1 為例子,設定一個 ICMP Echo 的偵測,請留意不同版本的 IOS 在設定 SLA 的指令會有少許不同,以下為 IOS 12.4 的設定方法:

R1(config)#ip sla monitor 1
R1(config-sla-monitor)#type echo protocol ipIcmpEcho 3.3.3.3 source-ip 1.1.1.1
R1(config-sla-monitor-echo)#timeout 500 !RTT 大過 500ms 就判失敗
R1(config-sla-monitor-echo)#frequency 2 !每 2 秒執行一次
R1(config-sla-monitor-echo)#request-data-size 300 !Payload 300 Byte

第二部是把 SLA 啟動,life 是要執行多久,而 start-time 則是何時開始執行:

R1(config)#ip sla monitor schedule 1 life ?
  <0-2147483647>  Life seconds
  forever         continue running forever

R1(config)#ip sla monitor schedule 1 life forever start-time ?
  after     Start after a certain amount of time from now
  hh:mm     Start time (hh:mm)
  hh:mm:ss  Start time (hh:mm:ss)
  now       Start now
  pending   Start pending

R1(config)#ip sla monitor schedule 1 life forever start-time now

啟動後可以使用 show ip sla monitor statistics details 查看結果:

R1#show ip sla monitor statistics details
Round trip time (RTT)   Index 1
        Latest RTT: 59 ms
Latest operation start time: *00:30:47.479 UTC Fri Mar 1 2002
Latest operation return code: OK
Over thresholds occurred: FALSE
Number of successes: 108
Number of failures: 0
Operation time to live: Forever
Operational state of entry: Active
Last time this entry was reset: Never

除了 ICMP Echo 之外,IP SLA 也支緩其他 Protocol,設定方法大同小異:

R1(config-sla-monitor)#type ?
  dhcp         DHCP Operation
  dlsw         DLSW Operation
  dns          DNS Query Operation
  echo         Echo Operation
  frame-relay  Perform frame relay operation
  ftp          FTP Operation
  http         HTTP Operation
  jitter       Jitter Operation
  pathEcho     Path Discovered Echo Operation
  pathJitter   Path Discovered Jitter Operation
  tcpConnect   TCP Connect Operation
  udpEcho      UDP Echo Operation
  voip         Voice Over IP measurement

以 SLA 作 Route Track

現在我們為網絡加上一隻 Router R4,讓 1.1.1.1 有兩條路徑可以到達 R3。

sla

不過,我們希望只有在 R2 這條路徑不通時,才用 R4 這條後備路徑,所以我們把 R4 這條 Router 的 AD 設成 10。

R1(config)#ip route 3.3.3.3 255.255.255.255 192.168.14.4 10

於是,R1 繼續使用 192.168.12.2 為 Next Hop,

R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
C    192.168.14.0/24 is directly connected, Ethernet0/1
     3.0.0.0/32 is subnetted, 1 subnets
S       3.3.3.3 [1/0] via 192.168.12.2

一旦 R2 這條路徑 Shutdown,就會切換成 Next Hop 192.168.14.4。

R2(config)#int ethernet 0/1
R2(config-if)#shutdown
R1#show ip route | begin Gateway
Gateway of last resort is not set

     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
C    192.168.14.0/24 is directly connected, Ethernet0/1
     3.0.0.0/32 is subnetted, 1 subnets
S       3.3.3.3 [10/0] via 192.168.14.4

問題是,如果 R2 和 R3 因為某些原因斷開了,R1 不會知道,而繼續使用 192.168.12.2 為 Next Hop,不懂使用後備路徑。為了解決這個問題,我們可以把 Route 設成 SLA Track。SLA 已經在剛才設定好,現在只要加入 Track 的部份:

R1(config)#track ?
  <1-500>     Tracked object
  resolution  Tracking resolution parameters
  timer       Polling interval timers

R1(config)#track 1 ?
  interface  Select an interface to track
  ip         IP protocol
  list       Group objects in a list
  rtr        Response Time Reporter (RTR) entry

R1(config)#track 1 rtr ?
  <1-2147483647>  Entry number

R1(config)#track 1 rtr 1

然後,把 R2 路徑的 Route 加上 Track。這樣,當 SLA 的結果為 Timeout 時,這條 Route 就會被殺掉。

R1(config)#no ip route 3.3.3.3 255.255.255.255 192.168.12.2
R1(config)#ip route 3.3.3.3 255.255.255.255 192.168.12.2 track 1

測試一下,原本 R1 是用 192.168.12.2 這條 Route 的。

R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
C    192.168.14.0/24 is directly connected, Ethernet0/1
     3.0.0.0/32 is subnetted, 1 subnets
S       3.3.3.3 [1/0] via 192.168.12.2

在 R3 把 Port Shutdown。

R3(config)#int eth 0/1
R3(config-if)#shutdown

由於 SLA 執行失敗,原本的 Route 被抹掉,改成用 192.168.14.4 為 Next Hop 的後備 Route。

R1#show ip sla monitor statistics 1
Round trip time (RTT)   Index 1
        Latest RTT: NoConnection/Busy/Timeout
Latest operation start time: *01:40:35.479 UTC Fri Mar 1 2002
Latest operation return code: Timeout
Number of successes: 213
Number of failures: 189
Operation time to live: Forever


R1#show ip route | begin Gateway
Gateway of last resort is not set

C    192.168.12.0/24 is directly connected, Ethernet0/0
     1.0.0.0/32 is subnetted, 1 subnets
C       1.1.1.1 is directly connected, Loopback0
C    192.168.14.0/24 is directly connected, Ethernet0/1
     3.0.0.0/32 is subnetted, 1 subnets
S       3.3.3.3 [10/0] via 192.168.14.4

以 SLA 作為 Traffic Generator

很多時候,我們會希望在網絡產生一些 Packet 來進行測試,尤其在做 QoS 實驗時,這方面 SLA 可以幫到我們。例如:我們想產生一組 20Kbps 的 UDP Traffic,我們可以透過控制 SLA 的 Payload 和 Packet 數目來控制,先來一點數學。

假設我們想產生 80Kbps 的 UDP Traffic:

80Kbps = 80,000 bps = 10,000 Bytes / s

即是說每秒需要產生 10,000 Bytes 的 Traffic,如果每秒產生 10 個 Packet,則每個 Packet 要有 1000 Bytes。

因為一個 UDP Packet 包含 Ethernet Header 14 Bytes、IP Header 20 Bytes 和 UDP Header 8 Bytes,因此,

Payload = 1,000 - 14 - 20 - 8 = 958 Bytes。

所以結論是要每秒產生 10 個 Payload 為 958 Bytes 的 Packet,設定如下:

R1(config-sla-monitor)#type jitter dest-ipaddr 3.3.3.3 dest-port 12345 source-ipaddr 1.1.1.1 num-packets 10 control disable
R1(config-sla-monitor-jitter)#timeout 500
R1(config-sla-monitor-jitter)#frequency 1
R1(config-sla-monitor-jitter)#request-data-size 958
R1(config-sla-monitor-jitter)#exit
R1(config)#ip sla monitor schedule 2 life forever start-time now

注意:如果目的地不是 Cisco 設備的話,Control 必需設為 disable 來關閉 Cisco 的 SLA Control Protocol。