为什么要使用多播:
        网卡从网络上接收到目标物理地址对应的所有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. Unity 截图选择框,中间全透明,边缘半透明

    效果:点击白色框可拖拽选择区域 代码: using System.Collections; using System.Collections.Generic; using UnityEngine; u ...

  2. selenium+pyquery爬取淘宝商品信息

    import re from selenium import webdriver from selenium.common.exceptions import TimeoutException fro ...

  3. 36. ClustrixDB 使用ClustrixDB加密连接

    ClustrixDB使用sha256_password插件支持SSL和身份验证. 一些安全规则要求对存储在数据库中的用户密码进行更强的保护.与默认的mysql_native_password插件相比, ...

  4. 微信小程序开发入门教程(三)---小程序云开发支付功能

    支付(shoukuan)功能真的很重要!由于我还没有商户号,以下代码未实际验证 1.服务端 进入云开发,新建云函数pay(应该也可以在开发者工具编写后上传) 编写后端代码index.js这里用到第三方 ...

  5. [Luogu] 文艺平衡树(Splay)

    题面:https://www.luogu.org/problemnew/show/P3391 题解:https://www.zybuluo.com/wsndy-xx/note/1138892

  6. Cogs 647. [Youdao2010] 有道搜索框(Trie树)

    [Youdao2010] 有道搜索框 ★☆ 输入文件:youdao.in 输出文件:youdao.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 在有道搜索框中,当输入一个或 ...

  7. Postman使用tv4进行JSON Schema结构验证和断言

    JSON Scheme简介 对于JSON格式的请求数据或者响应数据,在不同的数据和场景下往往会有一部分动态的值及字段.此时我们可以使用JSON Scheme Validator(JSON结构验证)来验 ...

  8. 修改tomcat控制台的标题

    Tomcat的bin目录下,创建一个名为setenv.bat的文件. setenv.bat  编辑内容 : set TITLE = 想要命名的标题名称  保存修改.重新启动. 第二种. 修改tomca ...

  9. Zookeeper系列(十四)Zookeeper的数据与存储

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6179118.html尊重原创,奇文共欣赏: 一.前言 前 ...

  10. Netfilter 之 钩子函数调用

    本篇主要从三层协议栈调用函数NF_HOOK说起,不断深入,分析某个钩子点中所有钩子函数的调用流程,但是本文不包含规则介绍和核心的规则匹配流程,后续文章将继续分析: NF_HOOK函数先调用了nf_ho ...