目录

前言
设定 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 ?
   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 ?
      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 ?
   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。