Windows Pragmatic General Multicast (PGM)远程代码执行:Windows Pragmatic General Multicast(PGM)是一种用于网络通信的协议,特别用于组播(multicast)应用。PGM协议主要用于提供可靠的数据传输,适用于大规模的网络环境,如多播视频流、实时数据传输等
可靠多播编程 (PGM) - Win32 apps | Microsoft Learn
PGM 发送方和接收方 - Win32 apps | Microsoft Learn
RFC 3208 - PGM Reliable Transport Protocol Specification
PGM(Pragmatic General Multicast) 是一种可靠的多播协议,专门设计用于解决传统 IP 多播协议中的可靠性问题。它能够确保在网络不稳定或出现丢包时,数据能可靠地传递给接收方。下面是对您提到的 PGM 在 Windows 上的实现 以及相关功能的详细解释。
PGM 在 Windows 中的实现
- 平台支持:
- 从 Windows Server 2003 和更高版本开始,Windows 内置支持 PGM 多播协议。
- 在 Windows XP 中,PGM 仅在安装 Microsoft 消息队列(MSMQ)3.0 之后支持。
主要特点
-
可靠传输:
- PGM 是一种 接收方可靠 协议,这意味着接收方负责确保接收到所有数据,即使某些数据包丢失,接收方可以请求重新传输丢失的部分数据。
- 这种设计免除了发送方的负担,使其无需担心丢包的问题。
-
无重复数据传输:
- PGM 保证数据无重复传送,这对多播应用非常重要,避免了接收方重复接收相同的数据包。
-
可伸缩性:
- 适用于大规模的多播应用,能够高效地处理多个发送方和接收方之间的通信。
-
丢包检测与恢复:
- 接收方可以检测到丢失的数据包,并请求发送方进行重传。
- 如果数据丢失是不可恢复的,接收方可以通知应用程序该数据不可恢复。
-
不保证排序:
- PGM 不保证数据包的传输顺序,也不支持已确认的传递(即并不确保所有数据包都按照发送顺序到达接收方)。
适用场景
PGM 特别适合那些需要从多个源向多个接收方传输无重复多播数据的应用。例如,金融数据传输、实时视频流、大规模信息分发等场景。
Windows 上的 PGM 配置
在 Windows 中,您可以通过 Windows 套接字 API 创建和管理 PGM 应用。以下是一些关键主题:
-
PGM 发送方和接收方:
- 发送方负责推送数据到指定的多播组,而接收方则负责接收来自多播组的数据。
-
PGM 发送方选项:
- 发送方可以配置一些选项,如数据发送频率、缓冲区大小等,来优化多播的性能。
-
发送和接收 PGM 数据:
- 发送方将数据发送到多播组,接收方订阅该组并接收数据。数据丢失时,接收方可以请求重新传输。
-
多宿主与 PGM:
- 多宿主功能使得一个 PGM 应用可以跨多个网络接口运行,提高网络容错性。
-
PGM 套接字选项:
- 通过 Windows 套接字 API,您可以为 PGM 配置各种套接字选项,如设置缓冲区大小、启用/禁用重传机制等。
如何使用 PGM 开发应用
-
初始化套接字:
- 使用
WSAStartup来初始化 Windows 套接字库,然后使用socket()函数创建一个套接字。
- 使用
-
配置套接字选项:
- 配置 PGM 特定的套接字选项,例如
PGM_MAX_PACKET_SIZE(最大数据包大小),PGM_SEND_WINDOW_SIZE(发送窗口大小)等。
- 配置 PGM 特定的套接字选项,例如
-
发送和接收数据:
- 通过调用
sendto()发送数据到多播组,使用recvfrom()接收多播数据。
- 通过调用
-
管理接收数据:
- 使用接收到的数据进行进一步处理,如果数据丢失,可以请求重传。
参考文献:
有关 PGM 协议的详细信息,可以参考 RFC 3208,该文档由 IETF 提供,详细描述了 PGM 的工作原理和实现细节。
RFC 3208 - PGM Reliable Transport Protocol Specification
PGM 协议为 Windows 提供了一个高效、可靠的多播解决方案。它通过接收方的可靠性机制保证了数据的完整性,适合那些要求高可用性和大规模数据传输的场景。通过 Windows 套接字 API,开发者可以方便地实现基于 PGM 的可靠多播应用。
PGM(Pragmatic General Multicast)是一种可靠的多播协议,通常用于需要大规模数据传输且对数据可靠性要求较高的应用场景。由于它能够保证数据的可靠传输并提供丢包检测与恢复,PGM 适用于各种需要从多个源向多个接收方发送数据的环境。以下是一些典型的 PGM 应用场景:
1. 实时视频流和多媒体广播
- 场景描述:PGM 可用于需要传输大量实时数据(如视频和音频流)的应用。例如,在线教育平台、网络电视广播和体育赛事直播等。这些场景要求低延迟并保证视频内容不丢失。
- PGM优势:它通过丢包检测和恢复机制,确保即使在网络质量不佳的情况下,视频和音频数据依然能可靠传输。
2. 金融市场数据分发
- 场景描述:在金融行业,特别是股票市场或外汇市场,实时数据(如股票报价、交易信息等)的传输是至关重要的。大量的交易终端需要快速、可靠地接收数据。
- PGM优势:PGM 可以确保金融数据的可靠传输,即使在高负载的网络环境下,数据丢失或重复接收也能得到有效处理,保证市场数据的精确性和时效性。
3. 分布式计算和大规模数据处理
- 场景描述:在大规模分布式系统中,多个节点可能需要同时接收来自多个数据源的信息。例如,大数据处理平台、云计算应用、集群计算环境等。
- PGM优势:PGM 可以确保数据从多个计算节点传输到其他节点时的完整性和可靠性,避免数据丢失或重复,确保计算任务的一致性和结果的正确性。
4. 灾难恢复和备份系统
- 场景描述:在灾难恢复和备份系统中,尤其是跨地区的数据同步时,需要保证数据在网络中传输的可靠性。例如,多个数据中心之间的备份文件传输。
- PGM优势:PGM 能够在不同数据中心间传输关键备份数据时,确保在数据丢失或传输中断的情况下,能够通过重传机制恢复丢失的数据。
5. 物联网(IoT)应用
- 场景描述:物联网设备在不同的网络条件下需要向多个接收方发送实时数据。例如,智能城市中的传感器网络、智能电网数据传输等。
- PGM优势:PGM 适用于需要高可靠性和可扩展性的 IoT 系统,能够保证传感器数据无丢失并按需传送到多个接收方,确保系统的稳定运行。
6. 网络游戏和虚拟世界
- 场景描述:在多玩家网络游戏中,游戏数据(如玩家位置、事件发生等)需要实时传输到多个客户端。游戏中的数据传输需要低延迟和高可靠性,以确保玩家体验。
- PGM优势:PGM 可以提供低延迟的多播通信,保证游戏数据的同步传输,即使在网络拥堵时也能避免丢包,提高游戏的可靠性和玩家体验。
7. 软件分发和更新
- 场景描述:在大规模软件更新系统中,成千上万的客户端需要接收最新的软件包或安全补丁。例如,操作系统更新、企业应用软件升级等。
- PGM优势:通过 PGM,可以有效地向多个客户端进行软件的可靠推送,确保每个客户端都能接收到最新的软件包和更新文件。
8. 广播和通信协议
- 场景描述:在广播通信系统中,需要保证所有接收者能够接收到相同的信息。无论是无线广播、卫星通信还是数据广播,可靠的数据传输都是关键。
- PGM优势:PGM 可以确保数据可靠地从广播源传输到多个接收方,避免数据丢失,并且能够处理传输中的故障和丢包问题。
PGM 协议非常适合需要高可靠性和大规模数据分发的应用,尤其是当数据需要从多个源广播到多个接收方时。它在实时数据传输、分布式计算、金融数据分发、灾难恢复等领域表现出了独特的优势。通过 PGM,开发者能够确保在网络条件不稳定或负载较高的情况下,数据能够安全且高效地传输到所有目标节点。
Windows Pragmatic General Multicast(PGM)是一种用于网络通信的协议,特别用于组播(multicast)应用。PGM协议主要用于提供可靠的数据传输,适用于大规模的网络环境,如多播视频流、实时数据传输等。
怎么样:
PGM协议的特点是提供可靠的组播传输,即使是在网络不稳定或存在丢包的情况下,也能保证数据完整和顺序。这是通过以下几个机制实现的:
- 可靠性保障:PGM通过应答机制和重传机制,确保数据包在传输过程中不会丢失,并且按顺序到达。
- 适应性强:PGM适用于不同规模的网络,不会因为网络条件的变化而影响数据的可靠传输。
- 低延迟:在保证可靠性的同时,PGM也尽量减少传输延迟,确保实时性。
为什么:
PGM协议的引入是为了填补传统的组播协议(如IP Multicast)在可靠性方面的不足。标准的IP Multicast虽然适用于大规模的网络传输,但它并不保证数据的可靠传输。在一些对数据可靠性要求高的应用中,比如金融数据传输或实时视频流,PGM提供了比传统组播协议更高的可靠性和稳定性。
为什么Windows支持PGM:
Windows支持PGM协议的主要目的是为了帮助开发者在Windows平台上构建高可靠性的组播应用,尤其是在大规模网络环境下。通过Windows的PGM实现,开发者可以更加方便地创建支持高可靠性和低延迟的组播应用。
PGM是为了提升组播通信的可靠性,特别适用于对传输质量有较高要求的网络应用。
Windows Pragmatic General Multicast(PGM)是一种用于可靠组播传输的协议,并不涉及远程代码执行。PGM 是一种网络协议,用于在 IP 网络中进行多播传输,并提供可靠的数据传输机制。
远程代码执行(Remote Code Execution, RCE)是指攻击者能够在远程系统上执行恶意代码的行为。然而,PGM 协议本身不包含与远程代码执行有关的漏洞或安全问题。
如果你提到的是 PGM 协议存在远程代码执行漏洞的特定情况,请提供更具体的信息和上下文,以便我能够帮助你更好地理解和回答你的问题。
请注意,在任何情况下,远程代码执行都是一种危险的安全漏洞,可能导致严重后果。为了保护系统安全,建议始终使用最新版本的软件,并及时应用补丁程序和安全更新来修复已知的漏洞。此外,采取适当的防护措施如防火墙、网络隔离和访问权限配置,也是保护系统免受远程代码执行攻击的重要步骤。
微软 Windows 中的 Pragmatic General Multicast (PGM) 协议确实存在一个需要关注的远程代码执行漏洞。下面这个表格汇总了它的关键信息,方便你快速了解:
| 漏洞项 | 详细信息 |
|---|---|
| 漏洞名称 | Windows Pragmatic General Multicast (PGM) 远程代码执行漏洞 |
| 相关 CVE | CVE-2023-36397 , CVE-2023-24943 , CVE-2023-29363, CVE-2023-32014, CVE-2023-32015 |
| 威胁等级 | 严重 |
| 受影响产品 | 多个 Windows Server 版本 (如 2008, 2012, 2016, 2019, 2022) 和部分 Windows 10/11 桌面系统 |
🔍 漏洞详解与影响
-
漏洞根源:此漏洞源于 Windows 消息队列服务在 PGM 服务器环境中运行时,对用户输入验证不足。攻击者可以通过网络发送特制文件触发此漏洞,从而在目标系统上执行任意代码。
-
重要前提:系统必须安装了 MSMQ (Microsoft 消息队列) 服务,并且配置在 PGM 环境下运行。该服务默认并不安装。
-
-
潜在影响:一旦攻击者成功利用该漏洞,可以在受影响系统上远程执行任意代码,可能导致服务器被完全控制。
🛡️ 如何防护与修复
确保你的系统受到保护,请按照以下步骤操作:
-
安装最新补丁
最根本的解决方法是安装微软发布的最新安全补丁。你可以通过系统的 Windows Update 自动更新,也可以从 Microsoft Update 目录手动查找并下载对应你操作系统版本的补丁。 -
检查 MSMQ 服务
由于该漏洞的利用需要系统安装并运行了MSMQ服务且在PGM环境中,你可以通过以下步骤检查:-
打开 "控制面板" -> "程序和功能" -> "启用或关闭 Windows 功能"。
-
在列表中找到 "Microsoft 消息队列 (MSMQ) 服务器"。如果此项未勾选,则说明你的系统未安装该服务,通常不受此漏洞影响。
-
虽然这个PGM远程代码执行漏洞威胁等级高,但其利用前提是系统安装了特定的MSMQ服务并运行在PGM环境下。你可以通过安装官方补丁和检查相关服务是否启用来有效防护。
网络工作组
T. Speakman
请求评论:3208 Cisco Systems
类别:实验性 J. Crowcroft
UCL
J. Gemmell
Microsoft
D. Farinacci
Procket Networks
S. Lin
Juniper Networks
D. Leshchiner
TIBCO Software
M. Luby
Digital Fountain
T. Montgomery
Talarian Corporation
L. Rizzo
University of Pisa
A. Tweedly
N. Bhaskar
R. Edmonstone
R. Sumanasekera
L. Vicisano
Cisco Systems
2001年12月
PGM可靠传输协议规范
本备忘录的状态
本备忘录定义了一个针对互联网社区的实验性协议。它并未指定任何互联网标准。欢迎讨论和提出改进建议。此备忘录的分发是无限制的。
版权声明
版权 (C) 互联网协会 (2001)。保留所有权利。
摘要
Pragmatic General Multicast (PGM) 是一种可靠的多播传输协议,适用于需要有序或无序、无重复的多播数据从多个源传输到多个接收者的应用。PGM保证组中的接收者要么接收到所有传输的数据包并进行修复,要么能够检测到无法恢复的数据包丢失。PGM专门旨在为具有基本可靠性需求的多播应用提供一个可行的解决方案。其核心设计目标是操作的简便性,同时充分考虑可扩展性和网络效率。
目录
- 引言和概述 ................................................. 3
- 架构描述 .................................................. 9
- 术语和概念 ................................................ 12
- 一般程序 .................................................. 18
- 源程序 .................................................... 19
- 接收程序 .................................................. 22
- 网络元素程序 ............................................ 27
- 数据包格式 ............................................... 31
- 选项 ...................................................... 40
- 安全考虑 ................................................. 56
- 附录A - 前向纠错 ......................................... 58
- 附录B - 支持拥塞控制 .................................... 72
- 附录C - SPM请求 .......................................... 79
- 附录D - 查询机制 ......................................... 82
- 附录E - 防止数据轰炸 .................................... 92
- 附录F - 传输窗口示例 .................................... 98
- 附录G - 适用性声明 ...................................... 103
- 缩略语 .................................................. 105
- 致谢 .................................................... 106
- 参考文献 ................................................ 106
- 作者联系方式 .......................................... 108
- 完整版权声明 ............................................ 111
注意:
发布此规范的目的是为了冻结PGM的定义,以促进对该协议的持续和未来的实验。这些实验的目的是通过实现和部署此类可靠多播协议来积累经验,从而能够将这些经验反馈到IETF的可靠多播传输工作组的长期标准化过程中。附录G提供了关于这些实验的范围和状态的更具体的细节。实验报告包括[16-23]。鼓励进行额外的实验和新一轮的结果。
1. 引言和概述
针对多播数据传输,已经提出了多种可靠的协议,每种协议都着重于特定类型的应用、网络特性或可靠性的定义([1],[2],[3],[4])。在这一传统下,务实的通用多播(PGM)是一种可靠的传输协议,适用于那些需要有序或无序、无重复的多播数据从多个源传输到多个接收者的应用。
PGM专门设计为一种适用于具有基本可靠性需求的多播应用的可行解决方案,而不是为具有复杂排序、协商和鲁棒性需求的多播应用提供全面的解决方案。其核心设计目标是操作的简便性,同时充分考虑可扩展性和网络效率。
PGM没有群组成员的概念。它仅提供在源根据纯粹本地策略推动的传输窗口内进行的可靠多播数据传输。从接收者加入群组到离开群组期间,PGM保证接收者能够接收到所有数据包并进行修复,或者能够检测到无法恢复的数据包丢失。PGM支持多播组内任意数量的源,每个源都通过一个全球唯一的传输会话标识符(TSI)完全标识,但由于这些源/会话之间完全独立运作,因此本规范是以单个源为基础的,并且可以不做修改地扩展到多个源。
更具体地说,PGM不适用于那些依赖于向已知接收者群组确认交付或依赖于多个源之间的完全排序的应用。
PGM最适合那些成员可以随时加入和离开,并且对无法恢复的数据包丢失不敏感,或者在此情况下准备依赖应用层恢复的应用。通过其可选扩展,PGM提供了特定的机制,支持诸如股票和新闻更新、数据会议、低延迟实时视频传输和大宗数据传输等多种不同类型的应用。
在接下来的文本中,PGM数据包的传输层发起者称为“源”,传输层消费者称为“接收者”,而介于源和接收者之间的网络层实体称为“网络元素”。
术语
本文件中的关键词“必须”(MUST)、“不得”(MUST NOT)、“要求”(REQUIRED)、“应”(SHALL)、“不应”(SHALL NOT)、“应该”(SHOULD)、“不应该”(SHOULD NOT)、“推荐”(RECOMMENDED)、“可以”(MAY)和“可选”(OPTIONAL)应按照RFC 2119 [14] 中的描述解释,用于指示符合PGM实现的要求等级。
1.1 操作摘要
PGM运行在数据报多播协议上,例如IP多播 [5]。在数据传输的正常过程中,源会多播有序的数据包(ODATA),而接收者会对检测到缺失的数据包发送单播的负确认(NAK)。网络元素将NAK转发到源,并确认每个转发的跳数,通过多播NAK确认(NCF)在接收到NAK的接口上进行响应。修复(RDATA)可以由源本身或由指定的本地修复者(DLR)响应NAK提供。
由于NAK是可靠性的唯一机制,因此PGM对NAK的丢失特别敏感。为了最小化NAK丢失,PGM定义了一种网络层逐跳传递的可靠NAK转发过程。
当接收者检测到缺失的数据包时,它会不断地单播NAK到源的分发树上的最后一跳PGM网络元素。接收者会重复此NAK,直到收到该PGM网络元素多播的NAK确认(NCF)。该网络元素会对第一次收到NAK及之后任何接收到的相同NAK进行响应并发送NCF。接下来,网络元素会不断将NAK转发到上游的PGM网络元素,沿着原始数据包的反向分发路径,直到也收到该网络元素的NCF。最后,源本身接收到NAK并通过多播NCF到群组来确认NAK。
虽然NCF会多播到群组,但它们不会被PGM网络元素传播,因为它们作为逐跳确认使用。
为了避免NAK爆炸,PGM规定了在接收者之间基于子网的NAK抑制和在网络元素内的NAK消除程序。通常的结果是,仅有一个NAK副本沿着分发路径的反向从任何直接连接的接收者所在的网络传播到源。
其净效应是,单播NAK从接收者返回到源,沿着ODATA转发路径的反向,即沿着源的分发树的反向。更具体地说,它们通过与ODATA转发相同的PGM网络元素序列返回,但方向相反。处理NAK的这种方式的原因将在约束修复的讨论中变得清晰,但首先有必要描述在PGM网络元素中建立必要的源路径状态的机制。
为了在PGM网络元素中建立源路径状态,基本的数据传输操作通过源发送的源路径消息(SPM)进行增强,SPM与ODATA定期交错发送。SPM的主要功能是为给定TSI在源的分发树中的所有PGM网络元素建立源路径状态。PGM网络元素使用这些信息将返回的单播NAK直接传送到向源方向上游的PGM网络元素,从而确保NAK从接收者返回到源,沿着该TSI的分发路径的反向。
SPM是由源以一种维持最新PGM邻居信息的速率发送的。此外,SPM还补充了DATA包在促使接收者进一步发送NAK以及保持接收窗口状态中的作用。
作为进一步的优化,PGM指定了网络元素对修复的约束程序,使其仅到达那些未接收到原始传输的群组成员所在的网络段。当NAK沿ODATA路径的反向(向上)传输时,它们在网络元素中建立修复状态,随后用于约束相应RDATA的(向下)转发。
除了源提供修复的程序外,PGM还指定了选项和程序,允许指定的本地修复者(DLR)宣布其可用性,并将修复请求(NAK)重定向到他们自己,而不是原始源。除了这些通过选择性ARQ进行的传统丢失恢复程序外,附录A还规定了源提供的前向错误纠正(FEC)程序,以及接收者请求常规错误修正奇偶校验包而非选择性重传的程序。
最后,由于PGM在没有接收者常规返回流量的情况下运行,因此无法应用传统的传输流量和拥塞控制的反馈机制。附录B规定了PGM拥塞控制的基于NE的TCP友好解决方案,并引用了PGM拥塞控制的端到端TCP友好解决方案。
在其基本操作中,PGM依赖于源端纯粹的速率限制传输策略,以限制PGM传输会话所消耗的带宽,并定义源端维持的传输窗口。
PGM定义了四种基本的数据包类型:三种向下流动(SPM、DATA、NCF),一种向上流动(NAK)。
1.2. 设计目标和约束
PGM的设计目的是服务于那些具有相对简单可靠性要求的广泛多播应用,并以一种实现多播数据传输的网络效率的方式来完成这一任务。实现这些效率的通常障碍包括接收者到源的负确认和正确认的爆炸、来自源的修复延迟,以及修复的传播到不关心的接收者。
1.2.1. 可靠性
通过端到端协议实现不可靠网络中的可靠数据传输是传统方法,其中源(隐式或显式)请求接收者确认接收,接收者进行正面或负面的响应。负确认的频率主要取决于网络的可靠性和接收者的资源(因此,可能非常低),而正确认的频率则固定为至少传输窗口推进的速率,通常更频繁。
负确认主要决定修复和可靠性。正确认主要决定传输缓冲区管理。
当这些原则不做修改地扩展到多播协议时,结果是至少对于正确认,会导致源收到的正确认的负担迅速增加,随着接收者数量的增长,这会威胁到源的处理能力。简言之,确认爆炸使得基于确认的可靠多播协议无法良好扩展。
PGM的一个目标是通过尽可能简单的协议,尽可能强烈地定义可靠性。ACK的爆炸问题可以通过多种有效但复杂的方式解决,其中大多数方法需要从除原始源之外的其他地方进行重新传输。
另一种选择是完全放弃正向确认,而采取其他策略进行缓冲区管理,同时保留负向确认用于修复和可靠性。PGM采取的做法是保留负向确认,但放弃正向确认,而改为通过源端超时来管理传输资源。
PGM中可靠性的定义直接源自这一设计决策。PGM保证接收者要么从传输和修复中接收到所有数据包,要么能够检测到不可恢复的数据包丢失。
PGM包括重复触发NAK的策略,并为NAK本身增加可靠性。通过强化NAK机制,PGM最大限度地减少了接收者发现丢失数据包的延迟,使得该数据包无法从源或指定的本地修复者(DLR)处进行修复。然而,在没有ACK和群组成员信息的情况下,PGM无法完全消除这种可能性。
1.2.2. 群组成员
放弃ACK的第二个结果是,协议不要求也不提供群组成员的知识。尽管源可能从某些接收者接收到一些PGM数据包(例如NAK),但接收者的身份并不参与这些数据包的处理。群组成员身份可能在PGM传输会话期间发生变化,而源或剩余接收者无法得知,也不会受到影响。
1.2.3. 效率
PGM通过放弃ACK来避免正向确认的爆炸问题,而直接解决了负向确认的爆炸问题。
接收者在生成NAK之前会观察到一个随机的退避时间,在此期间,接收者收到匹配的NCF后,NAK被抑制(即不发送,但接收者会假装已发送)。此外,PGM网络元素会消除在同一网络元素上不同接口收到的重复NAK。
这两种策略的结合通常会导致源端仅收到一个NAK,针对任何丢失的数据包。
无论修复是由DLR还是原始源提供,都必须将修复限制到仅包含那些对原始传输进行了负向确认的网络段,而不是在整个群组中传播。PGM指定了程序,使得网络元素使用NAK的模式定义群组内的一个子树,在该子树上转发相应的修复,以确保它只到达那些最初没有接收到数据包的接收者。
1.2.4. 简单性
PGM旨在以最小的复杂性实现可靠性的最大改进(与普通的UDP相比)。因此,PGM不处理会议控制、群组内多个源的全局排序,也不处理网络分区的恢复。
1.2.5. 可操作性
PGM设计为即使某些或所有多播树中的网络元素不了解PGM,它也能工作,尽管效率较低。为此,所有PGM数据包都可以由非PGM网络元素以传统的多播方式路由,而不会丧失功能,但在RDATA和NCF的传播上会有一些低效。
此外,由于NAK是单播到最后一个跳跃的PGM网络元素,而NCF是多播到整个群组,NAK/NCF操作在非PGM网络元素之间也是一致的。需要注意的是,为了使NAK抑制效果最佳,接收者应始终将PGM网络元素作为其与每个PGM源路径之间的第一跳网络元素。如果接收者与第一个PGM网络元素之间有多跳,NAK抑制的效果可能会降低。
1.3. 选项
除了上面描述的基本数据传输操作外,PGM还规定了几个端到端选项,以满足特定应用的需求。PGM指定了支持分段、延迟加入、重定向、前向错误纠正(FEC)、可达性以及会话同步/终止/重置的选项。选项只能由原始发送者附加到PGM数据包头中。虽然网络元素可以解释这些选项,但网络元素不会添加或删除这些选项。
所有选项都是接收端重要的(即必须由接收端解释)。一些选项也是网络元素重要的(即必须由网络元素解释)。
分段可以与数据包一起使用,允许源端的传输层实体将应用层数据包拆分成多个PGM数据包,以符合网络层支持的最大传输单元(MTU)。
延迟加入允许源端指示接收端在初次加入特定传输会话时,是否可以请求所有可用的修复数据。
重定向可以与轮询响应一起使用,允许DLR响应正常的NCF或POLL时,通过重定向POLL向原始源广告其自己的地址作为替代的重新传输源。
前向错误纠正(FEC)技术可以由接收端应用,使用源端提供的奇偶校验数据包,而不是选择性重传,以实现丢失恢复。
2. 体系结构描述
作为一种端到端的传输协议,PGM指定了源端发送和接收端接收数据的包格式和程序。为了提高数据传输的效率,PGM还指定了网络元素的包格式和程序,以提高NAK的可靠性并限制修复的传播。本节描述了这些功能的划分,下一节将详细展开。
2.1. 源端功能
数据传输
源端在给定的传输速率下,将ODATA数据包组播到指定的组。
源路径状态
源端将SPM数据包与ODATA数据包(如有)交错组播到组内,用以在PGM网络元素中建立源路径状态。
NAK可靠性
源端在收到任何NAK后,将NCF数据包组播到该组。
修复
源端根据收到的NAK,组播RDATA数据包到组内,针对数据包进行修复。
传输窗口推进
源端可以根据多种策略推进窗口的尾部。实现可能支持自动调整,如保持窗口大小不变,或保持固定的包数或实时持续时间。此外,它们可能根据NAK的沉默延迟窗口推进一定时间。文档后续部分将概述一些可能的策略。
2.2. 接收端功能
源路径状态
接收端使用SPM数据包确定给定TSI的最后一跳PGM网络元素,并将NAK发送到该元素。
数据接收
接收端在传输窗口内接收ODATA,并消除任何重复数据包。
修复请求
接收端向最后一跳PGM网络元素单播NAK(并可选择性地将TTL为1的NAK组播到本地组),请求缺失的期望顺序中的数据包。接收端必须重复发送NAK,直到收到匹配的NCF。
NAK抑制
接收端在NAK发送回退间隔内,如果接收到匹配的NCF或NAK,则抑制该NAK的发送。
接收窗口推进
接收端在接收到任何PGM数据包或SPM数据包后,立即推进接收窗口,前提是该数据包会推进接收窗口。
2.3. 网络元素功能
网络元素转发
网络元素无需干预,直接转发ODATA数据包。
源路径状态
网络元素拦截SPM数据包,并利用它们建立相应TSI的源路径状态,然后按常规方式进行组播转发。
NAK可靠性
网络元素在收到任何NAK时,将NCF数据包组播到该组。对于每个收到的NAK,网络元素创建修复状态,记录传输会话标识符、NAK的序列号及接收到该NAK的输入接口。
受限NAK转发
网络元素仅将收到的NAK的第一个副本单播转发至上游PGM网络元素,直到收到NCF响应。此外,网络元素可以选择性地将该NAK上游组播,TTL为1。
**注意事项:**一旦通过NCF确认,网络元素将丢弃NAK数据包;NAK不会在网络元素中保留,但关于接收的状态会被存储。
NAK消除
网络元素丢弃任何已经有修复状态的NAK的精确重复(即该NAK已由自己或邻近的PGM网络元素转发),并响应匹配的NCF。

浙公网安备 33010602011771号