2.10 探测
在韦氏词典中,探测(Snoopnig)一词的解释为“(尤其)以偷偷摸摸或多管闲事的姿态关注或窥探”。当我们在组播中使用这个词时,它就是这个意思,只有“多管闲事”不太相符。当设备监测到网络中两台设备之间发送的会话或消息时,我们可以获得大量信息,这些信息可以用于将网络行为调整得更高效。在最近几年中,Cisco 大大提升了交换机各个组成部分的智能。现在交换机可以以线速执行三层服务、捕获分析、重写信息等。二层交换机上添加的智能特性可以提供除了查看目的MAC地址之外的更多功能;现在二层交换机能够深入查看消息,并根据OSI(开放式系统互联)参考模型第2~7层的信息做出转发决策。
2.10.1 IGMP探测
IGMP探测特性的作用顾名思义。网络中的组成部分(通常是二层交换机)会监测从其他设备发来的数据帧,对于这个特性来说,它监测的就是IGMP消息。在监测过程中,交换机会侦听路由器和主机发来的IGMP消息。在发现了设备并且确定了设备所感兴趣的GDA后,交换机会在CAM表中创建一个条目,将GDA与接口关联在一起。
交换机使用下列机制从路由器那里学习信息:
- IGMP查询消息;
- PIMv1和/或PIMv2 Hello。
接下来以图2-10所示的网络解释IGMP探测特性。
例2-4中展示出路由器生成的IGMP查询报告。
例2-4 IGMP查询数据包
Ethernet Packet: 60 bytes
Dest Addr: 0100.5E00.0001, Source Addr: 0C85.2545.9541
Protocol: 0x0800
IP Version: 0x4, HdrLen: 0x6, TOS: 0xC0 (Prec=Internet Contrl)
Length: 32, ID: 0x1FC5, Flags-Offset: 0x0000
TTL: 1, Protocol: 2 (IGMP), Checksum: 0x57A8 (OK)
Source: 192.168.12.1, Dest: 224.0.0.1
Options: Length = 4
Router Alert Option: 94 0000
IGMP VersionType: 0x11, Max Resp: 0x64, Checksum: 0xEE9B (OK)
Version 2 Membership Query
Group Address: 0.0.0.0
当交换机确定某个接口连接的是路由器后,它会在IGMP探测表中添加一个条目,这个条目指定了路由器连接的接口,详见例2-5。
例2-5 IGMP探测表
Switch#show ip igmp snooping mrouter
Vlan ports
---- -----
12 Gi0/12(dynamic)
在本例中,交换机学习到接口G0/12上连接了一台路由器。这个接口被当作组播路由器端口。对于组播路由器端口,交换机认为这个端口上连接了一台启用组播路由的路由器,这台路由器可以代替直连主机处理IGMP和PIM消息。在启用了IGMP的VLAN或网段中,应该总是有一个与其相关联的组播路由器端口。工程师可以使用命令 debug ip igmp snooping router来进行查看,这条命令的输出信息更深入地展示了这个过程,详见例2-6。
例2-6 命令debug ip igmp snooping router的输出信息
Switch#debug ip igmp snooping router
router debugging is on
01:49:07: IGMPSN: router: Received non igmp pak on Vlan 12, port Gi0/12
01:49:07: IGMPSN: router: PIMV2 Hello packet received in 12
01:49:07: IGMPSN: router: Is not a router port on Vlan 12, port Gi0/12
01:49:07: IGMPSN: router: Created router port on Vlan 12, port Gi0/12
01:49:07: IGMPSN: router: Learning port: Gi0/12 as rport on Vlan 12
从例2-6所示的输出内容中可以看出,交换机从G0/12接口收到了PIMv2 Hello数据包,并将这个端口的状态转换为路由器端口。
当交换机直连的主机希望加入一个组播组时,它会发送IGMP成员报告。在例2-7中,连接在端口G0/2上的主机希望接收224.64.7.7的组播流。工程师可以使用命令debug ip igmp snooping group来监控其中的行为。
例2-7 命令debug ip igmp snooping group的输出信息
Switch#debug ip igmp snooping group
router debugging is on
01:58:47: IGMPSN: Received IGMPv2 Report for group 224.64.7.7 received on Vlan 12,
port Gi0/2
01:58:47: IGMPSN: group: Adding client ip 192.168.12.20, port_id Gi0/2, on vlan 12
从例2-7的输出内容中可以看出,连接在G0/2接口上的主机尝试连接组播组224.64.7.7。
工程师可以使用命令show ip igmp snooping groups来查看交换机中的条目,详见例2-8。
例2-8 命令show ip igmp snooping groups的输出信息
Switch#show ip igmp snooping groups
Vlan Group Type Version Port List
-----------------------------------------------------------------------
12 224.0.1.40 igmp v2 Gi0/12
12 224.64.7.7 igmp v2 Gi0/2, Gi0/12
从例2-8展示的输出内容中可以看出每个组中关联的VLAN、组播组、IGMP版本和端口。
例2-9展示了主机(MAC地址为0x000F.F7B1.67E0)上生成的成员报告数据包。注意主机有意接收的组播组目的MAC地址和目的IP地址。IGMP探测特性确认的组播路由器端口条目,能够确保交换机将IGMP成员报告转发给组播路由器进行处理(如果必要的话)。下一节将介绍如何维护组成员。
例2-9 IGMP成员报告数据包
Ethernet Packet: 60 bytes
Dest Addr: 0100.5E40.0707, Source Addr: 000F.F7B1.67E0
Protocol: 0x0800
IP Version: 0x4, HdrLen: 0x5, TOS: 0xC0 (Prec=Internet Contrl)
Length: 28, ID: 0x0000, Flags-Offset: 0x0000
TTL: 1, Protocol: 2 (IGMP), Checksum: 0x051D (OK)
Source: 192.168.12.20, Dest: 224.64.7.7
IGMP VersionType: 0x16, Max Resp: 0x00, Checksum: 0x02B8 (OK)
Version 2 Membership Report
Group Address: 224.64.7.7
例2-10的命令输出内容中展示出多个主机连接着多个组播组。
例2-10 命令show ip igmp snooping groups的输出信息
Switch#show ip igmp snooping groups
Vlan Group Type Version Port List
-----------------------------------------------------------------------
12 224.0.1.40 igmp v2 Gi0/15
12 224.64.7.7 igmp v2 Gi0/1, Gi0/2,
Gi0/4, Gi0/15
2.10.2 维护组成员
当主机添加组播组,或者从组播组删除时,交换机会管理这个交互过程。交换机不会通知路由器有关这个组的任何添加和删除信息,除非离开的是最后一台主机。如果只有一台主机接收组播流量并且它也离开了组播组,交换机会马上向上游路由器发送一个组离开消息。这个消息中有趣的部分在于交换机会欺骗最后一个客户端的IP地址。仔细查看例2-11中的命令输出信息。
例2-11 IGMP离开消息
Ethernet Packet: 60 bytes
Dest Addr: 0100.5E00.0002, Source Addr: 0013.19C6.A60F
Protocol: 0x0800
IP Version: 0x4, HdrLen: 0x6, TOS: 0xC0 (Prec=Internet Contrl)
Length: 32, ID: 0x0000, Flags-Offset: 0x0000
TTL: 1, Protocol: 2 (IGMP), Checksum: 0x7745 (OK)
Source: 192.168.12.40, Dest: 224.0.0.2
Options: Length = 4
Router Alert Option: 94 0000
IGMP VersionType: 0x17, Max Resp: 0x00, Checksum: 0x01B8 (OK)
Version 2 Leave Group
Group Address: 224.64.7.7
这种行为的好处在于当最后一台设备离开组播组时,路由器无须等待计时器超时。注意,例2-11中数据包的源MAC地址,与例2-12中命令show interface Gi0/12的输出信息中显示的MAC地址相同。这是这个网段中的组播路由器接口。
例2-12 命令show interface的输出内容
Switch#show interface Gi0/12
GigabitEthernet0/12 is up, line protocol is up
Hardware is Gigabit Ethernet, address is 0013.19C6.A60F (bia 0013.19C6.A60F)
MTU 1500 bytes, BW 10000 Kbit/sec, DLY 1000 usec,
2.10.3 配置IP IGMP探测
在较新的Catalyst或Nexus系列交换机中,配置相当简单。具体命令如下所示。
C2970(config)#ip igmp snooping
最棒的是这个特性默认是启用的,因此工程师无须明确输入命令。工程师可以使用命令show ip igmp snooping来确认IGMP探测的功能,并验证具体的操作参数,详见例2-13。
例2-13 确认IGMP探测特性的功能和参数
Switch#show ip igmp snooping
Global IGMP Snooping configuration:
-------------------------------------------
IGMP snooping : Enabled
IGMPv3 snooping (minimal) : Enabled
Report suppression : Enabled
TCN solicit query : Disabled
TCN flood query count : 2
Robustness variable : 2
Last member query count : 2
Last member query interval : 1000
命令的输出信息有删减,IGMP探测信息将会按VLAN显示。