我们知道在IP层广播分为本地广播和定向广播,本地广播IP地址是32个1组成,定向广播IP地址由目的网络的网段号加主机号全1组成,而实际在链路层(即MAC层)广播的目的MAC地址为全1,本地广播数据包只会广播到本网络中,不会穿越路由器;定向广播在到达目的网络之前由路由器正常路由,就想对待普通数据包一样,当到达了目的网络后,路由器才会识别出这是一个广播,而后广播给目的网络中每一个主机;任何主机收到目的MAC地址全1的数据包,马上就能识别出这是一个广播包(不需要剥包分析),而把这个包收下,那么IP层的广播和MAC层的广播到底之间的有什么联系和区别呢?需要从TCP/IP是一个分层的协议综合去考虑,以IP定向广播为例:
为了便于大家理解有关IP定向广播的知识,我画了一个拓扑图:
router B的f0/0收到一个目的地为 192.168.2.255的数据包。因为这个包来自其他的网段,所以路由器B认为它是一个定向广播。在默认情况下,路由器直接把这个包丢弃。如果命令 ip directed-broadcast 在f0/1接口上配置了,路由器B就会转发这个包。
让我们假设这个包是从 Host A发起的。Host A 的TCP/IP协议栈并不知道这是一个IP定向广播,因为这个网段并不在Host A 上。Host A发送这个包的过程是这样的:
Source MAC: Host A
Source IP:10.1.1.2
Destination MAC:Router A F0/0
Destination IP:192.168.2.255
Router A 收到这个包后,因为Router A 也不和这个192.168.2.255直连,所以Router A并不知道这是一个IP定向广播,所以Router A像对待普通单播一样转发它。
Source MAC: RouterA f0/1
Source IP:10.1.1.2
Destination MAC:Router B F0/0
Destination IP:192.168.2.255
当这个包到达router B 的时候,因为router B和192.168.2.255这个网段直连,所以router B 确定这是一个IP直接广播。如果 router B的F0/1接口配置了 ipdirected-broadcast,那么router B就会转发这个帧。
Source MAC: RouterB F0/1
Source IP:10.1.1.1
Destination MAC:FFFF:FFFF:FFFF
Destnaion IP:192.168.2.255
瞧,IP直接广播就这样产生了。
如果route B在f0/1收到了一个去往 192.168.2.255的ip直接广播。这个路由器会毫不犹豫的直接丢弃这个包。因为这个ip直接广播产生于本地网段,并且目标是本地网段,路由器根本不需要转发它。
我们假设host D产生了一个去往 192.168.2.255的数据包,host D 会这样处理这个包:
Source MAC: Host D
Source IP:192.168.2.2
Destination MAC:FFFF:FFFF:FFFF
Destination IP:192.168.2.255
让我们看看交换机这个时候是怎么工作的吧,交换机发现目的地址是FFFF:FFFF:FFFF,交换机并不能学习到这个地址,所以交换机从接受到端口以外的其他端口都发出这个数据包。
当然,Router B的f0/1收到了这包,看到目的mac地址,确定它是一个广播。然后,router B继续查看目标IP地址,发现数据包只是一个本地子网的IP定向广播,路由器马上丢弃了这个包,并不会转发它。