Mr.Chan

导航

Windows Server 2003可靠的多播协议组件

除了单播和广播支持,Internet协议(IP)(第4版)还提供一种发送和接收IP多播流量的机制。IP多播流量是一种一对多的传送过程,比单播流量更加高效(您不必向每个接收者发送一个单独的数据包)。而且和广播流量不同,多播流量通过路由器进行转发。有关IP多播的概述,请参见IP多播概述The Cable Guy于2002年2月发表的专栏)。

典型的多播数据流使用用户数据报协议(UDP)进行发送。之所以没有使用传输控制协议(TCP),是因为TCP针对单播数据流而设计。通过UDP发送的多播数据流原本就不可靠,因为UDP不提供有保障的传输或被丢失数据包的重新传输。除非上层协议提供了可靠性,否则基于UDP的多播数据流中丢失的数据包就无法被检测或恢复。

Internet工程任务组(IETF)可靠多播传输工作组的使命就是创建一组标准,用以从一个或多个发送者向多个接收者传输可靠的数据流。有许多协议标准可在传输或应用层提供可靠的多播传输。现有的可靠多播协议可归为以下几个类别:

1.

仅否定应答(NACK)

接收者使用NACK数据包向发送者请求重传多播数据流中丢失的数据包。NACK-only协议不需要来自网络中的路由器的任何附加支持。

2.

基于树的应答(acknowledgement,ACK)

接收者使用肯定应答来表明成功接收的多播数据包。

3.

异步分层编码(Asynchronous Layered Coding,ALC)

发送者提供转发错误纠正(forward error correction,FEC)——其中不带来自接收方或网络路由器的消息。

4.

路由器辅助

接收方使用NACK数据包。 网络中的路由器辅助丢失数据包的重传。

*
本页内容
实用通用多播(Pragmatic General Multicast,PGM)概述 实用通用多播(Pragmatic General Multicast,PGM)概述
PGM包 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和其他组件之间的关系。

cg060301

有关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的应用程序。

添加可靠主播协议

为了向某个连接添加可靠的多播协议,请完成以下步骤:

1.

单击“开始”,单击“控制面板”,然后双击“网络连接”

2.

“网络连接”中,右键单击该连接,然后单击“属性”

3.

在该连接的属性对话框中,单击“安装”

4.

“选择网络组件类型”中,双击“协议”

5.

“网络协议”中,单击“可靠多播协议”,然后单击“确定”

6.

要保存对连接属性所作的更改,请单击“关闭”

“可靠多播协议”组件将出现在该连接正在使用的项的列表中,不过没有可配置的属性。 “可靠的多播协议”的驱动程序为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和可靠多播协议是如何工作的

接收者采用以下步骤:

1.

多播应用程序使用适当的可靠多播socket选项来打开一个侦听socket(listen socket)。

2.

接收者发送一个Internet Group Management Protocol(IGMP)Membership Report(Internet组管理协议成员报告)消息,向本地路由器通知接收者在该多播组中的成员关系。

发送者采用以下步骤:

1.

多播应用程序使用适当的可靠多播socket选项来打开一个发送socket。

2.

多播应用程序开始发送数据。 ODATA数据包从序列号0开始发送,后续的ODATA包的序列号递增1。

3.

ODATA数据包由支持多播的路由器从整个IPv4互联网络上转发到包含组成员的子网。

接收者采用以下步骤请求多播数据流中的某个丢失的数据包:

1.

如果检测到一个丢失的数据包,多播组成员将向最近的PGM路由器发送一个单播NAK数据包。

2.

这个PGM路由器将使用一个NCF数据包进行响应,以确认它接收到了该NAK。

3.

路由器向客户端发送一个NCF来确认它接收到了该NAK。这个过程将逐跳重复,直至到达数据发送者或DLR。

4.

发送者或DLR发送一个RDATA数据包用以替代原先丢失的ODATA数据包所丢失的数据。

如果网络中没有支持PGM的路由器,NAK将发送到发送者或DLR。

为了维持对PGM逻辑拓扑结构的感知,发送者将定期发送一个SPM数据包,其中包含它们自己的序列号。SPM序列号按整数单位逐一递增,用于检测SPM数据包的丢失情况。SPM还包含对应于数据流的前沿(leading edge)和后沿(trailing edge)序列号。前沿序列号向接收客户端指定应该已经接收的数据包。后沿是能够请求重传的最旧的数据包。

 

posted on 2005-05-25 22:07  cunshen  阅读(1602)  评论(0编辑  收藏  举报