首页 > 编程知识 正文

你是组播用户无法通过,udp任意源组播

时间:2023-05-06 03:56:29 阅读:173417 作者:3333

首先,UDP UDP是用户数据报协议的简称,中文名称是用户数据报协议,OSI(opensysteminterconnection )参考模型中的无连接传输层协议提供面向事务的简单、不可靠的信息分发服务,IETF RFC 768在UDF UDP的IP消息中的协议号为17。

UDP和TCP之间的差异: http://blog.csdn.net/LJ heee/article/details/50823050

UDP详细信息: http://blog.csdn.net/LJ heee/article/details/51720594

UDP消息传递的方式分为三种单播Unicast。 是客户端和服务器之间的点对点连接。

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

多播MultiCast (主机之间“一对一组”的通信模式,即加入同一组的主机能够接收该组内的所有数据。

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

在Java API中,实现UDP方式的编程包括客户网络编程和服务器端网络编程,主要由DatagramSocket和DatagramPacket两个类来实现

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

UDP组播多播消息的目标地址使用类dIP地址,并且类d地址不能出现在IP消息的源IP地址字段中。 在单播数据传输过程中,一个分组传输的路径是从源地址到目的地地址,利用“逐跳”原理[路由]在IP网络上被传输。

但是,在ip多播环中,数据包的目的地地址不是一个,而是组,并形成组地址。 所有信息收件人都加入到一个组中,加入后,组地址中的数据会立即转发给收件人,组中的所有成员都可以接收数据包。 多播组的成员是动态的,主机可以随时加入或离开多播组。

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

组播地址多播组可以是持续的或临时的。 组播组地址中,有一部分被正式分配了,被称为永久组播组。 持久组播组可以保持其ip地址,组内的成员结构发生变化。 永久多播组中的成员数量可以是任意的,也可以是零。 其中,未保留供持续多播组使用的ip多播地址可由多播组使用。 224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0不进行分配,其他地址用于路由协议224.0.1.0~224.0.1.255为公众组播地址,可用于互联网; 224.0.2.0~238.255.255.255是用户可以使用的多播地址(临时组地址),在全网范围内有效; 239.0.0.0~239.255.255.255是本地管理多播地址,仅在特定的本地范围内有效。 组播是一对多的传输方式,其中有组播组的概念,发送端向一个组内发送数据,网络中的路由器通过底层的IGMP协议自动向监听该组的所有终端发送数据。 广播与多播类似,但是路由器将包分发到子网中的每个终端。 这些终端是否乐意接收数据包无关紧要。 UDP广播只在内部网(同一网络段)上有效,但多播可以在网络段之间同时发送数据。

UDP多播没有连接,因为采用了数据报的连接方式,所以不可靠。 也就是说,不能保证数据是否到达接收方,也不能保证数据到达的顺序。 但是,由于UDP不需要保证数据的可靠性,所以所有数据的传输效率都很快。

IGMP协议IGMP是IP多播的基础。 IP协议出现后,为了参与多播支持,IGMP应运而生。 IGMP实际上告诉路由器,有人对发送给该路由器所在子网内某个多播组的数据感兴趣,一旦该多播组的数据到达后面,路由器就不会丢弃它,而是将其转发给所有感兴趣的客户在不同子网内的a和b进行组播通信时,位于AB之间的所有路由器必须支持IGMP协议,否则无法进行AB之间的通信。

组播原理:组播首先一个用户申请组播组,该组播组维护在路由器上,其他用户申请加入组播组,当一个用户向组内发送消息时如果申请加入的组不在此级别的路由中,则表示路由器和交换机允许多播

协议通过,路由器将申请加入的操作向上级路由提交。广域网通信要经过多级路由器和交换机,几乎所有的网络设备都默认阻止组播协议通过(只允许本网段内,不向上级提交),这使得广域网上实现组播有一定局限。

UDP组播的基本步骤 建立socket socket和端口绑定 加入一个组播组 通过sendto / recvfrom进行数据的收发 关闭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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。