The Cable Guy - 2003年6月
Windows Server 2003可靠的多播协议组件
欲了解关于The Cable Guy所主持的所有专栏的列表和更多信息,请点击此处。
除了单播和广播支持,Internet协议(IP)(第4版)还提供一种发送和接收IP多播流量的机制。IP多播流量是一种一对多的传送过程,比单播流量更加高效(您不必向每个接收者发送一个单独的数据包)。而且和广播流量不同,多播流量通过路由器进行转发。有关IP多播的概述,请参见IP多播概述(The Cable Guy于2002年2月发表的专栏)。
典型的多播数据流使用用户数据报协议(UDP)进行发送。之所以没有使用传输控制协议(TCP),是因为TCP针对单播数据流而设计。通过UDP发送的多播数据流原本就不可靠,因为UDP不提供有保障的传输或被丢失数据包的重新传输。除非上层协议提供了可靠性,否则基于UDP的多播数据流中丢失的数据包就无法被检测或恢复。
Internet工程任务组(IETF)可靠多播传输工作组的使命就是创建一组标准,用以从一个或多个发送者向多个接收者传输可靠的数据流。有许多协议标准可在传输或应用层提供可靠的多播传输。现有的可靠多播协议可归为以下几个类别:
仅否定应答(NACK)
接收者使用NACK数据包向发送者请求重传多播数据流中丢失的数据包。NACK-only协议不需要来自网络中的路由器的任何附加支持。
基于树的应答(acknowledgement,ACK)
接收者使用肯定应答来表明成功接收的多播数据包。
异步分层编码(Asynchronous Layered Coding,ALC)
发送者提供转发错误纠正(forward error correction,FEC)——其中不带来自接收方或网络路由器的消息。
路由器辅助
接收方使用NACK数据包。 网络中的路由器辅助丢失数据包的重传。
本页内容
实用通用多播(Pragmatic General Multicast,PGM)概述
PGM包
添加和使用可靠的多播协议
PGM和可靠多播协议是如何工作的
更多信息
实用通用多播(Pragmatic General Multicast,PGM)概述
实用通用多播(PGM)是RFC 3208中描述的一种路由器辅助类型的可靠的多播协议。支持PGM的接收者使用NACK包来请求重传丢失的数据包。网络中支持PGM的路由器定义了一个逻辑PGM拓扑结构,并且能够帮助恢复丢失的数据包,即代表发送者发送这些丢失的数据包。PGM拓扑结构重叠在物理IP互联网络之上。PGM路由器定义了发送者及其接收者之间的一系列PGM跳(hop)。虽然RFC 3208中定义了PGM路由器,但是它并不是必需的。网络的PGM拓扑可以由发送者和接收者之间的单个逻辑跳(hop)组成。
PGM没有提供用于多播数据流的所有TCP功能。例如,PGM没有提供发送或接收方的流控制、字节流窗口或拥塞控制。PGM为支持PGM的应用程序提供了基本的可靠性。
PGM是一种传输层多播协议,它使用协议号113直接运行在IP上。它没有对自己的消息或多播数据传输使用TCP或UDP。PGM是Windows Server 2003系列所支持的唯一可靠的多播协议。下图显示了Windows Server 2003的TCP/IP体系结构中的PGM和其他组件之间的关系。
有关Windows网络体系结构的更多信息,请参见Windows 2000网络体系结构。
PGM包
RFC 3208定义了以下类型的PGM:
源路径消息(Source Path Messages,SPM)
原始数据(ODATA)
重传数据(RDATA)
否定应答(NAK)
NAK确认(NCF)
SPM、NCF和RDATA数据包包含“IP路由器警报”选项。下图显示了PGM包的基本结构。上层协议数据单元(protocol data unit,PDU)是由支持PGM的应用程序发送的。
注意: 由于PGM没有提供数据源身份验证或数据完整性,因此建议仅在专用intranet上使用它。
源路由消息(SPM)包
SPM由发送者定期发送,以便向网络中的PGM路由器提供PGM拓扑确定信息。SPM包括一个传输窗口和前一跳PGM路由器的地址。传输窗口是对重传过程可用的数据范围。前一跳PGM路由器的地址需要用于请求数据重传。
原始数据(ODATA)和重传数据(RDATA)数据包
ODATA包以发送者最初发送的形式(即按原样)包含多播数据流中的数据。由于PGM提供可靠的多播传输,ODATA报头具有多个与TCP报头中的相应字段类似的字段,包括如下:
Source Port(源端口)
一个16位的字段,用于识别发送者进程。
Destination Port(目标端口)
一个16位的字段,用于识别接收者进程。
Checksum(校验和)
一个16位的字段,用于检验ODATA报头和上层协议数据单元(PDU)的位级(bit-level)完整性。与TCP或UDP校验和不同,PGM校验和没有在校验和计算中整合IP报头中的字段。
Data Packet Sequence Number(数据包序列号)
一个32位的字段,它包含由发送者分配给该包的序列号。接收者使用Data Packet Sequence Number字段来检测多播数据流中丢失的数据包。
RDATA数据包用于重传的多播数据。RDATA数据包和ODATA数据包使用相同的报头和字段。ODATA和RDATA报头中的Type(类型)字段将ODATA数据包和RDATA数据包区别开来。RDATA数据包是由发送者或由指定的本地修复者(Designated Local Repairer,DLR)发送的。 DLR能够代表发送者重传多播数据流中的包。
否定应答(NAK)和NAK确认(NCF)包
接收者向它最近一跳的PGM路由器发送一个NAK包来请求一个丢失的数据包,这个丢失的数据包通过它的数据包序列号进行识别。PGM路由器通过向NAK的发送者发送一个NCF包来确认它接收到了该NAK。然后这个PGM向它的下一个最近的PGM路由器发送该NAK数据包。该PGM又使用一个NCF数据包进行响应。这个NAK和NCF数据包交换过程将继续针对每一个PGM跳进行下去,直至到达上游的发送者或某个DLR。
NAK和NCF报头中的关键字段如下:
Requested Sequence Number(请求的序列号)
对于NAK数据包,这个字段就是需要重传的数据包的序列号。 对于NCF数据包,这个字段就是正在被确认的NAK的序列号。
Source Network Layer Address(源网络层地址)
丢失的数据的最初发送者的单播IP地址。
添加和使用可靠的多播协议
为了在运行Windows Server 2003系列的成员之一的计算机上使用PGM,您必须添加“可靠的多播协议”组件并创建支持PGM的应用程序。
添加可靠主播协议
为了向某个连接添加可靠的多播协议,请完成以下步骤:
单击**“开始”,单击“控制面板”,然后双击“网络连接”**。
在**“网络连接”中,右键单击该连接,然后单击“属性”**。
在该连接的属性对话框中,单击**“安装”**。
在**“选择网络组件类型”中,双击“协议”**。
在**“网络协议”中,单击“可靠多播协议”,然后单击“确定”**。
要保存对连接属性所作的更改,请单击**“关闭”**。
“可靠多播协议”组件将出现在该连接正在使用的项的列表中,不过没有可配置的属性。 “可靠的多播协议”的驱动程序为Rmcast.sys,位于systemroot\System32\Drivers文件夹中。
编写支持PGM的应用程序
为了使用PGM,应用程序必须使用Windows Socket和PGM socket(套接字)选项。发送者应用程序使用Windows Socket来创建一个PGM数据包,将该socket绑定到任何地址,然后连接到多播组地址。接收者应用程序使用Windows Socket来创一个PGM数据包,将该socket绑定到多播组地址,对新的socket进行侦听,然后使用**accept()**函数来获得PGM会话的一个socket句柄。 有关使用Windows Socket来创建支持PGM的发送者和接收者应用程序的更多信息,请参见可靠多播编程(PGM)。
使用PGM的Microsoft产品包括Message Queuing(也称为MSMQ)和Automated Deployment Services(自动部署服务,ADS)。
注意: 应用程序必须运行在一个拥有管理员特权的帐户之下才能充当PGM发送者,才能接收相同多播会话的两个以上的流。
PGM和可靠多播协议是如何工作的
接收者采用以下步骤:
多播应用程序使用适当的可靠多播socket选项来打开一个侦听socket(listen socket)。
接收者发送一个Internet Group Management Protocol(IGMP)Membership Report(Internet组管理协议成员报告)消息,向本地路由器通知接收者在该多播组中的成员关系。
发送者采用以下步骤:
多播应用程序使用适当的可靠多播socket选项来打开一个发送socket。
多播应用程序开始发送数据。 ODATA数据包从序列号0开始发送,后续的ODATA包的序列号递增1。
ODATA数据包由支持多播的路由器从整个IPv4互联网络上转发到包含组成员的子网。
接收者采用以下步骤请求多播数据流中的某个丢失的数据包:
如果检测到一个丢失的数据包,多播组成员将向最近的PGM路由器发送一个单播NAK数据包。
这个PGM路由器将使用一个NCF数据包进行响应,以确认它接收到了该NAK。
路由器向客户端发送一个NCF来确认它接收到了该NAK。这个过程将逐跳重复,直至到达数据发送者或DLR。
发送者或DLR发送一个RDATA数据包用以替代原先丢失的ODATA数据包所丢失的数据。
如果网络中没有支持PGM的路由器,NAK将发送到发送者或DLR。
为了维持对PGM逻辑拓扑结构的感知,发送者将定期发送一个SPM数据包,其中包含它们自己的序列号。SPM序列号按整数单位逐一递增,用于检测SPM数据包的丢失情况。SPM还包含对应于数据流的前沿(leading edge)和后沿(trailing edge)序列号。前沿序列号向接收客户端指定应该已经接收的数据包。后沿是能够请求重传的最旧的数据包。
更多信息
更多关于IP多播和可靠的多播的信息,请参考以下资源:
如对本专栏的内容有任何疑问或想发表反馈信息,请致信Microsoft TechNet。请注意,我们不保证一定回复您的来信。
欲了解关于The Cable Guy的所有专栏的列表和更多信息,请点击此处。