本檔案將說明選擇性封包捨棄(SPD)機制以及如何監控和調整該機制。
註:本文檔沒有解釋如何對Cisco 12000系列Internet路由器上的show interfaces輸出中不斷增加的輸入丟棄進行故障排除。有關此問題的詳細資訊,請參閱Cisco 12000系列Internet路由器上的輸入丟棄故障排除。
如需檔案慣例的相關資訊,請參閱思科技術提示慣例。
本文件沒有特定先決條件。
本文中的資訊係根據以下軟體和硬體版本:
Cisco 7200系列路由器
Cisco 7500系列路由器
Cisco 12000系列網際網路路由器
Cisco IOS®軟體的所有版本
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您在即時網路中工作,請確保在使用任何命令之前瞭解其潛在影響。
選擇性封包捨棄(SPD)是一種管理路由處理器(RP)上的處理層輸入佇列的機制。SPD的目標是在進程級隊列擁塞期間為路由協定資料包和其他重要的流量控制第2層keepalive提供優先順序。
過去,在Cisco 7x00和非Cisco Express Forwarding(CEF)7500系統等平台上,路由處理器會轉送大量傳輸封包,以填充快速交換快取。因此,在此案例中,SPD需要將路由協定資料包優先於共用相同隊列的傳輸資料包。
目前,在Cisco 12000系列網際網路路由器以及執行CEF的7500上,只有目的地為路由器本身的流量會傳送到處理層級。在這種情況下,當存在管理流量(例如簡單網路管理協定(SNMP))或發生將流量傳送到RP的拒絕服務(DoS)攻擊時,使用SPD優先處理路由協定資料包。
在Cisco 12000系列上,當線卡確定傳入的封包需要傳到RP以進行處理時,封包會作為Cisco單元透過交換器網狀架構傳輸,最終會由思科單元分段和重組(CSAR)現場可程式設計門陣列(FPGA)接收。
其目的是處理交換機交換矩陣與RP CPU之間的流量,這裡將執行SPD檢查。這適用於IP封包、無連線網路服務(CLNS)封包、第2層keepalive以及傳給RP的類似封包。SPD會進行兩次檢查,並可能以以下兩種狀態之一捨棄封包:
SPD狀態檢查
輸入佇列檢查
RP上的IP進程隊列分為兩部分:一般資料包隊列和優先順序隊列。放入常規資料包隊列中的資料包將接受SPD狀態檢查,而放入優先順序隊列中的資料包則不接受。符合優先順序資料包隊列條件的資料包是高優先順序資料包,如IP優先順序6或7的資料包,決不應丟棄。但是,根據常規資料包隊列的長度(取決於SPD狀態),此處可以丟棄非限定符。一般封包佇列可以處於三種狀態,因此,低優先順序封包可能會受到不同的服務:
正常:隊列大小<=分鐘
隨機丟棄:最小<=隊列大小<=最大
FULL DROP:最大<=隊列大小
在NORMAL狀態下,我們從不丟棄格式正確和格式錯誤的資料包。
在RANDOM DROP狀態下,我們會隨機丟棄格式良好的資料包。如果配置了主動模式,我們將丟棄所有格式錯誤的資料包;否則,我們將它們視為格式正確的資料包。
注意:這些隨機丟棄稱為SPD刷新。基本上,當介面超載時,會發生刷新。緩衝區未命中導致刷新計數器遞增。
在FULL DROP狀態下,我們丟棄所有格式正確和格式錯誤的資料包。這些最小(預設73)和最大(預設74)值是從機箱上的最小hold-queue派生的,但是可以使用全域性命令ip spd queue min-threshold和ip spd queue max-threshold覆蓋。
SPD可以配置為兩種不同的模式:正常(預設)和主動。兩者之間的唯一區別是路由器如何解釋無效IP資料包(校驗和無效、版本不正確、報頭長度不正確、資料包長度不正確)。當處於聚合模式和隨機丟棄狀態時,SPD會丟棄格式錯誤的IP資料包。可以使用ip spd mode aggressive命令配置主動模式。
註:Cisco 12000系列網際網路路由器上未實施主動模式,因為輸入線卡會直接捨棄格式錯誤的IP封包,而且這些封包不會傳送到千兆位路由處理器(GRP)。因此,此特定平台上不需要採用積極模式。
輸入隊列按硬體介面進行維護,在所有子介面之間共用。如果沒有SPD,則在收到資料包時,如果輸入隊列已滿,則會丟棄所有資料包。預設輸入佇列大小為75,且可以使用hold-queue [size] in介面組態指令按介面進行設定。在show interfaces命令的「input queue」欄位中可以看到輸入隊列中的資料包數。
router#show interfaces pos 3/0 POS3/0 is up, line protocol is up Hardware is Packet over SONET Internet address is 137.40.55.2/24 MTU 4470 bytes, BW 2488000 Kbit, DLY 100 usec, rely 255/255, load 1/255 Encapsulation PPP, crc 32, loopback not set Keepalive not set Scramble disabled LCP Open Open: IPCP, CDPCP, OSICP, TAGCP Last input 00:00:01, output 00:00:00, output hang never Last clearing of "show interface" counters 2w3d Queueing strategy: fifo Output queue 0/40, 0 drops; input queue 0/75, 0 drops 30 second input rate 9000 bits/sec, 0 packets/sec 30 second output rate 0 bits/sec, 0 packets/sec 456292 packets input, 917329913 bytes, 0 no buffer Received 0 broadcasts, 0 runts, 0 giants, 0 throttles 0 parity 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort 112046977 packets output, 32078928095 bytes, 0 underruns 0 output errors, 0 applique, 3 interface resets 0 output buffer failures, 0 output buffers swapped out 1 carrier transitions
注意:減小一個介面上的輸入隊列大小可能會導致所有其它介面上出現大量輸入丟棄。請確保輸入保持隊列的最小大小至少為75。
即使使用SPD,普通IP資料包的行為也不會改變;但是,由於SPD通過IP優先順序欄位識別路由協定資料包,因此路由協定資料包被賦予更高的優先順序。因此,如果IP優先順序設定為6,則資料包將獲得優先順序。
SPD允許軟體將這些資料包入隊到超出正常輸入隊列限制的進程級輸入隊列,從而對這些資料包進行優先順序排序。允許超出正常限制的資料包數量稱為spd headroom,預設值為100,這表示如果輸入保留隊列的大小低於175(輸入隊列預設大小+ spd headroom size),則不會丟棄高優先順序資料包。
自Cisco IOS軟體版本12.0(22)S起,Cisco 12000系列網際網路路由器的spd餘量預設值為1000,以容納更大的SP網路。這是因為邊界閘道通訊協定(BGP)對等方式搭配數量不斷增加的鄰居使用,透過速度越來越快的介面通告數量不斷增加的路由。一次清除BGP通常會導致單個介面上出現數千個輸入隊列丟棄,從而嚴重阻礙收斂時間。
可使用spd headroom命令配置SPD頭部空間。其當前級別可在show spd或show ip spd命令的輸出中看到。
Router#show spd Headroom: 1000, Extended Headroom: 10 Router#show ip spd Current mode: normal Queue min/max thresholds: 73/74, Headroom: 1000, Extended Headroom: 10 IP normal queue: 0, priority queue: 0. SPD special drop mode: none
注意:IP正常隊列的大小也可以通過show ip spd命令監控。
非IP封包(例如無連線網路服務中間系統到中間系統(CLNS ISIS)封包、點對點通訊協定(PPP)封包及高階資料連結控制(HDLC)keepalive)直到最近才作為第2層而非第3層而被視為正常優先順序。此外,在第3層或更高的層運作的內部閘道通訊協定(IGP)比普通IP封包享有優先順序,但所給予的優先順序與BGP封包相同。因此,在BGP收斂期間或非常高的BGP活動期間,IGP hello和keepalive經常被丟棄,從而導致IGP鄰接下降。
由於IGP和鏈路穩定性比BGP穩定性更脆弱和關鍵,因此此類資料包現在被賦予最高優先順序,並且被賦予擴展的SPD淨空空間(預設值為10個資料包)。這表示如果輸入保留佇列的大小低於185(輸入佇列預設大小+ spd淨空大小+ spd擴充淨空大小),則不會捨棄這些封包。
使用spd extended [size]命令可配置擴展SPD淨空,其當前級別可從show spd或show ip spd命令的輸出中看到。
Router#show ip spd Current mode: normal Queue min/max thresholds: 73/74, Headroom: 100, Extended Headroom: 10 IP normal queue: 0, priority queue: 0. SPD special drop mode: none
註:在Cisco 12000系列網際網路路由器上,HDLC和PPP keepalive以及CLNS ISIS路由協定資料包將被視為高優先順序,並可能自Cisco IOS軟體版本12.0(12)S1起被列入擴展的SPD預留空間中。自Cisco IOS軟體版本12.0(18)S以來,所有IGP封包都可能會排入延伸的SPD額外空間。
Cisco IOS軟體版本12.0(22)S之前的預設值如下:
輸入隊列大小= 75
SPD淨空大小= 100
擴展淨空大小= 10
Cisco IOS軟體版本12.0(22)S後的預設值如下:
輸入隊列大小= 75
SPD淨空大小= 1000
擴展淨空大小= 10
在第一種情況中,它提供:
允許具有正常優先順序的IP資料包排隊到預設隊列限制(75)
允許高優先順序IP資料包排隊到預設隊列限制+ spd_headroom(根據Cisco IOS軟體版本175或1075)
允許CLNS、IGP和LC keepalive資料包排隊到預設隊列限制+ spd_headroom + spd_ext_headroom(根據Cisco IOS軟體版本185或1085)。
以下是有關SPD的一些其他提示/資訊:
預設情況下,SPD為「on」。可以使用spd enable global命令啟用/禁用它。
最初,SPD只在Packet Over Sonet(PoS)介面上可用。
在Cisco IOS軟體版本12.0(21)S之前,SPD無法在安裝在Cisco 12000系列網際網路路由器中的千兆位乙太網路線路卡(引擎1和引擎2)和快速乙太網路線路卡上運作。必須增加輸入保持隊列以儲存多餘的資料包。
在Cisco 7200/7500系列路由器上,從Cisco IOS軟體版本12.1(1)、12.1(1)T和12.0(9)ST開始執行非FIFO(先進先出)佇列,從12.2(7)、12.2(7)T和12.1(7)E開始執行FIFO佇列,可以在show interfaces命令的輸出中看到SPD刷新(捨棄)計數器。在其他版本和Cisco 12000系列Internet路由器上,只有鍵入show interface switching命令才能看到此計數器。例如,show interface pos 0/1 switching命令可用於檢視SPD刷新、主動丟棄和優先順序。
以下是範例:
7500_Router#show interfaces FastEthernet0/0/0 is up, line protocol is up Hardware is cyBus FastEthernet Interface, address is 0090.9282.7000 (bia 0090) MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec, rely 255/255, load 1/255 Encapsulation ARPA, loopback not set Keepalive set (10 sec) Full-duplex, 100Mb/s, 100BaseTX/FX ARP type: ARPA, ARP Timeout 04:00:00 Last input 00:00:01, output 00:00:01, output hang never Last clearing of "show interface" counters never Queueing strategy: fifo Output queue 0/40, 0 drops; input queue 0/75, 0 drops, 0 flushes 30 second input rate 4000 bits/sec, 9 packets/sec 30 second output rate 0 bits/sec, 0 packets/sec 2628397 packets input, 546327119 bytes, 0 no buffer Received 0 broadcasts, 0 runts, 0 giants, 0 throttles 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored 0 watchdog, 0 multicast 0 input packets with dribble condition detected 264792 packets output, 225434458 bytes, 0 underruns 0 output errors, 0 collisions, 20 interface resets 0 babbles, 0 late collision, 0 deferred 22 lost carrier, 0 no carrier 0 output buffer failures, 0 output buffers swapped out
修訂 | 發佈日期 | 意見 |
---|---|---|
1.0 |
05-Jan-2003 |
初始版本 |