이 문서에서는 SNMP(Simple Network Management Protocol)를 사용하여 Cisco IOS 디바이스에서 중단된 TCP 연결을 탐지하고 지우는 방법에 대해 설명합니다.이 문서에서는 이러한 용도로 사용하는 SNMP 객체에 대해서도 설명합니다.
Detect and Clear Hung TCP Connections(PERL Script to Detect and Clear Hung TCP Connections) 섹션은 이러한 지침을 구현하는 PERL 스크립트에 대한 링크를 제공합니다.
이 문서의 독자는 다음 주제에 대해 알고 있어야 합니다.
Cisco 디바이스에서 TCP 연결 정보를 보는 방법 이해
SNMP walk, get, get-next 및 set 명령의 일반적인 사용
Cisco 디바이스에서 SNMP를 구성하는 방법 이해
이 문서는 TCP-MIB 및 CISCO-TCP-MIB 모듈을 지원하는 IOS 소프트웨어를 실행하는 Cisco 라우터 및 스위치에 적용됩니다.
참고: CISCO-TCP-MIB 모듈은 기본적으로 NET-SNMP에서 로드되지 않습니다.시스템에 MIB 모듈이 로드되지 않은 경우 OID를 사용하여 개체 이름 대신 개체를 참조해야 합니다.
이 문서의 정보는 모든 IOS 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
이 정보는 다음 버전의 NET-SNMP를 기반으로 합니다.
NET-SNMP 버전 5.1.2(http://www.net-snmp.org/에서 제공)
PERL 스크립트는 PERL 버전으로 테스트되었습니다.
FreeBSD에서 5.005_03
5.8.0(Solaris 5.8)
5.005_02 — Microsoft Windows 2000에서 CiscoWorks SNMS의 일부로 제공
Microsoft Windows 2000의 ActivePerl 5.8.4(http://www.activestate.com/Products/ActivePerl/에서 제공 ).
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다.이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다.현재 네트워크가 작동 중인 경우, 모든 명령어의 잠재적인 영향을 미리 숙지하시기 바랍니다.
문서 규칙에 대한 자세한 내용은 Cisco 기술 팁 표기 규칙을 참조하십시오.
다음은 사용자가 사용하는 객체입니다.
CISCO-TCP-MIB 모듈에서 다음을 수행합니다.
ciscoTcpConnInBytes, OID .1.3.6.1.4.1.9.9.6.1.1.1.1
이 연결에 입력한 바이트 수입니다.
ciscoTcpConnInPkts, OID 1.3.6.1.4.1.9.9.6.1.1.1.2
이 연결에 입력한 패킷 수입니다.
ciscoTcpConnOutBytes, OID .1.3.6.1.4.1.9.9.6.1.1.1.3
이 연결의 바이트 출력 수입니다.
ciscoTcpConnOutPkts, OID .1.3.6.1.4.1.9.9.6.1.1.1.4
이 연결에서 출력되는 패킷 수입니다.
ciscoTcpConnRetransPkts, OID .1.3.6.1.4.1.9.9.6.1.1.1.7
이 연결에서 재전송된 패킷 수입니다.
ciscoTcpConnRto, OID .1.3.6.1.4.1.9.9.6.1.1.1.9
이 연결에 대한 재전송 시간 초과 값입니다.
TCP-MIB 모듈에서:
tcpConnState, OID .1.3.6.1.2.1.6.13.1.1
이 연결의 상태입니다.
이러한 객체에 대한 자세한 내용은 Detailed MIB Object Information을 참조하십시오.
다음 단계를 통해 TCP 연결이 끊겼는지 확인할 수 있습니다.
디바이스에서 ciscoTcpConnRetransPkts 및 ciscoTcpConnRto 객체가 지원되는지 확인하려면 ciscoTcpConnRto에서 SNMP get-next 작업을 수행하고 객체가 반환되는지 확인합니다.
참고: 두 객체에 대한 지원이 동시에 추가되었으므로 하나의 객체만 확인하면 됩니다.
참고: 모든 Cisco 장치가 마지막 두 개체(ciscoTcpConnRetransPkts 및 ciscoTcpConnRto)를 지원하지는 않지만, 이러한 장치를 사용하면 탐지의 정확성을 높일 수 있습니다.
ciscoTcpConnRetransPkts 및 ciscoTcpConnRto 객체가 지원되는 경우 2단계로 진행합니다.
ciscoTcpConnRetransPkts 및 ciscoTcpConnRto 객체가 지원되지 않는 경우 3단계로 진행합니다.
모든 개체가 지원됩니다.각 TCP 연결에 대해 다음 사항을 확인합니다.
ciscoTcpConnOutBytes는 0입니다.
ciscoTcpConnOutPkts는 0입니다.
ciscoTcpConnRetransPkts가 0보다 큽니다.
ciscoTcpConnRto는 20,000을 초과합니다.
참고: 탐지 속도를 높이기 위해 2만 개를 줄일 수 있습니다.연결이 끊어진 후 Rto 가 20,000에 도달하는 데 약 1 분 정도 걸립니다.그러나 값이 작을수록 결과의 정확도가 낮아질 수 있습니다.
이전의 모든 연결이 true이면 이 TCP 연결이 정지되고 지워질 수 있습니다.Use SNMP to clear a TCP Connection that Conn(SNMP를 사용하여 정지되는 TCP 연결을 지웁니다)으로 진행합니다.
처음 4개의 개체만 지원됩니다.각 TCP 연결에 대해 다음 사항을 확인합니다.
ciscoTcpConnInBytes가 0보다 큽니다.
ciscoTcpConnInPkts는 0입니다.
ciscoTcpConnOutBytes는 0입니다.
ciscoTcpConnOutPkts는 0입니다.
몇 초 정도 기다린 후 개체를 다시 가져와서 설정 과정에서 TCP 연결이 아닌지 확인합니다.
참고: 첫 번째 두 검사(입력 바이트의 양수는 있지만 입력 패킷은 없음)는 이상하게 보일 수 있지만 여러 디바이스 및 IOS 버전에서 확인되었습니다.
참고: 6개의 객체를 모두 지원하는 IOS 버전은 이러한 동작을 나타내지 않을 수 있으므로 2단계의 테스트에는 이러한 처음 두 테스트가 포함되지 않습니다.
모든 객체가 두 번 모두 테스트를 충족하는 경우 이 TCP 연결은 정지되고 지워질 수 있습니다.Use SNMP to clear a TCP Connection that Conn(SNMP를 사용하여 정지되는 TCP 연결을 지웁니다)으로 진행합니다.
이 예의 값은 다음과 같습니다.
디바이스 호스트 이름 a = nms-7206a(모든 객체 지원)
디바이스 호스트 이름 b = nms-1605(처음 4개의 객체만 지원)
읽기 커뮤니티 = 공용
쓰기 커뮤니티 = 비공개
다음 명령에서 커뮤니티 문자열 및 호스트 이름을 바꿉니다.
이 디바이스가 ciscoTcpConnRetransPkts 및 ciscoTcpConnRto 객체를 지원하는지 확인합니다.
ciscoTcpConnRto에서 SNMP get-next 작업 수행:
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.11.23092는 로컬 IP 주소(14.32.100.75, 로컬 TCP 포트 번호) 2065, 원격 IP 주소 - 172.18.86.111 및 원격 포트 TCP 번호를 연결합니다. - 23092입니다.
반환은 ciscoTcpConnRto입니다.2단계로 진행합니다.
객체가 지원되지 않는 경우 다음과 같은 응답이 표시됩니다.
snmpgetnext -c public nms-1605 ciscoTcpConnRto CISCO-FLASH-MIB::ciscoFlashDevicesSupported.0 = INTEGER: 1
반환은 ciscoTcpConnRto 객체에 대한 것이 아닙니다.반환된 정확한 개체는 중요하지 않습니다.3단계로 진행합니다.
Cisco TCP 연결 테이블에서 6개의 모든 개체를 지원하는 디바이스에 대한 각 TCP 연결에 대한 정보를 가져옵니다.
ciscoTcpConnOutBytes, ciscoTcpConnOutPkts, ciscoTcpConnRetransPkts 및 ciscoTcpConnRto에서 SNMP get-next 작업 수행:
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는 20,000을 초과합니다.
참고: 탐지 속도를 높이기 위해 2만 개를 줄일 수 있습니다.연결이 끊어진 후 Rto 가 20,000에 도달하는 데 약 1 분 정도 걸립니다.그러나 값이 작을수록 결과의 정확도가 낮아질 수 있습니다.
이 모든 것이 true이면 이 TCP 연결이 정지되고 지워질 수 있습니다.Use SNMP to clear a TCP Connection that Conn(SNMP를 사용하여 정지되는 TCP 연결을 지웁니다)으로 진행합니다.
TCP 연결 테이블을 계속 진행합니다.이렇게 하려면 다음과 같이 반환된 객체를 사용하여 끊어진 연결을 확인할 때 SNMP get-next 작업을 반복적으로 수행합니다.
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 연결을 표시했으며 완료되었습니다.
Cisco TCP 연결 테이블에서 처음 4개의 개체만 지원하는 디바이스에 대한 각 TCP 연결에 대한 정보를 가져옵니다.
ciscoTcpConnInBytes, ciscoTcpConnInPktsciscoTcpConnOutBytes 및 ciscoTcpConnOutPkts에서 SNMP get-next 작업 수행
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 연결이 아닌지 확인합니다.
위의 모든가 true인 경우 이 TCP 연결이 정지되고 지워질 수 있습니다.Use SNMP to clear a TCP Connection that Conn(SNMP를 사용하여 정지되는 TCP 연결을 지웁니다)으로 진행합니다.
TCP 연결 테이블을 계속 진행합니다.이렇게 하려면 다음과 같이 반환된 객체를 사용하여 끊어진 연결을 확인할 때 SNMP get-next 작업을 반복적으로 수행합니다.
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 <local_ip> <local_port> remote <remote_ip> <remote_port> 명령과 같습니다.선을 지우는 데 사용하는 객체는 tcpConnState입니다.
SNMP와의 끊어진 TCP 연결을 지우려면 다음 명령을 실행합니다.
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.11.23092는 로컬 IP 주소(14.32.100.75, 로컬 TCP 포트 번호) 2065, 원격 IP 주소 - 172.18.86.111 및 원격 포트 TCP 번호를 연결합니다. - 23092입니다.
참고: 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 모듈을 추출하려면 UNIX 같은 운영 체제에서 gzip 및 tar 등의 유틸리티를 사용합니다.예를 들어, 아카이브 파일이 /tmp에 배치되었다고 가정하고 /tmp에 파일을 추출하려면 다음을 수행합니다.
cd /tmp; gzip -dc fixTCPhang.tgz | tar -xvf -
참고: 스크립트의 첫 번째 행을 편집하여 PERL의 위치를 지정해야 할 수 있습니다.
Microsoft Windows 운영 체제에서 winzip 또는 기타 유틸리티를 사용하여 파일을 추출합니다.파일을 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 옵션을 지정하면 스크립트가 연결을 지웠습니다.출력의 끝에 CLEARED 문을 확인합니다.
스크립트는 SNMP 버전 1, 2c 및 3을 지원합니다. SNMP 버전 3을 지정하는 경우 -v 인수에서 모든 인증 정보를 지정해야 합니다.다음은 SNMP v3을 사용하는 예입니다.
fixTCPhang.pl -v "3 -a MD5 -u chelliot -A chelliot -l authNoPriv" -f nms-dmz-ap1200-b
이전 예에 대해 SNMP v3을 구성하기 위한 IOS 명령은 다음과 같습니다.
snmp-server group chelliot-group v3 auth write v1default snmp-server user chelliot chelliot-group v3 auth md5 chelliot
참고: 이 테스트에 사용된 NET-SNMP의 Windows 버전에 버그가 있는 것 같습니다.버그가 SHA 인증이 제대로 작동하도록 허용하지 않습니다.
이 스크립트와 함께 사용할 수 있는 몇 가지 다른 옵션이 있습니다.일부 스크립트 옵션에는 NET-SNMP 명령줄 유틸리티를 찾을 위치 및 MIB 모듈이 /tmp/mibs에 없는 경우 찾을 위치가 포함됩니다.이러한 옵션의 요약을 볼 수도 있습니다.
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.