学到组播这一块,发现课本上有很多没有讲的细节,对我这种外行来说,只能去查查其他的资料,把这一块补充完善一下~~
1. 两个特定的组播地址:224.0.0.1 表示本网段上的所有主机
224.0.0.2 表示本网段上所有的路由器
2. 主机通过组地址和接口来识别一个组播组
主机保留了一个表,此表中包含以组播地址和程序的映射,程序如何实现组播的呢?
OSI七层参考模型
应用层 某个程序需要加入一个组播组 通过某种渠道获得了组播地址
表示层
会话层
传输层 (组播基于UDP 所以组播继承了UDP的一些缺点)
网络层 主机存在了此组播组的组播IP(此主机还会存在单播IP和环回地址等
数据链路层 根据组播IP生成一个组播MAC(当然也会存在单播MAC等其他MAC)
物理层
3 IGMP运行于IP层 IGMP被当作IP层的一部分
4 在IGMP报文的IP部首中TTL被设置为1,目的是保证此IGMP报文不被其他路由器转发到其他网段
5. 组播MAC永远都不会出现在组播帧的源MAC的位置
组播帧会构建成这样的:
目的MAC 源MAC 承载数据
生成的组播MAC 网卡接口的单播MAC 略
这就导致了二层交换机学习不到组播MAC的端口映射表项,那么组播就变成广播了,背离了组播的初衷,于是出现了IGMP Snooping技术
6. IGMP Snooping技术又出现了一个问题。
在未引入IGMP Snooping技术之前的网络环境是类似于集线器环境,但是引入IGMP Snooping之后,交换机工作在二层上。这是有区别的。
在集线器这种一层设备环境下,无论是什么设备发出的报文,所有的主机或者路由器都会收到,那么为了防止Membership Report报文在集线器上泛滥,就有了IGMP成员报告抑制机制加以约束,但是运行了IGMP Snooping后的二层交换机就出现问题了。因为,交换机的转发是依靠内部的MAC和端口的映射表,如果membership report报文被泛洪,那么其他端口上的组成员主机就会依据IGMP成员报告抑制机制而沉默,不再发送其自己的membership report报文,导致了交换机无法得知此端口上还有相应的组成员,接下来就会造成报文无法投递。所以,对于membership report报文,交换机仅仅会在路由器端口转发,而不会在其他动态成员端口上转发。