广播与多播的实现
1 IP地址分类
A 类网络地址有128 个(支持127)个网络,占有最左边的一个字节(8 位)。高位(0)表示识别这种地址的类型。
B 类地址使用左边两个8 位用来网络寻址。两个高位(10)用于识别这种地址的类型,其余的14 位用作网络地址,右边的两个字节(16 位)用作网络节点。
C 类地址是最常见的Internet 地址。三个高位(110)用于地址类型识别,左边三个字节的其余21 位用于寻址。C 类地址支持1046个网络,每个网络可多达256 端点。
D 类地址是相当新的。它的识别头是1110,用于组播,例如用于路由器修改。
E 类地址为时延保留,其识别头是11110。
1.1 A类地址
0.xx.xx.xx ~ 126.xx.xx.xx
127.0.0.0~127.255.255.255为回环地址
主机ID全0标识一个网络
主机ID全1表示广播地址
1.2 B类地址
128.xx.xx.xx ~ 191.xx.xx.xx
172.16.0.0 ~ 172.31.255.255为私有地址
主机ID全0标识一个网络
主机ID全1表示广播地址
1.3 C类地址
192.xx.xx.xx ~ 223.xx.xx.xx
192.168.0.0 ~ 192.168.255.255为私有地址
主机ID全0标识一个网络
主机ID全1表示广播地址
1.4 D类地址
224.xx.xx.xx ~ 239.xx.xx.xx
1.5 E类地址
240.xx.xx.xx ~ 255.xx.xx.xx
2 广播
2.1 又一种IP地址分类方法
有三类IP地址,单播地址、广播地址、多播地址
单播地址:目的为单个主机
广播地址:目的为给定网络上的所有主机
多播地址:目的为同一组类的所有主机
2.2 广播定义
网络对广播地址发出的数据报进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。
在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
2.3 广播例子
ARP(地址解析协议),ARP在本地子网上广播一个请求:获取IP地址对应的硬件地址。
NTP(网络时间协议),服务器以每64秒一次的频率向本地子网上的所有客户广播当前时刻。
有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。
2.4 广播优点
网络设备简单,维护简单,布网成本低廉
由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。
2.5 帧的过滤过程
2.6 单播帧的过滤过程
中间主机的以太网接口看到该帧,并将它的目的以太网与自己的以太网地址进行比较。由于二者不相等,接口便忽略该帧。因此,单播帧不会对这台主机造成任何额外开销
右边主机的以太网接口也看到该帧。并将它的目的以太网与自己的以太网地址进行比较。发现二者相等,接口便读入该帧。
2.7 广播帧的过滤过程
左边的主机发送的是广播数据报,其地址为128.7.6.255,当左边的主机发送数据报时,它注意到目的IP地址是子网广播地址,于是便将它映射成48位的以太网地址:ff.ff.ff.ff.ff.ff。这使得子网上的每一个以太网接口都会接收该帧。
由于是广播类型的数据报,右侧的两台主机都将数据报传递到IP层。但是由于中间的主机没有任何应用进程绑定相应的UDP端口,于是主机的UDP代码丢弃这个已收到的数据报。
以上的例子表明了广播存在一个根本问题:子网上所有未参与广播应用系统的主机也必须完成对数据报的协议处理,直至在UDP层将它丢弃。因此以高速率产生IP数据报的应用系统(例如音频、视频应用程序)会严重影响子网上其他主机的运行,而这类型的应用程序应该采用多播技术来解决该问题。
2.8 IP分片和广播
源自Berkeley的内核不允许广播数据报分片.如果发送广播地址的ip数据报超过外出接口的MTU,就返回EMSGSIZE错误
这是一个自BSD4.2以来就存在的方法.事实上并没有什么原因不让广播数据报分片,只是认为广播已经给网络带来很大负担,没有必要再由于分片而使这种负担扩大数倍
2.9 广播代码示例
发送端:
接收端:
3 多播
3.1 多播定义
多播数据仅由对该数据报感兴趣的接口接收,也就是说,由运行希望参加多播会话应用系统的主机上的接口接收。广播一般局限与局域网,而多播既可用于局域网,也可用于广域网。
3.2 多播地址与以太网地址的映射
IPV4的D类地址(从224.0.0.0到239.255.255.255)是多播地址。D类地址的低28位构成了多播组ID,而整个32位地址则称为组地址。
以太网的高序24位总是01:00:5e,下一位总是0,低序23位是多播地址低序23位的拷贝。多播地址的高序5位在映射过程中被忽略。这意味着多个32位多播地址会映射为单个以太网地址,映射不是一对一。
3.3 多播帧的过滤过程
最右边主机绑定123端口,并加入多播组224.0.1.1,告诉数据链路接收以01:00:5e:00:01:01为目的的帧。
最左边主机向IP地址224.0.1.1及端口123发送数据报。发送主机将帧映射到相应的以太网目的地址,并将帧发送出去。帧中同时包含目的以太网地址(由接口检查)和目的IP地址(由IP层检查)
中间主机忽略该帧,这是因为:
(1)帧的目的以太网地址与该主机接口地址不一致。
(2)帧的目的以太网地址不是广播地址。
(3)中间主机没有加入一个多播组。
该帧基于非完备过滤机制被右边的数据链路接收。这是因为我们告诉接口接收以某个具体以太网组地址为目的地址的帧时,它也可能接收以其他以太网地址为目的地址的帧。
数据链路接收该帧后再传送到IP层。由于该帧的目的地址为多播IP地址,IP层将该分组与我们的应用所加入的多播地址进行比较。如果是自己需要的分组就接收,否则就丢弃。
IP层继续把该分组传送到UDP层。UDP层将数据报传到绑定123端口的套接口上。这个过程称为完备过滤。
转自:http://www.cppblog.com/fztcjjl/archive/2011/07/30/102228.html