﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-elva-随笔分类-网络分析</title><link>http://www.cppblog.com/elva/category/4225.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 23 Apr 2010 07:40:06 GMT</lastBuildDate><pubDate>Fri, 23 Apr 2010 07:40:06 GMT</pubDate><ttl>60</ttl><item><title>IP组播与组播协议</title><link>http://www.cppblog.com/elva/archive/2010/04/23/113340.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Fri, 23 Apr 2010 07:18:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2010/04/23/113340.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/113340.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2010/04/23/113340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/113340.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/113340.html</trackback:ping><description><![CDATA[<span  style="color: rgb(9, 9, 9); font-family: 宋体; font-size: 14px; line-height: 21px; "><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">在<font face="arial">Internet</font>上，多媒体业务诸如：流媒体，视频会议和视频点播等，正在成为信息传送的重要组成部分。点对点传输的单播方式不能适应这一类业务传输特性--单点发送多点接收，因为服务器必须为每一个接收者提供一个相同内容的IP报文拷贝，同时网络上也重复地传输相同内容的报文，占用了大量资源。如图1.1所示。虽然IP广播允许一个主机把一个<font face="arial">IP</font>报文发送给同一个网络的所有主机，但是由于不是所有的主机都需要这些报文，因而浪费了网络资源。在这种情况下组播（<font face="arial">multicast</font>）应运而生，它的出现解决了一个主机向特定的多个接收者发送消息的方法。1989年，IETF通过<font face="arial">RFC1112</font>，定义了<font face="arial">Internet</font>上的组播方式。</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); "></p><p align="center" style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); "><img height="300" src="http://202.112.42.42/academy/cathedra/img/02052601.jpg" width="400"><br>图1.1</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">1. IP组播<br>　　IP组播是指一个IP报文向一个&#8220;主机组&#8221;的传送，这个包含零个或多个主机的主机组由一个单独的IP地址标识。主机组地址也称为&#8220;组播地址&#8221;，或者D类地址。除了目的地址部分，组播报文与普通报文没有区别，网络尽力传送组播报文但是并不保证一定送达。<br><br>　　主机组的成员可以动态变化，主机有权选择加入或者退出某个主机组。主机可以加入多个主机组，也可以向自己没有加入的主机组发送数据。主机组有两种：永久组和临时组。永久组的IP地址是周知的，由<font face="arial">Internet</font>管理机构分配，是保留地址。临时组的地址则使用除永久组地址外的非保留D类地址。<br><br>　　IP组播分组在互联网上的转发由支持组播的路由器来处理。主机发出的IP组播分组在本子网内被所有主机组成员接收，同时与该子网直接相连的组播路由器会把组播报文转发到所有包含该主机组成员的网络上。组播报文传递的范围由报文的生存期值(<font face="arial">TTL, Time-to-Live</font>)决定，如果TTL值等于或者小于设置的路由器端口TTL门限值（<font face="arial">TTL Threshold</font>），路由器将不再转发该报文。</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">2. 组播地址<br>　　IP组播地址，或称为主机组地址，由D类IP地址标记。D类IP地址的最高四位为&#8220;1110&#8221;，起范围从<font face="arial">224.0.0.0到239.255.255.255</font>。如前所述，部分D类地址被保留，用作永久组的地址，这段地址从<font face="arial">224.0.0.0-224.0.0.255</font>。比较重要的地址有：</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">　　224.0.0.1 － 网段中所有支持组播的主机<br>　　224.0.0.2 － 网段中所有支持组播的路由器<br>　　224.0.0.4 － 网段中所有的DVMRP路由器<br>　　224.0.0.5 － 所有的OSPF路由器<br>　　224.0.0.6 － 所有的OSPF指派路由器<br>　　224.0.0.9 － 所有RIPv2路由器<br>　　224.0.0.13 －所有PIM路由器</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">　　临时主机组的组播地址由网络管理员选择，他需要保证这个地址在一定的范围内没有其他的主机组在使用这个组播地址。</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">　　第2层的组播地址（组播MAC地址）可以从IP组播地址中衍生。计算方法是把IP地址的最后23位拷贝到MAC地址的最后23位，然后把这23位前面的那一位置为0。MAC地址的前24位必须为0x01-00-5E。例如：组播IP地址224.0.1.128，16进制表示为0xE0-00-01-10，最低的23位为0x00-01-10，计算得出的MAC地址为：0x01-00-5E-00-01-10。</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">3.Internet组管理协议（IGMP）<br>　　IGMP协议由主机成员关系协议发展而来，目前有两个版本：IGMPv1（RFC1112），IGMPv2 (RFC2326)。主机使用IGMP消息通告本地的组播路由器它想接收组播流量的主机组地址。如果主机支持IGMPv2，它还可以通告组播路由器它退出某主机组。组播路由器通过IGMP协议为其每个端口都维护一张主机组成员表，并定期的探询表中的主机组的成员，以确定该主机组是否存活。<br>IGMP消息被置于IP报文中传送。IGMPv1的报文如图1.2所示。IGMPv1中定义了两种消息类型：主机成员询问和主机成员报告。当某主机想要介绍某个组播流量时，它向本地的组播路由器发送"主机成员报告"消息，告知欲接收的组播地址。组播路由器收到"主机成员报告"消息后把该主机加入指定的主机组，并在设定的周期内向组播地址224.0.0.1(代表所有支持组播的主机) 发送"主机成员询问"消息。主机如果还想继续接收组播流量，必须发送"主机成员报告"消息。</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); "></p><p align="center" style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); "><img height="139" src="http://202.112.42.42/academy/cathedra/img/02052602.gif" width="400"><br>图1.2</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">　　IGMPv2的报文如图1.3所示。与IGMPv1不同的是它将版本字段和消息类型字段融合，把未使用字段作了"最大响应时间"字段。IGMPv2报文的消息类型字段定义了四种消息类型：</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); "></p><p align="center" style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); "><img height="146" src="http://202.112.42.42/academy/cathedra/img/02052603.gif" width="400"><br>图1.3</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">　　0x11 - 成员询问<br>　　0x12 - IGMPv1 成员报告<br>　　0x16 - IGMPv2 成员报告<br>　　0x17 - 退出主机组<br>　　IGMPv2向前兼容IGMPv1协议， IGMPv1的设备可以接收处理IGMPv2的消息报文。 IGMPv2中允许路由器对指定的主机组地址做"成员询问"，非该组的主机不必响应。如果某主机想退出，它可以主动向路由器发送"推出主机组"消息，而不必像IGMPv1中那样只能被动退出。</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">4. CGMP协议<br>　　在交换网络中，2层交换机可能即不了解哪个端口有哪些组播组，也不能在其源MAC地址表中找到组播MAC地址的表项。从而，交换机只能简单地把组播报文向所有端口转发，组播的优势将大大削弱。因此，Cisco提出CGMP协议，让组播路由器来配置交换机的组播转发表，从而彻底解决交换网络中的组播问题。<br><br>　　CGMP (&nbsp;<font face="arial">Cisco Group management protocol</font>)全称Cisco组管理协议，采用CGMP的路由器将主机加入或者退出组播组的IGMP消息通知交换机，交换机则根据该消息将该主机所在端口从组播转发表中加入或者删除。通过CGMP协议的使用，2层交换机可以掌握接收组播的主机的情况，从而提高整个网络的性能和利用率。</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">5. 分布树（<font face="arial">Distribution Tree</font>）<br>　　在传送组播分组时，指派路由器需要构造一个连接所有组播组成员的树。根据这个树，路由器得出转发分组的一条唯一路径。这个树就称为分布树。由于成员可以动态的加入和退出，分布树也必须动态更新。<br><br>　　根据构造方法的不同，分布树分为源分布树（<font face="arial">Source Distribution Tree</font>）和共享分布树（<font face="arial">Shared Distribution Tree</font>）。源分布树以组播源为根节点构造到所有组播组成员的生成树，通常也称为最短路径树（SPT）。共享分布树，也称为RP树或基于核心的树（<font face="arial">CBT, Core_based Tree</font>）。它的构造方法是以网络中的某一个指定的路由器为根节点，该路由器称为集合点或中心点，由此节点生成包含所有组成员的树。使用共享分布树时，组播源需要首先把组播分组发送给集合点路由器，再由这个路由器转发给其他的组成员。<br><br>6. 组播路由协议<br>　　组播路由协议的主要任务就是构造组播的分布树，使组播分组能够传送到相应的组播组成员。根据对网络中的组播成员的分布和使用的不同，组播路由协议分为两类：密集模式路由协议（DM）和稀疏模式路由协议（SM）。<br><br>　　DM路由协议通常用于组播成员较为集中、数量较多－网络的大部分用户、并且有足够带宽的网路环境，比如公司或园区的局域网。因此，DM路由协议用定期广播组播报文的方法维护组播分布树。DM协议只使用源分布树（SPT），组播流量被广播到网络中所有的组播路由器。DM路由协议有：</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); "></p><ul><li>DVMRP：距离向量组播路由协议。这是一种基于距离向量算法的组播路由协议。目前已基本上被PIM和MOSPF所取代。</li><li>MOSPF：组播OSPF协议。</li><li>PIM-DM：协议无关组播协议－密集模式。它不需要单独的组播协议，利用路由器上单播路由协议的路由表作反向路径转发检查，由此获得组播分布树。相比另两种协议，PIM-DM的开销要小很多，它用于组播源和目的非常靠近、接收者数量大于发送者数量并且组播流量比较大的环境中效果很好。</li></ul><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">　　在网路中稀疏分布、网络也没有充足带宽的情况，如广域网环境，可以使用SM路由协议。因此，SM路由协议采用选择性的建立和维护分布树的方式，由空树开始，仅当成员显式的请求加入分布树才做出修改。SM路由协议有：</p><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); "></p><ul><li>CBT：基于中心的分布树协议（RFC 2201）。协议由以一个中心的路由器为根构造一个共享分布树，所有的组播流量都经由这个中心路由器转发。</li><li>PIM-SM：协议无关组播协议－稀疏模式。工作原理与PIM－DM类似，但专门针对稀疏环境优化。适用于组播组中接收者较少、间歇性组播流量的情况。不同于PIM-DM的广播方式，PIM-SM定义了一个集合点(RP)，所有的接收者在RP注册，组播分组由RP转发给接收者。</li></ul><p style="font-size: 14px; line-height: 1.5; color: rgb(9, 9, 9); ">7．总结<br>　　单个数据流可以发送到多个客户端的组播能力已成为大多数多媒体应用的传输手段。组播技术利用一个IP地址使IP数据报文发送到用户组。IP组播采用了特殊定义的目的IP地址和目的MAC地址。IGMP为客户端提供加入和离开组播组的方式。CGMP使路由器为交换机配置组播转发表，并告诉交换机当前的组播成员。指派路由器根据对网络中的组播成员的分布和使用的不同采用密集模式DM或稀疏模式SM组播路由协议来构造组播的分布树，而这个分布树将在源子网和组播组之间确定一条唯一路径以提高数据传输效率。</p><div><br></div></span>
<img src ="http://www.cppblog.com/elva/aggbug/113340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2010-04-23 15:18 <a href="http://www.cppblog.com/elva/archive/2010/04/23/113340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>电信监控并记录网民上网记录原理分析及案例分析</title><link>http://www.cppblog.com/elva/archive/2007/05/14/24094.html</link><dc:creator>叶子</dc:creator><author>叶子</author><pubDate>Mon, 14 May 2007 07:21:00 GMT</pubDate><guid>http://www.cppblog.com/elva/archive/2007/05/14/24094.html</guid><wfw:comment>http://www.cppblog.com/elva/comments/24094.html</wfw:comment><comments>http://www.cppblog.com/elva/archive/2007/05/14/24094.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/elva/comments/commentRss/24094.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/elva/services/trackbacks/24094.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/elva/archive/2007/05/14/24094.html'>阅读全文</a><img src ="http://www.cppblog.com/elva/aggbug/24094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/elva/" target="_blank">叶子</a> 2007-05-14 15:21 <a href="http://www.cppblog.com/elva/archive/2007/05/14/24094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>