目录
- 1 摘要
- 2 IGMP协议概述
- 2.1 IGMP 在 TCP/IP 协议栈中的位置
- 2.2 IGMP 与以太网的关系
- 2.3 为什么需要IGMP协议?
- 2.4 IGMP报文结构
- 2.4.1 IGMPv1 报文结构
- 2.4.2 IGMPv2 报文结构
- 2.4.3 IGMPv3 报文结构
- 3 IGMP通信原理
- 3.1 GMP 的通信流程
- 3.2 IGMP协议完整流程示例
- 4 总结
1 摘要
IGMP 是 网络层协议,位于 TCP/IP 协议栈的网络层,它依赖于以太网作为底层传输介质,IGMP 报文封装在 IP 数据包中,而 IP 数据包又封装在以太网帧中传输。IGMP 主要用于在 IPv4 网络 中管理组播组成员关系,确保组播数据仅发送给加入组播组的设备。它的主要功能包括:
- 组成员管理:主机通过 IGMP 加入或离开组播组。
- 组播数据转发:路由器通过 IGMP 了解哪些设备属于哪个组播组,从而优化组播数据的转发。
总之,对于从事汽车行业的工程师来说,掌握IGMP协议也是必不可少的。
2 IGMP协议概述
2.1 IGMP 在 TCP/IP 协议栈中的位置
IGMP(Internet Group Management Protocol) 属于 网络层(Network Layer) 的协议,具体位于 TCP/IP协议栈 的网络层。
OSI 模型层 | TCP/IP 协议栈层 | 协议示例 |
---|---|---|
应用层(Application) | 应用层 | HTTP、FTP、DNS |
表示层(Presentation) | 应用层 | SSL/TLS |
会话层(Session) | 应用层 | SIP、RPC |
传输层(Transport) | 传输层 | TCP、UDP |
网络层(Network) | 网络层 | IGMP、IP、ICMP、ARP |
数据链路层(Data Link) | 网络接口层 | Ethernet、PPP |
物理层(Physical) | 网络接口层 | 光纤、电缆 |
2.2 IGMP 与以太网的关系
虽然 IGMP 是网络层协议,但它依赖于 以太网(Ethernet) 作为其底层传输介质。IGMP 报文封装在 IP 数据包 中,而 IP 数据包又封装在 以太网帧 中。因此,IGMP 报文在以太网中的传输过程如下:
- IGMP 报文:网络层协议,封装在 IP 数据包中。
- IP 数据包:封装在以太网帧中。
- 以太网帧:通过物理介质(如网线、光纤)传输。
IGMP 报文封装示例:
层级 | 协议/数据单元 | 描述 |
---|---|---|
网络层 | IGMP 报文 | 包含组播组成员管理信息 |
网络层 | IP 数据包 | 封装 IGMP 报文,指定源和目的 IP 地址 |
数据链路层 | 以太网帧 | 封装 IP 数据包,指定源和目的 MAC 地址 |
物理层 | 比特流 | 通过物理介质传输 |
2.3 为什么需要IGMP协议?
IGMP(Internet Group Management Protocol)协议在组播通信中至关重要,主要原因如下:
1. 管理组播组成员
IGMP允许主机加入或离开组播组,确保只有感兴趣的设备接收组播数据,避免不必要的网络流量。
2. 优化网络资源
通过IGMP,网络设备(如交换机、路由器)能了解哪些设备属于哪个组播组,从而只将组播数据转发给相关设备,减少带宽浪费。
3. 动态组成员管理
IGMP支持动态加入和离开组播组,适应网络环境变化,如设备移动或新设备加入。
4. 支持多种组播应用
IGMP适用于多种组播应用场景,如视频会议、IPTV、在线游戏等,确保数据仅发送给需要的设备。
5. 减少网络拥塞
通过限制组播数据仅发送给加入组的设备,IGMP有效减少网络拥塞,提升整体性能。
6. 提高网络效率
IGMP帮助网络设备维护组播组信息,确保数据高效传输,避免不必要的复制和转发。
7. 支持大规模网络
在大规模网络中,IGMP帮助管理大量组播组和成员,确保数据准确传输到每个成员。
8. 与路由协议协同工作
IGMP与PIM等组播路由协议协同,确保组播数据在网络中正确路由和转发。
IGMP协议通过管理组播组成员、优化网络资源、支持动态成员管理等功能,确保组播通信的高效性和可靠性,是组播通信不可或缺的组成部分。
2.4 IGMP报文结构
IGMP 的报文类型主要包括以下几种:
报文类型 | 描述 |
---|---|
成员查询(Membership Query) | 路由器发送,询问主机是否属于某个组播组。 |
成员报告(Membership Report) | 主机发送,告知路由器其组成员身份。 |
离开组(Leave Group) | 主机发送,通知路由器其离开组播组的意图(仅 IGMPv2 和 IGMPv3 支持)。 |
以下是 IGMP报文结构 的表格示例,分别展示了 IGMPv1、IGMPv2 和 IGMPv3 的报文字段及其含义。
2.4.1 IGMPv1 报文结构
字段名 | 长度(字节) | 描述 |
---|---|---|
类型(Type) | 1 | 0x11 :成员查询(Membership Query)0x12 :成员报告(Membership Report) |
未使用(Unused) | 1 | 全0,保留字段 |
校验和(Checksum) | 2 | 用于检测报文传输中的错误 |
组播组地址(Group Address) | 4 | 组播组的IP地址(查询报文中为 0.0.0.0 ) |
2.4.2 IGMPv2 报文结构
字段名 | 长度(字节) | 描述 |
---|---|---|
类型(Type) | 1 | 0x11 :成员查询(Membership Query)0x16 :成员报告(Membership Report)0x17 :离开组(Leave Group) |
最大响应时间(Max Response Time) | 1 | 主机响应查询报文的最大时间(单位:0.1秒) |
校验和(Checksum) | 2 | 用于检测报文传输中的错误 |
组播组地址(Group Address) | 4 | 组播组的IP地址(查询报文中为 0.0.0.0 ) |
2.4.3 IGMPv3 报文结构
IGMPv3 支持源特定组播(SSM),报文结构更复杂,分为 查询报文 和 报告报文。
- IGMPv3 查询报文
字段名 | 长度(字节) | 描述 |
---|---|---|
类型(Type) | 1 | 0x11 :成员查询(Membership Query) |
最大响应时间(Max Response Time) | 1 | 主机响应查询报文的最大时间(单位:0.1秒) |
校验和(Checksum) | 2 | 用于检测报文传输中的错误 |
组播组地址(Group Address) | 4 | 组播组的IP地址(一般查询为 0.0.0.0 ,特定组查询为组播组地址) |
S标志(S Flag) | 1位 | 指示是否抑制路由器处理 |
QRV(Querier’s Robustness Variable) | 3位 | 查询者的健壮性变量 |
QQIC(Querier’s Query Interval Code) | 1字节 | 查询间隔代码 |
源地址数量(Number of Sources) | 2字节 | 指定源地址的数量(仅特定组查询有效) |
源地址(Source Addresses) | 4字节 × N | 源地址列表(仅特定组查询有效) |
- IGMPv3 报告报文
字段名 | 长度(字节) | 描述 |
---|---|---|
类型(Type) | 1 | 0x22 :成员报告(Membership Report) |
保留(Reserved) | 1 | 全0,保留字段 |
校验和(Checksum) | 2 | 用于检测报文传输中的错误 |
保留(Reserved) | 2 | 全0,保留字段 |
组记录数量(Number of Group Records) | 2字节 | 组记录的数量 |
组记录(Group Records) | 可变长度 | 每个组记录包含组播组地址、源地址列表和记录类型等信息 |
- 组记录(Group Record)结构
字段名 | 长度(字节) | 描述 |
---|---|---|
记录类型(Record Type) | 1 | 组记录类型(如 MODE_IS_INCLUDE 、MODE_IS_EXCLUDE 等) |
辅助数据长度(Aux Data Len) | 1 | 辅助数据的长度(通常为0) |
源地址数量(Number of Sources) | 2字节 | 源地址的数量 |
组播组地址(Multicast Address) | 4字节 | 组播组的IP地址 |
源地址(Source Addresses) | 4字节 × N | 源地址列表 |
辅助数据(Auxiliary Data) | 可变长度 | 辅助数据(通常为空) |
以上表格展示了 IGMPv1、IGMPv2 和 IGMPv3 的报文结构。IGMPv3 的报文结构更为复杂,支持源特定组播(SSM),适用于更灵活的组播场景。
3 IGMP通信原理
IGMP(Internet Group Management Protocol) 是一种用于管理组播组成员的协议,主要应用于 IPv4 网络 中。它的工作原理是通过路由器/交换机与主机之间的交互,动态维护组播组成员关系,确保组播数据仅发送给加入组播组的设备。以下是 IGMP 协议的工作原理详解:
3.1 GMP 的通信流程
IGMP 协议通过路由器/交换机与主机之间的交互,动态维护组播组成员关系,确保组播数据仅发送给需要的设备。它的工作原理包括成员查询、成员报告和离开组报文,支持动态组成员管理和高效数据转发。IGMP 的不同版本(v1、v2、v3)在功能和报文结构上有所改进,适用于不同的组播场景。IGMP 的工作流程主要包括以下步骤:
(1)路由器发送成员查询(Membership Query)
- 路由器定期向局域网发送 IGMP 成员查询报文,询问网络中的主机是否属于某个组播组。
- 查询报文分为两种:
- 一般查询(General Query):询问所有组播组。
- 特定组查询(Group-Specific Query):询问特定组播组。
(2)主机响应成员报告(Membership Report)
- 主机收到查询报文后,如果属于某个组播组,会发送 IGMP 成员报告报文,告知路由器其组成员身份。
- 主机也可以在加入新组播组时主动发送成员报告报文,无需等待查询。
(3)主机离开组播组(Leave Group)
- 当主机不再需要接收某个组播组的数据时,会发送 IGMP 离开组报文(IGMPv2 和 IGMPv3 支持),通知路由器其离开意图。
- 路由器收到离开组报文后,会发送特定组查询,确认是否还有其他主机属于该组播组。
(4)路由器维护组播组信息
- 路由器根据主机的成员报告和离开组报文,动态维护组播组成员信息。
- 如果某个组播组没有成员,路由器会停止向该组播组转发数据。
3.2 IGMP协议完整流程示例
以下是一个车载以太网通过 IGMP协议 实现组播数据交互的完整流程示例,包含详细的报文数据。
假设场景如下:
- 网络设备:
- 车载网关(路由器):IP地址
192.168.1.1
,MAC地址00:1A:2B:3C:4D:5E
- 车载设备 Host A:IP地址
192.168.1.2
,MAC地址00:1B:2C:3D:4E:5F
- 车载设备 Host B:IP地址
192.168.1.3
,MAC地址00:1C:2D:3E:4F:5A
- 车载网关(路由器):IP地址
- 组播组地址:
239.255.10.1
- IGMP版本:IGMPv2
- 组播数据:车载传感器数据(例如车速、温度等)
1. 车载网关发送IGMP一般查询(General Query)
车载网关定期发送IGMP一般查询报文,询问网络中的设备是否属于任何组播组。
-
报文数据:
- 目的MAC地址:
01:00:5E:00:00:01
(组播MAC地址,对应IP地址224.0.0.1
) - 目的IP地址:
224.0.0.1
(所有主机的组播地址) - 源IP地址:
192.168.1.1
(车载网关的IP地址) - IGMP字段:
- 类型:
0x11
(成员查询) - 最大响应时间:
10
(单位:0.1秒,即1秒) - 校验和:
0xABCD
(示例值) - 组播组地址:
0.0.0.0
(一般查询,组播组地址为0)
- 类型:
- 目的MAC地址:
-
报文示例:
Ethernet Header: Destination MAC: 01:00:5E:00:00:01 Source MAC: 00:1A:2B:3C:4D:5E IP Header: Destination IP: 224.0.0.1 Source IP: 192.168.1.1 IGMP Payload: Type: 0x11 Max Response Time: 10 Checksum: 0xABCD Group Address: 0.0.0.0
2. Host A响应IGMP成员报告(Membership Report)
Host A属于组播组 239.255.10.1
,发送IGMP成员报告报文,告知车载网关其组成员身份。
-
报文数据:
- 目的MAC地址:
01:00:5E:7F:0A:01
(组播MAC地址,对应IP地址239.255.10.1
) - 目的IP地址:
239.255.10.1
(组播组地址) - 源IP地址:
192.168.1.2
(Host A的IP地址) - IGMP字段:
- 类型:
0x16
(IGMPv2成员报告) - 最大响应时间:
0
(成员报告中该字段为0) - 校验和:
0x1234
(示例值) - 组播组地址:
239.255.10.1
- 类型:
- 目的MAC地址:
-
报文示例:
Ethernet Header: Destination MAC: 01:00:5E:7F:0A:01 Source MAC: 00:1B:2C:3D:4E:5F IP Header: Destination IP: 239.255.10.1 Source IP: 192.168.1.2 IGMP Payload: Type: 0x16 Max Response Time: 0 Checksum: 0x1234 Group Address: 239.255.10.1
3. Host B主动加入组播组
Host B决定加入组播组 239.255.10.1
,主动发送IGMP成员报告报文。
-
报文数据:
- 目的MAC地址:
01:00:5E:7F:0A:01
(组播MAC地址,对应IP地址239.255.10.1
) - 目的IP地址:
239.255.10.1
(组播组地址) - 源IP地址:
192.168.1.3
(Host B的IP地址) - IGMP字段:
- 类型:
0x16
(IGMPv2成员报告) - 最大响应时间:
0
- 校验和:
0x5678
(示例值) - 组播组地址:
239.255.10.1
- 类型:
- 目的MAC地址:
-
报文示例:
Ethernet Header: Destination MAC: 01:00:5E:7F:0A:01 Source MAC: 00:1C:2D:3E:4F:5A IP Header: Destination IP: 239.255.10.1 Source IP: 192.168.1.3 IGMP Payload: Type: 0x16 Max Response Time: 0 Checksum: 0x5678 Group Address: 239.255.10.1
4. 车载网关转发组播数据
车载网关开始向组播组 239.255.10.1
转发车载传感器数据(例如车速、温度等)。
-
报文数据:
- 目的MAC地址:
01:00:5E:7F:0A:01
(组播MAC地址,对应IP地址239.255.10.1
) - 目的IP地址:
239.255.10.1
(组播组地址) - 源IP地址:
192.168.1.1
(车载网关的IP地址) - 数据内容:
车速:60 km/h,温度:25°C
- 目的MAC地址:
-
报文示例:
Ethernet Header: Destination MAC: 01:00:5E:7F:0A:01 Source MAC: 00:1A:2B:3C:4D:5E IP Header: Destination IP: 239.255.10.1 Source IP: 192.168.1.1 Data Payload: 车速:60 km/h,温度:25°C
5. Host A和Host B接收组播数据
Host A和Host B作为组播组 239.255.10.1
的成员,接收并处理组播数据。
-
Host A接收的报文:
Ethernet Header: Destination MAC: 01:00:5E:7F:0A:01 Source MAC: 00:1A:2B:3C:4D:5E IP Header: Destination IP: 239.255.10.1 Source IP: 192.168.1.1 Data Payload: 车速:60 km/h,温度:25°C
-
Host B接收的报文:
Ethernet Header: Destination MAC: 01:00:5E:7F:0A:01 Source MAC: 00:1A:2B:3C:4D:5E IP Header: Destination IP: 239.255.10.1 Source IP: 192.168.1.1 Data Payload: 车速:60 km/h,温度:25°C
6. Host A离开组播组
Host A不再需要接收组播组 239.255.10.1
的数据,发送IGMP离开组报文。
-
报文数据:
- 目的MAC地址:
01:00:5E:00:00:02
(组播MAC地址,对应IP地址224.0.0.2
) - 目的IP地址:
224.0.0.2
(所有路由器的组播地址) - 源IP地址:
192.168.1.2
(Host A的IP地址) - IGMP字段:
- 类型:
0x17
(IGMPv2离开组) - 最大响应时间:
0
- 校验和:
0x9ABC
(示例值) - 组播组地址:
239.255.10.1
- 类型:
- 目的MAC地址:
-
报文示例:
Ethernet Header: Destination MAC: 01:00:5E:00:00:02 Source MAC: 00:1B:2C:3D:4E:5F IP Header: Destination IP: 224.0.0.2 Source IP: 192.168.1.2 IGMP Payload: Type: 0x17 Max Response Time: 0 Checksum: 0x9ABC Group Address: 239.255.10.1
7. 车载网关发送特定组查询(Group-Specific Query)
车载网关收到Host A的离开组报文后,发送特定组查询报文,确认是否还有其他设备属于组播组 239.255.10.1
。
-
报文数据:
- 目的MAC地址:
01:00:5E:7F:0A:01
(组播MAC地址,对应IP地址239.255.10.1
) - 目的IP地址:
239.255.10.1
(组播组地址) - 源IP地址:
192.168.1.1
(车载网关的IP地址) - IGMP字段:
- 类型:
0x11
(成员查询) - 最大响应时间:
10
(单位:0.1秒,即1秒) - 校验和:
0xDEF0
(示例值) - 组播组地址:
239.255.10.1
- 类型:
- 目的MAC地址:
-
报文示例:
Ethernet Header: Destination MAC: 01:00:5E:7F:0A:01 Source MAC: 00:1A:2B:3C:4D:5E IP Header: Destination IP: 239.255.10.1 Source IP: 192.168.1.1 IGMP Payload: Type: 0x11 Max Response Time: 10 Checksum: 0xDEF0 Group Address: 239.255.10.1
8. Host B响应特定组查询
Host B仍然属于组播组 239.255.10.1
,发送IGMP成员报告报文。
-
报文数据:
- 目的MAC地址:
01:00:5E:7F:0A:01
(组播MAC地址,对应IP地址239.255.10.1
) - 目的IP地址:
239.255.10.1
(组播组地址) - 源IP地址:
192.168.1.3
(Host B的IP地址) - IGMP字段:
- 类型:
0x16
(IGMPv2成员报告) - 最大响应时间:
0
- 校验和:
0x5678
(示例值) - 组播组地址:
239.255.10.1
- 类型:
- 目的MAC地址:
-
报文示例:
Ethernet Header: Destination MAC: 01:00:5E:7F:0A:01 Source MAC: 00:1C:2D:3E:4F:5A IP Header: Destination IP: 239.255.10.1 Source IP: 192.168.1.3 IGMP Payload: Type: 0x16 Max Response Time: 0 Checksum: 0x5678 Group Address: 239.255.10.1
以上流程展示了车载以太网通过IGMP协议实现组播数据交互的完整过程,包括一般查询、成员报告、组播数据转发、离开组和特定组查询的报文数据。通过IGMP协议,车载网络能够高效管理组播组成员,确保组播数据仅发送给需要的设备。
4 总结
以上是对IGMP协议在以太网协议栈的位置、IGMP协议的作用、IGMP报文结构、通信原理以及示例进行了详细介绍。希望能对大家学习车载以太网有所帮助!