广播和多播
IP地址分三种:单播地址、广播地址和多播(组播)地址。广播地址和多播地址仅用于UDP,它们对于同时将报文传送给多个接受者的应用来说十分重要。
广播是将数据发送到网络中的所有主机(通常是本地相连的网络),而多播是将数据报发送到网络的一个主机组(可跨网络)。
广播
IP广播地址分为四种:
- 受限的广播:255.255.255.255。在任何情况下,路由器都不会转发目的地址为该地址的数据报,这样的数据报仅存在本地网络中。该地址用于主机配置过程中IP数据包的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。
- 指向网络的广播:指向网络的广播地址是主机号为全1的地址。(以某个A类地址网络号为32的举例)其广播地址为32.255.255.255。一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。
- 指向子网的广播:指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码。例如,如果路由器收到发往128.1.242.255的数据报(以某B类地址举例),当B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但如果该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址。
- 指向所有子网的广播:指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向所有子网的广播地址的子网号及主机号为全1。例如,如果目的子网掩码为255.255.255.0,那么IP地址128.1.255.255是一个指向所有子网的广播地址。然而,如果网络没有划分子网,这就是一个指向网络的广播。
总的来说,广播分为受限广播(网络和主机号全为1)和直接广播(特定的网络号+全1的主机号)。受限广播不会被路由,但会送到相同物理网段上的所有主机。直接广播会被路由,发送到专门网络上所有主机。
多播
D类IP地址属于多播组地址,其剩余28位均用作多播组号而不再表示其他。能够接收发往某特定组播地址的主机集合称为主机组,主机组可跨越多个网络,其中成员可随时加入或离开,对主机组中主机数量没有限制,同时不属于某一主机组的主机可以向该组发送信息。
单个物理网络的多播是简单的,多播进程将目的IP地址指明为组播地址,设备驱动程序将它转化为对应的以太网地址,然后发送。接收进程必须通知它们的IP层,它们想接收某组播地址的数据报,并且设备驱动程序能够接收这些多播帧。主机在接收到多播数据报时,向属于该多播组的每个进程发送一个复制,因为一个主机上可能存在多个进程属于同一多播组。当将多播扩展到单个物理网络以外需要通过路由器转发时,复杂性就增加了。需要一个协议让多播路由器知道网络中属于某确定多播组的任何一主机。这个协议就是IGMP协议。
IANA将MAC地址01:00:5e:00:00:00到01:00:5e:7f:ff:ff划分为多播MAC地址,前25位是固定不变的,低23位可变。为了将IP多播地址映射到MAC多播地址,IP地址的低23位直接复制到多播MAC地址低23位。D类IP地址除了前4位固定为1110,和低23位以外,中间5位在映射过程丢弃。这可能会造成一个MAC多播地址可能会对应32个IP多播地址。而一个IP多播地址确定一个唯一的主机组,所以某主机也可能会收到不属于自己组的MAC层多播包,会在IP层判断IP地址丢弃。
IP多播地址的一部分是知名多播地址,类似知名端口。略。
主机过滤帧的过程
协议栈各层对收到帧的过滤过程如下图所示:
- 网卡查看由信道传送过来的帧,确定是否接收。通常网卡仅接收目的地址为其网卡物理地址或者是广播地址的帧(根据网卡工作模式)。然后将帧交付给设备驱动程序处理(校验和错则丢弃)。
- 设备驱动程序随后将数据帧传递给下一层,帧类型中必须指定要使用的协议(IP、ARP等),当指定为IP时,就传给IP层。
- IP层根据首部的源地址和目的地址进行更多的过滤检测,如果正常就传递给下一层(UDP、TCP)。
- UDP收到IP传送来的数据报,根据目的端口(有时还根据源端口)进行数据报过滤。如果当前没有进程监听该端口则丢弃该数据报并产生一个ICMP不可达报文(TCP相似)。如果UDP数据报存在校验和错也要丢弃。
使用广播会给网内其它对广播数据不感兴趣的主机添加负荷,因为其不得不处理到UDP层才丢弃。多播则会减轻这些主机的负担,网卡可以获悉该主机属于哪个多播组,然后仅接收主机所在多播组的多播帧。
参考
[1] TCP/IP详解卷1