为什么udp组播地址建立在udp基础之上 为什么

16517人阅读
网络编程(4)
活着的乐趣(7)
这篇文章相当低级,但相当重要!
我们周围一切几乎都依赖于把事情抽象成低等级,并在某一点把它具体化,在一些设计概念中,接口层十分清晰并且目标很集中,应用程序不用考虑操作系统如何工作,操作系统也不用考虑硬件如何工作,OSI模型的第4层不需要考虑第三层如何工作。所以我们只需要集中精力在某一层,就当下面的层正常工作,但这样能行吗?如果你写一个应用,你最好知道OS是怎么样工作的,并且要考虑数据库如何存储字符的,同样,一个好的操作系统必需要了解硬件是如何工作的。如果你认为TCP不需要考虑IP的实现那就搞错了。
所以,这里即使我们假设web应用和服务都运行在OSI第7层,现在我们住下面走走,到第4层(或更低层),看看那里在干什么。我们会讨论TCP和UDP的区别,什么是组播(multicast),它如何工作与如何不工作。相信我,这些东西很有用。
先说一下HTTP,我们现在正在用的直接与这个协议相关,HTTP和一些其它网络应用(SQL*NET, WCI搜索)一起工作在网络第7层,应用层,在第4层的TCP之上,那什么是TCP呢? TCP(传输控制协议)和UDP是internet的主要低层网络协议。它们都建立在另一层IP(Internet协议)之上,IP比它们差一层,在第3层。所以要理解TCP,要先看下IP,然后再回头看看TCP在上面干什么。
& & IP:(Internet协议)
IP拥有把一个数据包从一个地方发送到另一个地方的能力,通过提供一种”地方“或“设备”一个特定的地址(IP地址),并指定怎样通过地址在设备之间移动数据包来实现这个协议。现在,IP和下一层的协议之间的区别在于,在第2层的设备总是确切知道如何给其它网络设备发送信息,(第2层为链路层,通常表示为以太网或WiFi)在第2层,设备不但知道怎样发送数据到目的地(通常由MAC地址表示地址),同时也知道是否数据能不能到达目的地。(举个例子,以太网和WiFi简单地把整个数据包广播到整个网络,目的设备假设都在监听这个MAC地址,然后提取数据包,如果目的地不存在或者不在监听,以太网数据就无法到达。顺便提下,网络“嗅探器”正是利用这个广播机制来工作。用于调制解调器拨号连接的PPP协议可以发送任何东西到单个目标:你拨号的号码。
IP提供了发送数据到其它网络的途径,一个设备不需要知道具体路径就可以把一个东西到另一个到另一个网络,这就是“inter-net ”的由来:“在网络之间”。它通过指定一个路由规则,定义一个带有目标地址的数据包。这是基本的规则:如果目标在本地就直接发送(你知道目标在哪,因为它们在同一个网络),否则在一堆路由列表中找一个地址来发送。一个路由只遵守一个协议,除非地址同时属于两个或多个不同的网络,这种情况下会有不同的本地目的地址,也会产生一个更长的路由列表指向更多的未知地址。
目前为止,IP除了可以发送单个数据包到单个地址外不能干其它任何事情,当然它可以接收从任何一个网络发过来的包(不像其它低级的协议),但仅此而已。明显缺点如下:
IP不提供发送、接收、出错等通知。IP不提供“端口号”之类的标记来隔离发到目标IP地址的数据包。IP不提供双向通讯。IP不会用任何方式对多个包排序或分组。
最简单的比喻是IP好比邮政服务,你住邮箱里扔一张带地址的明信片,然后它就照着你写的地址寄过去了,寄到,或者没寄到,你并不知道。当明信片寄到时家时,你并不知道别的室友是不是读过它了。如果你想到一个回复,你的收件人不能在同一个卡片上写东西然后还给邮递员,他们要在自己的卡片上写字,贴上邮票,写上地址,最后自己寄出。
TCP:传输控制协议
虽然IP协议不提供这些功能,但TCP可以。如果你先看一下IP不提供的那些特性,再看看邮递然后可以说:“嗯?当然可以做双向通信!人们写信来来回回就像一直在对话一样”。或者,“你可以直接要求收信人或者邮局给你回一封信”。或者说:“算了笨蛋,你可以把明信片标上数字记号然后告诉收信人按顺序阅读,如果有丢失就告诉你”。好吧,你是对的,这就是TCP做的事情。它使用基本的IP(或邮政服务)并指定通过何种方式添加一些附加信息,以便实现这些特性。
所以,TCP真正解决的是如何实现在多个IP设备间进行可靠的多次通信。神马意思?这意味着你可以发送一系列消息(包),基于一个选定的会话(端口或连接),这个包会以同样的顺序接收,发送时不会丢包,同样也不会有重复。 它是这样做的:给所有的包都写一个端口号,用来把其它连接和会话区别开,同时给每个包一个序列号,接收方就能知道传输中是否有丢失。之后,TCP指定接收方响应每个接收的数据(并不强制每个包都响应,可以简单的回复:“我收到第13456个字节之前的全部数据,或者“我收到845到13433之间的数据”),这样发送方就知道是否要重新发送。最后,通信是双向的,不仅仅有应答,还可以让接收方不用指定地址就可以直接住回发信息,有点像给每个包附加一个写好自己地址的回复信封。
可以看到,如果丢包或顺序不对,TCP实际上需要做很多工作。如果我们继续邮局理论,TCP就像一个私人助理,他帮你收集、分类邮件,排好序,获取并阅读,再回复回去。如果邮政服务超级可靠,TCP的任务就很简单,只需要做一个中间人把文件分发出去就好,如果邮政服务损失了许多员工,或者有很多邮件要处理,TCP就要做很多工作,把丢失的包发回去,跟踪并存储许多信息。
& & UDP:用户数据协议
UDP就比TCP简单多了, 它和IP做的一样,并加上端口的概念,这样你就把消息发给另一个有IP地址的接收者。它没有顺序或连接,或双向连接,也没有应答。 你应该会认为UDP不靠谱,因为你知道TCP是一个可靠的连接方案,但是实际上在同一个网段,或者在信号很好的局域网,UDP实际上是非常可靠的。如没有丢包并包的按顺序依次到达(这个几乎是短局域网的常态),并不需要重新传输包,所以TCP的所有应答和等待只会浪费时间,增加网络延时。对于可以包容丢包的应用(实时音频和视频)来说,即使网络不给力,UDP也通常是一个好方案。它也经常用于小消息和通知。比如DHCP和DNS都使用UDP。值得一提的是,Unix网络文件系统(NFS)在局域网使用的是UDP。可能你觉得一个文件系统应该需要一个可靠的TCP连接,但是NFS的实现者觉得用UDP可以得到更好的性能,并建立一个专门的机制来保证可靠性。
顺便提一下,它被称作“用户数据报协议”是有原因的,因为它是由一帮系统管理员设计的。“数据报”是“包”的另一个名字,“用户”没有什么实际意思,就和“你”一样。就是说这个计算机程序和操作系统没什么关系。原因是低级的IP是写OS的人写,但是UDP提供了许多和数据报相同的功能,为“用户”程序(非OS)服务。
& & 多播(Multicasting)
这里可以简化下TCP/IP/UDP的相关讨论,默认我们知道IP(UDP和TCP一样)可以把数据包在一个网络中发到另一个设备。更准确点就是IP把数据包从一个IP地址发到另一个IP地址。多播的决窍就是在同一时间把一个数据包发送到多个设备,可以把一个特定的IP地址指定为多播地址,并同时发送到多个设备。
IP多播首先要知道的是只有UDP有多播,没有TCP多播这样的东西,为什么呢?多播的重点是高效的把同一个包尽可能多的发送到不同的,甚至可能是未知的设备。但是TCP连接可能要求丢包重发或者延时或重组顺序,这些操作可能非常消耗资源,不适于许多使用多播的应用场景。(同时多播不知道发出的包是不是已经到达,这个也导致不能使用TCP)。
参考前面的知道,常用的非多播的UDP(TCP)消息叫做单播(unicast)。
下面我们需要知道多播经常没法通过路由发到另一个网络。下面是部分原因:
多数多播包的TTL比较低: 所有的IP包都有一个“生存时间”(time-to-live),或者叫TTL。和DNS记录不一样,TTL指定一个包到达目的地之前跳过网络的最大次数。单播包通常被允许穿越30个网络(比如,被路由或”跳“过29个路由),穿过网络通常小于15次”跳越“,所以30的限制经常用于当网络配置的很烂时把数据包杀掉。但是许多程序发多播时把TTL设为一个很低的值,通常为0(这样消息不会离开自身的设备)。设置为1表示只能发到本地网络的计算机,设置为2 表示只能穿过一个路由。很少有应用想把多播发给整个校园网络的未知设备,更不会发给整个网络。诸多路由都设置了很高的TTL阈值:很多网络路由器,特别是WAN路由和internet网关路由都有很高的TTL阈值,这样它们就不会发送这些低TTL(如15)的多播包。这样可以防止多播从本地网络泄漏。路由器一般配置成完全不发送多播,或只发一些特定的地址,或配置成阻塞多播包。
UDP多播可能有点过于邪恶,但是它使用的次数可能远远超出你的预计。它不会用于网络视频网站比如YouTube,因为它需要当用户点播时再发送视频,而不是同时发给所有的用户,同样也不用于VoIP语音。它用于很多发现和自动配置,如Skype, iTunes 和 uPnP,也偶尔用于WCI入口。
来自/lmukadam/entry/tcp_udp_unicast_multicast_i_th
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:232570次
积分:3056
积分:3056
排名:第9053名
原创:73篇
转载:15篇
评论:70条
(1)(1)(2)(2)(6)(1)(2)(4)(1)(1)(2)(1)(1)(1)(1)(2)(9)(5)(1)(8)(5)(6)(8)(7)(3)(2)(4)(1)(1)(3)
搞了个二手城市山地车骑,每天骑到出汗,一身轻松。 ======================================== 开始写些学习心得,既有利于整理自己思路,又能存档备查,真好,也有不好的,就是学习到很晚了,还要花不短的时间来写,那个困啊。 ================================================================ 排名19675,“千里之内”了! 要继续努力!21064人阅读
&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. 建立支持数据报的scoket2. 把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. 退出组播组
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:186417次
积分:3070
积分:3070
排名:第9008名
原创:112篇
转载:75篇
评论:19条
(1)(1)(2)(1)(1)(2)(1)(1)(2)(1)(2)(4)(10)(2)(5)(95)(2)(3)(11)(13)(8)(2)(1)(1)(1)(1)(1)(3)(2)(3)(1)(4)(1)&&源码搜搜[中文],大家一起找最好的开源代码。
&&请提交您认为需要收录的源码网站。
udp 组播udp_sock_multicast.z - socket实现udp组播,需要用UDP通信可以参照-udp multicast socket implementation标签:DELPHI, 网络编程&评论:0条
说明:UDP组播VC例程Socket标签:Visual C++&评论:0条
UDPSTREX.rar - 一个UDP客户端将接受到的UDP数据组播转发出去,以便多个客户端接收-A UDP client to receive the UDP multicast forwarding data out to multiple clients to receive标签:Visual C++, TCP/IP Stack&评论:0条
VC_UDPRCV.rar - VC++6编译,UDP组播程序,分为发射端和接收端两个部分,这是接收端程序-VC 6 compiler, UDP Multicast procedures, divided into transmitter and receiver in two parts, which is receiving end procedures标签:Visual C++, 网络编程&评论:0条
VC_UDPSND.rar - VC++6编译,UDP组播程序,分为发射端和接收端两个部分,这是发射端程序-VC 6 compiler, UDP Multicast procedures, divided into transmitter and receiver in two parts, which is to launch a process-标签:Visual C++, 网络编程&评论:0条
NetDoc.rar - 网络测试工具,一个发送,一个接收.UDP包,广播或者组播可选-network test tools, a sending, receiving one. UDP packet, broadcast or multicast optional标签:Visual C++, 网络编程&评论:0条
UDPMulticastVCroutin - UDP组播VC例程Socket-UDP Multicast VC routines Socket标签:Visual C++, 通信&评论:0条
2.2 启动/关闭IGMP Snooping 2-52.2.3 配置路由器端口老化时间 2-52.2.4 配置响应查询最晚时间 2-62.2.5 配置组播组成员端口老化时间 2-62.3 IGMP Snooping的监控与维护 2-62.4 IGMP Snooping典型配置举例 2-82.4.1 启动IGMP Snooping 2-82.标签:Windows平台&评论:0条
针对无线Mesh网络组播中包丢失严重的问题,提出了保持包的IP层不变,而改变包的目的MAC域,...对候选节点采用单播形式发送包,对其它节点采用组播形式发送包.在实际网络环境中的大量实验表明,优化组播减小了数据包的丢失率,提高了网络的吞吐量,具有较好的组播视频流效果标签:电子通讯&评论:0条
UdpMulticast.rar - 一个UDP多播(组播)示例-a UDP Multicast (multicast) example标签:Visual C++, 网络编程&评论:0条
在VPN中应用组播的实施方案
大家可以下载学习一下Vpn标签:VPN, 在VPN中应用组播的实施方案&评论:0条
UDPmulticastforsomeu - 对于UDP组播的一些认识-UDP multicast for some understanding标签:Others, 文档处理&评论:0条
说明:这个实例实现了加入和离开组播组、在组播组中发送及接收数据、利用组播实现时间服务器、利用组播实现网络教学功能标签:Java&评论:0条
降低路由控制开销是MANET网络组播路由协议节省节点能量,提高带宽利用率的关键因素之一。本文研究了组播路径近邻节点对路由维护的作用以及链路的连通性,分别提出了一个新的泛k-洪约束算法和一个混合泛洪模式。基于泛k-洪约束算法和混合泛洪模式,提出一个新的按需组播路由协议ODMRP-CF,ODMRP-CF协议通过选择k-路由近邻节点转发泛洪分组来提高泛洪效率。标签:电子通讯&评论:0条
说明:演示网络编程中的组播,并对其中的函数做了详细说明标签:Visual C++&评论:0条
VC-IP-UDP-zubo.rar - VC组播实例,这是一个很好的VC编写组播程序原代码。 -VC Multicast example, this is a good VC Multicast procedures to prepare the original code标签:Visual C++, TCP/IP Stack&评论:0条
arp攻击防护和组播标签:电信技术&评论:0条
说明:可在局域网中组播方式发送视频流,将A.MPG文件放在当前目录即可发出,(所有的网卡接收灯都在闪烁)此程序是开发视频直播系统所用的测试程序,为感激站长先生而公开。罗远工作室标签:Asm&评论:0条
computernetwork.rar - 这是一个用c++语言实现的网络中的TCP UDP 以及组播通信的程序,具有很好的借鉴意义-This is a used c++ Language realize the network TCP UDP and multicast communication procedures, a good reference标签:C++, 网络编程&评论:0条
详细的组播技术资料标签:专题技术&评论:0条
CopyRight (&)
All Rights Reserved&接收udp数据问题,急!!!用vlc发送ts媒体流到一个组播地址,然后在组播上收取这些媒体流,存为本地文件,用的是udp传输,为什么收到的文件总是比原来的文件小几百K,视频时间也少一两秒,已经把socket缓存设置的很大了,丢包问题不是很严重了,感觉是有一部分数据在什么地方未读到或读到未写入,求高人指点。
3种情况。(1)网络性能不稳定,导致丢包。(2)如果你的缓冲区定义在栈上,那么其存储的最大空间为1M,除非你设定了栈的初始大小,而非使用默认值。一旦接收到的数据超出范围,截断。(3)数据的接收同样也受制于网络设备的缓冲区,如果数据大小超过其能接收到大小,也会发生截断的。udp 广播与组播
我的图书馆
udp 广播与组播
& 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. 建立支持数据报的scoket2. 把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. 退出组播组&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. 建立支持数据报的scoket2. 把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. 退出组播组
发表评论:
TA的最新馆藏[转]&

我要回帖

更多关于 vlc播放udp组播卡顿 的文章

 

随机推荐