前言
上一篇聊了UDP相关的知识点,包含UDP有什么特点、为什么需要进行IP分片、TCP与UDP有何区别等。
今天来记录一下「广播和多播」。
TCP是面向连接的,所以不可能将数据报同时发给多个接收者。
此时就需要用到这个「广播和多播」
就比如TCP是点对点打电话,而UDP是用个大喇叭直接喊。
广播与多播
「广播和多播仅应用于UDP」,对于需要将报文同时传往多个接收者的应用来说非常重要。
一个主机要向网络上的所有其他主机发送帧,这就是「广播」。
通过ARP和RARP可看到这一过程。
「多播」位于单播和广播之间:帧仅传送给属于多播组的多个主机。
对于以太网,当地址中最高字节的最低位设置为1时表示该地址是一个多播地址
用十六进制可表示为 「01:00:00:00:00:00」
以太网广播地址 「ff:ff:ff:ff:ff:ff」 可看作是以太网多播地址的特例。
每次UDP收到由IP传送来的数据报,根据目的端口号和源端口号进行数据报过滤
如果当前没有进程使用该目的端口号,就丢弃并产生一个ICMP不可达报文。
如果UDP数据报存在校验和错误,将被丢弃。
❝
多播的出现减少了对应用不感兴趣主机的处理负荷,使用多播,主机可加入一个或多个多播组,这样,网卡将获悉该主机属于哪个多播组,然后仅接收主机所在多播组的那些多播帧。
❞
单播
TCP是一个面向连接的协议,运行与两主机的内的两个进程间存在一条连接。
多个主机的共享信道网络如以太网。每个以太网帧包含源主机和目的主机的以太网地址(48bit)。
通常每个以太网帧仅发往单个目的主机,目的地址指明单个接收接口,因而称为单播(unicast)。
在这种方式下,任意两个主机的通信不会干扰网内其他主机
广播
(1)受限的广播
受限的广播地址是255.255.255.255。
该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道他所在网络的网络掩码,甚至连他的IP地址也不知道。
任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
(2)指向网络的广播
主机号全1。
A类网络广播地址为ne,其中netid为A类网络的网络号
一个路由器必须转发指向网络的广播,但他也必须有一个不进行转发的选择。
(3)指向子网的广播
主机号为全1并且有特定子网号的地址,作为子网直接广播地址的IP地址需要了解子网的掩码。
(4)指向所有子网的广播
指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。
指向所有子网的广播地址的子网号及主机号为全1。
例如,如果目的子网掩码为255.255.255.0,那么IP地址128.1.255.255是一个指向所有子网的广播地址,然而,如果网络没有划分子网,这就是一个指向网络的广播。
多播
IP多播提供两类服务:
(1)向多个目的地址传送数据。
(2)客户对服务器的请求。
D类IP地址被称为多播组地址。
(1) 多播组地址
多播组地址包括为1110的最高4bit和多播组号,通常可表示为点分十进制数,范围从224.0.0.0到239.255.255.255
能接收发往一个特定多播组地址数据的主机集合称为主机组,可跨越多个网络,成员可随进随出,对主机数量没有限制,不属于此主机组的主机可向该组发送信息。
(2)多播组地址到以太网地址的转换
IANA(Internet Assigned Numbers Authority 互联网地址编码分配机构)拥有一个以太网地址块,即高位24bit为00:00:5e(16进制),该地址块拥有的地址范围从00:00:5e:00:00:00到00:00:5e:ff:ff:ff。
IANA将其中的一半分配给多播地址,
为了指明一个多播地址,任何一个以太网地址的首字节必须是01,这意味着与IP多播相对应的以太网地址范围从 01:00:5e:00:00:00到01:00:5e:7f:ff:ff。
这种地址分配将使以太网多播地址中的 23bit与IP多播组号对应起来,通过将多播组号中的低位23bit映射到以太网地址中的低位 23bit实现
多播组号中的最高 5bit在映射过程中被忽略,因此每个以太网多播地址对应的多播组是不唯一的
32个不同的多播组号被映射为一个以太网地址。
只要后16位一样,映射的地址就是一样的,设备驱动程序或IP层就必须对数据报进行过滤。因为网卡可能接收到主机不想接收的多播数据帧。
「局域网网卡趋向两种处理类型:」
一种是网卡根据对多播地址的散列值实行多播过滤,这意味仍会接收到不想接收的多播数据;
另一种是网卡只接收一些固定数目的多播地址,这意味着当主机想接收超过网卡预先支持多播地址以外的多播地址时,必须将网卡设置为「多播混杂(multicast promiscuous)」 模式。
单个物理网络的多播是简单的。
多播进程将目的IP地址指明为多播地址,设备驱动程序将它转换为相应的以太网地址,然后把数据发送出去。这些接收进程必须通知它们的IP层,它们想接收的发往给定多播地址的数据报,并且设备驱动程序必须能够接收这些多播帧。这个过程就是「加入一个多播组」
当一个主机收到多播数据报时,它必须向属于那个多播组的每个进程均传送一个复制。
这和单个进程收到单播UDP数据报的UDP不同。使用多播,一个主机上可能存在多个属于同一多播组的进程。
===============================
我是Liusy,一个喜欢健身的程序员。
获取更多干货以及最新消息,请关注公众号:上古伪神
如果对您有帮助,点个关注、转发就是对我最大的支持!!!谢谢