Linux网络协议栈-组播(Multicast)基础

Linux网络协议栈-组播(Multicast)基础

前言:你是否曾有以下苦恼:在编程时虽然会调用网络方面的 API,却不清楚具体原理;会用基本的 ifconfig 等命令,却不太理解其输出;对于长长的 MAC 地址、IP 地址和子网掩码,不了解它们的分配机理;看了网上对路由器、交换机、TCP、UDP、DHCP、DNS 等知识点的介绍,却依旧迷茫。不必担心,你将会循序渐进地牢牢掌握网络方面的知识。围绕 TCP/IP 协议的网络知识非常重要,我们今天使用电脑手机上网聊天、游戏、购物、追剧等,其实都在不自觉地使用 TCP/IP 协议。想要成为编程方面的专家,除了数据结构、算法、设计模式等知识,网络方面的知识也不可或缺。

一、组播(Multicast)传输

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

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

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

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

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

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

文章福利】小编推荐自己的Linux内核技术交流群:【865977150】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!前100名进群领取,额外赠送一份价值699的内核资料包(含视频教程、电子书、实战项目及代码)

二、组播的报文

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

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

三、IGMP协议

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

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

版权声明:本文为CSDN博主「zqixiao_09」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

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

四、组播的过程

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

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

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

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

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

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


编辑于 2021-10-16 20:36