广播的用途之一是在本地子网定位一个服务器主机,前提是已知或认定这个服务器主机文娱本地子网,但是不知道他的单播IP地址。这种操作也称为资源发现。另一个用途是在有多个客户主机与单个服务器主机通信的局域网环境中尽量减少分组流通。处于这个目的使用广播的因特网应用有多个例子。
任播允许从一组通常提供相同服务的主机中选择一个(一般是选择按某种测度而言离源主机最近的),通过适当的路由配置,并在多个位置往路由协议中注入同一个地址。
- 多播支持在IPV4中是可选的,在ipv6中是必须的
- ipv6不支持广播,而使用广播的任何ipv4应用程序一旦移植到ipv6就必须改用多播重新编写
- 广播和多播要求用udp或原始ip,他们不能使用tcp
使用广播的因特网例子
- ARP:ARP并不是一个用户应用,而是IPB4的基本组成部分之一。ARP在本地子网上广播一个请求说"IP地址为a.b.c.d的系统亮明身份,告诉我你的硬件地址"。ARP使用链路层广播而不是IP层广播。
- DHCP(动态主机配置协议):在认定本地子网上有一个DHCP服务器主机或中继主机的前提下,DHCP客户主机向广播地址(通常是255.255.255.255,因为客户部指导自己的IP地址、子网掩码以及本子网的受限广播地址)发送给自己的请求
- NTP(网络时间协议):一种常见使用情形是客户主机配置上待使用的一个或多个服务器主机的IP地址,然后以某个频度轮询这些服务器主机。根据由服务器范松的当前时间和到达服务器主机的RTT,客户使用精妙的算法更新本地时钟。
- 路由守护进程:routed是最早实现且最常用的路由守护进程之一,它在一个局域网上广播自己的路由表。这么一来连接到该局域网上的所有其他路由器都可以接受这些路由通告,而无须事先未每个路由器配置其邻居路由器的IP地址。这个特性也能被该局域网上的主机用于监听这些路由通告,并相应地更新各自的路由表。
广播地址
我们可以使用记法(子网ID,主机ID)表示一个IPV4地址,其中子网ID表示由子网掩码覆盖的连续位,主机ID表示以外的位。
1.子网定向广播地址:作为制定子网上所有接口的广播地址。举例说明,如果我们有一个192.168.42/24子网,那么192.168.42.255就是该子网上所有接口的子网定向广播地址。直接广播可以被路由转发,发送到目标网络的所有主机
下图展示了链接子网192.168.42/24和192.168.123/24的一个路由器。
路由器在子网。1681123/上收到一个目的地为192.168.42.255(另一个接口的子网定向广播地址)的一个单播IP数据报。路由器通常情况下不把这个数据报转发给子网192.168.42/24
2.受限广播地址:路由器从不转发目的地为2.255.255.255的IP数据报,路由器不会转发受限广播的数据包,但同一个子网的所有主机都会接收到受限广播的数据包
单播和广播比较
向一个单播地址发送一个数据报时,它会对它进行层层加头,首先UDP层给它加一个UDP首部,IP层给他加一个IPV4首部,数据链路曾会通过ARP将目的IP地址转换一个以太网地址。比如说:00:0a:95:79:bc:b4。该分组然后作为一个目的的以太网地址为这个48位地址的以太网帧发出去,该以太网帧类型字段表示ipv4分组0x0800,ipv6分组0x86dd。
中间主机的以太网接口看到该帧后把它的目的以太网地址与自己的以太网地址比较,既然他们不一致,就忽略这个帧,可见单播帧不会对该主机造成任何开销,因为他忽略他们的是接口而不是主机
单播
广播
在广播中接收数据的流程:
- 根据以太网地址比较决定该网络接口是否接受数据
- 在以太网层,驱动程序从接口内存读取帧,根据以太网帧类型决定ip输入队列(ipv4:0x0800,ipv6:0x86dd)
- 在ip层,比较目的ip地址是否为本机ip之一,若是则被接受;接着查看该分组ipv4首部中的协议字段,其值为表示udp的17,该分组被传到udp层
- udp层:检查udp数据报的目的端口(如果udp数据报已连接,那么还检查源端口),接着在本例中把数据报至于相应的套接字队列,必要的话udp层还作为内核一部分唤醒阻塞在相应输入操作的进程上,由内核读取这个新收取的数据报
单播:单播数据报仅由通过目的的ip指定的单个主机接受,子网上的其他主机不受影响。
广播:子网上未参加相应广播应用的所有主机也不得不沿协议栈一路上向完成整的处理收取的udp广播数据包,直到该数据报历经udp层被丢弃,子网上所有非IP主机也不得不在数据链路层接收完整的帧,然后再丢弃。
UDP客户指定通信的目的IP地址是192.168.42.255(广播地址),这样网卡发送出去的以太网帧的目的MAC地址是以太网广播地址ff:ff:ff:ff:ff:ff。子网上所有收到这个以太网帧的主机的网卡驱动程序都会将帧交给上层协议栈处理。
然而中间那个主机没有任何进程绑定520端口,该主机的udp代码丢弃这个已收取数据报。该主机绝不发送一个icmp端口不可达信息,因为这么做可能产生广播风暴,即子网上大量主机几乎同时产生一个响应,导致网络在一段时间内不可用。另外这些ICMP错误如果处理也成了错误:有的接收主机报告了错误,有的没报告。