【TCP/IP详解 卷一:协议】第十二章 广播和多播
建议参考:广播和多播 IGMP
12.1 引言
IP地址知识点回顾:
IP地址分为三种:(1)单播地址 (2)广播地址 (3)多播地址
另外一种是,IP地址一般划分成五类:A-E类。
单播
考虑 类似以太网的 包含多个主机的共享信道网络,每一个以太网帧 包含源主机和目的主机的 MAC地址(以太网地址 48bit),通常情况下,每个以太网帧只发送往单个目的主机,目的地址指明单个接收接口,称为 单播(unicast)。
- 在单播的情况下,任意两个主机之间的通信不会打扰到其他主机(除了争夺共享信道的)。
广播和多播
(1)广播和多播仅应用于 UDP。它们对于 需要把数据报文 发送给 多个 目的端 的应用来说 很重要。
(2)TCP 是一个 面向连接 的协议,它意味着 分别运行于 两个主机(由IP地址确定) 的 两个进程(由端口号确定) 之间存在一条连接。
- IP地址确定不同的主机,端口号确定主机中不同的进程。
有时一个主机 要向网络上所有的主机 发送相同的数据帧,这就是广播。我们在之前的 ARP 地址解析协议 的时候有提到,向周围的主机发送 ARP请求(以太网数据帧)。
多播 介于 广播 和 单播 之间:帧只传给属于 多播组 的多个主机。
所以 广播 可以看做 多播 的特例。(所有主机都属于同一个多播组)
广播和多播 的区别:了解主机对 由信道传送过来的帧 的过滤过程
Link Layer 网卡 第一次过滤
网卡查看传送过来的帧,根据 目的地址(MAC地址) 是否为 网卡的物理地址 或者 广播地址(个人认为 进行了一次转换,转换为以太网地址) 来筛选。
若接收,传给设备驱动程序。不接收,丢弃。
- 多数接口被设置为 混杂模式:能够接收 每一个帧 的一个复制。
目前大多数网卡,经过配置都支持 目的地址为多播地址 或者某些 子网多播地址的帧。
对于以太网来说,地址中最高字节的 最低位 为1时,代表地址为一个多播地址。十六进制可以表示为 01:00:00:00:00:00(以太网 广播地址 ff:ff:ff:ff:ff:ff 可以看做是它的特例)。
Link Layer 设备驱动程序(相当于硬件的接口) 第二次过滤
属于广播 或者 组播 的数据报 在此处被区分开来
设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。
所以简单的说,驱动程序提供了硬件到操作系统的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用。
首先,判断检验和是否有差错,如果检验和计算结果错误,说明传输过程中出错,则丢弃该报。
其次,判断 帧类型 中是否有指定要使用的协议(比如 ARP等等),没有的话丢弃。
然后,进行多播过滤,检测该主机 是否属于 多播地址 说明的 多播组。
以上都满足的情况下,交给下一层:网络层。
Internetwork Layer 第三次过滤
当 帧类型 指定为 IP数据报 的时候,就传向IP层。
IP **根据IP地址中的源地址 和 目的地址 **进行过滤。
正常的话,传给下一层(TCP 或者 UDP)。
Transport Layer 第四次过滤
如果检验和出错,丢弃报文。
当 UDP(TCP 采用类似的方法)收到一份 IP传过来的数据报 的时候,根据 目的端口号(有时候 还根据源端口号) 进行数据报过滤。
如果没有遇到当前进程所使用的 端口号(回忆:端口号区分不同的进程),就丢弃它 并且 产生一个ICMP不可达报文。
使用广播的问题:多播的一个优点
使用广播的问题在于,增加了对广播数据不感兴趣的主机的处理负担。
拿一个 UDP 广播作为例子,假如网内有50台主机,但是只有 20台对广播感兴趣,所以 当其中的一台主机 发送UDP广播数据的时候,其他的30台不得不处理这些广播数据报:直到 UDP层才会被丢弃(不存在进程对应的端口号)。
多播的出现,减少了 对广播不感兴趣主机的 处理负荷。使用多播,主机可以加入一个 或者 多个 多播组。这样 网卡 可以获知主机 是否属于 数据报中指明的多播组。
12.2 广播
大致分为两类:受限的广播 和 直接广播。
- (1)受限的广播:它不被路由但会被送到相同物理网络段上的所有主机,IP地址的网络字段和主机字段全为1就是地址255.255.255.255。
- (2)直接广播:网络广播会被路由,并会发送到专门网络上的每台主机,IP地址的网络字段定义这个网络,主机字段通常全为1,如 192.168.10.255。
四种IP广播地址
12.2.1 受限的广播
受限的广播地址:255.255.255.255,用于 主机配置 过程中 IP数据报的目的地址。这个时候,主机可能连所在网络的掩码都不知道,甚至连IP地址都不知道。
在任何情况下,路由器都不转发 目的地址 为 受限的广播地址 的数据报。这样的数据报只出现在本地网络LAN中。
直接广播:主机号一般全为1.
12.2.2 指向网络的广播
指向网络的广播地址:主机号全为1。
A类网络广播地址:netid.255.255.255,netted 为 A类网络的网络号。
一个路由器 必须转发 指向网络的广播。但是也必须有一个不进行转发的选择。
12.2.3 指向子网的广播
指向子网的广播地址:主机号全为1,有特定子网号。
作为子网广播地址的 IP地址 需要了解 该子网的掩码。
比如 路由器 收到 发完 128.1.2.255(B类IP地址) 的数据报,当 B类网络 128.1 的子网掩码 为 255.255.255.0 时,该地址就是 指向子网的广播地址。
回顾:某一类的IP地址(这里指 ABCD···) 的格式 区分了 网络号 和 主机号,而 子网掩码 在原有的主机号中 区分了 子网号 和 主机号 的界限。
但是 如果 子网掩码 是 255.255.254.0,该地址就不是指向子网的地址。
12.2.3 指向所有子网的广播
指向所有子网的广播地址:主机号 和 子网号 全为1。
比如IP地址:128.1.255.255 (子网掩码:255.255.255.0) 就是一个指向所有子网的广播地址。(根据:(1)B类网络 (2)子网掩码 找出 子网号 和 主机号)
12.4 多播
IP 多播 提供的服务:
(1)向多个目的地址传送数据。
(2)客户对服务器的请求。
12.4.1 多播组地址
多播组地址 包括 为1110 的最高4bit 和 多播组号。通常表示为点分十进制数。范围:224.0.0.0 到 239.255.255.255。
能够接收 发往一个特定多播组地址 数据的主机集合 称为主机组。一个主机组 可以跨越多个网络,主机组成员可以随时加入或者离开主机组,主机的数量没有限制。不属于主机组的主机可以向它们发送消息。
12.4.2 多播组地址 到 以太网地址 的转换
IANA 拥有一个以太网地址块,范围:00:00:5e:00:00:00 到 00:00:5e:ff:ff:ff ,它把其中的一半分配给了多播地址。
为了指明一个多播地址,任何一个以太网地址的首字节 必须是01,这意味着 与IP多播相对应的以太网地址 从 01:00:5e:00:00:00 到 01:00:5e:7f:ff:ff。
这种地址分配将 以太网多播地址 中的 23bit 与 IP多播组号联系起来:
- 通过将 多播组号(D类IP地址中) 的低位23bit 映射到 以太网地址(MAC地址) 中的低位23bit实现。
多播组号的头五位在映射过程中被忽略,因此 每个以太网多播地址(MAC) 对应的 多播组(由IP地址确定) 不唯一。
既然地址映射不唯一,那么 设备驱动程序或者IP层 就必须对数据报进行过滤(检查MAC地址 和 IP地址)。
单个物理网络的多播是简单的。多播进程 把目的IP地址指明为多播地址(范围在 224.0.0.0 到 239.255.255.255),设备驱动程序 将IP多播地址 转换为 相应的以太网地址,然后把数据发送出去。
- 这些接收进程 必须 通知它们的IP层:它们想接收的多播数据报。并且设备驱动装置 必须能够接收 这些 数据帧。这个过程就是 加入一个多播组。
- 一个主机上可能存在多个属于同一个多播组的进程。
IGMP的作用在于,让 其他所有需要知道自己处于哪个多播组的 主机和路由器 知道自己的状态。
2016/8/6