读书笔记九:TCP/IP详解之广播和多播,IGMP协议
单播,多播,广播的介绍
单播(unicast)
单播是说,对特定的主机进行数据传送。例如给某一个主机发送IP数据包。这时候,数据链路层给出的数据头里面是非常具体的目的地址,对于以太网来 说,就是具体网卡的MAC地址(不是FF-FF-FF-FF-FF-FF,这是广播地址)。现在的具有路由功能的主机应该可以将单播数据定向转发,而目的主机的网卡可以过滤掉和自己MAC地址不一致的数据。
广播(broadcast)
广播是主机针对某一个网络上的所有主机发送数据包。这个网络可能是网络,可能是子网,还可能是所有的子网。如果是网络,例如A类网址的广播就是 netid.255.255.255,如果是子网,对应的广播地址是将子网的网络地址的主机位全部置1;如果是所有的子网(以B类IP地址为例)则是则是 netid.netid.255.255。广播所用的MAC地址FF-FF-FF-FF-FF-FF。网络内所有的主机都会收到这个广播数据,网卡只要把 MAC地址为FF-FF-FF-FF-FF-FF的数据交给内核就可以了。一般说来ARP,或者路由协议RIP应该是以广播的形式播发的。
多播(multicast)
可以说广播是多播的特例,多播就是给一组特定的主机(多播组)发送数据,这样,数据的播发范围会小一些(实际上播发的范围一点也没有变小),多播的MAC地址是最高字节的低位为一,例 如01-00-00-00-00-00。多播组的地址是D类IP,规定是224.0.0.0-239.255.255.255。
多播地址分类:
- 局部多播地址:在224.0.0.0~224.0.0.255之间,这是为路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包。
- 预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议。
- 管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。
-
属于永久组的地址:
224.0.0.1 所有组播主机
224.0.0.2 所有组播路由器
224.0.0.4 DRMRP路由器
224.0.0.5 所有OSPF的路由器
224.0.0.6 OSPF指派路由器
224.0.0.9 RPIv2路由器
224.0.0.10 EIGRP路由器
224.0.0.13 PIM路由器
224.0.0.22 IGMPv3
224.0.0.25 RGMP
224.0.1.1 NTP网络时间协议
多播ip地址和mac地址的对应关系如下:
与IP多播相对应的以太网地址范围从01:00:5e:00:00:00到01:00:5e:7f:ff:ff。
多播组的地址是D类IP,规定是224.0.0.0-239.255.255.255。
这种地址分配将使以太网多播地址中的23bit与IP多播组号对应起来,通过将多播组号中的低位23bit映射到以太网地址中的低位23bit实现,如下图所示:
可以看到,ip地址和mac地址的对应不是一一对应的,主机还是要对多播数据进行过滤。
一些验证
首先我ping一下自己所在的子网的某一台主机:
ping 192.168.11.1
正在 Ping 192.168.11.1 具有 32 字节的数据:
Reply from 192.168.11.1: bytes=32 time<1ms TTL=255
Reply from 192.168.11.1: bytes=32 time<1ms TTL=255
Reply from 192.168.11.1: bytes=32 time<1ms TTL=255
Reply from 192.168.11.1: bytes=32 time=1ms TTL=255
可以看到,机器返回的是一台主机的回应结果,进而推测,如果我ping一个广播地址呢?结果如下
Reply from 192.168.11.9: bytes=32 time=1ms TTL=255
Reply from 192.168.11.174: bytes=32 time<1ms TTL=64
Reply from 192.168.11.174: bytes=32 time<1ms TTL=64
Reply from 192.168.11.174: bytes=32 time<1ms TTL=64
Reply from 192.168.11.218: bytes=32 time<1ms TTL=64
Reply from 192.168.11.174: bytes=32 time<1ms TTL=64
可以看到,ping返回了一些随机的ip的结果,这些ip都是与主机在同一子网内的ip。我们可以看到,广播实际上是给处于子网内的所有ip发出数据。
IGMP协议:Internet组管理协议
IGMP的作用在于,让其他所有需要知道自己处于哪个多播组的主机和路由器知道自己的状态。一般多播路由器根本不需要知道某一个多播组里面有多少个主机,而只要知道自己的子网内还有没有处于某个多播组的主机就可以了。只要某一个多播组还有一台主机,多播路由器就会把数据传输出去,这样,接受方就会通过网卡过滤功能来得到自己想要的数据。为了知道多播组的信息,多播路由器需要定时的发送IGMP查询,IGMP报文封装在ip数据报中,各个多播组里面的主机要根据查询来回复自己的状态。路由器来确定有几个多播组,自己的转发操作如何进行。
这种查询回应数据报的TTL一般是1,数据报被限定在子网内,而且不产生ICMP超时差错。