本文章已收录于:

  • 先来了解下UDP

UDP 是UserDatagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。

UDP和TCP的区别:http://blog.csdn.net/ljheee/article/details/50823050

UDP详解:http://blog.csdn.NET/ljheee/article/details/51720594

UDP信息传递的方式分三类

①  单播Unicast:是客户端与服务器之间的点到点连接。

②  广播BroadCast:主机之间“一对所有”的通讯模式,广播者可以向网络中所有主机发送信息。广播禁止在Internet宽带网上传输(广播风暴)。

③  多播MultiCast:主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据。

这里需要注意的是:只有UDP才有广播、组播的传递方式;而TCP是一对一连接通信。多播的重点是高效的把同一个包尽可能多的发送到不同的,甚至可能是未知的设备。但是TCP连接是一对一明确的,只能单播。

在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:DatagramSocket和DatagramPacket。

关于UDP使用的详细例子:https://github.com/ljheee/ChatUDP

UDP组播

组播报文的目的地址使用D类IP地址, D类地址不能出现在IP报文的源IP地址字段。单播数据传输过程中,一个数据包传输的路径是从源地址路由到目的地址,利用“逐跳”的原理[路由选择]在IP网络中传输。

然而在ip组播环中,数据包的目的地址不是一个,而是一组,形成组地址。所有的信息接收者都加入到一个组内,并且一旦加入之后,流向组地址的数据立即开始向接收者传输,组中的所有成员都能接收到数据包。组播组中的成员是动态的,主机可以在任何时刻加入和离开组播组。

用同一个IP多播地址接收多播数据包的所有主机构成了一个主机组,也称为多播组。一个多播组的成员是随时变动的,一台主机可以随时加入或离开多播组,多播组成员的数目和所在的地理位置也不受限制,一台主机也可以属于几个多播组。此外,不属于某一个多播组的主机也可以向该多播组发送数据包。

组播地址

  1. 组播组可以是永久的也可以是临时的。组播组地址中,有一部分由官方分配的,称为永久组播组。永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化。永久组播组中成员的数量都可以是任意的,甚至可以为零。那些没有保留下来供永久组播组使用的ip组播地址,可以被临时组播组利用。
  2. 224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用;
  3. 224.0.1.0~224.0.1.255是公用组播地址,可以用于Internet;
  4. 224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效;
  5. 239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。

组播是一对多的传输方式,其中有个组播组的 概念,发送端将数据向一个组内发送,网络中的路由器通过底层的IGMP协议自动将数据发送到所有监听这个组的终端。至于广播则和组播有一些相似,区别是路由器向子网内的每一个终端都投递一份数据包,不论这些终端是否乐于接收该数据包。UDP广播只能在内网(同一网段)有效,而组播可以较好实现跨网段群发数据。

UDP组播是采用的无连接,数据报的连接方式,所以是不可靠的。也就是数据能不能到达接受端和数据到达的顺序都是不能保证的。但是由于UDP不用保证数据 的可靠性,所有数据的传送效率是很快的。

IGMP协议

IGMP是IP组播的基础。在IP协议出现以后为了加入对组播的支持,IGMP产生了。IGMP所做的实际上就是告诉路由器,在这个路由器所在的子网内有人对发送到某一个组播组的数据感兴趣,这样当这个组播组的数据到达后面,路由器就不会抛弃它,而是把他转送给所有感兴趣的客户。假如不同子网内的A和B要 进行组播通信,那么位于AB之间的所有路由器必须都要支持IGMP协议,否则AB之间不能进行通信。

组播的原理:

组播首先由一个用户申请一个组播组,这个组播组被维护在路由器中,其他用户申请加入组播组,这样当一个用户向组内发送消息时,路由器将消息转发给组内的所有成员。如果申请加入的组不在本级路由中,如果路由器和交换机允许组播协议通过,路由器将申请加入的操作向上级路由提交。广域网通信要经过多级路由器和交换机,几乎所有的网络设备都默认阻止组播协议通过(只允许本网段内,不向上级提交),这使得广域网上实现组播有一定局限。

UDP组播的基本步骤

  1. 建立socket
  2. socket和端口绑定
  3. 加入一个组播组
  4. 通过sendto / recvfrom进行数据的收发
  5. 关闭socket

服务器和客户端必须都要加入相同的组播地址才可以

多播数据报套接字类用于发送和接收 IP 多播包。MulticastSocket 是一种 (UDP) DatagramSocket,它具有加入 Internet 上其他多播主机的“组”的附加功能。

多播组通过 D 类 IP 地址和标准 UDP 端口号指定。可以通过首先使用所需端口创建 MulticastSocket,然后调用 joinGroup(InetAddress groupAddr) 方法来加入多播组。

在Java中,多播一样十分好实现,要实现多播,就要用到MulticastSocket类,其实该类就是DatagramSocket的子类,在使用时除了多播自己的一些特性外,把它当做DatagramSocket类使用就可以了。

默认我们知道IP(UDP和TCP一样)可以把数据包在一个网络中发到另一个设备。更准确点就是IP把数据包从一个IP地址发到另一个IP地址。多播的决窍就是在同一时间把一个数据包发送到多个设备,可以把一个特定的IP地址指定为多播地址,并同时发送到多个设备。

IP多播首先要知道的是只有UDP有多播,没有TCP多播这样的东西,为什么呢?多播的重点是高效的把同一个包尽可能多的发送到不同的,甚至可能是未知的设备。但是TCP连接可能要求丢包重发或者延时或重组顺序,这些操作可能非常消耗资源,不适于许多使用多播的应用场景。(同时多播不知道发出的包是不是已经到达,这个也导致不能使用TCP)。

最后给出一个实例:https://github.com/ljheee/Multicast_UDP

UDP 组播---基本概念相关推荐

  1. UDP 组播---你需要了解这些

    先来了解下UDP UDP 是UserDatagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一 ...

  2. UDP组播调试(使用TCPUDP调试工具)

    如何使用调试工具进行UDP组播调试 一.下载UDP&TCP调试工具 二.双击打开调试工具并建立端口 2.1 创建组播客户端1 类型:UDP(组播模式):目标IP:225.0.0.20:端口:6 ...

  3. ios 接收 c# socket udp 组播

    最近用wcf 服务 给ios和安卓做接口,做了几个ios的项目  用udp 组播 让ios多终端接收和刷新方法 做一个简单的小例子会把工程给大家下载的 c#代码:netSocketUDP.rar io ...

  4. 组播基本概念、IGMP、IGMP监听学习笔记

    前言 一直对组播这个概念迷迷糊糊,特别是交换机处理组播的方式,非常想搞懂但是懒癌发作.这几天终于耐心地看了下有关组播的资料,大致了解了一下同一广播域内组播的相关知识.组播占了计算机网络的一大部分,特别 ...

  5. 基于stm32f107 stm32cube 和 LWIP 协议实现 udp 组播通信

    最近在做一个基于stm32f107 实现 UDP 组播通信的项目,项目基于 stm32cube 配置生成,如下图: UDP组播头文件: #ifndef __MULTICAST_H__ #define ...

  6. udp组播的应用场景

    参考: <TCP/IP详解 卷一> 单播 unicast 在单播的情况下,任意两个主机的通信不会干扰网内其他主机(可能引起争夺共享信道的情况除外) 广播 有时候一个主机要向网上的所有其他主 ...

  7. 单播、广播、多播(组播)的概念和区别

    单播.广播.多播(组播)的概念和区别 简单理解如下: 1.一台机器和一台机器通信这是单播. 2.一台机器发出的数据包能被多台机器收到这就叫组播. 一个机器发送,多台机器接收,但是又不同于广播, 发送端 ...

  8. 【网络工具】使用 iperf测试 udp组播

    文章目录 下载iperf程序 测试组播协议 pc1 客户端发送组播包 pc2 服务端接收组播包 参数说明 -B, --bind host 服务端专用参数 -T, --ttl 客户端专用参数 下载ipe ...

  9. UDP组播开发测试实例

    一 前言 (1)负责项目中组播开发测试工作.期间由于缺乏设备的原因,中间搁置了好久.直到昨天下午临近下班,终于,完成udp组播整个的开发测试工作. 二 开发过程 (1)首先从实现udp协议说起.udp ...

最新文章

  1. feature map 意义_FeatureMap Viewer以及中心化对统计分布变化的影响讨论
  2. 微服务调用传string值_springCloud微服务项目 构建公共的feign调用
  3. c语言产生1-6,C语言 1-6小结.ppt
  4. 【python 8】python 装饰器
  5. py2.7+pyqt4开发端口检测工具
  6. 【OpenCV 例程200篇】68. 连续周期信号的傅立叶级数
  7. NB-IoT终端进网检测介绍
  8. mysql 键缓冲区_mysql:键缓存
  9. 如何检查Java中是否存在文件
  10. 2017年度工作总结
  11. Java设计模式——代理模式实现及原理
  12. 怎样在php中制作电子相册,如何制作纪念电子相册
  13. 在jmeter中怎么提取数据_Jmeter正则提取请求响应数据
  14. 第二工业大学计算机应用大专录取分,二工大|2019年上海第二工业大学专科层次依法自主招生各专业最低录取分数线...
  15. 变量的三重属性_内存寻梦环游记:一个变量的三重死亡
  16. Android 加载SDCard中so库
  17. 北京邮电大学计算机考研英语,我的考研心得——北京邮电大学计算机专业
  18. 阿里笔试之Java分词统计
  19. 联合学习 | 纵向LR原理综述
  20. 一位清华差生9年的北京生活,请你一字一句看完

热门文章

  1. java date postmax_Postman支持的几种数据类型请求方式
  2. 企业邮箱服务器删除邮件,企业邮箱Webmail对邮件进行删除或者清空邮件的方法...
  3. 10 i lt shell的if_shell脚本----if(数字条件,字符串条件,字符串为空)
  4. 如何设置定时器每天执行一次_游戏活动的自动循环——定时器管理
  5. 基于matlab 论文知网,基于MATLAB的校园图像处理与分析
  6. 巧识滤波、稳压、比较、运放电路
  7. JESD204B的AXI4-Lite时序分析(对比SRIO的AXI4-Lite时序分析)
  8. 计算机文化基础课程总结,计算机文化基础课程总结.docx
  9. python web框架 多线程_Django基础知识 web框架的本质详解
  10. sqlalchemy安装以及使用_防火阀的安装以及使用特点详细介绍