介紹
此頁內容說明了使用Cisco IOS(r)平臺上所提供的調試功能的一些基本指導原則,以及正確使用 debug ip packet 命令和有條件調試的示例。
注: 對于如何使用并解釋特定的debug命令和輸出,本文不加以說明。有關特定 debug 命令的信息,請參考相應的Cisco debug 命令參考文獻。
debug 特權EXEC命令的輸出提供有關各種網際互聯事件的診斷 信息,這些事件一般涉及到協議狀態和網絡行為。
前提條件
本文讀者應了解以下方面的一些知識:
通過控制面板、aux和vty端口與路由器相連。
基本IOS配置問題。
解釋IOS調試命令輸出。
警告
請謹慎使用 debug 命令。當解決具體問題時,通常只推薦在路由器技術支持人員提供指導的情況下使用這些命令。
在互聯網絡處于高負載的情況下,啟用調試功能會中斷路由器的運行。因此,若啟用日志功能,則在控制面板端口日志消息超載的情況下,訪問服務器可能會出現間歇性的中斷。
在啟動 debug 命令之前應始終考慮此命令將生成的輸出及所花費的時間。例如,若您配置了有一個基本速率接口(BRI)的路由器,則 debug isdn q931 可能不會對系統產生危害。但是,在具有全部E1配置的AS5800上進行相同的調試,則可能生成許多輸入,以致使系統“掛起”或停止響應。
在調試之前,通過 show processes cpu show processes cpu命令來查看CPU負載情況。開始調試之前應驗證是否有足夠的CPU。有關處理高CPU負載方面的信息 ,請參考“解決Cisco路由器上高CPU利用率問題”的文獻。例如,若通過具有ATM接口的Cisco 7200路由器來進行橋接,那么根據所配置子接口數量的不同,重新啟動路由器可能會使用大量的CPU。這是因為:對于每個虛電路(VC),都需要生成網橋協議數據單元(BPDU)數據包。在這樣的重要時間內啟動調試功能可能會使CPU利用率急劇增加,并導致系統掛起或網絡斷開。
注: 在運行調試功能時,特別是進行大量調試時,通常不出現路由器提示。但是,在大多數情況下,可以通過 no debug all 或 undebug all 命令來停止調試。有關安全使用調試的更多信息,請參考“ 獲得調試輸出 ”一章。
調試之前應注意的事項
除了上述幾點外,還必須了解調試對平臺穩定性的影響,并應考慮連接路由器上的哪個接口。以下的章節提供這方面的一些指導原則。
獲得調試輸出
路由器可顯示各種接口的調試輸出,其中包括控制面板、aux和vty端口。路由器還可將發送到內部緩沖器的日志消息記錄到外部unix syslog服務器上。下面討論每種方法的使用說明和注意事項:
控制面板端口
若在通常配置下連接到控制面板上,則無需額外工作。調試輸出應自動顯示。但是,必須保證按照要求來設置 logging console level ,并保證日志功能沒有由 no logging console 命令而禁用。有關更多信息,請參考“ 使用Debug命令 ”的文獻。
警告: 對路由器控制面板端口進行過多的調試可能引起路由器處于“掛起”狀態。這是因為:在執行路由器其他功能之前,路由器對控制面板輸出自動劃分優先權。若路由器處理發送到控制面板端口的大型調試輸出,路由器可能處于掛起狀態。所以,若出現過多的調試輸出,則使用vty (telnet)端口或日志緩沖器來獲得調試輸出。下面提供這方面的更多信息。
注: 在缺省情況下,控制面板端口上的日志功能處于啟用狀態。即使實際上使用一些其他端口或方法(如:Aux、vty或緩沖器)來捕獲輸出,控制面板端口通常也要處理調試輸出。所以,在通常條件下,推薦始終啟用 no logging console 命令,并使用其他方法來捕獲調試輸出。在需要使用控制面板的情況下,暫時將 logging console 設置為啟用狀態。
Aux端口
若通過輔助端口進行連接,則鍵入 terminal monitor命令。 還要驗證路由器上 no logging on 命令是否處于禁用狀態。
注: 若使用Aux端口來監視路由器,則時刻注意:在路由器重新啟動的情況下,Aux端口不顯示啟動序列輸出。若要查看啟動序列,需連接控制面板端口。
VTY端口
若要通過輔助端口或遠程登錄進行連接,則鍵入 terminal monitor 命令,并驗證no logging on 命令是否處于未用狀態。
將信息記錄到內部緩沖器
缺省的日志設備是控制面板;除非指定其他設備,否則在控制面板上顯示所有消息。若要將日志信息記錄到內部緩沖器上,則使用日志緩沖路由器配置命令。
此命令的全部句法如下:
logging buffered
no logging buffered
logging buffered 命令將日志消息復制到內部緩沖器上,而不是將這些消息寫在控制面板中。緩沖器具有循環特性,新消息將覆蓋舊消息。若要顯示緩沖器中所記錄的消息,則使用show logging特權EXEC命令。所顯示的第1個消息是緩沖器中最舊的消息。可以指定緩沖器的大小,以及要記錄的信息的重要級別。
提示:在輸入緩沖器大小之前,要保證設備有足夠的可用內存。使用 show proc mem IOS命令來查看可用內存。
通過 no logging buffered 命令,可禁用緩沖器,并將消息寫入到控制面板中(缺省條件下)。
將信息記錄到UNIX Syslog服務器
若要將日志信息記錄到syslog服務器主機上,則使用日志路由器配置命令。此命令的全部句法如下:
logging <ip-address>
no logging <ip-address>
通過 logging 命令確定syslog服務器主機以接收日志消息。 <ip-address> 參數是主機的IP地址。通過多次發布此命令,可建立接收日志消息的syslog服務器列表。
通過 no logging 命令,可以刪除具有syslogs列表中指定地址的syslog服務器。
有關設置syslog服務器的更多信息,請參照“ 使用調試命令”文獻。
調試前其他準備工作
安裝終端仿真器軟件(例如,HyperTerminal) 以便將調試輸出捕獲到文件上。例如:在HyperTerminal中,點擊Transfer, 然后點擊Capture Text并選擇相應的選項。有關更多信息,請參考“ 捕獲 Hyperterminal 中文本輸出”文獻。有關其他終端仿真器軟件,請參考軟件文獻。
通過以下業務時間標記命令來啟用毫秒(msec)時間標記:
router(config)#service timestamps debug datetime msec
router(config)#service timestamps log datetime msec
這些命令將時間標記以MMM DD HH:MM:SS的格式添加到調試中,從而根據系統時鐘來顯示日期和時間。若未設置系統時鐘,則日期和時間之前帶有星號(*)以說明日期和時間可能不正確。
通常合理的辦法是配置毫秒時間標記,這是因為:在查看調試輸出時,通過這種辦法可實現更高級別的準確性。對于相互聯系的調試事件,毫秒時間標記提供了更好的指示說明。但是,值得注意的是,在控制面板端口輸出大量信息時,可能不與事件的實際定時發生聯系。例如,若啟用標有200 VC方框中的 debug x25 all ,并將輸出記錄到緩沖器(使用 no logging console 和logging buffered 命令)的情況下,調試輸出(在緩沖器范圍內)所顯示的時間標記可能不是數據包通過接口時的準確時間。因此,不要使用msec時間標記來證明性能情況,但可使用這種時間標記來獲得事件發生時間的相對信息。
停止調試
若要停止調試,則使用 no debug all 或 undebug all 命令。通過show debug命令來驗證是否已經關閉調試。
請注意,通過 no logging console 和 terminal no monitor 命名,只能分別使輸出不在控制面板、Aux或 vty上發生,而不能停止調試,并因此用盡路由器資源。
使用 debug ip packet 命令
通過 debug ip packet 命令,可產生有關數據包的信息,這種數據包未經路由器進行快速轉換。但是,由于生成每個數據包的輸出,所以輸出尺寸擴大,并因此使路由器處于“掛起”狀態。所以,如本文所描述的那樣,只在最嚴格的控制下使用 debug ip packet 。
限制 debug ip packet 輸出的最佳辦法是 創建與調試鏈接的訪問列表。只有符合訪問列表標準的數據包需要使用debug ip packet。不必在所有接口上都應用此訪問列表,但非常適用于調試操作。
在使用 debugging ip packet之前,請注意:在缺省狀態下,路由器進行快速交換,或在特定配置情況下進行CEF交換。也就是說,如果這些方法可用,則不向處理器提供數據包,因此,調試不顯示任何內容。若要使調試顯示內容,則需要通過no ip route-cache (適用于單點發送數據包)或no ip mroute-cache(適用于組播數據包)來禁止路由器上的快速交換。這種辦法適用于傳輸業務的接口。通過 show ip route 命令來驗證這種情況。
警告:
對于處理大量數據包的路由器,啟用路由器上快速交換可增加CPU利用率,從而使設備處于“掛起”狀態,并失去對等連接。
對于運行多協議標記 (MPLS) 交換的路由器,不要禁用路由器上的快速交換。MPLS是與CEF一起使用的。因此,禁用接口上的快速交換可導致很嚴重的后果。
下面研究一個示例方案:
router_122上所配置的訪問列表是:
access-list 105 permit icmp host 10.10.10.2 host 13.1.1.1
access-list 105 permit icmp host 13.1.1.1 host 10.10.10.2
此訪問列表允許所有互聯網控制消息協議(ICMP)數據包從主機router_121(IP地址為10.10.10.2)傳輸到主機router_123(IP地址為13.1.1.1),以及傳輸到其他方向上。允許數據包傳輸到任一方向是很重要的,否則路由器可能會丟棄返回的ICMP數據包。
下面只刪除router_122一個接口上的快速交換。因此,從IOS截取數據包的角度來看,只能看到傳輸到該接口的數據包的調試。通過調試,這類數據包將出現"d="。因為還沒有關閉其他接口上的快速交換,返回的數據包將不使用debug ip packet。下面的輸出顯示了禁用快速交換的過程:
router_122(config)#interface virtual-template 1
router_122(config-if)#no ip route-cache
router_122(config-if)#end
現在必須通過以前定義的訪問列表(訪問列表 105)來激活debug ip packet。
router_122#debug ip packet detail 105
IP packet debugging is on (detailed) for access list 105
router_122#
00:10:01: IP: s=13.1.1.1 (Serial3/0), d=10.10.10.2 (Virtual-Access1),
g=10.10.10.2, len 100, forward
00:10:01: ICMP type=0, code=0
! -- 從13.1.1.1到10.10.10.2的ICMP包
! -- 顯示此包是因為
! -- 它滿足訪問列表105中的源和目的地要求。
00:10:01: IP: s=13.1.1.1 (Serial3/0), d=10.10.10.2 (Virtual-Access1),
g=10.10.10.2, len 100, forward
00:10:01: ICMP type=0, code=0
00:10:01: IP: s=13.1.1.1 (Serial3/0), d=10.10.10.2 (Virtual-Access1),
g=10.10.10.2, len 100, forward
00:10:01: ICMP type=0, code=0
下面刪除其他接口(router_122)上的快速路由。也就是通過這兩個接口上的全部數據包現在是分組交換的(這是 debug ip packet所要求的):
router_122(config)#interface serial 3/0
router_122(config-if)#no ip route-cache
router_122(config-if)#end
router_122#
00:11:57: IP: s=10.10.10.2 (Virtual-Access1), d=13.1.1.1
(Serial3/0), g=172.16.1.6, len 100, forward
00:11:57: ICMP type=8, code=0
! -- 從10.10.10.2到13.1.1.1的ICMP 包(回送)
00:11:57: IP: s=13.1.1.1 (Serial3/0), d=10.10.10.2 (Virtual-Access1),
g=10.10.10.2, len 100, forward
00:11:57: ICMP type=0, code=0
! -- 從13.1.1.1 到10.10.10.2的ICMP 返回包(回送應答)
00:11:57: IP: s=10.10.10.2 (Virtual-Access1), d=13.1.1.1 (Serial3/0),
g=172.16.1.6, len 100, forward
00:11:57: ICMP type=8, code=0
00:11:57: IP: s=13.1.1.1 (Serial3/0), d=10.10.10.2 (Virtual-Access1),
g=10.10.10.2, len 100, forward
00:11:57: ICMP type=0, code=0
請注意: debug ip packet 輸出不顯示任何不符合訪問列表標準的數據包。有關此過程的更多信息,請參考“了解Ping和Traceroute命令”的文獻資料。
有關如何創建訪問列表的更多信息,請參考“ 配置IP訪問列表”的文獻。
有條件的觸發調試
在啟用有條件觸發調試功能的情況下,對于在特定接口路由器上發送或接收的數據包,路由器生成調試消息;對于通過不同接口發送或傳輸的數據包,路由器不生成調試輸出。有關使用有條件調試的更多信息,請參考“有條件觸發調試 ”的文獻資料。
下面研究一下有條件調試的簡單應用。考慮下面這個情況:下面所示的路由器(trabol)具有運行HDLC的兩個接口(串口0和串口3)。
現在通過常用的 debug serial interface 命令來觀察所有端口上所接收的HDLC保活信息。通過這種方法可以看到這兩個接口上的保活信息。
traxbol#debug serial interface
Serial network interface debugging is on
traxbol#
*Mar 8 09:42:34.851: Serial0: HDLC myseq 28, mineseen 28*, yourseen 41, line up
! -- 接口Serial 0上HDLC保活
*Mar 8 09:42:34.855: Serial3: HDLC myseq 26, mineseen 26*, yourseen 27, line up
! -- 接口Serial 3上的HDLC保活
*Mar 8 09:42:44.851: Serial0: HDLC myseq 29, mineseen 29*, yourseen 42, line up
*Mar 8 09:42:44.855: Serial3: HDLC myseq 27, mineseen 27*, yourseen 28, line up
現在啟用串接口3上的有條件調試。也就是說,只顯示串接口3的調試。因此,使用 debug interface <interface_type interface_number>命令。
traxbol#debug interface serial 3
Condition 1 set
通過 show debug condition 命令來驗證有條件調試是否處于啟用狀態。請注意,串接口3處于激活狀態。
traxbol#show debug condition
Condition 1: interface Se3 (1 flags triggered)
Flags: Se3
traxbol#
請注意,現在只顯示串接口3的調試:
*Mar 8 09:43:04.855: Serial3: HDLC myseq 29, mineseen 29*, yourseen 30, line up
*Mar 8 09:43:14.855: Serial3: HDLC myseq 30, mineseen 30*, yourseen 31, line up
若要取消有條件調試,則使用 undebug interface <interface_type interface_number>命令。 在關閉有條件觸發器之前,最好關閉調試(例如,使用 undebug all) 。通過這種辦法,可避免刪除條件時出現調試輸出泛濫。
traxbol#undebug interface serial 3
This condition is the last interface condition set.
Removing all conditions may cause a flood of debugging
messages to result, unless specific debugging flags
are first removed.
Proceed with removal? [yes/no]: y
Condition 1 has been removed
traxbol#
現在可以觀察到顯示兩個串接口0和串接口3的調試。
*Mar 8 09:43:34.927: Serial3: HDLC myseq 32, mineseen 32*, yourseen 33, line up
*Mar 8 09:43:44.923: Serial0: HDLC myseq 35, mineseen 35*, yourseen 48, line up
警告:有些調試運行本身是有條件的,這方面的例子是atm調試。通過ATM調試,可明確地指定啟用調試的接口,而不是啟用所有atm接口上的調試并規定一種條件。
對于將ATM數據包調試限制到一個子接口上,下面內容說明了完成這一過程的正確方法:
arielle-nrp2#debug atm packet interface atm 0/0/0.1
! -- 請注意,我們明確指定將用于調試的子接口
ATM packets debugging is on
Displaying packets on interface ATM0/0/0.1 only
arielle-nrp2#
*Dec 21 10:16:51.891: ATM0/0/0.1(O):
VCD:0x1 VPI:0x1 VCI:0x21 DM:0x100 SAP:AAAA CTL:03 OUI:0080C2 TYPE:0007 Length:0x278
*Dec 21 10:16:51.891: 0000 FFFF FFFF FFFF 0010 7BB9 BDC4 0800 4500 025C 01FE
0000 FF11 61C8 0A30
*Dec 21 10:16:51.891: 4B9B FFFF FFFF 0044 0043 0248 0000 0101 0600 0015 23B7
0000 8000 0000 0000
*Dec 21 10:16:51.891: 0000 0000 0000 0000 0000 0000 0010 7BB9 BDC3 0000 0000
0000 0000 0000 0000
*Dec 21 10:16:51.891: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000
*Dec 21 10:16:51.891: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000
*Dec 21 10:16:51.891: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000
*Dec 21 10:16:51.891: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000
*Dec 21 10:16:51.895: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000
*Dec 21 10:16:51.895:
arielle-nrp2#
當設法啟用所有端口上的 atm debugging (通過適用的條件)時,若路由器上存在大量ATM子接口,則路由器可能處于“掛起”狀態。下面舉例說明了atm 調試的不正確方法。
在這種情況下,可以看到應用一種條件,但還可以看到這種應用未產生作用,并仍然可以看到其他接口所發送的數據包。在此實驗室練習方案中,只存在兩個接口和很少量的業務。若接口數量很大,則所有接口的調試輸出將相當高,并可使路由器處于掛起狀態。
arielle-nrp2#show debugging condition
Condition 1: interface AT0/0/0.1 (1 flags triggered)
Flags: AT0/0/0.1
! -- 指定接口的條件。
arielle-nrp2#debug atm packet
ATM packets debugging is on
Displaying all ATM packets
arielle-nrp2#
*Dec 21 10:22:06.727: ATM0/0/0.2(O):
! -- 我們從接口ATM0/0/0/.2查看調試,
! -- 盡管其條件只指定了AT0/0/0.1
VCD:0x2 VPI:0x5 VCI:0x37 DM:0x100 SAP:AAAA CTL:03 OUI:0080C2
TYPE:000E Length:0x2F
*Dec 21 10:22:06.727: 0000 0000 0180 0000 107B B9BD C400 0000 0080 0000 107B B9BD
C480 0800 0014
*Dec 21 10:22:06.727: 0002 000F 0000
*Dec 21 10:22:06.727: un a
*Dec 21 10:22:08.727: ATM0/0/0.2(O):
VCD:0x2 VPI:0x5 VCI:0x37 DM:0x100 SAP:AAAA CTL:03 OUI:0080C2
TYPE:000E Length:0x2F
*Dec 21 10:22:08.727: 0000 0000 0180 0000 107B B9BD C400 0000 0080 0000 107B B9BD
C480 0800 0014
*Dec 21 10:22:08.727: 0002 000F 0000
*Dec 21 10:22:08.727: ll
*Dec 21 10:22:10.727: ATM0/0/0.2(O):
VCD:0x2 VPI:0x5 VCI:0x37 DM:0x100 SAP:AAAA CTL:03 OUI:0080C2
TYPE:000E Length:0x2F
*Dec 21 10:22:10.727: 0000 0000 0080 0000 107B B9BD C400 0000 0080 0000 107B B9BD
C480 0800 0014
*Dec 21 10:22:10.727: 0002 000F 0000
*Dec 21 10:22:10.727:
*Dec 21 10:22:12.727: ATM0/0/0.2(O):
VCD:0x2 VPI:0x5 VCI:0x37 DM:0x100 SAP:AAAA CTL:03 OUI:0080C2
TYPE:000E Length:0x2F
*Dec 21 10:22:12.727: 0000 0000 0080 0000 107B B9BD C400 0000 0080 0000 107B B9BD
C480 0800 0014
*Dec 21 10:22:12.727: 0002 000F 0000
*Dec 21 10:22:12.727:
*Dec 21 10:22:13.931: ATM0/0/0.1(O):
! -- 我們還可以根據需要查看接口ATM0/0/0.1的調試。
VCD:0x1 VPI:0x1 VCI:0x21 DM:0x100 SAP:AAAA CTL:03 OUI:0080C2 TYPE:0007 Length:0x278
*Dec 21 10:22:13.931: 0000 FFFF FFFF FFFF 0010 7BB9 BDC4 0800 4500 025C 027F 0000
FF11 6147 0A30
*Dec 21 10:22:13.931: 4B9B FFFF FFFF 0044 0043 0248 0000 0101 0600 001A 4481 0000
8000 0000 0000
*Dec 21 10:22:13.931: 0000 0000 0000 0000 0000 0000 0010 7BB9 BDC3 0000 0000 0000
0000 0000 0000
*Dec 21 10:22:13.931: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000
*Dec 21 10:22:13.931: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000
*Dec 21 10:22:13.931: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000
*Dec 21 10:22:13.931: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000
*Dec 21 10:22:13.935: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000