网络工程师干货:如何定位和解决二层环路问题,这四种方法要熟记于心!

时间:10-26来源:作者:点击数:

二层环路问题是一种常见且严重的故障,可能导致网络拥塞、数据包丢失,甚至整个网络瘫痪。为了确保网络的稳定性和性能,及时有效地检测和解决二层环路问题至关重要。本文将详细介绍四种关键方法,帮助网络管理员定位和解决二层环路问题。这四种方法包括查看接口带宽流量、查看MAC地址漂移、环路检测和查看CPU占用率。

图片

目录:

  • 查看接口带宽流量
    • 常用的监测工具概述
    • 接口带宽流量的分析和优化
  • 查看MAC地址漂移
    • MAC地址漂移的检测工具和方法
    • 解决MAC地址漂移的方法
  • 环路检测
    • 环路检测的方法
    • 解决和预防环路的方法
  • 查看CPU占用率
    • 查看CPU占用率的方法
    • 分析和解决高CPU占用率的问题
  • 总结
    • 1. 查看接口带宽流量
    • 2. 查看MAC地址漂移
    • 3. 环路检测
    • 4. 查看CPU占用率

查看接口带宽流量

网络环路(Loop)问题是常见的网络故障之一,会导致网络拥塞、性能下降,甚至网络瘫痪。为了诊断和解决网络环路问题,查看接口带宽流量是一个基本且关键的步骤。

接口带宽流量(Interface Bandwidth Utilization)指的是通过网络接口传输的数据量。它是衡量网络接口性能的关键指标之一,通常以每秒传输的比特数(bps)来表示。

接口带宽流量直接影响网络的整体性能。当接口带宽利用率接近或达到其最大容量时,数据包可能会丢失,导致网络延迟增加和吞吐量下降。通过监测接口带宽流量,管理员可以识别和解决这些问题,从而优化网络性能。

常用的监测工具概述

SNMP(Simple Network Management Protocol)

SNMP 是一种标准的网络管理协议,用于收集和组织网络设备的信息,并进行远程监控和管理。

  • 优点:简单、广泛支持。
  • 缺点:延迟较大、实时性较差。
  1. 配置 SNMP
  • 在网络设备上启用 SNMP,并配置社区字符串。
  • 例子:在思科路由器上配置 SNMP
Router(config)# snmp-server community public RO
  1. 使用 SNMP 工具
  • 使用 SNMP 工具(如 MRTG、Cacti、SolarWinds)收集和展示接口带宽流量。
  • 示例:使用 MRTG 配置和监控

安装 MRTG

sudo apt-get install mrtg

配置 MRTG

Target[router]: 1.3.6.1.2.1.2.2.1.10.1&1.3.6.1.2.1.2.2.1.16.1:public@router
MaxBytes[router]: 1250000
Title[router]: Router Traffic Analysis
PageTop[router]: <H1>Router Traffic Analysis</H1>

运行 MRTG

mrtg /etc/mrtg.cfg
NetFlow

NetFlow 是由思科开发的一种网络协议,用于收集 IP 流量信息。它能够详细记录每个流的开始和结束时间、源和目的地 IP 地址、传输的字节数等。

  • 优点:提供详细的流量信息、适用于流量分析。
  • 缺点:配置复杂、对设备性能有一定影响。
  1. 配置 NetFlow
  • 在路由器或交换机上启用 NetFlow 并配置导出目的地。
  • 例子:在思科路由器上配置 NetFlow
Router(config)# ip flow-export destination 192.168.1.100 9996
Router(config)# ip flow-export version 9
Router(config)# interface GigabitEthernet0/1
Router(config-if)# ip flow ingress
  1. 使用 NetFlow 分析工具
  • 使用 NetFlow 分析工具(如 ntopng、SolarWinds NetFlow Traffic Analyzer、ManageEngine NetFlow Analyzer)收集和展示流量数据。
  • 示例:使用 ntopng

安装 ntopng

sudo apt-get install ntopng

配置 ntopng

--interface=eth0
--netflow=3000
--local-networks="192.168.1.0/24"

运行 ntopng

sudo systemctl start ntopng
sFlow(Sampled Flow)

sFlow 是一种基于采样的流量监控协议,通过随机采样的数据包来收集网络流量信息。

  • 优点:低开销、适用于高性能网络。
  • 缺点:采样误差、需要支持 sFlow 的设备。
  1. 配置 sFlow
  • 在交换机上启用 sFlow 并配置采样率和导出目的地。
  • 例子:在 HP ProCurve 交换机上配置 sFlow
ProCurve(config)# sflow 1 destination 192.168.1.100 6343
ProCurve(config)# sflow 1 polling 30
ProCurve(config)# sflow 1 sampling 512
  1. 使用 sFlow 分析工具
  • 使用 sFlow 分析工具(如 sFlowTrend、InMon、Plixer Scrutinizer)收集和展示流量数据。
  • 示例:使用 sFlowTrend

下载和安装 sFlowTrend

wget http://www.inmon.com/products/sFlowTrend-download.php

配置 sFlowTrend 连接到 sFlow 数据源

运行 sFlowTrend 并查看实时流量

接口带宽流量的分析和优化

分析接口带宽流量
  1. 识别高流量接口
  • 通过监测工具,识别出带宽利用率较高的接口。
  • 示例:使用 NetFlow Analyzer 查看高流量接口
    • 登录 NetFlow Analyzer
    • 导航到“接口”视图,查看带宽利用率最高的接口
  1. 分析流量模式
  • 分析流量的来源、去向和协议类型,识别异常流量和潜在的瓶颈。
  • 示例:使用 ntopng 查看流量模式
    • 登录 ntopng
    • 导航到“流量”视图,查看流量的来源和去向
优化接口带宽流量
  1. 调整带宽分配
  • 根据分析结果,调整带宽分配策略,确保关键业务应用有足够的带宽。
  • 示例:在路由器上配置 QoS
Router(config)# class-map match-any critical
Router(config-cmap)# match ip dscp af31
Router(config)# policy-map QoS-Policy
Router(config-pmap)# class critical
Router(config-pmap-c)# bandwidth percent 50
  1. 实施流量控制策略
  • 实施流量控制策略,如流量整形(Traffic Shaping)和流量优先级(Traffic Prioritization),以优化带宽利用率。
  • 示例:在交换机上配置流量控制
Switch(config)# policy-map Traffic-Control
Switch(config-pmap)# class critical
Switch(config-pmap-c)# police 5000000 conform-action transmit exceed-action drop

查看MAC地址漂移

MAC地址漂移是指同一个MAC地址在不同的网络接口之间频繁切换,这通常是由于网络拓扑中存在环路或网络设备故障导致的。MAC地址漂移会导致交换机的MAC地址表频繁更新,增加CPU负担,影响网络性能。

当MAC地址频繁在不同端口间漂移时,交换机需要不断更新其MAC地址表。这种频繁的更新不仅增加了交换机的CPU负担,还会导致数据包转发的不稳定,影响网络的整体性能。

MAC地址漂移的检测工具和方法

使用交换机自带功能检测MAC地址漂移
  1. 查看交换机日志
  • 大多数交换机都有日志功能,可以记录MAC地址漂移的相关信息。
  • 例子:在思科交换机上查看日志
Switch# show log | include MACFLAP
  1. 使用交换机命令行工具
  • 一些交换机提供了专门的命令用于检测MAC地址漂移。
  • 例子:在思科交换机上使用命令检测MAC地址漂移
Switch# show mac address-table flapping
使用网络监测工具
  1. Wireshark

Wireshark是一款开源的网络协议分析工具,可以捕获并分析网络流量,帮助检测MAC地址漂移。

打开Wireshark,选择网络接口,点击"Start"按钮开始捕获流量。

使用过滤器"eth.addr == <mac_address>"查看特定MAC地址的流量。

  1. SolarWinds Network Performance Monitor (NPM)

SolarWinds NPM是一款商业网络监测工具,具有检测MAC地址漂移的功能。

通过NPM的用户界面,查看MAC地址表并检测漂移情况。

使用脚本

通过编写Python脚本,自动化检测MAC地址漂移。

参考脚本:

     from pysnmp.hlapi import *

     def get_mac_address_table(ip, community):
         iterator = nextCmd(SnmpEngine(),
                            CommunityData(community),
                            UdpTransportTarget((ip, 161)),
                            ContextData(),
                            ObjectType(ObjectIdentity('1.3.6.1.2.1.17.4.3.1.1')),
                            ObjectType(ObjectIdentity('1.3.6.1.2.1.17.4.3.1.2')),
                            lookupMib=False)

         mac_table = {}
         for errorIndication, errorStatus, errorIndex, varBinds in iterator:
             if errorIndication:
                 print(errorIndication)
                 break
             elif errorStatus:
                 print('%s at %s' % (errorStatus.prettyPrint(),
                                     errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
                 break
             else:
                 mac = varBinds[0][1].prettyPrint()
                 port = varBinds[1][1].prettyPrint()
                 if mac in mac_table:
                     mac_table[mac].append(port)
                 else:
                     mac_table[mac] = [port]

         return mac_table

     def detect_mac_flapping(mac_table):
         flapping_macs = {}
         for mac, ports in mac_table.items():
             if len(set(ports)) > 1:
                 flapping_macs[mac] = ports
         return flapping_macs

     ip = '192.168.1.1'
     community = 'public'
     mac_table = get_mac_address_table(ip, community)
     flapping_macs = detect_mac_flapping(mac_table)

     if flapping_macs:
         print("Detected MAC address flapping:")
         for mac, ports in flapping_macs.items():
             print(f"MAC: {mac} on Ports: {', '.join(ports)}")
     else:
         print("No MAC address flapping detected.")

解决MAC地址漂移的方法

排查网络环路
  1. 检查物理连接

确认网络拓扑中不存在不必要的环路。比如检查交换机和路由器的物理连接,确保没有形成环路。

  1. 使用生成树协议(STP)

STP 是一种防止环路的网络协议,能够自动检测并阻止网络中的环路。

例子:在思科交换机上启用STP

Switch(config)# spanning-tree mode pvst
Switch(config)# spanning-tree vlan 1 priority 4096
升级网络设备固件
  1. 检查固件版本

确认交换机和路由器的固件是最新版本,旧版本固件可能存在已知的BUG。

例子:在思科交换机上查看固件版本

Switch# show version
  1. 升级固件

根据设备制造商的指导,下载并升级设备固件。

在思科交换机上升级固件

Switch# copy tftp://192.168.1.100/image.bin flash:
Switch# reload
优化网络配置
  1. 配置端口安全

使用端口安全特性限制每个端口上允许的MAC地址数量,从而防止MAC地址漂移。

在思科交换机上配置端口安全

Switch(config)# interface GigabitEthernet0/1
Switch(config-if)# switchport mode access
Switch(config-if)# switchport port-security
Switch(config-if)# switchport port-security maximum 1
Switch(config-if)# switchport port-security violation restrict
  1. 监控和调整网络流量

通过持续监控网络流量,及时调整网络配置,防止MAC地址漂移的发生。

比如使用NetFlow或sFlow监控流量,发现异常流量及时处理。

环路检测

网络环路是指网络中存在一个或多个路径,使得数据包在网络中无限循环。这种情况会导致网络拥塞、数据包丢失,甚至整个网络瘫痪。为了保障网络的稳定性和性能,及时检测和解决环路问题是非常必要的。

环路是网络中设备连接错误或配置不当导致的现象。常见成因包括:

  1. 错误的物理连接

例如,两个交换机之间的多个连接未正确配置生成树协议(STP),形成物理环路。

  1. 误配置

不当的VLAN配置、冗余链路未配置STP等。

  1. 设备故障

网络设备如交换机或路由器故障,导致数据包无限转发。

环路会导致:

  • 广播风暴:数据包在环路中无限循环,产生大量的广播流量,消耗网络带宽。
  • MAC地址漂移:导致MAC地址表频繁更新,增加交换机的CPU负担。
  • 数据包丢失:数据包在环路中丢失,影响通信质量。

环路检测的方法

使用生成树协议(STP)

STP 是一种网络协议,用于防止网络环路,通过阻止冗余路径来确保网络的树形结构。

在交换机上启用并配置STP。

例子:在思科交换机上配置STP

Switch(config)# spanning-tree mode rapid-pvst
Switch(config)# spanning-tree vlan 1 root primary
Switch(config)# spanning-tree vlan 1 priority 4096
使用环路检测工具
  1. SolarWinds Network Performance Monitor (NPM)

NPM 能够自动检测网络中的环路,并提供详细的报告。通过NPM的用户界面,查看环路检测报告并处理环路问题。

  1. Wireshark

使用Wireshark捕获并分析网络流量,检测环路。

打开Wireshark,选择网络接口,点击"Start"按钮开始捕获流量。使用过滤器"eth.addr == <mac_address>"查看特定MAC地址的流量,检测重复的数据包。

使用脚本

编写Python脚本自动检测环路。

参考脚本:

     from scapy.all import *
     
     def detect_loop(packet):
         if packet.haslayer(Ether):
             src_mac = packet[Ether].src
             dst_mac = packet[Ether].dst
             if src_mac == dst_mac:
                 print(f"Loop detected: {src_mac} -> {dst_mac}")
     
     sniff(prn=detect_loop)

解决和预防环路的方法

解决环路问题
  1. 物理断开

识别并物理断开形成环路的连接。比如通过检查交换机和路由器的连接,找到并断开多余的连接。

  1. 重新配置生成树协议

确保所有交换机和路由器正确配置生成树协议。

在思科交换机上重新配置STP

Switch(config)# spanning-tree mode rapid-pvst
Switch(config)# spanning-tree vlan 1 root primary
预防环路问题
  1. 定期检查网络拓扑

定期检查和更新网络拓扑图,确保没有不必要的环路。例如使用网络监测工具如SolarWinds NPM定期生成网络拓扑图。

  1. 配置环路保护机制

使用交换机的环路保护机制,如BPDU Guard、Loop Guard。

在思科交换机上启用BPDU Guard

Switch(config)# interface range GigabitEthernet0/1 - 24
Switch(config-if-range)# spanning-tree bpduguard enable

查看CPU占用率

CPU占用率(CPU Utilization)是指在一定时间内,CPU处理任务所占用的百分比。它反映了CPU的负载情况,是衡量设备性能的重要指标之一。

高CPU占用率会导致设备响应时间增加、数据包处理延迟,甚至数据包丢失,从而影响网络性能。监控CPU占用率可以帮助网络管理员识别潜在的性能瓶颈和故障。

查看CPU占用率的方法

使用网络设备自带功能查看CPU占用率
  1. 思科设备

在思科设备上,可以通过CLI命令查看CPU占用率。

查看思科路由器的CPU占用率

Router# show processes cpu
CPU utilization for five seconds: 10%/3%; one minute: 5%; five minutes: 3%
  1. 华为设备

在华为设备上,也可以通过CLI命令查看CPU占用率。

查看华为交换机的CPU占用率

<Switch> display cpu-usage
CPU utilization for five seconds: 15%; one minute: 12%; five minutes: 10%
使用网络监控工具查看CPU占用率
  1. SolarWinds Network Performance Monitor (NPM)

NPM是一款强大的网络监控工具,可以实时监控设备的CPU占用率。通过NPM的用户界面,查看设备的CPU占用率图表和报告。

  1. PRTG Network Monitor

PRTG是一款综合的网络监控工具,支持监控CPU占用率。添加需要监控的网络设备,并配置CPU占用率传感器。通过PRTG的用户界面,查看设备的CPU占用率图表和报告。

使用脚本查看CPU占用率

过编写Python脚本,自动化查看和监控设备的CPU占用率。

参考脚本:

     from pysnmp.hlapi import *

     def get_cpu_usage(ip, community):
         iterator = getCmd(SnmpEngine(),
                           CommunityData(community),
                           UdpTransportTarget((ip, 161)),
                           ContextData(),
                           ObjectType(ObjectIdentity('1.3.6.1.4.1.9.2.1.57.0')))

         errorIndication, errorStatus, errorIndex, varBinds = next(iterator)
         if errorIndication:
             print(errorIndication)
         elif errorStatus:
             print('%s at %s' % (errorStatus.prettyPrint(),
                                 errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
         else:
             for varBind in varBinds:
                 print(' = '.join([x.prettyPrint() for x in varBind]))

     ip = '192.168.1.1'
     community = 'public'
     get_cpu_usage(ip, community)

分析和解决高CPU占用率的问题

分析高CPU占用率
  1. 识别高CPU占用率的原因

分析设备上的进程和任务,找出占用CPU资源最多的进程。

比如在思科路由器上查看CPU占用率最高的进程

Router# show processes cpu sorted
  1. 分析网络流量模式

分析网络流量,找出导致高CPU占用率的流量模式或攻击行为。

比如使用Wireshark分析流量:打开Wireshark,捕获流量,使用过滤器分析异常流量。

解决高CPU占用率的问题
  1. 优化设备配置

通过优化设备配置,减少CPU负载。

比如调整路由器上的ACL(访问控制列表)配置,减少CPU处理负担。

Router(config)# access-list 100 permit ip any any
  1. 升级设备硬件或固件

升级设备的硬件或固件,以提高设备性能。

比如升级思科交换机的固件

Switch# copy tftp://192.168.1.100/image.bin flash:
Switch# reload
  1. 分流和负载均衡

通过分流和负载均衡,将负载分散到多个设备上,降低单台设备的CPU占用率。比如使用F5负载均衡器配置负载均衡,将流量分散到多台服务器。

总结

最后给大家做个总结,精简一下文章内容:

图片

1. 查看接口带宽流量

  • 目的: 识别异常流量和拥塞。
  • 工具和命令:
    • 思科设备: show interface
    • 华为设备: display interface
    • 网络监控工具: SolarWinds NPM、PRTG
  • 解决措施: 优化配置、升级硬件、负载均衡。

2. 查看MAC地址漂移

  • 目的: 检测MAC地址在不同接口之间的漂移。
  • 工具和命令:
    • 思科设备: show mac address-table flapping
    • Wireshark
    • Python脚本
  • 解决措施: 调整网络拓扑、启用生成树协议(STP)、配置端口安全。

3. 环路检测

  • 目的: 识别网络中的环路。
  • 工具和命令:
    • 思科设备: show spanning-tree
    • Wireshark
    • 网络监控工具: SolarWinds NPM
  • 解决措施: 断开冗余连接、重新配置生成树协议、启用环路保护机制。

4. 查看CPU占用率

  • 目的: 监控设备CPU负载,识别性能瓶颈。
  • 工具和命令:
    • 思科设备: show processes cpu
    • 华为设备: display cpu-usage
    • 网络监控工具: SolarWinds NPM、PRTG
  • 解决措施: 优化设备配置、升级硬件或固件、分流和负载均衡。

本文完!

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐