广播作为一种给所有主机发数据包的方式,在计算机网络中是必需的,因为很多情况下都需要这样的通信方式,因而广播也很自然地成为了TCP/IP协议栈的一部分。广播是通过将目的端置为特殊的IP地址来实现的,比如以255.255.255.255,会被本地网络中所有主机处理。
TCP/IP协议栈对数据包的过滤处理过程如下图:
每一层都对数据包进行判定,看是接受数据包还是丢弃,如果是目的端为广播地址的数据包,而本机又没有对应的应用程序来处理这样的数据包,则数据包会经过网络接口层->IP层->传输层,最后在传输层被丢弃,这样的处理过程给不想接收这样的数据包的主机增加了额外的负担,为了解决这样的问题,就引入了多播,多播只给加入了多播组的主机发送数据包。
IP地址分类:
广播地址分类:
(1)受限的广播地址,即255.255.255.255,目的地为255.255.255.255的数据包只能出现在本地网络中,路由器在任何情况下都不对这类数据包进行转发。
(2)指向网络的广播地址,即主机号为全1的IP地址;
(3)指向子网的广播地址,除了网络号和子网号,其余位为全1的IP地址;
(4)指向所有子网的广播地址,子网号与主机号为全1。
广播IP地址一般对应的广播物理地址为ff:ff:ff:ff:ff:ff。
多播地址:
D类地址被用于多播,多播地址往往被IANA确定为知名地址,比如224.0.0.1为该子网内所有系统组,224.0.0.2为该子网内所有路由器组等等,这些组是永久性的,但是组内成员是可以随时动态变化的。
多播地址到以太网物理地址的映射关系如下:
从上图可以看出,以太网多播地址范围为01:00:5E:00:00:00到01:00:5E:7F:FF:FF。
IGMP:
多播如果只是用于本地局域网内部,那么上面所述的技术已经可以很好地解决问题了。但是当多播应用于多个网络,多播数据包需要经过路由器转发时,我们不可能给世界上所有的网络都发送多播数据包,然后让主机自己去决定丢弃还是接收,最好的方式应该是如果某个网络不存在属于特定多播组的进程,则发往该多播组的数据包就不应该在该网络内传输,为了实现这样的目标,IGMP就自然而然地出现了,IGMP即Internet组管理协议。
IGMP报文格式如下:
(1)Version为版本号;Type为类型,即说明是IGMP查询还是响应;Unused字段尚未使用;Checksum为校验和;Group Address为组播IP地址。
(2)可以看出,IGMP报文内容格式是固定的8字节。
IGMP作用方式:
(1)当一个进程加入一个多播组时,该主机必须主动发送一个IGMP响应报文;
(2)路由器不定期地发送IGMP查询报文;
(3)主机必须根据自己的具体情况,对IGMP报文做出响应。