يصف هذا المستند كيفية إستخدام بروتوكول إدارة الشبكة البسيط (SNMP) لاكتشاف إتصالات TCP المعلقة ومسحها على جهاز Cisco IOS. يشرح المستند أيضا كائنات SNMP التي تستخدمها لهذا الغرض.
القسم المعنون، البرنامج النصي ل PERL للكشف عن إتصالات TCP المعلقة ومعالجتها، يوفر رابطا إلى البرنامج النصي ل PERL الذي يقوم بتنفيذ هذه التعليمات.
يجب أن يكون لدى قراء هذا المستند معرفة بالمواضيع التالية:
فهم كيفية عرض معلومات اتصال TCP على أجهزة Cisco
الاستخدام العام لأوامر سير بروتوكول SNMP والحصول والحصول على الخطوة التالية وتعيين
فهم كيفية تكوين SNMP على جهاز Cisco
ينطبق هذا المستند على الموجهات والمحولات من Cisco التي تشغل برنامج IOS الذي يدعم وحدات TCP-MIB والوحدات النمطية Cisco-TCP-MIB.
ملاحظة: لا يتم تحميل الوحدة النمطية Cisco-TCP-MIB بشكل افتراضي في NET-SNMP. إذا لم يتم تحميل الوحدة النمطية MIB على النظام الخاص بك، فيجب إستخدام OID للإشارة إلى كائن بدلا من اسمه.
تستند المعلومات الواردة في هذا المستند إلى جميع إصدارات برنامج IOS والمكونات المادية.
تستند المعلومات إلى هذا الإصدار من NET-SNMP:
يتوفر الإصدار 5.1.2 من Net-SNMP على http://www.net-snmp.org/
تم إختبار البرنامج النصي ل PERL باستخدام إصدارات PERL:
5.005_03 في FreeBSD
5.8.0 على نظام التشغيل Solaris 5.8
5.005_02 — تم الشحن كجزء من CiscoWorks SNMS على Microsoft Windows 2000
ActivePerl 5. 8. 4 على نظام التشغيل Microsoft Windows 2000، متوفر على http://www.activestate.com/Products/ActivePerl/ .
تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك مباشرة، فتأكد من فهمك للتأثير المحتمل لأي أمر.
للحصول على مزيد من المعلومات حول اصطلاحات المستندات، ارجع إلى اصطلاحات تلميحات Cisco التقنية.
هذه هي الكائنات التي تستخدمها:
من الوحدة النمطية Cisco-TCP-MIB Module:
CiscoTcpConnInBytes، OID.1.3.6.1.4.1.9.6.1.1.1.1
عدد وحدات البايت التي تم إدخالها في هذا الاتصال.
CiscoTcpConnInPkts، OID 1.3.6.1.4.1.9.6.1.1.1.2
عدد إدخالات الحزم على هذا الاتصال.
CiscoTcpConnOutBytes، OID.1.3.6.1.4.1.9.6.1.1.1.3
عدد وحدات البايت التي تم إخراجها في هذا الاتصال
CiscoTcpConnOutPkts، OID .1.3.6.1.4.1.9.6.1.1.1.4
عدد إخراج الحزم على هذا الاتصال.
CiscoTcpConnRetransPkts، OID.1.3.6.1.4.1.9.6.1.1.1.7
عدد الحزم التي تمت إعادة إرسالها على هذا الاتصال.
Cisco TcpConnRto، OID .1.3.6.1.4.1.9.6.1.1.1.9
قيمة مهلة إعادة الإرسال لهذا الاتصال.
من الوحدة النمطية TCP-MIB:
tcpConnState، OID .1.3.6.1.2.1.6.13.1.1
حالة هذا الاتصال.
توجد تفاصيل أكثر حول هذه الكائنات في معلومات عنصر قاعدة معلومات الإدارة (MIB) التفصيلية.
تساعدك هذه الخطوات على تحديد ما إذا كان اتصال TCP يتوقف:
لتحديد ما إذا كان الكائنات CiscoTcpConnRetransPkts وCiscoTcpConnRto مدعومة في الجهاز، قم بإجراء عملية SNMP get-next على CiscoTcpConnRto والتحقق من إرجاع أي كائنات.
ملاحظة: تحتاج فقط إلى التحقق من كائن واحد لأن دعم كل منهما تمت إضافته في نفس الوقت.
ملاحظة: لا تدعم جميع أجهزة Cisco آخر كائنين (CiscoTcpConnRetransPkts وCiscoTcpConnRto)، ولكن يمكن أن يزيد إستخدامهما من دقة الكشف.
إذا كانت كائنات CiscoTcpConnRetransPkts وCiscoTcpConnRto مدعومة، فقم بالمتابعة إلى الخطوة 2.
إذا لم يتم دعم كائنات CiscoTcpConnRetransPkts وCiscoTcpConnRto، فقم بالمتابعة إلى الخطوة 3.
كل الكائنات مدعومة. لكل اتصال TCP تحقق مما يلي:
CiscoTcpConnOutBytes هي 0.
CiscoTcpConnOutPkts هو 0.
CiscoTcpConnRetransPkts أكبر من 0.
CiscoTcpConnRto أكبر من 20000.
ملاحظة: يمكن تقليل ال 20 000 لتسريع عملية الكشف. ويستغرق الامر دقيقة أو نحو ذلك ليبلغ رتو 20،000 مرة عندما يتوقف الاتصال. ولكن القيم الاصغر قد تقلل دقة النتيجة.
إذا كان كل ما سبق صحيحا، فسيتم تعليق اتصال TCP هذا ويمكن مسحه. انتقل إلى إستخدام بروتوكول SNMP لمسح اتصال TCP الذي يتم تعليقه.
الكائنات الأربعة الأولى فقط هي المدعومة. لكل اتصال TCP تحقق مما يلي:
CiscoTcpConnInBytes أكبر من 0.
CiscoTcpConnInPkts هو 0.
CiscoTcpConnOutBytes هي 0.
CiscoTcpConnOutPkts هو 0.
انتظر بضع ثوان ثم أعد جلب الكائنات للتحقق من أنه لم يكن اتصال TCP في عملية الإنشاء.
ملاحظة: قد تبدو التحققات الأولى والثانية (عدد موجب من وحدات بايت الإدخال ولكن لا توجد حزم إدخال) غريبة، ولكن تم التحقق منها مقابل العديد من الأجهزة وإصدارات IOS.
ملاحظة: لا يجوز أن تعرض إصدارات IOS التي تدعم الكائنات الستة جميعها هذا السلوك، وبالتالي، لا يتضمن الاختبار الوارد في الخطوة 2 هذين الاختبارين الأولين.
إذا التقت كافة الكائنات بالاختبارات في كلا المرتين فسيتم تعليق اتصال TCP هذا ويمكن مسحه. انتقل إلى إستخدام بروتوكول SNMP لمسح اتصال TCP الذي يتم تعليقه.
القيم في هذا المثال هي:
اسم مضيف الجهاز A = NMS-7206a (يدعم جميع الكائنات)
اسم مضيف الجهاز b = nms-1605 (يدعم الكائنات الأربعة الأولى فقط)
مجتمع القراءة = عام
مجتمع الكتابة = خاص
استبدلت الجماعة خيط وال hostname في هذا أمر:
تحديد ما إذا كان هذا الجهاز يدعم الكائنات CiscoTcpConnRetransPkts وCiscoTcpConnRto:
تنفيذ عملية الحصول على الخطوة التالية ل SNMP على CiscoTcpConnRto:
snmpgetnext -c public nms-7206a ciscoTcpConnRto
إذا تم دعم الكائنات، سترى إستجابة كهذه:
CISCO-TCP-MIB::ciscoTcpConnRto.14.32.100.75.2065.172.18.86.111.23092 = INTEGER: 303 milliseconds
ملاحظة: الفهرس المستخدم لهذه الكائنات، في هذه الحالة 14.32.100.75.2065.172.18.86.111.23092، هو تجميع لعنوان IP المحلي—14.32.100.75، ورقم منفذ TCP المحلي-2065، وعنوان IP البعيد-172.18.86.111، ورقم منفذ TCP البعيد—2035 92.
الإرجاع ل CiscoTcpConnRto. انتقل إلى الخطوة 2.
إذا كانت الكائنات غير مدعومة، سترى إستجابة كهذه:
snmpgetnext -c public nms-1605 ciscoTcpConnRto CISCO-FLASH-MIB::ciscoFlashDevicesSupported.0 = INTEGER: 1
الإرجاع ليس لكائن CiscoTcpConnRto. الكائن المحدد الذي تم إرجاعه ليس مهما. انتقل إلى الخطوة 3.
احصل على معلومات حول كل اتصال TCP للأجهزة التي تدعم جميع الكائنات الستة في جدول اتصال Cisco TCP.
قم بإجراء عملية SNMP Get-next على CiscoTcpConnOutBytes، وCiscoTcpConnOutPkts، وCiscoTcpConnRetransPkts، وCiscoTcpConnRto:
snmpgetnext -c public nms-7206a ciscoTcpConnOutBytes ciscoTcpConnOutPkts ciscoTcpConnRetransPkts ciscoTcpConnRto
ترى إستجابة كهذه:
CISCO-TCP-MIB::ciscoTcpConnOutBytes.14.32.100.75.2065.172.18.86.111.23092 = Counter32: 383556 CISCO-TCP-MIB::ciscoTcpConnOutPkts.14.32.100.75.2065.172.18.86.111.23092 = Counter32: 8061 CISCO-TCP-MIB::ciscoTcpConnRetransPkts.14.32.100.75.2065.172.18.86.111.23092 = Counter32: 2 CISCO-TCP-MIB::ciscoTcpConnRto.14.32.100.75.2065.172.18.86.111.23092 = INTEGER: 303 milliseconds
تحقق من التالي:
CiscoTcpConnOutBytes هي 0.
CiscoTcpConnOutPkts هو 0.
CiscoTcpConnRetransPkts أكبر من 0.
CiscoTcpConnRto أكبر من 20000.
ملاحظة: يمكن تقليل ال 20 000 لتسريع عملية الكشف. ويستغرق الامر دقيقة أو نحو ذلك ليبلغ رتو 20،000 مرة عندما يتوقف الاتصال. ولكن القيم الاصغر قد تقلل دقة النتيجة.
إذا كانت كل هذه الأمور صحيحة، فسيتم تعليق اتصال TCP هذا ويمكن مسحه. انتقل إلى إستخدام بروتوكول SNMP لمسح اتصال TCP الذي يتم تعليقه.
تابع السير على جدول اتصال TCP. للقيام بذلك، قم بتنفيذ عملية الحصول على التالي ل SNMP بشكل متكرر أثناء التحقق من الاتصالات المعلقة، باستخدام الكائنات التي تم إرجاعها مثل ما يلي:
snmpgetnext -c public nms-7206a ciscoTcpConnOutBytes.14.32.100.75.2065.172.18.86.111.23092 ciscoTcpConnOutPkts.14.32.100.75.2065.172.18.86.111.23092 ciscoTcpConnRetransPkts.14.32.100.75.2065.172.18.86.111.23092 ciscoTcpConnRto.14.32.100.75.2065.172.18.86.111.23092
تحقق من كل إدخال باستخدام الاختبار السابق حتى ترجع عملية get-next الكائنات بهذه الطريقة:
CISCO-TCP-MIB::ciscoTcpConnInPkts.14.32.100.75.2065.172.18.86.111.23092 = Counter32: 8097 CISCO-TCP-MIB::ciscoTcpConnElapsed.14.32.100.75.2065.172.18.86.111.23092 = Timeticks: (17296508) 2 days, 0:02:45.08 CISCO-TCP-MIB::ciscoTcpConnFastRetransPkts.14.32.100.75.2065.172.18.86.111.23092 = Counter32: 0 CISCO-FLASH-MIB::ciscoFlashDevicesSupported.0 = INTEGER: 5
لقد قمت الآن بالسير على جميع إتصالات TCP على هذا الجهاز وانتهيت.
احصل على معلومات حول كل اتصال TCP للأجهزة التي تدعم الكائنات الأربعة الأولى فقط في جدول اتصال Cisco TCP.
قم بإجراء عملية SNMP get-next على CiscoTcpConnInBytes، وCiscoTcpConnInPkts CiscoTcpConnOutBytes، وCiscoTcpConnOutPkts:
snmpgetnext -c public nms-1605 ciscoTcpConnInBytes ciscoTcpConnInPkts ciscoTcpConnOutBytes ciscoTcpConnOutPkts
ترى إستجابة كهذه:
CISCO-TCP-MIB::ciscoTcpConnInBytes.14.32.6.185.23.14.32.100.33.2249 = Counter32: 68 CISCO-TCP-MIB::ciscoTcpConnInPkts.14.32.6.185.23.14.32.100.33.2249 = Counter32: 12 CISCO-TCP-MIB::ciscoTcpConnOutBytes.14.32.6.185.23.14.32.100.33.2249 = Counter32: 170 CISCO-TCP-MIB::ciscoTcpConnOutPkts.14.32.6.185.23.14.32.100.33.2249 = Counter32: 17
تحقق لمعرفة ما إذا كانت هذه المعلومات صحيحة:
CiscoTcpConnInBytes أكبر من 0.
CiscoTcpConnInPkts هو 0.
CiscoTcpConnOutBytes هي 0.
CiscoTcpConnOutPkts هو 0.
انتظر بضع ثوان ثم تحصل على الكائنات مرة أخرى. تحقق من أنه لم يكن اتصال TCP في عملية الإنشاء.
إذا كان كل ما سبق صحيحا، فسيتم تعليق اتصال TCP هذا ويمكن مسحه. انتقل إلى إستخدام بروتوكول SNMP لمسح اتصال TCP الذي يتم تعليقه.
تابع السير على جدول اتصال TCP. للقيام بذلك، قم بتنفيذ عملية الحصول على التالي ل SNMP بشكل متكرر أثناء التحقق من الاتصالات المعلقة، باستخدام الكائنات التي تم إرجاعها مثل ما يلي:
snmpgetnext -c public nms-1605 ciscoTcpConnInBytes.14.32.6.185.23.14.32.100.33.2249 ciscoTcpConnInPkts.14.32.6.185.23.14.32.100.33.2249 ciscoTcpConnOutBytes.14.32.6.185.23.14.32.100.33.2249 ciscoTcpConnOutPkts.14.32.6.185.23.14.32.100.33.2249
تحقق من كل إدخال باستخدام الاختبار السابق حتى ترجع عملية get-next الكائنات بهذه الطريقة:
CISCO-TCP-MIB::ciscoTcpConnOutBytes.14.32.6.185.23.14.32.100.33.4184 = Counter32: 170 CISCO-TCP-MIB::ciscoTcpConnOutPkts.14.32.6.185.23.14.32.100.33.4184 = Counter32: 17 CISCO-TCP-MIB::ciscoTcpConnInPkts.14.32.6.185.23.14.32.100.33.4184 = Counter32: 12 CISCO-TCP-MIB::ciscoTcpConnElapsed.14.32.6.185.23.14.32.100.33.4184 = Timeticks: (4345) 0:00:43.45
لقد قمت الآن بالسير على جميع إتصالات TCP على هذا الجهاز وانتهيت.
يمكنك إستخدام بروتوكول SNMP لمسح اتصال TCP معلق. يماثل الأمر SNMP الأمر clear tcp محلي <local_ip> <local_port>remote <remote_ip><remote_port>. الكائن الذي تستخدمه لمسح سطر ما هو tcpConnState.
لمسح اتصال TCP معلق مع SNMP، قم بإصدار هذا الأمر:
snmpset -c private nms-7206a tcpConnState.14.32.100.75.2065.172.18.86.111.23092 integer deleteTCB TCP-MIB::tcpConnState.14.32.100.75.2065.172.18.86.111.23092 = INTEGER: deleteTCB(12)
ملاحظة: الفهرس المستخدم لهذه الكائنات، في هذه الحالة 14.32.100.75.2065.172.18.86.111.23092، هو تجميع لعنوان IP المحلي—14.32.100.75، ورقم منفذ TCP المحلي-2065، وعنوان IP البعيد-172.18.86.111، ورقم منفذ TCP البعيد—2035 92.
ملاحظة: يجب إستخدام الفهرس المحدد الذي حددته تم تعليقه في إستخدام SNMP لاكتشاف ما إذا كان اتصال TCP قد تم تعليقه. كن على علم بأن هذا الأمر يقطع اتصال TCP دون تحذير.
.1.3.6.1.4.1.9.9.6.1.1.1.1 ciscoTcpConnInBytes OBJECT-TYPE -- FROM CISCO-TCP-MIB SYNTAX Counter MAX-ACCESS read-only STATUS Current DESCRIPTION "Number of bytes that have been input on this TCP connection." ::= { ciscoTcpConnEntry 1 } .1.3.6.1.4.1.9.9.6.1.1.1.2 ciscoTcpConnOutBytes OBJECT-TYPE -- FROM CISCO-TCP-MIB SYNTAX Counter MAX-ACCESS read-only STATUS Current DESCRIPTION "Number of bytes that have been output on this TCP connection." ::= { ciscoTcpConnEntry 2 } .1.3.6.1.4.1.9.9.6.1.1.1.3 ciscoTcpConnInPkts OBJECT-TYPE -- FROM CISCO-TCP-MIB SYNTAX Counter MAX-ACCESS read-only STATUS Current DESCRIPTION "Number of packets that have been input on this TCP connection." ::= { ciscoTcpConnEntry 3 } .1.3.6.1.4.1.9.9.6.1.1.1.4 ciscoTcpConnOutPkts OBJECT-TYPE -- FROM CISCO-TCP-MIB SYNTAX Counter MAX-ACCESS read-only STATUS Current DESCRIPTION "Number of packets that have been output on this TCP connection." ::= { ciscoTcpConnEntry 4 } .1.3.6.1.4.1.9.9.6.1.1.1.7 ciscoTcpConnRetransPkts OBJECT-TYPE -- FROM CISCO-TCP-MIB SYNTAX Counter MAX-ACCESS read-only STATUS Current DESCRIPTION "The total number of packets retransmitted due to a timeout - that is, the number of TCP segments transmitted containing one or more previously transmitted octets." ::= { ciscoTcpConnEntry 7 } .1.3.6.1.4.1.9.9.6.1.1.1.9 ciscoTcpConnRto OBJECT-TYPE -- FROM CISCO-TCP-MIB SYNTAX Integer MAX-ACCESS read-only STATUS Current DESCRIPTION "The current value used by a TCP implementation for the retransmission timeout." ::= { ciscoTcpConnEntry 9 } .1.3.6.1.2.1.6.13.1.1 tcpConnState OBJECT-TYPE -- FROM RFC1213-MIB SYNTAX Integer { closed(1), listen(2), synSent(3), synReceived(4), established(5), finWait1(6), finWait2(7), closeWait(8), lastAck(9), closing(10), timeWait(11), deleteTCB(12) } MAX-ACCESS read-write STATUS Mandatory DESCRIPTION "The state of this TCP connection. The only value which may be set by a management station is deleteTCB(12). Accordingly, it is appropriate for an agent to return a `badValue' response if a management station attempts to set this object to any other value. If a management station sets this object to the value deleteTCB(12), then this has the effect of deleting the TCB (as defined in RFC 793) of the corresponding connection on the managed node, resulting in immediate termination of the connection. As an implementation-specific option, a RST segment may be sent from the managed node to the other TCP endpoint (note however that RST segments are not sent reliably)." ::= { tcpConnEntry 1 }
يوفر هذا الارتباط ملف أرشيف باستخدام برنامج PERL النصي ووحدات قاعدة معلومات الإدارة (MIB) الضرورية. انقر بزر الماوس الأيمن فوق الارتباط ثم احفظ الملف في نظامك.
الملفات الموجودة في الأرشيف هي:
bin/fixTCPhang.pl
mibs/CISCO-SMI.my
mibs/CISCO-TCP-MIB.my
لاستخراج البرنامج النصي ووحدات قاعدة معلومات الإدارة (MIB)، أستخدم أداة مساعدة مثل GZIP و tar على أنظمة تشغيل شبيهة بنظام UNIX. على سبيل المثال، لاستخراج الملفات إلى /tmp على افتراض أن ملف الأرشيف موضوع في /tmp:
cd /tmp; gzip -dc fixTCPhang.tgz | tar -xvf -
ملاحظة: قد تحتاج لتحرير السطر الأول من النص التنفيذي لتحديد مكان PERL.
أستخدم WinZip أو أدوات مساعدة أخرى على أنظمة تشغيل Microsoft Windows لاستخراج الملفات. إذا قمت باستخراج الملفات إلى c:\tmp عندئذ لا تحتاج لتحديد الخيار -m عندما تقوم بتشغيل النص التنفيذي.
إستدعاء الملفات باستخدام هذا الأمر:
fixTCPhang.pl -c public -C private -f nms-7206a
لكل إتصالات TCP معلقة يتم العثور على سطر مثل هذا الإخراج:
Found bad TCP connection: Local IP: 14.32.100.75 port 23 Remote IP: 172.18.100.33 port 47878: CLEARED
مع توفير سلسلة مجتمع للقراءة والكتابة وتحديد الخيار -f، قام البرنامج النصي بمسح الاتصال. لاحظ الجملة التي تم مسحها في نهاية الإخراج.
يدعم البرنامج النصي إصدارات SNMP 1 و 2c و 3. إذا قمت بتحديد الإصدار 3 من SNMP، فيجب عليك تحديد جميع معلومات المصادقة في الوسيطة -v. هذا مثال على إستخدام SNMP v3:
fixTCPhang.pl -v "3 -a MD5 -u chelliot -A chelliot -l authNoPriv" -f nms-dmz-ap1200-b
أوامر IOS لتكوين SNMP v3 للمثال السابق هي:
snmp-server group chelliot-group v3 auth write v1default snmp-server user chelliot chelliot-group v3 auth md5 chelliot
ملاحظة: يبدو أن هناك خطأ في إصدار Windows من NET-SNMP يستخدم في هذا الاختبار. لا يسمح الخطأ لمصادقة SHA بالعمل بشكل صحيح.
هناك عدة خيارات أخرى يمكنك إستخدامها مع هذا البرنامج النصي. تتضمن بعض خيارات البرامج النصية مكان العثور على أدوات مساعدة سطر أوامر NET-SNMP وأين يتم العثور على وحدات قاعدة معلومات الإدارة إذا لم تكن داخل /tmp/mib. يمكنك أيضا عرض هذا الملخص من تلك الخيارات:
fixTCPhang.pl fixTCPhang.pl [-dfhV -c <read_community> -C <write_community> -m <mib_directory> -p <command_path> -t <timeout> -v <snmp_version>] <device> Version 1.2 Detect hung TCP connections on <device>, optionally clearing them. Options: -c Specify read community string. Defaults to public. -C Specify the readwrite community string. No default. Must be supplied for the script to clear hung connections. -d Turn on debug mode. -f Fix or clear any hung TCP connections found. -h Print this message. -m Specify the directory to find CISCO-SMI.my and CISCO-TCP-MIB.my. Defaults to /tmp/mibs. -p Where to find the net-snmp utilities. Optional if the utilities are in the path. -t SNMP Timeout value. Defaults to 5 sec. -v Specify SNMP version to use: One of 1, 2c, or 3. If 3 is specified then this option must include all of the authentication information for SNMPv3. For example: "3 -a MD5 -u chelliot -A chelliot -l authNoPriv" Note: NET-SNMP seems to have a bug with SHA authentication on Windows. See the NET-SNMP documentation for more information. Defaults to SNMP version 1. -V Print version number.