udp 广播与组播

news/2024/5/20 19:41:58
UDP组播是采用的无连接,数据报的连接方式,所以是不可靠的.也就是数据能不能到达接受端和数据到达的顺序都是不能保证的.但是由于UDP不用保证数据的可靠性,所有数据的传送速度是很快的.

1. 组播的“根”

  组播从概念上来讲分为两部分:控制部分和数据部分。控制部分决定着组播的对象的组织方式。而数据部分决定了数据的传输方式。

  控制层有“有根”,“无根”两种情况。对于有根的控制层,存在着一个root和若干个leaf. root负责管理这个组播组,只有他能邀请一个leaf加入一个组播组(ATM就是有根控制的一个典型的例子)。对于无根的控制层,没有root,只有若干的leaf. 每一个leaf都能自己加入一个组播组(IP就是无根控制的典型例子)

  数据层也有“有根”,“无根”两种情况。对于有根数据层,从root发出的数据能到达每一个leaf,而从leaf发出的数据只能到达root.对于无根数据层,每一个leaf发出的数据能到达组播组中的每一个leaf(甚至包括他自己)。每一个leaf也能接受组播组里的任何数据包。

二.IP组播地址

       IP组播通信需要一个特殊的组播地址.IP组播地址是一组D类IP地址,范围从224.0.0.0 到 239.255.255.255。其中还有很多地址是为特殊的目的保留的。224.0.0.0到224.0.0.255的地址最好不要用,因为他们大多是为了特殊的目的保持的(比如IGMP协议)

三.IGMP协议

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

  当一个应用加入一个组播组后,就会向这个子网的所有路由器发送一个IGMP加入命令,告诉他子网内有人对发送到某一个组播组的数据感兴趣.路由器也会定时向子网内的所有终端发送一条查询消息,用于询问是否还有人对某个组播组的数据感兴趣。如果有的话,终端就会回应一条IGMP消息,路由器则继续转发这个组播组的数据。如果没有人回应这条消息,那么路由器就认为已经没有终端对这个组播组的数据感兴趣,就不会在转发关于这个组播组的数据了。在IGMP第二版中,一个终端推出组播组以后,会向路由器发送一个推出消息,路由器也会通过这个消息来判断是否还要继续转发关于这个组播组的数据了(IGMP第一版中没有这个功能)[这些事情都是底层的系统做的,你只要坐享其成就好了]

 四. winsock 1组播

  winsock 1的组播主要有以下几个步骤:

1. 建立支持数据报的scoket
2. 把socket和本地的一个端口绑定(以后会通过这个端口进行数据的收发)
3. 通过setsockopt  IP_ADD_MEMBERSHIP加入一个组播组
4. 然后就能通过sendto / recvfrom进行数据的收法
5. 通过 setsockopt IP_DROP_MEMBERSHIP离开一个组播组
6. 关闭socket

  如果你仅仅是想向一个组播组发送数据,而不要接受数据,那么可不用加入组播组,而直接通过sendto向组播组发送数据


五.winsock 2组播

  winsock 2组播主要是通过WSAJoinLeaf来实现的(WSAJoinLeaf的行为,返回值根据socket的模式,组播的实现构架有很大的关系)

  winsock 2组播的主要有以下几个步骤

1. 建立支持数据报的socket(用WSASocket建立socket,同2. 时设置组播的一些属性)
3. 把socket和本地的一个端口绑定(以后会通过这个端口进行数据的收发)
4. 通过WSAJoinLeaf加入一个组播组
5. 通过sendto / recvfrom进行数据的收发
6. 直接关闭socket,

7. 退出组播组


https://www.xjx100.cn/news/444369.html

相关文章

UDP 收/发 广播包

网络通信基础 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要知道程序可监听的端口。因为同一主机上的程序使用网络是通过端口号来区分的。 UDP Socket的使用过程: 1. 初始化网络库 2. 创建SOCK_DGRAM类型的Socket…

UDP广播:一对多数据发送

一、怎么样进行UDP一对多数据发送? 1.很容易想到的一种方法是:如果一个client 要向其他其他100个server发送数据,那应该怎么办?如果我知道其他100个 server的ip地址 和 端口号就可以了,那么我们在一对一的进行发送就可…

UDP广播与多播

一、UDP广播 1、广播的概念 使用UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信息封装到一个待发送的报文中并且发送出去。至于服务器端是否存在,或者能否…

基于 UDP 的 组播、广播详解

背景 有些时候我们在网络通信中也需要用到 组播(多播)、广播。现在我们来介绍如何实现。 建议:在此之前,关闭防火墙。 ubuntu: service ufw stop windows: 控制面板关闭 有关知识 基本概念 单播:两个主机间单对单的…

广播 UDP 发送与接收

发送方&#xff1a; /* * 文件名称&#xff1a;sendto.c * 创 建 者&#xff1a; * 创建日期&#xff1a;2022年09月08日 * 描 述&#xff1a; */ #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <arpa/…

UDP 单播、广播和多播

阅读目录(Content) 目录 一、UDP广播 二、UDP多播 1、多播&#xff08;组播&#xff09;的概念 2、广域网的多播 3、多播程序设计的框架 4、多播实现代码 三、UDP广播与单播 广播与单播的比较 使用UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器…

UDP广播的实现

一、广播的概念 广播&#xff1a;由一台主机向该主机所在子网内的所有主机发送数据的方式。 任何一个网段最后一个地址就是广播的地址 例如&#xff1a;192.168.5.103主机发送广播信息&#xff0c;那么&#xff0c;广播地址为192.168.5.255 则192.168.5.1~192.168.5.254所有…

UDP广播

概述&#xff1a; 网络上的广播指&#xff1a;由一台主机向该主机所在子网内&#xff08;同一个局域网&#xff09;的所有主机发送数据的方式。实现广播&#xff0c;离不开广播地址&#xff0c;同一个子网&#xff08;局域网&#xff09;的所有主机网卡都会接收所在网段广播地…