【9】TCP/IP协议族详解-多播和广播

时间:2024-04-07 18:06:54

声明:本博客参考自《TCP/IP详解卷一:协议》

1.概述

IP地址一共有三种:单播、广播和多播(组播)。其中单播可用于TCP和UDP,而广播和多播仅应用与UDP,它们对需要报文同时传往多个接收者的应用来说十分重要。广播是一个主机向这个网络上的其他主机发送数据帧。多播介于单播和广播之间:数据帧仅传送个属于多播组的多个主机。

广播和多播与主机对由信道传输过来的过滤过程有关,下图是TCP/IP协议栈各层对收到帧的过滤过程:

【9】TCP/IP协议族详解-多播和广播

①接口卡(网卡):网卡查看由信道传送过来的帧,根据这些帧的目的地址是否为网卡地址或广播地址来决定是否接收。网卡一般都是不接收多播数据的。但经过配置之后,多数网卡都是可以接收多播数据的。在以太网中,当地址中最高字节的最低位设置位1时表示该地址是一个多播地址。

②设备驱动程序:网卡对帧检验之后,如果没有错误,则将这个帧发送给设备驱动程序。设备驱动程序进行另外的过滤,首先帧类型中必须指明要使用的协议(IP、ARP等),其次如果是多播帧检测该主机是否属于多播地址说明的多播组。

③IP层。如果帧类型是IP。设备驱动程序会将数据发送到IP层。IP层进行源地址和目的地址的过滤。

④UDP层。IP层检测通过,如果数据是UDP数据报,IP层会把数据发送给UDP层,UDP层根据源端口和目的端口进行过滤,同时还会对报文进行检验和的检查。检查都通过了之后UDP会将数据发送给应用程序。广播数据会在这层被丢弃,如果没有对应的目的端口。

从上面的论述中,我们可以看出广播会比多播更多得消耗网络的资源,多播在设备驱动程序层就可以进行鉴别,而广播需要到UDP层才可以鉴别,这大大消耗了主机和网络的资源。

2. 广播

2.1 受限的广播

受限广播的地址为255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址。此时主机不知道它的网络掩码和IP地址。

在任何情况下,路由器都不转发目的地址是首先的广播地址的数据报,这样的数据报仅在本地网络出现。注意Windows系统ping这样的地址是ping不通的,它会将该地址按普通IP地址解析,会出现找不到主机的错误。

2.2 指向网络的广播

指向网络的广播地址是主机号为全 1的地址。A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。

一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。

2.3 指向子网的广播

指向子网的广播地址为主机号为全1且具有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网掩码。

如果B类网络128.1的子网掩码是255.255.255.0时,128.1.2.255就是指向子网的广播地址。

2.4 指向所有子网的广播

指向所有子网的广播地址的子网号及主机号全为1。同时它也要了解网络的子网掩码,以便区分指向网络的广播地址。

如果B类网络的子网掩码是255.255.255.0,那么IP地址128.1.255.255是一个指向所有子网的广播地址。然而,如果没有划分子网,这就是一个指向网络的地址。

3 多播

IP多播提供两类服务

①向多个目的地址发送数据。对于像交互式会议系统这种一个发送者多个接收的应用,需要IP多播来帮助实现。

②客户对服务器的请求。例如:无盘工作站需要确定启动引导服务。

3.1 多播组地址

【9】TCP/IP协议族详解-多播和广播

上图显示了多播地址的格式,多播的28bit都表示多播组号,不做其它作用。多播组的地址范围为224.0.0.0到239.255.255.255。能够接收发往特定多播组地址数据的主机集合称为主机组。一个主机组跨越多个网络。一些多播地址被设置为知名地址,例如:224.0.0.1代表“该子网内的所有系统组”,一般用作网络时间协议NTP,224.0.0.9代表“该子网内的所有路由器组”,一般用做RIP-2(一种动态路由协议)。

3.2 多播组地址到以太网地址的转换

【9】TCP/IP协议族详解-多播和广播

IANA(The Internet Assigned Numbers Authority)互联网数字分配机构将以太网地址的01:00:5e:00:00:00到01:00:5e:7f:ff:ff分配为以太网多播组地址。多播组IP通过将低23bit映射到以太网地址中的低位23bit中,实现多播组地址的以太网地址映射,注意IP多播组号的最高5bit被忽略,因此每个以太网多播地址对应的多播组地址不唯一。

单个物理网络的多播是简单的。多播进程将目的IP地址指明为多播地址,设备驱动程序将它转换为相应的以太网地址,然后把数据发送出去。当把多播扩展到多个网络,需要路由器转发时,情况就变得复杂多了。需要一个协议让多播路由器了解确定网络中属于确定多播组的任何一个主机。这个协议就是IGMP(互联网组管理协议)。

4. IGMP

IGMP报文让一个物理网络上的所有系统知道主机当前所在的多播组。IGMP也被当做是IP层的一部分,通过IP数据报传输。

【9】TCP/IP协议族详解-多播和广播

IGMP报文通过IP首部中协议字段值为2来指明。

4.1 IGMP报文

【9】TCP/IP协议族详解-多播和广播

IGMP报文的格式如上图所示,版本号为1的IGMP,类型1表示多播路由器发出的查询报文,类型2表示主机发出的报告报文。组地址为D类IP地址,在查询报文中设置为0。

4.2 IGMP协议

(1)加入多播组:多播的基础就是进程的概念,主机上的一个进程在一个主机给定接口上加入一个多播组。多播组中的成员是与接口相关的,一个进程可以在多个接口上加入同一个多播组。主机通过地址和接口来识别多播组。主机必须保留一个表,此表中包含至少含有一个进程的多播组以及多播组中的进程数量。

(2)IGMP报告和查询

①当第一个进程加入一个组时,主机就发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上,如果本机中有多个进程都加入这个组,也只发送一个报告。

②所有进程离开组时,都不发送IGMP报告。主机知道在确定的组中不再有组成员时,在随后收到的IGMP查询中,就不再回复。

③多播路由器定时发送IGMP查询来了解是否还有任何主机包含属于多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发回IGMP报告。

④主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。

使用这些查询和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组。当路由器收到要转发的多播数据报时,它只将该数据报转发到(使用相应的多播链路层地址)还拥有属于那个组主机的接口上。下图显示了IGMP报文的运作方式:

【9】TCP/IP协议族详解-多播和广播

路由器发送查询,主机发送报告。

TTL为1表示该多播数据报被限制在同一子网中,注意多播数据报不会产生ICMP差错。

224.0.0.1是所有主机地址,它涉及一个物理网络中的所有具备多播能力的主机和路由器。当接口初始化后,所有具备多播能力接口上的主机均自动加入这个多播组。这个组的成员无需发送IGMP报告。

5. 总结

广播是将数据报发送到网络中的所有主机(通常是本地相连的网络),而多播是将数据报发送到网络的一个主机组。这两个概念的基本点在于当收到送往上一个协议栈的数据帧时采用不同类型的过滤。每个协议层均可以因为不同的理由丢弃数据报。D类IP地址被称为多播组地址,通过将其低位 23 bit映射到相应以太网地址中便可实现多播组地址到以太网地址的转换。由于地址映射是不唯一的,因此需要其他的协议实现额外的数据报过滤。

多播在多个网络中传输比较复杂,这就需要使用互联网组管理协议(IGMP)来控制传输。