概念
Police是將超過限制值得流量直接drop,非常粗暴但對控制流量非常有效。
Shape則是把超過限制值的用queue存起來,之後讓再將儲存的封包放出,盡可能把流速控制住。
如果你是家庭用戶,ISP用Police會給人非常不爽的體驗,一旦超過流量連線會斷斷續續。Shape只會讓網路變慢,至少還能保持連線。TCP的機制能控制傳輸速度,Shape就可以穩穩路。
設定

這個設定不簡單,但會是很棒的思考Policy-map的過程。
首先Police,設定在R1跟R2的網域,並且限制100KB。
接著Shape,設定在R3的網域,並且限制100KB。
為了更直觀的觀察流量,使用SNMP是很方便了,因此有了Cloud。(設定方法請查SNMP
最後要讓Policy-map用在哪裡?連接SNMP那條嗎?如果ACL沒有只限制ICMP,SNMP就可能被納入ACL,然後SNMP封包被Police或Shape,就會讓我們看不到即時流量圖,圖型會有Gap而不連續。
R5變成了丟流量的目的地,R1、R2、R3皆Ping到R5作觀察。
!R1
conf t
int g0/0
ip addr 10.1.14.1 255.255.255.0
no sh
exit
ip route 0.0.0.0 0.0.0.0 10.1.14.4
!R2
conf t
int g0/0
ip addr 10.1.24.2 255.255.255.0
no sh
exit
ip route 0.0.0.0 0.0.0.0 10.1.24.4
!R3
conf t
int g0/0
ip addr 10.1.34.3 255.255.255.0
no sh
exit
ip route 0.0.0.0 0.0.0.0 10.1.34.4
!R5
conf t
int g0/0
ip addr 10.1.54.5 255.255.255.0
no sh
exit
ip route 0.0.0.0 0.0.0.0 10.1.54.4
!R4
conf t
int g0/0
ip addr 10.1.14.4 255.255.255.0
no sh
exit
int g1/0
ip addr 10.1.24.4 255.255.255.0
no sh
exit
int g2/0
ip addr 10.1.34.4 255.255.255.0
no sh
exit
int g3/0
ip addr 10.1.54.4 255.255.255.0
no sh
exit
int g4/0
ip addr 11.12.13.254 255.255.255.0
no sh
exit
ip route 0.0.0.0 0.0.0.0 11.12.13.1
! snmp
snmp-server community PM-Policing_and_Shaping
要完成Policy-map,得從低階一路組成高階,先下ACL。※這裡指定icmp
! ACL
ip access-list extended R1
permit icmp 10.1.14.0 0.0.0.255 any
ip access-list extended R2
permit icmp 10.1.24.0 0.0.0.255 any
ip access-list extended R3
permit icmp 10.1.34.0 0.0.0.255 any
exit
ACL下完了,才能下Class-map。
! Class-map R1_or_R2
class-map match-any R1_or_R2
match access-group name R1
match access-group name R2
exit
! Class-map R3
class-map match-any R3
match access-group name R3
exit
有了Class-map,才能下Policy-map。
! Policy-map
policy-map Policing_and_Shaping
class R1_or_R2
police 800000 !800000 bit/sec = 100000 byte/sec = 100KB/sec
exceed-action drop
exit
exit
class R3
shape average 800000
queue-limit 10000 bytes
queue-limit 3000 ms
queue-limit 100 packets
exit
exit
最後一步,就是將Policy-map應用到某處,Policy-map就成為介面的Service-Policy其中一份子。
! Apply => service-policy
int g4/0
service-policy output Policing_and_Shaping
exit
之後分別用R1跟R3去PING到R5,觀察開始!
PING的機制是收到後就會馬上回傳,如果沒收到,等到Timeout就會傳下一次。
這邊流量限制是100KB。
!R1
ping 10.1.54.5 size 1000 repeat 500
ping 10.1.54.5 size 2000 repeat 400
ping 10.1.54.5 size 4000 repeat 300 !開始出現 .
ping 10.1.54.5 size 8000 repeat 100
ping 10.1.54.5 size 10000 repeat 50
ping 10.1.54.5 size 16000 repeat 20 ! ......
這裡要注意一下MTU,會讓封包被切成片斷。
!R3
ping 10.1.54.5 size 1000 repeat 500
ping 10.1.54.5 size 2000 repeat 400
ping 10.1.54.5 size 4000 repeat 300
ping 10.1.54.5 size 8000 repeat 100
ping 10.1.54.5 size 10000 repeat 50
ping 10.1.54.5 size 16000 repeat 20
Shape只會讓速度變慢,加長回應的時間,不至於被判斷成 . 。
結論心得
這也是我第一次使用靠自己去弄出來,雖然課堂有教過。可以搭配MTU去觀察Fragment。之後會運別的PM,達成不同的條件限制,然後用SNMP觀察PBR的應用成果。