Linux 网络协议栈开发基础篇(十)—— 组播(Multicast)基础

一、组播(Multicast)传输

       在发送者和每一接收者之间实现点对多点网络连接

       如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包。它提高了数据传送效率。减少了骨干网络出现拥塞的可能性。

单播(unicast): 是指封包在计算机网络的传输中,目的地址为单一目标的一种传输方式。它是现今网络应用最为广泛,通常所使用的网络协议或服务大多采用单播传输,例如一切基于TCP的协议。

组播(multicast): 也叫多播, 多点广播或群播。 指把信息同时传递给一组目的地址。它使用策略是最高效的,因为消息在每条网络链路上只需传递一次,而且只有在链路分叉的时候,消息才会被复制

广播(broadcast):是指封包在计算机网络中传输时,目的地址为网络中所有设备的一种传输方式。实际上,这里所说的“所有设备”也是限定在一个范围之中,称为“广播域”。

单播、组播、广播的差别可以看下图:

Linux 网络协议栈开发基础篇(十)—— 组播(Multicast)基础_第1张图片


二、组播的报文

       组播使用了D类IP地址,IP地址的分类如下所示,可见D类地址范围在224.0.0.0到239.255.255.255。

Linux 网络协议栈开发基础篇(十)—— 组播(Multicast)基础_第2张图片

注意,多播地址224.0.0.1被称为所有主机组地址,即所有具有组播能力的主机均会加入该组。


三、IGMP协议

       IGMP,就是Internet Group Management Protocol的意思。该协议用来在ip主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系,但不包括组播路由器之间的组成员关系信息的传播与维护,这部分工作由各组播路由协议完成。所有参与组播的主机必须实现IGMP。

      IGMP作为TCP/IP第三层的协议,被封装在IP数据包中进行传输。IGMP的报文格式是固定的,共8个字节,如下图所示

Linux 网络协议栈开发基础篇(十)—— 组播(Multicast)基础_第3张图片

其中的IGMP类型分两种:1表示该报文是组播路由器发出的查询报文,2表示是IP主机发出的报告。后面的4个字节则是组播地址。


四、组播的过程

一个典型的过程是这样的:

1. IP主机的一个进程可随时加入和离开主机接口的一个组播组,该主机需要维护接口的一张表,该表包含了有那些组以及这些组中的进程数量。此时主机需要发送一个IGMP报告

2. 路由器会定时发送IGMP查询报文,此时报文中的组地址为0

3. IP主机回应路由器的IGMP查询报文,对于一个主机,如果它加入了多个组,则需要为每个组返回一个IGMP报告。

4. 路由器根据这些信息,会对每个接口维护一张表,表中说明了该接口的组。

这个过程中的报文,可见下图


Linux 网络协议栈开发基础篇(十)—— 组播(Multicast)基础_第4张图片


你可能感兴趣的:(Linux网络协议栈开发)