为什么要使用多播:
        网卡从网络上接收到目标物理地址对应的所有bit位都为1的数据报时,会收到这条消息并将其上传给驱动程序,网卡的这种工作模式称为广播模式,网卡的缺省工作模式包含直接模式和广播模式。利用这一特性,UDP(用户数据报协议)还提供了向多个目标地址发送广播数据包的能力。广播数据即数据从一个工作站上发出,只要将数据包的目标物理地址对应的所有bit位都设为1,局域网内的所有工作站网卡都会收到这条消息并将其上传给驱动程序。这一特征适用于无连接协议,因为局域网(LAN)上的所有机器都可获得并处理广播消息。使用广播消息的不利之处是每台机器都必须对该消息进行处理。比如,一用户在LAN上广播一条消息,每台机器上的网卡都会收到这条消息,并把它上传到网络堆栈(驱动程序完成),然后,堆栈将这条消息的目标端口号与该主机上运行的所有的网络应用程序中所指定的端口号依次比较,看它们是否相等,从而决定哪个网络应用程序应该接收这条消息。通常,这个局域网上的多数机器对该消息都不感兴趣,草草地一弃了之。但是,各台机器在驱动程序中都仍需花时间来处理这个数据包,看是否有应用程序对它感兴趣。结果,高广播通信流使LAN上的机器陷入困境,因为每个工作站都要检查这个数据包。
有一些特殊的物理地址,他们不能作为任何网卡的实际物理地址使用,但网卡能够设定为不过滤从网络上接收到的一个以这些物理地址中的一个和若干个作为目的物理地址的帧。这些物理地址称为多播传送地址,网卡的这种工作模式称为多播传送模式。
“多播”亦称“多点传送”(multicast),也就是一台主机发出的包可以同时被其他多个有资格的主机接收,这台主机和那些有资格的主机就形成了一个组,他们在组内的通信是广播式的。多播的工作原理是,将一个网络上的某些主机的网卡设置成多播传送工作模式,指定其不过滤以某一个多播传送地址作为目的物理地址的数据帧,这样,这些主机的驱动程序中就可以同时接收以该多播传送地址作为目的物理地址的数据帧,而其他主机的驱动程序却接收不到,这些主机在逻辑上便形成了一个“多播”组。采用这种技术,相对广播而言,可有效减轻网络上“多播”组之外的其他主机的负担,因为发送给“多播”组的数据不会被传送到它们的驱动程序中去处理,避免资源的无谓浪费。最开始的时候,设计这一技术的目的是弥补“广播”(Broadcasting)通信的不足。

多播有两种实现方式:

1.设置网卡为混杂模式,然后通过驱动对收到的所有数据包进行过滤,留下指定的多播地址的数据包。

  这种方式效率比较低,适合不支持多播模式的网卡。

2.设置网卡为多播模式,网卡本身有多播过滤器,网卡自己能够判断进入的数据包是否属于多播数据。

  由于多播过滤是由硬件完成的,所以效率比较高。

网卡只接收目的地址为网卡自身物理地址和多播地址(广播是多播的一种)的帧。对于以太网,多播的地址的最高字节的最低位为1(01:00:00:00:00:00)

对于IP多播,IP多播地址会转换成以太网多播地址,一个以太网多播地址可以对应多个IP多播地址。

因此,设备驱动程序或IP层必须对数据报进行过滤,因为网卡可能收到主机不想接收的多播数据帧。当网卡不提供足够多播数据帧过滤功能时,就必须把网卡设置成“混杂模式”,由驱动检查收到的数据帧是否为主机需要的。

也就是说多播的两种实现模式,都需要由驱动程序参与过滤,只不过如果先由网卡过滤,可以减轻驱动程序的工作量。

 多播地址(multicast address)是一组主机的标示符,它已经加入到一个多播组中。在以太网中,多播地址是一个48位的标示符,命名了一组应该在这个网络中应用接收到一个分组的站点。在IPv4中,它历史上被叫做D类地址,一种类型的IP地址,它的范围从224.0.0.0到239.255.255.255。D类地址用于组播。

Broadcast Address(广播地址)是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机标识段host
ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,对于10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255
(255 即为2 进制的11111111 ),当发出一个目的地址为10.1.1.255 的分组(封包)时,它将被分发给该网段上的所有计算机。

【miscellaneous】多播(组播)原理分析的更多相关文章

  1. IP多播(组播)

    IP多播是实现数据一对多通信的模式.从一个源点传送到多个目的地,数据仅仅拷贝一份.这里说的数据仅仅拷贝一份,是指在每一条须要它的两个点之间,数据仅仅有一份.例如以下图为<计算机网络>(谢希 ...

  2. Java单播、广播、多播(组播)---转

    一.通信方式分类 在当前的网络通信中有三种通信模式:单播.广播和多播(组播),其中多播出现时间最晚,同时具备单播和广播的优点. 单播:单台主机与单台主机之间的通信 广播:当台主机与网络中的所有主机通信 ...

  3. Java单播、广播、多播(组播)

    一.通信方式分类 在当前的网络通信中有三种通信模式:单播.广播和多播(组播),其中多播出现时间最晚,同时具备单播和广播的优点. 单播:单台主机与单台主机之间的通信 广播:当台主机与网络中的所有主机通信 ...

  4. android multicast 多播(组播)问题

    有谁遇到过同样问题的可以探讨下,或者已经解决问题的,能够指导下我    获取组播锁 private  InetAddress   group; WifiManager  wm=(WifiManager ...

  5. linux网络编程之一-----多播(组播)编程

    什么是多播 组播(Multicast)是网络一种点对多(one to many)的通信方式,通过报文复制完成网络中一台server对应多台接收者的高效数据传 送.对其形象的比喻就是类似于广播电台和电视 ...

  6. UDP组播

    多播(组播) 组播组可以是永久的也可以是临时的.组播组地址中,有一部分由官方分配的,称为永久组播组.永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化.永久组播组中成员的数量都可以是任意的 ...

  7. IPv4组播通信原理

    2011-05-08 21:21:14 标签:组播 vin_do,vin_do学习笔记,笔记 休闲 职场 摘自网络,感谢原作者 摘要: 本文试图成为学习TCP/IP网络组播技术的入门材料.文中介绍了组 ...

  8. Android开发:组播(多播)与广播

    近期由于需要编写能够使同一局域网中的Android客户端与PC端进行自动匹配通信功能的程序,学习并试验了JAVA组播与广播的内容,记录一些理解如下: 一.组播(多播) 背景知识:组播使用UDP对一定范 ...

  9. 浅谈Android中的组播(多播)

    组播使用UDP对一定范围内的地址发送相同的一组Packet,即一次可以向多个接受者发出信息,其与单播的主要区别是地址的形式.IP协议分配了一定范围的地址空间给多播(多播只能使用这个范围内的IP),IP ...

随机推荐

  1. list去重的四种方式

    L=[1,2,3,3,5,5,5,8,4,6,9,7,2,'a','s','a','e','s','z'] def DelDupli(L):    L1=[]    for i in L:       ...

  2. scrapy+selenium 爬取淘宝商城商品数据存入到mongo中

    1.配置信息 # 设置mongo参数 MONGO_URI = 'localhost' MONGO_DB = 'taobao' # 设置搜索关键字 KEYWORDS=['小米手机','华为手机'] # ...

  3. my_note

    1.C# $ 内插字符串 Console.WriteLine($"The value of pi is {Math.PI}"); 替代string.format 2. switch ...

  4. Monkey实战测试步骤

    1,adb devices 确保设备在线 2,adb shell pm list packages 查看包名 3,adb shell monkey -p com.xzck.wangcai   --ig ...

  5. python 生成螺旋矩阵

    对于任意 m*n 矩阵,将 1~m*n 的数字按照螺旋规则在矩阵中排列. 如 m=3,n=3,期望结果为: [ [ , , ], [ , , ], [ , , ] ] 以下代码支持方阵以及非方阵. c ...

  6. 【sed】基本用法

    1. 文本处理 sed编辑器根据sed命令处理数据流中的数据:在流编辑器将所有命令与一行数据匹配完后,它会读取下一行数据并重复以下过程: (1) 一次从输入中读取一行数据 (2) 根据所提供的编辑器命 ...

  7. 20191121-5 Scrum立会报告+燃尽图 01

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/10065 一.小组情况 组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名 ...

  8. Vue入门下

    使用npm创建项目,系统会自动生成一些列文件. 以慕课网上的Travel项目来说,在生成的项目文件中存在src文件夹,这个文件夹也是平时在做项目的时候用的比较多的,其他的一些配置信息更改的频率较低. ...

  9. 码支付(php版本)应用

    1.下载软件 2.安装php 版本 2.打开软件,登陆支付宝 3.codepay_config.php  中填写逻辑代码 4.充值路径: 说明:$username = trim($_GET['user ...

  10. mybatis 批量将list数据插入到数据库

    随着业务需要,有时我们需要将数据批量添加到数据库,mybatis提供了将list集合循环添加到数据库的方法.具体实现代码如下: 1.mapper层中创建 insertForeach(List < ...