❶ 什么是IP组播单播、多播,在网络里面分别指的是什么很多人研究IP组播,那么IP组播到底是什么
一般是根据传输的消息特征将IP地址分为单播、广播或多播。
1 单播 (Unicast)
一个单播IP地址只能标识一台用户主机,一台用户主机只能识别一个单播IP地址。一份使用单播IP地址为目的地址的IP报文,只能被一台用户主机接收。
2 广播(Broadcast)
一个广播IP地址能够标识某确定网段内的所有用户主机,一份使用广播IP地址为目的地址的IP报文,能够被该网段内的所有用户主机接收。IP广播报文不能跨网段传播。 广播分组的目标IP地址的主机部分全为1,如:
C类网络192.168.1.0的默认子网掩码为255.255.255.0,其广播地址为192.168.1.255,其主机部分为十进制数255或二进制数11111111(全为1)。
3 组播/多播(Multicast)
一个组播IP地址能够标识网络不同位置的多个用户主机,一台用户主机可以同时识别多个组播IP地址。一份使用组播IP地址为目的地址的IP报文,能够被网络不同位置的多个用户主机接收。 多播地址范围为224.0.0.0~239.255.255.255。
组播的特点:
组播就是类似于发布-订阅模式,一端是出版商,进行数据发布(向组播地址发送数据),一端是订阅者,根据内容决定订阅哪些数据(加入多播组)。
出版商向组播地址发送数据,数据在网络中传输,只有一份就可以,经过交换机时,交换机之下的子网中如果没有人订阅,则数据继续传输;如果有人订阅,则交换机将把数据复制多份,转发给子网的订阅者。所以组播的最大好处就是节省带宽。
❷ 有谁能给我贴一份可用的 UDP 组播代码吗
组播技术可形象的描述如下:
假设一个企业分布于各地的子公司(两个以上)之间需要通过Internet进行实时的交换信息(数据,声音,图像),他们的计算机可能不属于同一物理网 络,甚至不属于同一自治系统,这种通信的特点是“多点”式的。子公司发出的数据希望其他子公司都能收到,而总部发出的指示全体子公司都应收到。这种多点通信方式为组内广播,即组播技术,也称多播技术,多目网关技术。
1.2、TCP/IP传送方式
组播技术是TCP/IP传送方式的一种。在我们讨论组播技术之前先来看看TCP/IP传送方式。TCP/IP传送方式有三种:单播,广播,组播。
单播(Unicast)传输:在发送者和每一接收者之间需要单独的数据信道。 如果一台主机同时给很少量的接收者传输数据,一般没有什么问题。但如果有大量主机希望获得数据包的同一份拷贝时却很难实现。这将导致发送者负担沉重、延迟长、网络拥塞;为保证一定的服务质量需增加硬件和带宽。
组播(Multicast)传输:它提高了数据传送效率。减少了主干网出现拥塞的可能性。组播组中的主机可以是在同一个物理网络,也可以来自不同的物理网络(如果有组播路由器的支持)。
广播(Broadcast)传输:是指在IP子网内广播数据包,所有在子网内部的主机都将收到这些数据包。广播意味着网络向子网主机都投递一份数据包,不论这些主机是否乐于接收该数据包。然而广播的使用范围非常小, 只在本地子网内有效,因为路由器会封锁广播通信。广播传输增加非接收者的开销。
组播是一种允许一个或多个发送者(组播源)发送单一的数据包到多个接收者(一次的,同时的)的网络技术。 组播源把数据包发送到特定组播组,而只有属于该组播组的地址才能接收到数据包。组播可以大大的节省网络带宽, 因为无论有多少个目标地址,在整个网络的任何一条链路上只传送单一的数据包。 它提高了数据传送效率。减少了主干网出现拥塞的可能性。组播组中的主机可以是在同一个物理网络, 也可以来自不同的物理网络(如果有组播路由器的支持)。
❸ 组播和广播的区别
广播:
主机之间一对所有的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
广播的优点:
1)网络设备简单,维护简单,布网成本低廉
2)由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。
广播的缺点:
1)无法针对每个客户的要求和时间及时提供个性化服务。
2)网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。例如有线电视的客户端的线路支持100个频道(如果采用数字压缩技术,理论上可以提供500个频道),即使服务商有更大的财力配置更多的发送设备、改成光纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服务。
3)广播禁止允许在Internet宽带网上传输。
组播:
主机之间一对一组的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。
组播的优点:
1)需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。具备广播所具备的优点。
2)由于组播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入端带宽的限制。IP协议允许有2亿6千多万个组播,所以其提供的服务可以非常丰富。
3)此协议和单播协议一样允许在Internet宽带网上传输。
组播的缺点:
1)与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。
2)现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中。
❹ c语言实现基于遗传算法的时延受限组播路由选择(受限最小生成树)
啊~~我们也学遗传算法呢~
代码已经发到你的邮箱里了,请及时查看的~
有什么问题可以Hi我呀,交流下
❺ c# UdpClient如何实现组播要求一对多相互发送和接收信息。
不用..一个就可以了...又可以组播又可以单播
收发都是啊~~~一个就能完成功能了.
组波还是单播都是使用Send函数.只是IPEndPoint这个参数不一样..何必用2个发呢....不同的发送方式.只需要修改这个参数就可以了啊
_localIpAddress = GetLocalIpAddress();
_msgSocket = new UdpClient(new IPEndPoint(IPAddress.Parse(_localIpAddress),_msgPort));
_msgSocket.EnableBroadcast = true;
_msgSocket.JoinMulticastGroup(_groupIP);
/// <summary>
/// 组播消息
/// </summary>
/// <param name="msg"></param>
public static void SendMsgToAll(string msg)
{
try
{
byte[] buffer = Encoding.Default.GetBytes(msg);
_msgSocket.Send(buffer, buffer.Length,_groupEP);
}
catch (Exception err)
{
throw err;
}
}
/// <summary>
/// 发送消息给指定IP
/// </summary>
/// <param name="msg">要发送的消息</param>
/// <param name="ip">接收方的IP地址</param>
public static void SendMsgToOne(string msg,string ip)
{
try
{
byte[] buffer = Encoding.Default.GetBytes(msg);
_msgSocket.Send(buffer, buffer.Length, new IPEndPoint(IPAddress.Parse(ip), _msgPort));
}
catch (Exception err)
{
throw err;
}
}
只要替换最后一个参数.就实现了组播和单播.
❻ c语言中的 netinet/in是什么意思
名称
netinet/in.h - Internet address family netinet / in.h - 互联网地址族
SYNOPSIS故事大纲
#include <netinet/in.h> #包括<netinet/in.h>
DESCRIPTION描述
The <netinet/in.h> header shall define the following types:该<netinet/in.h>头应确定以下类型:
in_port_t in_port_t
Equivalent to the type uint16_t as defined in <inttypes.h> .等价的类型uint16_t在定义<inttypes.h> 。
in_addr_t in_addr_t
Equivalent to the type uint32_t as defined in <inttypes.h> .等价的类型uint32_t在定义<inttypes.h> 。
The sa_family_t type shall be defined as described in <sys/socket.h> .该sa_family_t类型应被定义为描述<sys/socket.h> 。
The uint8_t and uint32_t type shall be defined as described in <inttypes.h> .该uint8_t和uint32_t类型应被定义为描述<inttypes.h> 。 Inclusion of the <netinet/in.h> header may also make visible all symbols from <inttypes.h> and <sys/socket.h> .标题包含的<netinet/in.h>也可从所有可见的符号<inttypes.h>和<sys/socket.h> 。
The <netinet/in.h> header shall define the in_addr structure that includes at least the following member:该<netinet/in.h>头应确定in_addr结构,至少包括以下成员:
in_addr_t s_addr in_addr_t s_addr
The <netinet/in.h> header shall define the sockaddr_in structure that includes at least the following members:该<netinet/in.h>头应确定SOCKADDR_IN结构,其中包括至少下列成员:
sa_family_t sin_family AF_INET. in_port_t sin_port Port number. struct in_addr sin_addr IP address. sa_family_t sin_family是AF_INET。in_port_t sin_port端口号。 结构in_addr sin_addr的IP地址。
The sin_port and sin_addr members shall be in network byte order.该sin_port和sin_addr成员应在网络字节顺序。
The sockaddr_in structure is used to store addresses for the Internet address family.该SOCKADDR_IN结构是用来存储家庭地址的Internet地址。 Values of this type shall be cast by applications to struct sockaddr for use with socket functions.值类型转换插座职能,应由申请与使用结构sockaddr的。
[ IP6 ] [ 肌醇 ] [备选案文开始] The <netinet/in.h> header shall define the in6_addr structure that contains at least the following member:该<netinet/in.h>头应确定in6_addr结构,至少包含以下成员:
uint8_t s6_addr[16] uint8_t s6_addr [16]
This array is used to contain a 128-bit IPv6 address, stored in network byte order.这个数组用来包含一个128位的IPv6地址,在网络存储字节顺序。
The <netinet/in.h> header shall define the sockaddr_in6 structure that includes at least the following members:该<netinet/in.h>头应确定sockaddr_in6结构,至少包括以下成员:
sa_family_t sin6_family AF_INET6. sa_family_t sin6_family AF_INET6。
in_port_t sin6_port Port number. in_port_t sin6_port端口号。
uint32_t sin6_flowinfo IPv6 traffic class and flow information. uint32_t sin6_flowinfo IPv6通信类和信息流。
struct in6_addr sin6_addr IPv6 address. 结构in6_addr sin6_addr IPv6地址。
uint32_t sin6_scope_id Set of interfaces for a scope. uint32_t sin6_scope_id范围一套接口。
The sin6_port and sin6_addr members shall be in network byte order.该sin6_port和sin6_addr成员应在网络字节顺序。
The sockaddr_in6 structure shall be set to zero by an application prior to using it, since implementations are free to have additional, implementation-defined fields in sockaddr_in6 .该sockaddr_in6结构应被设置为应用零一前使用它,因为可以自由的实现有执行定义的领域sockaddr_in6增加。
The sin6_scope_id field is a 32-bit integer that identifies a set of interfaces as appropriate for the scope of the address carried in the sin6_addr field.该sin6_scope_id字段是一个32位整数,在该领域的sin6_addr标识一组接口的地址进行适当的范围。 For a link scope sin6_addr , the application shall ensure that sin6_scope_id is a link index.对于一个链接范围sin6_addr的,应当确保sin6_scope_id是一个环比价格指数。 For a site scope sin6_addr , the application shall ensure that sin6_scope_id is a site index.对于一个场址范围sin6_addr的,应当确保sin6_scope_id是一个网站的索引。 The mapping of sin6_scope_id to an interface or set of interfaces is implementation-defined.该接口映射到一个或接口sin6_scope_id集是实现定义。
The <netinet/in.h> header shall declare the following external variable:该<netinet/in.h>头应宣布下列外部变量:
const struct in6_addr in6addr_any 常量结构in6_addr in6addr_any
This variable is initialized by the system to contain the wildcard IPv6 address.这个变量是由系统初始化包含通配符的IPv6地址。 The <netinet/in.h> header also defines the IN6ADDR_ANY_INIT macro.该<netinet/in.h>头还定义IN6ADDR_ANY_INIT宏。 This macro must be constant at compile time and can be used to initialize a variable of type struct in6_addr to the IPv6 wildcard address.这个宏必须保持在编译时,可以用来初始化一个类型变量的结构in6_addr到IPv6的通配符地址。
The <netinet/in.h> header shall declare the following external variable:该<netinet/in.h>头应宣布下列外部变量:
const struct in6_addr in6addr_loopback 常量结构in6_addr in6addr_loopback
This variable is initialized by the system to contain the loopback IPv6 address.这个变量是由系统初始化,控制回路的IPv6地址。 The <netinet/in.h> header also defines the IN6ADDR_LOOPBACK_INIT macro.该<netinet/in.h>头还定义IN6ADDR_LOOPBACK_INIT宏。 This macro must be constant at compile time and can be used to initialize a variable of type struct in6_addr to the IPv6 loopback address.这个宏必须保持在编译时,可以用来初始化一个类型变量的结构in6_addr到IPv6的环回地址。
The <netinet/in.h> header shall define the ipv6_mreq structure that includes at least the following members:该<netinet/in.h>头应确定ipv6_mreq结构,至少包括以下成员:
struct in6_addr ipv6mr_multiaddr IPv6 multicast address. 结构in6_addr ipv6mr_multiaddr IPv6组播地址。
unsigned ipv6mr_interface Interface index. 未签名的ipv6mr_interface接口索引。
[备选案文完]
The <netinet/in.h> header shall define the following macros for use as values of the level argument of getsockopt () and setsockopt () :该<netinet/in.h>头应确定水平的论点如下宏作为值使用getsockopt()和使用setsockopt() :
IPPROTO_IP IPPROTO_IP
Internet protocol.互联网协议。
IPPROTO_IPV6 IPPROTO_IPV6
[ IP6 ] [ 肌醇 ] [备选案文开始] Internet Protocol Version 6. Internet协议版本6。 [备选案文完]
IPPROTO_ICMP IPPROTO_ICMP
Control message protocol.控制消息协议。
IPPROTO_RAW IPPROTO_RAW
[ RS ] [ 遥感 ] [备选案文开始] Raw IP Packets Protocol.原始IP数据包协议。 [备选案文完]
IPPROTO_TCP IPPROTO_TCP
Transmission control protocol.传输控制协议。
IPPROTO_UDP IPPROTO_UDP
User datagram protocol.用户数据报协议。
The <netinet/in.h> header shall define the following macros for use as destination addresses for connect () , sendmsg () , and sendto () :该<netinet/in.h>头应确定目标地址为使用如下宏连接 () , sendmsg() ,和SendTo文件 () :
INADDR_ANY INADDR_ANY
IPv4 local host address. IPv4的本地主机地址。
INADDR_BROADCAST INADDR_BROADCAST
IPv4 broadcast address. IPv4的广播地址。
The <netinet/in.h> header shall define the following macro to help applications declare buffers of the proper size to store IPv4 addresses in string form:该<netinet/in.h>头应当载明下列事项,以帮助申请申报宏大小适当的缓冲区来存储的字符串形式的IPv4地址:
INET_ADDRSTRLEN INET_ADDRSTRLEN
16. 16。 Length of the string form for IP.长度为IP字符串形式。
The htonl () , htons () , ntohl () , and ntohs () functions shall be available as defined in <arpa/inet.h> .该htonl() , htons() , ntohl() ,和ntohs()函数应可在定义<arpa/inet.h> 。 Inclusion of the <netinet/in.h> header may also make visible all symbols from <arpa/inet.h> .标题包含的<netinet/in.h>也可从所有可见的符号<arpa/inet.h> 。
[ IP6 ] [ 肌醇 ] [备选案文开始] The <netinet/in.h> header shall define the following macro to help applications declare buffers of the proper size to store IPv6 addresses in string form:该<netinet/in.h>头应当载明下列事项,以帮助申请申报宏缓冲区的大小适当的形式存储的IPv6地址的字符串:
INET6_ADDRSTRLEN INET6_ADDRSTRLEN
46. 46。 Length of the string form for IPv6.长度为IPv6的字符串形式。
The <netinet/in.h> header shall define the following macros, with distinct integer values, for use in the option_name argument in the getsockopt () or setsockopt () functions at protocol level IPPROTO_IPV6:该<netinet/in.h>头应当载明下列事项宏,有明显的整数值,在参数的使用在option_name getsockopt()或使用setsockopt() IPPROTO_IPV6功能在协议级别:
IPV6_JOIN_GROUP IPV6_JOIN_GROUP
Join a multicast group.加入一个多播组。
IPV6_LEAVE_GROUP IPV6_LEAVE_GROUP
Quit a multicast group.退出一个多播组。
IPV6_MULTICAST_HOPS IPV6_MULTICAST_HOPS
Multicast hop limit.组播跳的限制。
IPV6_MULTICAST_IF IPV6_MULTICAST_IF
Interface to use for outgoing multicast packets.即将离任的接口用于多播数据包。
IPV6_MULTICAST_LOOP IPV6_MULTICAST_LOOP
Multicast packets are delivered back to the local application.多播数据包被传递回本地应用程序。
IPV6_UNICAST_HOPS IPV6_UNICAST_HOPS
Unicast hop limit.单播跳的限制。
IPV6_V6ONLY IPV6_V6ONLY
Restrict AF_INET6 socket to IPv6 communications only.限制AF_INET6到IPv6通讯插座只。
The <netinet/in.h> header shall define the following macros that test for special IPv6 addresses.该<netinet/in.h>头应当载明下列事项宏测试特殊的IPv6地址。 Each macro is of type int and takes a single argument of type const struct in6_addr * :每个宏是int 类型的常量 ,而所需的类型单一参数的结构in6_addr *:
IN6_IS_ADDR_UNSPECIFIED IN6_IS_ADDR_UNSPECIFIED
Unspecified address.未指定地址。
IN6_IS_ADDR_LOOPBACK IN6_IS_ADDR_LOOPBACK
Loopback address.环回地址。
IN6_IS_ADDR_MULTICAST IN6_IS_ADDR_MULTICAST
Multicast address.组播地址。
IN6_IS_ADDR_LINKLOCAL IN6_IS_ADDR_LINKLOCAL
Unicast link-local address.单播链路本地地址。
IN6_IS_ADDR_SITELOCAL IN6_IS_ADDR_SITELOCAL
Unicast site-local address.单播站点本地地址。
IN6_IS_ADDR_V4MAPPED IN6_IS_ADDR_V4MAPPED
IPv4 mapped address.映射的IPv4地址。
IN6_IS_ADDR_V4COMPAT IN6_IS_ADDR_V4COMPAT
IPv4-compatible address. IPv4兼容地址。
IN6_IS_ADDR_MC_NODELOCAL IN6_IS_ADDR_MC_NODELOCAL
Multicast node-local address.组播节点本地地址。
IN6_IS_ADDR_MC_LINKLOCAL IN6_IS_ADDR_MC_LINKLOCAL
Multicast link-local address.组播链路本地地址。
IN6_IS_ADDR_MC_SITELOCAL IN6_IS_ADDR_MC_SITELOCAL
Multicast site-local address.组播站点本地地址。
IN6_IS_ADDR_MC_ORGLOCAL IN6_IS_ADDR_MC_ORGLOCAL
Multicast organization-local address.组播组织本地地址。
IN6_IS_ADDR_MC_GLOBAL IN6_IS_ADDR_MC_GLOBAL
Multicast global address.全球多播地址。 [备选案文完]
❼ C语言实现基于网络编码的无线多跳网络组播路由算法设计
c语言实现网络,我想你是说用VC开放win32的应用程序吧,直接用API函数,不是c语言实现!
它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
1.一个C语言源程序可以由一个或多个源文件组成。 2.每个源文件可由一个或多个函数组成。 3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。 4.源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。 5.每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。 6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。
底下是重点了,C语言不是万能的
1. C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。 2. C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。 [C语言指针] 指针是C语言的一大特色,可以说是C语言优于其它高级语言的一个重要原因。就是因为它有指针,可以直接进行靠近硬件的操作,但是C的指针操作也给它带来了很多不安全的因素。C++在这方面做了很好的改进,在保留了指针操作的同时又增强了安全性。Java取消了指针操作,提高了安全性,适合初学者使用。
❽ 组播和广播的区别
一、主体不同
1、组播:为了减少在广播中涉及的不必要的开销,可以只向特定的一部分接收方(可以是域内也可以是域间)发送流量。
2、广播:指将报文发送到网络中的所有可能的接收者。
二、原理不同
1、组播:在通信中参与或感兴趣的主机需要处理相关的分组,流量只会被承载于它将被使用的链路上,并且只有任意组播数据报的一个副本被承载于这样的链路上。
2、广播:路由器简单地将它接收到的任何广播报文副本转发到除该报文到达的接口以外的每个接口。
三、特点不同
1、组播:通过发送方指明接收方,或是通过接收方独立地指明就可以完成这项工作。然后网络只负责向预期的或感兴趣的收件方发送流量。
2、广播:通过将地址中的主机部分全部置1形成的,特殊地质255.255.255.255对应于本地网络广播。
❾ 一个组播编程的例子以及组播和广播的区别
你首先要明白组播和广播的定义:
组播(multicasting)是一种多点投递的形式,它使用硬件技术,通过使用大量组播地址来通信.当某一组机器需要通信时,选择一个组播地址,并配置好相应的网络接口硬件,识别组播地址,从而收到该组播地址上分组的拷贝.
广播(broadcasting)是多点投递的最普遍的形式,它向每一个目的站投递一个分组的拷贝.它可以通过多个单次分组的投递完成,也可以通过单独的连接传递分组的拷贝,直到每个接收方均收到一个拷贝为止.
举个例子:县里开大会,只同时通知了A村、B村、C村参加就是组播;同时通知了所有的村子参加就是广播了!
❿ 如何辨别数据包是组播还是单播
D类的组播地址是不能分配给主机当作IP地址用的,是组播专用的地址。