CN102195752A - 通过带有前向纠错的有损传输的远程呈现 - Google Patents
通过带有前向纠错的有损传输的远程呈现 Download PDFInfo
- Publication number
- CN102195752A CN102195752A CN2011100605689A CN201110060568A CN102195752A CN 102195752 A CN102195752 A CN 102195752A CN 2011100605689 A CN2011100605689 A CN 2011100605689A CN 201110060568 A CN201110060568 A CN 201110060568A CN 102195752 A CN102195752 A CN 102195752A
- Authority
- CN
- China
- Prior art keywords
- packet
- grouping
- owd
- fec
- delay
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/07—Arithmetic codes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/0001—Systems modifying transmission characteristics according to link quality, e.g. power backoff
- H04L1/0009—Systems modifying transmission characteristics according to link quality, e.g. power backoff by adapting the channel coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/19—Flow control; Congestion control at layers above the network layer
- H04L47/193—Flow control; Congestion control at layers above the network layer at the transport layer, e.g. TCP related
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/25—Flow control; Congestion control with rate being modified by the source upon detecting a change of network conditions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/28—Flow control; Congestion control in relation to timing considerations
- H04L47/283—Flow control; Congestion control in relation to timing considerations in response to processing delays, e.g. caused by jitter or round trip time [RTT]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/80—Responding to QoS
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Probability & Statistics with Applications (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了通过带有前向纠错的有损传输的远程呈现***和方法。在各实施例中,公开了用于将远程呈现协议与基于数据报的传输相集成的方法和***。在一个实施例中,一集成协议被配置成支持基于与前向纠错(FEC)结合的重传(ARQ)的无损的或减少损失的传输。该协议涉及对包括反馈头部和FEC分组的数据分组的编码和解码,对RTT、RTO和分组延迟的连续测量,动态地评估损失概率来确定并调整FEC比,基于动态检测分组延迟的增加的拥塞管理,以及基于检测分组延迟的减小的快速数据传输速率提升。
Description
技术领域
本发明涉及远程计算机***,尤其涉及对于远程计算机***的数据传输。
背景技术
远程计算***可使用户能够远程地访问托管资源。远程计算***上的服务器可执行程序并将指示用户界面的信号发送到可通过经由网络发送符合诸如TCP/IP协议等通信协议的信号来连接的客户机。可向每个连接客户机提供远程呈现会话,即,包括一组资源的执行环境。每个客户机可向服务器发送指示用户输入的信号并且服务器可将该用户输入应用于合适的会话。客户机可使用诸如远程桌面协议(RDP)等远程呈现协议来连接到服务器资源。
远程呈现协议通常是在客户机和主机之间使用TCP类型连接的会话级协议。当通过广域网建立远程呈现会话时,往返时间和数据分组丢失可能会导致对实时最终用户体验有负面影响的延迟,如撕裂和抖动。
发明内容
在各实施例中,公开了用于将远程呈现协议与基于数据报的传输相集成的方法和***。
在一个实施例中,这一集成协议可被配置成支持基于与前向纠错(FEC)结合的重传(ARQ)的无损的或减少损失的传输。该协议包括对包括反馈头部和FEC分组的数据分组的编码和解码,对RTT、RTO和分组延迟的连续测量,动态地评估损失概率来确定并调整FEC比,基于动态检测分组延迟的增加的拥塞管理,以及基于检测分组延迟的减小的快速数据传输速率提升。在一个实施例中,传输层可被集成到服务器和客户机两者中,且可提供这样的能力:提供带有按序数据递送的无损传输或提供有损传输并回头向远程呈现层报告数据损失或无序递送。该集成协议可以实现通过单个传输的远程呈现会话,或者对于数据流的不同部分与基于TCP的传输共存。
附图说明
参考附图来进一步描述根据本说明书的用于使用基于数据报的传输协议来传送远程呈现数据的***、方法和计算机可读介质,附图中:
图1和2描绘了其中可实现本发明的各方面的示例计算机***。
图3描绘了用于实践本发明的各方面的操作环境。
图4描绘了用于实践本发明的各方面的操作环境。
图5示出了包括用于实现远程桌面服务的电路的计算机***。
图6示出了包括用于实现远程服务的电路的计算机***。
图7示出了包含此处所公开的方法的各方面的示例体系结构。
图8示出了包含此处所公开的方法的各方面的示例体系结构。
图9示出了包含此处所公开的方法的各方面的示例体系结构。
图10示出了包含此处所公开的方法的各方面的示例体系结构。
图11示出了包含此处所公开的方法的各方面的示例体系结构。
图12示出了说明此处所公开的方法的各方面的时序图。
图13示出了用于处理传送到客户计算机的图形数据的操作过程的示例。
图14示出了用于处理传送到客户计算机的图形数据的示例***。
图15示出了承载相对于图1-14讨论的计算机可执行指令的计算机可读介质。
具体实施方式
概括的计算环境
在以下描述和附图中阐明了某些具体细节,以提供对本发明的各个实施例的全面理解。通常与计算和软件技术相关联的某些公知细节将不在以下公开中描述,以避免不必要地使本发明的各实施例晦涩难懂。此外,相关领域的普通技术人员可以理解,他们可以无需以下描述的细节中的一个或多个而实现本发明的其它实施例。最后,尽管在以下公开中参考了步骤和序列来描述各个方法,但是如此的描述是为了提供本发明的实施例的清楚实现,且步骤以及步骤序列不应被认为是实现本发明所必需的。
各实施例可在一个或多个计算机上执行。图1和2以及下面的讨论旨在提供其中可实现本发明的合适计算环境的简要概括描述。本领域的技术人员可以理解,计算机***100可具有相对于图1的计算机20描述的组件中的一部分或全部。
贯穿本发明使用的术语电路可包括诸如硬件中断控制器、硬盘驱动器、网络适配器、图形处理器、基于硬件的视频/音频编解码器等硬件组件,以及用于操作这些硬件的固件/软件。术语电路还可包括被配置成通过固件或通过开关集来以特定方式执行功能的微处理器,或一个或多个逻辑处理器,例如,多核通用处理单元的一个或多个核。本示例中的逻辑处理器可由软件指令来配置,软件指令具体化可用于执行从例如RAM、ROM、固件和/或虚拟存储器等存储器加载的功能的逻辑。在其中电路包括硬件和软件的组合的示例实施例中,实现者可以编写具体化逻辑的源代码,该源代码随后被编译成可由逻辑处理器执行的机器可读代码。因为本领域技术人员可以明白现有技术已经进化到硬件、软件或硬件/软件的组合之间几乎没有差别的地步,因而选择硬件还是软件来实现功能只是一个设计选择。因此,由于本领域的技术人员可以理解软件进程可被变换成等效的硬件结构,且硬件结构本身可被变换成等效的软件进程,因此选择硬件实现或是软件实现是微不足道的且留给了实现者。
图1描绘了以本发明的各方面来配置的计算***的示例。计算***可以包括计算机20或类似物,计算机20包括处理单元21、***存储器22和将包括***存储器在内的各种***组件耦合至处理单元21的***总线23。***总线23可以是几种类型的总线结构中的任何一种,包括存储器总线或存储控制器、***总线、以及使用各种总线体系结构中的任一种的局部总线。***存储器包括只读存储器(ROM)24和随机存取存储器(RAM)25。基本输入/输出***26(BIOS)存储在ROM 24中,其包含了诸如在启动期间帮助在计算机20内的元件之间传输信息的基本例程。计算机20还可包括用于对硬盘(未示出)进行读写的硬盘驱动器27,用于对可移动磁盘29进行读写的磁盘驱动器28,以及用于对可移动光盘31,如CD ROM或其它光介质进行读写的光盘驱动器30。在一些示例实施例中,实施本发明的各方面的计算机可执行指令可存储在ROM 24、硬盘(未示出)、RAM 25、可移动磁盘29、光盘31和/或处理单元21的高速缓存中。硬盘驱动器27、磁盘驱动器28和光盘驱动器30分别通过硬盘驱动器接口32、磁盘驱动器接口33和光盘驱动器接口34来连接到***总线23。驱动器及其相关联的计算机可读介质为计算机20提供了计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。虽然这里描述的环境采用硬盘、可移动磁盘29和可移动光盘31,本领域技术人员应理解,在该操作环境中也能使用可存储能由计算机访问的数据的其它类型计算机可读介质,如盒式磁带、闪存卡、数字视频盘、柏努利(Bernoulli)盒式磁带、随机存取存储器(RAM)、只读存储器(ROM)等。
可在硬盘、磁盘29、光盘31、ROM 24或RAM 25上存储多个程序模块,包括操作***35、一个或多个应用程序36、其它程序模块37和程序数据38。用户可以通过诸如键盘40和指示设备42之类的输入设备向计算机20中输入命令和信息。其它输入设备(未示出)可包括话筒、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等。这些和其它输入设备常通过耦合到***总线的串行端口接口46连接到处理单元21,但也可通过其它接口连接,如并行端口、游戏端口或通用串行总线(USB)。显示器47或其他类型的显示设备也可经由诸如视频适配器48等接口连接至***总线23。除显示器47以外,计算机通常包括如扬声器和打印机等其它***输出设备(未示出)。图1的***还包括主适配器55、小型计算机***接口(SCSI)总线56和连接到SCSI总线56的外部存储设备62。
计算机20可使用至一个或多个远程计算机,如远程计算机49的逻辑连接在网络化环境中操作。远程计算机49可以是另一计算机、服务器、路由器、网络PC、对等设备或其他常见的网络节点、虚拟机,并通常包括上文相对于计算机20所描述的许多或全部元件,但是在图1中只示出了存储器存储设备50。图1所描绘的逻辑连接可以包括局域网(LAN)51和广域网(WAN)52。这样的网络环境常见于办公室、企业范围计算机网络、内联网和因特网。
当在LAN联网环境中使用时,计算机20可通过网络接口或适配器53连接至LAN 51。当在WAN联网环境中使用时,计算机20通常可包括调制解调器54或用于通过诸如因特网等广域网52建立通信的其它手段。或为内置或为外置的调制解调器54可经由串行端口接口46连接到***总线23。在网络化环境中,关于计算机20所描述的程序模块或其部分可被储存在远程存储器存储设备中。应该理解,所示网络连接是示例,并且可以使用在计算机之间建立通信链路的其它手段。此外,虽然可构想本发明的许多实施例尤其适用于计算机***,然而在本文中不意味着将本发明限于这些实施例的公开。
现在参考图2,描绘了示例性计算***100的另一实施例。计算机***100可包括逻辑处理器102,如执行核。尽管示出了一个逻辑处理器102,但在其他实施例中,计算机***100可具有多个逻辑处理器,例如每一处理器基板有多个执行核,和/或各自可具有多个执行核的多个处理器基板。如图所示,各种计算机可读存储介质110可由一个或多个***总线互联,***总线将各种***总线耦合到逻辑处理器102。***总线可以是几种类型的总线结构中的任何一种,包括存储器总线或存储控制器、***总线、以及使用各种总线体系结构中的任一种的局部总线。在示例实施例中,计算机可读存储介质110可以包括例如随机存取存储器(RAM)104、存储设备106(例如电机硬盘驱动器、固态硬盘驱动器等)、固件108(例如闪存或ROM)、以及可移动存储设备118(例如CD-ROM、软盘、DVD、闪速驱动器、外部存储设备等)。本领域的技术人员应当理解,可使用其他类型的计算机可读存储介质,如磁带盒、闪存卡、数字视频盘和柏努利盒式磁带。
计算机可读存储介质为计算机100提供了对处理器可执行指令122、数据结构、程序模块和其他数据的非易失性存储。基本输入/输出***(BIOS)120可被存储在固件108中,它包含帮助在诸如启动期间在计算机***100内的各元件之间传递信息的基本例程。包括操作***和/或应用程序的多个程序可被存储在固件108、存储设备106、RAM 104和/或可移动存储设备118上,并且可由逻辑处理器102来执行。
命令和信息可由计算机100通过输入设备116来接收,输入设备可包括但不限于键盘和定点设备。其它输入设备可以包括话筒、操纵杆、游戏手柄、扫描仪等等。这些和其它输入设备常通过耦合到***总线的串行端口接口连接到逻辑处理器102,但也可通过其它接口连接,如并行端口、游戏端口或通用串行总线(USB)。显示器或其他类型的显示设备也可经由诸如视频适配器等可以是图形处理器112的一部分或可连接到图形处理器112的接口来连接到***总线。除了显示器之外,计算机通常包括其他***输出设备(未示出),如扬声器和打印机。图1的示例性***还包括主适配器、小型计算机***接口(SCSI)总线和连接到SCSI总线的外部存储设备。
计算机***100可使用至一个或多个远程计算机,如远程计算机的逻辑连接在网络化环境中操作。远程计算机可以是另一计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并且通常包括上面关于计算机***100所述的许多或全部元件。
当在LAN或WAN联网环境中使用时,计算机***100可通过网络接口卡114连接至LAN或WAN。NIC 114可以是内置或外置的,其可以连接到***总线。在联网环境中,相对于计算机***100所描述的程序模块或其部分可被储存在远程存储器存储设备中。可以理解,所描述的网络连接是示例性的,且可以使用在计算机之间建立通信链路的其他手段。虽然可构想本发明的许多实施例尤其适用于计算机化的***,然而在本说明中不意味着将本发明限于那些实施例。
远程桌面***是维护可由客户计算机***远程地执行的应用的计算机***。输入是在客户计算机***处被输入的,并通过网络(例如,使用基于国际电信联盟(ITU)T.120协议家族等协议,如远程桌面协议(RDP))传送到终端服务器上的应用。该应用如同该输入是在终端服务器处送入的那样来处理该输入。该应用响应于所接收到的输入生成输出,并且该输出通过网络传送到客户计算机***。客户计算机***呈现输出数据。由此,在客户计算机***处接收输入并呈现输出,而处理实际上是在终端服务器处发生的。会话可包括诸如桌面之类的外壳和用户界面、跟踪该桌面内的鼠标移动的子***、将图标上的鼠标点击转换成实现程序实例的命令的子***等等。在另一示例实施例中,会话可包括应用程序。在该示例中,当呈现应用时,桌面环境仍可被生成并对用户隐藏。应当理解,前述讨论是示例性的,且当前公开的主题可以在各种客户机/服务器环境中实现且不限于特定终端服务产品。
即使不是全部,也是在大多数远程桌面环境中,输入数据(在客户计算机***处送入)通常包括表示对应用的命令的鼠标和键盘数据,且输出数据(由终端服务器处的应用生成)通常包括用于在视频输出设备上显示的视频数据。许多远程桌面环境也包括扩展到传输其他类型的数据的功能。
可使用通信信道来通过允许插件经由RDP连接传输数据来扩展RDP协议。存在许多这样的扩展。诸如打印机重定向、剪贴板重定向、端口重定向等特征使用通信信道技术。由此,除了输入和输出数据之外,可以有许多需要来传输数据的通信信道。因此,可能有传输输出数据的偶然请求和传输其他数据的一个或多个信道请求争用可用的网络带宽。
现在参考图3和4,所描绘的是被配置成实现虚拟机的计算机***的高级框图。如图所示,计算机***100可包括图1和2中所描述的元件,以及可用于实现虚拟机的组件。一个这样的组件是在本领域中也可被称为虚拟机监控程序的***管理程序(hypervisor)202。所描绘的实施例中的***管理程序202可被配置成控制并仲裁对计算机***100的硬件的访问。广泛而言,***管理程序202可以生成称为分区的执行环境,如子分区1到子分区N(其中N是大于或等于1的整数)。在各实施例中,子分区可被认为是***管理程序202所支持的基本隔离单元,即,每一子分区可被映射到在***管理程序202的控制下的一组硬件资源,例如存储器、设备、逻辑处理器周期等,和/或父分区和***管理程序202可以隔离一个分区无法访问另一分区的资源。在各实施例中,***管理程序202可以是独立的软件产品、操作***的一部分、嵌入在主板的固件中、专用集成电路、或其组合。
在以上示例中,计算机***100包括父分区204,父分区在开源社区中也可被认为是域0。父分区204可被配置成通过使用虚拟化服务提供者228(VSP)来向在子分区1-N中执行的客操作***提供资源,虚拟化服务提供者在开源社区中也被称为后端驱动程序。在该示例体系结构中,父分区204可以门控(gate)对底层硬件的访问。VSP 228可用于通过虚拟化服务客户端(VCS)来复用到硬件资源的接口,虚拟化服务客户端在开源社区中也被称为前端驱动程序。每一子分区可包括客操作***220到222可管理并调度线程在其上执行的一个或多个虚拟处理器,如虚拟处理器230到232。一般而言,虚拟处理器230到232是提供具有特定架构的物理处理器的表示的可执行指令以及相关联的状态信息。例如,一个虚拟机可具有带有英特尔x86处理器特性的虚拟处理器,而另一虚拟处理器可具有PowerPC处理器的特性。本例中的虚拟处理器可被映射到计算机***的逻辑处理器,使得实现虚拟处理器的指令将受到逻辑处理器的支持。由此,在这些示例实施例中,多个虚拟处理器可同时执行,同时例如另一逻辑处理器正在执行***管理程序指令。一般而言,且如图所示,分区中的虚拟处理器、各种VCS以及存储器的组合可被认为是虚拟机,如虚拟机240或242。
一般而言,客操作***220到222可包括任何操作***,如来自微软苹果开源社区等的操作***。客操作***可包括用户/内核操作模式,并且可具有能包括调度器、存储器管理器等的内核。内核模式可包括逻辑处理器中的执行模式,该执行模式授予对至少特权处理器的访问。每一客操作***220到222可具有相关联的文件***,该文件***上存储有诸如终端服务器、电子商务服务器、电子邮件服务器等应用以及客操作***本身。客操作***220-222可调度线程来在虚拟处理器230-232上执行,并且可实现此类应用的实例。
现在参考图4,所示是可用于实现虚拟机的替换体系结构。图4描绘了类似于图3的组件,但在该示例实施例中,***管理程序202可包括虚拟服务提供者228和设备驱动程序224,并且父分区204可包含配置实用程序236。在该体系结构中,***管理程序202可执行与图2的***管理程序202相同或相似的功能。图4的***管理程序202可以是独立的软件产品、操作***的一部分、嵌入在主板的固件内、或者***管理程序202的一部分可以由专用集成电路来实现。在该示例中,父分区204可具有可用于配置***管理程序202的指令,然而,硬件访问请求可由***管理程序202来处理而非传递到父分区204。
现在参考图5,计算机100可包括被配置成向连接的客户机提供远程桌面服务的电路。在一示例实施例中,所描绘的操作***400可直接在硬件上执行,或者客操作***220或222可以由诸如VM 216或VM 218等虚拟机来实现。底层硬件208、210、234、212和214在所示类型的虚线中指示以标识该硬件可被虚拟化。
远程服务可被提供给诸如客户机401等至少一个客户机(尽管描绘了一个客户机,但远程服务可被提供给更多客户机)。示例客户机401可包括由被配置成将用户输入定向到远程服务器会话并显示该会话生成的用户界面信息的硬件来实现的计算机终端。在另一实施例中,客户机401可以由包括与图1的计算机20相似的元件的计算机来实现。在该实施例中,客户机401可包括被配置成实现操作***的电路以及被配置成模拟终端的功能(例如,可由一个或多个逻辑处理器102执行的远程桌面客户端应用)的电路。本领域技术人员可理解,被配置成实现操作***的电路也可包括被配置成模拟终端的电路。
每一连接的客户机可具有允许该客户机访问存储在计算机100上的数据和应用的会话(如会话404)。一般而言,应用和某些操作***组件可被加载到分配给会话的存储器区域中。由此,在某些情况下,某些OS组件可被派生N次(其中N表示当前会话数)。这些各种OS组件可向操作***内核418请求服务,操作***内核例如能够管理存储器;方便盘读/写;以及配置来自每一会话的线程来在逻辑处理器102上执行。可被加载到会话空间的某些示例子***可包括生成桌面环境的子***、跟踪桌面内的鼠标移动的子***、将图标上的鼠标点击转换成实现程序实例的命令的子***等等。实现这些服务,例如跟踪鼠标移动的进程用与该会话相关联的标识符来标记,并且被加载到分配给该会话的存储器区域中。
会话可以由例如进程等会话管理器416来生成。例如,会话管理器416可以通过为会话空间生成会话标识符;向会话空间分配存储器;以及在分配给会话空间的存储器中生成***环境变量和子***进程的实例,来初始化并管理每一远程会话。会话管理器416可在操作***400接收到对远程桌面会话的请求时被调用。
连接请求首先可由例如远程桌面协议(RDP)栈等传输栈410来处理。传输栈410指令可配置逻辑处理器102来监听特定端口上的连接消息,并将这些消息转发到会话管理器416。当生成会话时,传输栈410可为每一会话实例化一远程桌面协议栈实例。栈实例414是可为会话404生成的示例栈实例。一般而言,每一远程桌面协议栈实例可被配置成将输出路由到相关联的客户机,并将客户机输入路由到用于适当的远程会话的环境子***444。
如图所示,在一实施例中,应用448(尽管示出了一个,但其他也可执行)可执行并生成位数组。数组可由图形接口446来处理,图形接口进而可渲染可被存储在存储器中的位图,如像素值数组。如图所示,可实例化远程显示子***420,该子***可捕捉渲染调用,并通过网络经由用于会话的栈实例414来将该调用发送给客户机401。
除了遥控图形和音频之外,也可实例化即插即用重定向器458以便遥控诸如打印机、mp3播放器、客户机文件***、CD ROM驱动器等不同设备。即插即用重定向器458可从客户机侧组件接收信息,该信息标识了耦合到客户机401的***设备。即插即用重定向器458然后可配置操作***400来加载用于客户机401的***设备的重定向设备驱动程序。重定向设备驱动程序可接收来自操作***400的访问***设备的调用,并通过网络将调用发送到客户机401。
如上所讨论的,客户机可使用诸如远程桌面协议(RDP)等用于控制远程呈现服务的协议来连接到使用终端服务的资源。当远程桌面客户机经由终端服务器网关连接到终端服务器时,该网关可打开与终端服务器的套接字连接,并将客户机通信重定向到远程呈现端口或专用于远程访问服务的端口。网关还可使用通过HTTPS传送的终端服务器网关协议来执行与客户机的特定的网关专用交换。
转向图6,所描绘的是包括用于实现远程服务并用于合并本发明的各方面的电路的计算机***100。如图所示,在一实施例中,计算机***100可包括类似于图2和图5中所描绘的那些组件,并可实现远程呈现会话。在本发明的一个实施例中,远程呈现会话可包括控制台会话的各方面,例如使用计算机***为用户派生的会话以及远程会话。类似于上述内容,会话管理器416可通过启用/禁用各组件以实现远程呈现会话来初始化并管理远程呈现会话。
可被加载到远程呈现会话中的一组组件是启用高保真遥控的控制台组件,即利用了3D硬件所渲染的3D图形和2D图形的组件。
3D硬件所渲染的3D/2D图形可使用驱动程序模型来访问,该驱动程序模型包括用户模式驱动程序522、API 520、图形内核524以及内核模式驱动程序530。应用448(或诸如用户界面等生成3D图形的任何其他进程)可生成API构造并将其发送到诸如来自微软的Direct3D等应用编程接口520(API)。API 520进而可与用户模式驱动程序522通信,用户模式驱动程序522可生成在被表示为顶点和常量的计算机图形中使用的例如基本几何形状等图元,这些图元然后被用作用于其他形状的构件块,并将这些图元存储在例如存储器页等缓存中。在一个实施例中,应用448可以声明它将如何使用该缓存,例如它将在缓存中存储什么类型的数据。诸如视频游戏等应用可使用动态缓存来存储用于化身的图元,并可使用静态缓存来存储诸如表示建筑物或森林等将不常改变的数据。
继续驱动程序模型的描述,应用可用图元填充缓存并发出执行命令。当应用发出执行命令时,缓存可由内核模式驱动程序530追加到运行列表,并由图形内核调度器528来调度。例如应用或用户界面等每一图形源可具有一上下文及其自己的运行列表。图形内核524可被配置成调度各个上下文来在图形处理单元112上执行。GPU调度器528可由逻辑处理器102执行,并且调度器528可向内核模式驱动器530发出命令来渲染缓存的内容。栈实例414可被配置成接收命令并通过网络将缓存的内容发送到客户机401,在客户机401处,缓存可由客户机的GPU来处理。
现在所示的是结合调用远程呈现服务的应用使用的虚拟化GPU的操作的示例。参考图6,在一实施例中,虚拟机会话可由计算机100生成。例如,会话管理器416可由逻辑处理器102执行并且可初始化包括特定远程组件的远程会话。在该示例中,所派生的会话可包括内核418、图形内核524、用户模式显示驱动程序522和内核模式显示驱动程序530。用户模式驱动程序522可生成可被存储在存储器中的图元。例如,API 520可包括可被展示给诸如用户界面等用于操作***400或应用448的进程的接口。进程可向API 420发送高级API命令,如点列表(Point List)、线列表(Line List)、线带(Line Strip)、三角形列表(Triangle List)、三角形带(Triangle Strip)、或三角形扇(Triangle Fan)。API 520可接收这些命令,并将其转换成用于用户模式驱动程序522的命令,用户模式驱动程序522然后可生成顶点并将其存储在一个或多个缓存中。GPU调度器528可运行并确定渲染缓存的内容。在该示例中,可捕捉对服务器的图形处理单元112的命令,并且可将缓存的内容(图元)经由网络接口卡114发送到客户机401。在一个实施例中,API可由各组件能与其接口的会话管理器416来展示,以确定虚拟GPU是否可用。
在一实施例中,诸如图3或图4的虚拟机240等虚拟机可被实例化,并且虚拟机可但当用于操作***400的执行的平台。在本例中,客操作***220可具体化操作***400。虚拟机可在通过网络接收到连接请求时被实例化。例如,父分区204可包括传输栈410的实例,并且可被配置成接收连接请求。父分区204可响应于连接请求连同包括实现远程会话的能力的客操作***一起初始化虚拟机。连接请求然后可被传递给客操作***220的传输栈410。在本例中,每一远程会话可在由其自己的虚拟机执行的操作***上实例化。
在一个实施例中,可实例化虚拟机,并且可执行具体化操作***400的客操作***220。类似于上述内容,虚拟机可在通过网络接收到连接请求时被实例化。远程会话可由操作***生成。会话管理器416可被配置成确定该请求是针对支持3D图形渲染的会话的,并且会话管理器416可加载控制台会话。除了加载控制台会话之外,会话管理器416可为该会话加载栈实例414’并将***配置成捕捉由用户模式显示驱动程序522生成的图元。
用户模式驱动程序522可生成可被捕捉并存储在传输栈410可访问的缓存中的图元。内核模式驱动程序530可将缓存追加到应用的运行列表,并且GPU调度器528可运行并确定何时对缓存发出渲染命令。当调度器528发出渲染命令时,该命令可由例如内核模式驱动程序530捕捉并经由栈实例414’发送到客户机401。
GPU调度器528可执行并确定发出渲染缓存的内容的指令。在本例中,与渲染指令相关联的图元可经由网络接口卡114发送到客户机401。
在一实施例中,至少一个内核模式进程可由至少一个逻辑处理器112执行,且至少一个逻辑处理器112可同步渲染存储在不同缓存中的顶点。例如,可类似于操作***调度器来操作的图形处理调度器528可调度GPU操作。GPU调度器528可将单独的顶点缓存合并成正确的执行次序,使得客户机401的图形处理单元以允许它们被正确地渲染的次序来执行命令。
诸如视频游戏等进程的一个或多个线程可映射多个缓存且每一线程可发出绘制命令。关于顶点的标识信息,例如为每一缓存、每一顶点或缓存中的每一批顶点生成的信息,可被发送到GPU调度器528。信息可与关联于来自相同的或其他进程并用于同步各个缓存的渲染的顶点的标识信息一起存储在表中。
诸如文字处理程序等应用可执行并声明例如两个缓存——一个用于存储用于生成3D菜单的顶点,而另一个存储用于生成将填充该菜单的字母的命令。应用可映射缓存,并发出绘制命令。GPU调度器528可确定执行两个缓存的次序,使得菜单与字母一起以看上去令人满意的方式来渲染。例如,其他进程可以在相同或基本相似的时间发出绘制命令,并且如果顶点不是同步的,则来自不同进程的不同线程的顶点可能在客户机401上异步地渲染,从而使得所显示的最终图像看上去是混乱或混杂的。
可使用批量压缩器450在将数据流发送到客户机401之前压缩图元。在一实施例中,批量压缩器450可以是栈实例414的用户模式(未示出)或内核模式组件,并且可被配置成在被发送到客户机401的数据流中查找相似的模式。在该实施例中,由于批量压缩器450从多个应用接收顶点流而不是接收多个API构造,因此批量压缩器450具有较大的顶点数据集来筛选,以便找到压缩机会。即,由于用于多个进程的顶点而非不同的API调用被遥控,因此存在批量压缩器450能在给定流中找到相似模式的更大机会。
在一实施例中,图形处理单元112可被配置成对存储器使用虚拟寻址而不是物理地址。由此,被用作缓存的存储器页可从视频存储器分页到***RAM或盘。栈实例414’可被配置成获得缓存的虚拟地址,并在捕捉到来自图形内核528的渲染命令时发送来自该虚拟地址的内容。
可配置操作***400,例如可加载各种子***和驱动程序来捕捉原语并将其发送到诸如客户机401等远程计算机。类似于上述内容,会话管理器416可由逻辑处理器102执行并且包括特定远程组件的会话可被初始化。在该示例中,所派生的会话可包括内核418、图形内核524、用户模式显示驱动程序522和内核模式显示驱动程序530。
图形内核可调度GPU操作。GPU调度器528可将单独的顶点缓存合并成正确的执行次序,使得客户机401的图形处理单元以允许它们被正确地渲染的次序来执行命令。
用于实现以上提到的分区的所有这些变体仅仅是示例性实现,并且此处没有一样应被解释为将本发明限于任何特定虚拟化方面。
通过带有前向纠错的有损传输的远程呈现
此处所涉及的压缩、编码和解码图形数据的过程一般使用在共同转让的题为“System And Method For Effectively Encoding And Decoding Electronic Information”(用于高效地编码和解码电子信息的***和方法)的美国专利7,460,725号中所描述的一个或多个方法和***,该专利通过整体引用合并于此。传输此类数据的过程可以结合在题为“Optimized Transport Protocol For Delay-Sensitive Data”(用于延迟敏感数据的优化的传输协议)、代理案卷号为325618.01的美国专利申请XX/xxx,xxx号中描述的技术。
在此处所公开的各方法和***中,可实现对向客户计算机进行的远程呈现图形数据的传送的改进,来提供更及时且丰富的用户体验。此处所公开的用于编码并传送图形数据的实施例可使用硬件和软件进程的各种组合来实现。在某些实施例中,各功能可完全用硬件来执行。在其他实施例中,各功能可完全用软件来执行。在还有一些实施例中,各功能可使用硬件和软件进程的组合来实现。这些进程还可使用一个或多个CPU和/或诸如图形处理单元(GPU)或其他专用图形渲染设备等一个或多个专用处理器来实现。
在远程桌面情形中,位于主计算机(例如,服务器)上的用户桌面的图形内容通常被流传送到另一计算机(例如,客户机)。服务器和客户机将以定义良好的协议或格式来交换桌面图形数据。微软TM的远程桌面协议(RDP)是这一协议的一个示例。RDP协议是面向流的应用层协议,该协议可使用诸如传输控制协议(TCP)等基于流的传输层协议来与客户机交换数据。在以下讨论中,我们将对于流的一部分的“应用等待时间”或“应用延迟”定义为应用层协议在接收流的该部分时所经历的等待时间。这可以被定义为应用希望发送该部分时与接收应用接收到该部分时之间的时间差。我们将“传输等待时间”定义为传输协议所发送的各个分组所经历的等待时间。“传输损失”、“损失”或“损失率”指的是传输协议所发送的分组将被丢失的概率。当底层传输是具有高传输等待时间和损失的广域网(WAN)连接时,诸如TCP协议等协议通常展示出高应用等待时间。如果对RDP通信使用这一链路,则此类应用等待时间可导致负面用户体验,因为桌面图形数据可能以时间延迟的方式来递送给客户机。
因此,当使用诸如RDP等协议来向客户计算机提供远程呈现会话时,在某些情形中,可能期望通过有损传输来执行该协议。例如,当某一高等待时间链路经历高损失率时,对诸如TCP等某些基于流的协议的使用可导致显著的延迟。在这些协议中,当未正确地接收或丢失了数据分组时,丢失的数据分组必须在可在所接收数据的处理中作出进展之前被重新发送。由此,在这些情况下,使用有损数据报传输机制而非流无损传输机制可能是有利的。有损协议可以是一般可被表征为具有有损语义的协议的任何类型的协议。这些协议可能不提供递送验证、丢失数据重传、以及数据分组的隐式或显式排序。这些协议也可被称为数据报协议。通过能够在有损数据报协议上传送数据,可避免用于丢失分组的恢复机制所引起的大多数延迟。在此处所公开的各实施例中,描述了通过提供容损图形交换协议且因此允许使用诸如用户数据报协议(UDP)等非基于流的协议来解决上述问题的方法。
在一个实施例中,可提供UDP连接来用于传送图形数据。图7描绘了远程呈现服务器710和远程客户机700之间的连接。在典型的远程呈现配置中,客户机和服务器通过无损传输720交换信息。这一信息可包括控制和图形数据两者。在一个实施例中,有损传输730被添加到客户机和服务器之间的连接。有损传输730可用于交换图形数据。无损传输720可用于控制类型数据,如加密密钥列表或位图高速缓存确认。在其他实施例中,仅有损传输730可用于客户机和服务器之间的连接。
如前所述,在远程/虚拟桌面环境中,图形数据通常在主机分区上渲染,并在向数据应用了某种形式的压缩之后使用诸如RDP等远程呈现协议来传送到客户机。图形数据通常包括对数据损失和传输延迟可具有不同容限的各种元素。另外,总体远程桌面体验可包括其对递送可靠性和传输延迟的要求有差别的其他元素。此类显示和体验元素的示例包括:
●远程协议控制数据,其需要可靠且按序的递送。远程协议控制数据需要被快速递送,但数据可能不具有实时约束。
●用户输入数据(例如,键盘/鼠标),其需要可靠且按序的递送。用户输入数据也需要被快速递送来维持响应性。
●视频回放,其需要快速递送和一致吞吐量,但是可容忍损失和无序递送
●音频数据,其需要快速/实时递送,但是可容忍损失和无序递送
●打印机数据,其需要可靠且按序的递送。然而,打印机数据可容忍递送期间的较高延迟。
在一个实施例中,可提供链路特性检测器,该链路特性检测器连续地监视客户机和服务器之间的链路的诸如可用带宽、端对端等待时间和数据损失等特性。链路特性检测器还可确保执行了测量以使得它们考虑流过客户机和服务器之间的所有信道的数据。该数据然后可被提供给信道管理器来优化当前使用中的或随后打开的信道。
链路特性检测器可结合在共同转让的美国专利申请XX/XXX,XXX号(代理案卷号MVIR-0626,2010年3月8日提交)中描述的某些功能,该申请整体结合于此。
在通常在WAN情形中找到的高等待时间有损网络上,使用诸如TCP/IP上的RDP等远程呈现协议的实时/交互式远程呈现体验可能无法提供适当的用户体验。在各实施例中,远程呈现协议可使用基于诸如UDP等有损协议的传输栈,其与前向纠错(FEC)结合以便在使用诸如桌面的遥控等远程呈现服务时提供对用户体验的改进。
在一个实施例中,远程呈现数据流可通过支持数据和反馈编码、分组损失检测、分组重传、前向纠错和速率控制的双向的基于数据报的传输来传送。这一传输可提供基于重传和FEC的无损且按序的数据递送。或者,该传输可以是有损的,且包括向远程呈现层报告丢失的分组的能力。
在一个优选实施例中,可提供结合动态检测和可调整前向纠错的基于数据报的双向传输来降低高损失和高等待时间网络上的等待时间。该传输接口可支持100%无损且按序的数据递送,或部分有损的数据递送。该传输对于整个数据流或数据流的一部分可作为远程呈现协议栈的一部分来集成。
分组延迟通常由以下的一个或多个构成:发送者队列中花费的时间、网络传播延迟、网络排队延迟、以及重传或解码FEC花费的时间。网络传播延迟通常无法在远程呈现层处改进。由于发送队列中花费的时间而引起的延迟可通过更好的应用速率控制来改进。网络排队延迟和重传或解码FEC花费的时间可通过修改传输协议来改进。在各实施例中,所公开的技术可用于通过改进网络排队延迟和FEC重传和解码来改进远程呈现性能。
远程呈现协议通常是在客户机和主机之间使用TCP类型连接的会话级协议。该协议通常在这一连接上多路复用虚拟信道数据和主图形信道。在无损高速网络上,TCP通常提供对多路复用的净荷的可靠性和有保证的递送,从而满***互式双向通信的响应时间需求。
在WAN上,当往返时间超过50ms且在分组损失超过1-2%的情况下,TCP类型连接可展示出以下一个或多个问题:
1.通过重传超时机制的丢失分组恢复通常引入对实时最终用户体验有负面影响的延迟。
2.拥塞控制和避免算法可导致TCP发送窗口的折叠(collapse),导致慢启动阶段。
3.接收队列可在客户机TCP层处构建,直到接收到丢失的分组来实现严格的按序递送。
此类问题可引起诸如撕裂和抖动等图形信道伪像,从而影响用户体验质量且延迟超过了物理链路往返时间。为改进使用通过高损失和高等待时间WAN的远程呈现协议的用户体验,远程呈现协议可与基于数据报的传输相集成。在一个实施例中,这一集成协议可被配置成支持:
1)包括数据和反馈的分组的编码和解码
2)基于与前向纠错(FEC)结合的重传(ARQ)的无损或减少损失的传输
3)对RTT、RTO和分组延迟的持续测量
4)动态评估损失概率来确定并调整FEC比率
5)基于动态检测分组延迟的增加的拥塞管理
6)基于检测分组延迟的非增加的快速数据传输速率提升。
传输层可被集成到服务器和客户机两者中,并且可提供以下能力:
1)提供带有按序数据递送的无损传输的能力
2)提供有损传输并向RDP层回头报告数据损失或无序递送的能力
3)处理通过UDP上的单个传输的所有RDP流,或与基于TCP的传输共存。
参考图8,从一个计算机800通过网络804到另一计算机802的数据分组的传输可由于各种原因而被延迟。网络804可以固有地是“有损的”,导致所传送的数据分组或者在它们到达其目的地之前在网络中丢失,或者在它们到达其目的地时被破坏。因此,丢失或破坏的数据分组将不得不通过网络重传。固有地有损的示例性网络可包括例如无线网络和包括故障路由器的网络。网络804还可经历由于网络中的带宽限制而引起的拥塞,导致数据分组在通过网络传送它们的机会之前不得不在发送计算机上排队。显著的网络拥塞还可导致传送的数据分组由于诸如路由器队列溢出等因素而在网络中丢失。这些分组传输延迟在数据分组由其源应用以突发方式生成的情形中加剧。
在各实施例中,可以提供分组传输流控制功能,该功能降低了与基于网络的当前状态通过网络将由本地应用生成的原始数据分组发送到远程应用相关联的传输延迟。传输流控制功能可减少可在通过网络以超过该网络当前可用的带宽的速率传送原始数据分组时发生的网络拥塞和相关的原始数据分组传输延迟。因此传输流控制功能还可减少用于传送每一原始数据分组的往返时间(RTT)。
在另一实施例中,可实现混合的基于速率加窗口的拥塞协议(其控制到网络中的分组传输速率)。这一混合的基于速率加窗口的拥塞协议可提供低排队延迟、接近零的分组损失、多个流之间的网络资源的公平分配、以及全链路利用。该混合协议可使用拥塞窗口来控制待处理位的最大数量、使用传输速率来控制进入网络的分组的速率(分组定速)、使用基于排队延迟的速率更新来控制容忍界限内的排队延迟(并最小化任何分组损失)、使用激进提升/优雅后退来完全利用链路容量,以及提供多个流之间的公平性。
现有的拥塞控制协议通常是基于窗口或基于延迟的。基于窗口的协议具有这样的优点:即使是使用激进提升策略,在任何给定时刻发送速率也不会超过链路容量的两倍(因为发送者只有在收到ACK或NACK(超时)时才能发送更多分组)。然而,由于基于窗口的协议能一次发送完整的分组突发,因此某些分组遭受很大的排队延迟。由此,拥塞检测阈值和所达到的实际最大排队延迟通常不会小于往返时间(RTT)。对于某些应用(例如,VoIP、会议、交互式软件应用),这可能是无法容忍的。另外,如果网络路由器缓存具有等于网络的带宽延迟产物的存储器,则这一拥塞控制协议会产生分组损失(即使它们响应于诸如TCP-Vegas或FAST TCP等延迟信号)。
另一方面,基于速率的协议能直接控制分组传输的速率。然而,必须小心不要太过激进地提升速率,否则会导致振荡行为或甚至分组损失。在一个实施例中,可提供联合的基于窗口加速率的协议。对窗口的使用提供了基于窗口的协议的优点。然而,为了防止所有分组一次性地外出,可使用传输速率来对分组进行定速。对定速的使用可导致非常低的排队延迟(取决于拥塞检测阈值),几乎零分组损失。
然而,如果拥塞检测阈值(以时间为单位)小于链路的往返时间(RTT),则对低拥塞检测阈值的使用会导致潜在的链路利用不足。例如,当网络路由器缓存大小(以时间为单位测量)小于RTT,则对TCP会发生相同的问题。这会在高带宽延迟产物网络中发生,因为即使是相对大量的网络路由器缓存(以位为单位)在以时间为单位时仍是小的。例如,具有2Gbps网络容量的100MB缓存将是100/2000=50ms的缓存。如果链路RTT是100ms,则即使***在发生拥塞导致的分组损失之前没有后退,这也会导致链路的利用不足。
如果假定排队延迟阈值被设置在10-20ms的范围内,则只要RTT大于该阈值,就会发生链路利用不足。一种解决方案是当远非拥塞时更激进地提升,且在接近拥塞时减小该提升。类似地,一旦遇到了拥塞,当拥塞较轻微时后退可以较不激进,且一旦拥塞水平很高则更激进地后退。拥塞水平通常使用排队延迟作为度量来确定拥塞何时发生来找到。
通过考虑这些因素,可达到完全链路利用。只要使用加性增加、乘性减少(AIMD)方式来执行速率更新,就能达到跨多个流的公平性。另外,速率控制更新可使用三区方案来执行。拥塞水平可以基于平均排队延迟、排队延迟趋势和分组损失来分类。传输速率可以取决于哪一个区当前活动来更新,以便保持排队延迟严密地被控制在某一所需界限内。排队延迟可被计算为不对时钟偏移或时钟偏斜(也称为时钟漂移)敏感。
拥塞控制协议的目标是控制传输速率,使得发送的分组遭受拥塞所引起的最小的网络排队延迟和损失,同时维持吞吐量接近可用网络带宽并确保对网络资源的公平共享。大多数拥塞控制协议在第n个时间使用下式,使用加性增加、乘性减小(AIMD)方案来调整传输速率(R)或窗口(W):
AIMD控制方案具有无论网络状态如何都保证公平性的性质。AIMD方案的细节包括其拥塞定义、α(要增加的量)和β(要减小的量)。拥塞可以按照损失、延迟和显式拥塞拥塞通知信号(如果存在)来定义。由此,AIMD方案可从TCP变体来用作用于拥塞控制的基础。拥塞控制策略可由以下目的来表征。
快速自适应到可用带宽:由于期望容忍小排队延迟(小于RTT和缓存大小),因此该功能可快速提升来防止链路利用不足。
对网络延迟敏感:为减少排队延迟和分组损失,该功能可使用排队延迟作为拥塞指示符来控制速率。
基于以上目的,可提供由以下的一个或多个来表征的拥塞控制功能。
基于速率的:使用基于速率加基于窗口的拥塞控制的组合来以相对稳定的速率将分组引入到网络中。这导致在延迟方面更稳定的网络行为,这是获得准确的排队延迟测量所需的。
快速提升:该功能可在远非拥塞时使用排队延迟作为当前状态离拥塞有多远的指示符来激进地提升。
优雅后退:代替在拥塞时按照恒定因子来后退,该功能可基于拥塞水平来后退。当进入拥塞时,后退可能不像在严重拥塞(由排队延迟指示)时那样激进。
延迟约束的拥塞检测:拥塞的定义可被修改,使得排队延迟可被准确控制在某一所需范围内。该协议可在长度L的时期上操作,该长度L被定义为等于所估计的往返传播时间(迄今为止看到的最小RTT)的时间单位。在每一时期的结束,更新时期长度,如下所述将拥塞水平分类到三个区之一,并如下所述地更新传输速率。基于窗口加速率的速率控制如下所述地执行。
代替简单地将拥塞定义为二元事件(拥塞或无拥塞),在一个实施例中,使用分组损失和单向延迟(OWD),可使用对拥塞水平的更连续的定义。对当前排队延迟的估计可通过取在刚结束的前一时期中确认的所有分组的相对单向延迟(ROWD)测量的平均来计算。相对单向延迟被计算为ROWD=OWD-OWDmin,其中OWD是实际单向延迟,其被计算为使用接收者的时钟的接收时间减去使用发送者的时钟的发送时间。OWDmin是迄今为止看到的最小OWD值。尽管OWD对时钟偏移敏感,但ROWD不会,因为OWDmin是对传播延迟加上时钟偏移的估计。
为了防止ROWD测量对时钟漂移(其中一个时钟运行得比另一时钟快)敏感,OWDmin可被取为某一测量窗口上的最小值而非迄今为止看到的真实最小值。令δavg=avg(ROWD)为排队延迟的估计。拥塞水平可被分类到以下三个区之一。
●区1:OWD趋势是非增加,且平均排队延迟小于某一阈值(δavg≤d1)。
●区2:OWD趋势是非增加,没有分组丢失,且对于d2>d1,d1<δavg≤d2。
●区3:OWD趋势是增加,δavg>d2,或者分组损失伴随着延迟增加(δavg>d1)。
如果分组正被适当地定速,则增加的OWD趋势意味着缓存正在逐步加满且因此意味着拥塞。拥塞控制协议努力留在区1和区2中,且因此看到的典型排队延迟在d1和d2之间。通过适当地选择d1和d2,并解释链路上看到的典型传播延迟,可控制由于网络引起的端对端延迟。大于d2的延迟仅在新的流进入时才看到。
TCP使用基于窗口的拥塞控制,其中窗口大小定义了能够待决的最大位数。允许该协议只要在待决的位的数量(F)小于窗口大小(W)时就发送分组。只要发送新分组,待决分组计数就增加,且一旦分组被确认(ACK)或一旦分组超时(NACK),就减小该计数。然而,在媒体流应用中,频繁使用基于速率的拥塞控制。在这些应用中,应用直接控制传输速率。允许发送者以R位/秒的速率来发送分组,而不论待决位计数。
基于窗口的拥塞控制的优点是其自计时行为,因为如果分组遭受大的排队延迟(因为待决位计数仅在ACK或NACK时减小),则发送者不能太快地增加发送速率。基于窗口的拥塞控制可对突发应用发送分组突发。尽管对于小的突发,这会导致分组可能具有较低的端对端延迟,因为它们不引起定速延迟,但对于大的分组突发,某些分组可能经历大的排队延迟甚至是分组损失,因为瞬时发送速率可能要比平均值大得多。
在一个实施例中高,基于窗口的拥塞控制可以与基于速率的拥塞控制方案相组合。例如,可使用窗口来控制最大待决位数,并且还使用传输速率来控制分组能进入网络的速率。传输速率R(以位/秒为单位)是直接基于拥塞信号来调整的量,且使用大小为W=RL(以位为单位)的窗口来控制最大待决位数,其中L是时期长度。
在纯基于速率的模式中,如果发送大小为P位的分组,则使用传输速率R,仅在P/R秒后才允许下一分组。在纯基于窗口的模式中,只要F<W,就可立即发送分组。在一个实施例中,分组可被定速,但是同时不超出窗口且因此使用联合模式。假定在时间t=Tl发送大小为Pl位的分组l,则只要t>Tl+γPl/R,且如果F<W,就可在时间t发送大小为Pl+1的下一分组(l+1),其中γ∈[0.0,1.0]是定速因子。当γ=1.0时,拥塞控制被完全定速,且是联合的具有窗口的基于速率的控制。如果γ=0.0,则回退到如TCP中那样的简单的基于窗口的速率控制。一旦在时间t发送了分组,则待决位数更新为F←F+Pl+1,且最后发送时间被更新为Tl+1=t。在分组m的ACK或NACK时,减小待决位计数F←F-Pm。
在每一时期的结束,可基于拥塞分类来更新传输速率(R)和窗口(W)。改变的方向使用以上定义的区分类来确定。代替更新窗口,使用下式来直接更新传输速率
其中
对δavg≤d0,α=αmax并在区1边界d1衰减到α=αmin。如果没有遇到分组损失,则β由下式给出:
其中βmin、βmid和βmax用于控制曲线的形状。在区2期间,β从βmin到βmid,然后如果延迟趋势是非增加,则在区3中到βmax。如果延迟趋势是增加,则其被假定为是拥塞的信号,且β作为延迟函数线性增加到βmax而不管排队延迟。对于遇到分组损失且δavg>dl的情况,β=βmax。
现在描述用于计算对时钟偏移和时钟漂移敏感的排队延迟的方法。假定发送者使用发送者时钟记录分组“n”在时间“s”离开发送者,然后接收者使用接收者时钟记录接收分组的时间为“r”。接收者将该信息(接收时间)发回发送者。发送者然后可计算分组“n”具有单向延迟(OWD=r-s)。OWD包括网络传播延迟、网络排队延迟、以及接收者和发送者之间的时钟偏移。由于传播延迟被假定为常量(p),且如果假定时钟偏移是常量(c),并且如果假定迄今为止看到的最小OWD(OWD_{min})是来自排队延迟为零的状态,则可以计算相对单向延迟并假定它为排队延迟(将其称为q)为ROWD=OWD-OWD_{min}(因为q=(p+c+q)-(p+c))。然而,如果协议运行了一长段时间,则时钟漂移会变得显著(即,c不是常量而是随着时间改变)。
在一个实施例中,一方法可跟踪两个最小OWD值(OWD_{min1}和OWD_{min2})。令OWD_{min1}是从某一时间“t1”到当前时间(将其称为t)看到的最小OWD。由此,OWD_{min1}是容易计算的,因为它仅涉及以下形式的更新:OWD_{min1}:=min(OWD_{min1},r-s)。令OWD_{min2}是从某一其他时间“t2”(其中t2>t1)到当前时间看到的最小OWD。该方法可使用ROWD=OWD-OWD_{min1},直到当前时间“t”超过某一阈值(将其称为t3)。直到t3,都使用值OWD_{min1}作为基础。在t3,该方法可切换到使用OWD_{min2}作为基础(即,ROWD=OWD-OWD_{min2}),然后将OWD_{min1}设为当前值。该方法可保持更新OWD_{min1}和OWD_{min2}两者,并且交替使用其中一个或另一个作为基础。这如图12所示地完成。
参考图12,白条指示OWD_{min1},灰条指示OWD_{min2}的计算。从时间t2到时间t3,被计算为从t1到当前时间的最小值的OWD_{min1}被用作计算ROWD的基础。在这一时间期间,OWD_{min1}是(t2-t1)直到(t3-t1)秒样本的最小值。然后,在时间t3重置OWD_{min1}。然而,到这一时间,OWD_{min2}是(t3-t2)秒样本的最小值,且因此被用作基础直到t4。例如,假定t1=0,t2=30,t3=60,且t4=90。于是,正在使用的基础是至少30秒样本的最小值,且不大于60秒样本的最小值。
在各实施例中,可提供分组编码功能,该功能为要在每一发送机会通过网络发送的每一输出分组动态地确定该输出分组是否将是前向纠错(FEC)分组。如果确定输出分组将是FEC分组,则分组编码功能可动态地确定要发送哪一FEC分组。这些决定可基于网络的当前状态以及最小化直到每一原始数据分组变得对目的地计算机上的远程应用可用之前的预期时间。分组编码功能可通过最小化对原始分组重传的需要来减小预期的原始数据分组传输延迟。
图9示出了编码器/解码器架构的示例性实施例。如图9所示,本地应用914生成的原始数据分组(以远程应用为目的地)被输入到编码器900中。每一输入原始分组914被临时存储在发送队列902中。在每一发送机会,分组传输策略计算器908使用其从解码器916接收到的反馈942来计算代表网络的当前状态的各种参数。在一个实施例中,这些网络状态参数可包括网络的当前可用带宽、当前分组损失率、当前分组传输延迟和当前路由器队列大小。分组传输计算器908可使用这些网络状态参数来为发送机会动态地计算分组传输流控制策略和分组编码策略。分组传输策略计算器908还可维护先前网络状态的历史,该历史也可在计算这些策略时使用。
再次参考图9,当在本地应用和远程应用之间建立新的通信会话时,可测量网络的当前可用带宽。网络的当前可用带宽可通过经由网络向目的地计算机发送特殊的低开销探测分组912序列(注意,这些不是数据分组)来测量,其中这些探测分组是由探测分组生成器906生成的。注意,替换实施例也是可能的,其中网络的当前可用带宽可使用其他已知方法来测量或估计。
一旦为给定发送机会计算908了分组编码策略,则基于该策略,分组编码器910可从发送队列902中读取940一个或多个原始分组,并且可从原始分组形成输出分组932,其中输出分组随后通过网络发送到远程应用。基于所计算的分组编码策略,输出分组932可以是单个原始分组或从多个原始分组的线性组合中形成的FEC分组。
通过网络从远程应用934接收的输出分组可被输入到解码器916。每一接收到的输出分组934可以被临时存储在输出分组接收队列926中。所接收的输出分组然后可按先进先出方式从输出分组接收队列926中读取904,并且被输入到分组解码器928中。分组解码器928可以试图对每一接收到的输出分组解码,并提取其中包括的一个或多个原始分组。被成功提取930的原始分组可随后被传递到本地应用。
当目的地计算机成功地接收到通过网络从源计算机发送的某一输出分组932时,目的地计算机可通过网络向源计算机发回确认(ACK)分组920。ACK分组920可指示该输出分组932被目的地计算机成功接收。ACK分组920还可指示该输出分组932被认为被丢失因为稍后的输出分组932被目的地计算机成功接收。ACK分组920还可指示该输出分组932是否是无序接收的。通过网络从目的地计算机920接收的ACK分组被输入到反馈生成器918中。反馈生成器918处理ACK分组来以规定的间隔例行地计算往返时间和单向分组传输延迟指示符,其中该延迟指示符指定单向分组传输延迟是增加、减小还是不变。反馈生成器918维护所计算的往返时间和延迟指示符的历史,并且还例行地(以规定间隔)计算规定拥塞窗口上的中值往返时间。反馈生成器918将ACK分组、所计算的往返时间、所计算的延迟指示符和所计算的中值往返时间作为上述反馈942的一部分提供给分组传输策略计算器908。
编码策略功能可采用自适应FEC方法,其中对每一发送机会,源计算机可为要通过网络发送的每一输出分组动态地确定该输出分组将是FEC分组还是单个原始分组。
如果决定输出分组将是FEC分组,则分组编码功能可动态地确定要发送哪一FEC分组。这些决定基于最小化直到每一原始数据分组变为对目的地计算机上的远程应用可用之前的预期时间,并考虑网络的当前状态和本地应用生成的每一原始分组的当前传输状态。
自适应FEC功能可减少编码器900的发送队列902中的拥塞。再次参考图9,在每一次发送机会,源计算机的分组传输策略计算器908将本地应用914生成的原始分组序列编组成以下四个不同集合,其中该编组基于每一原始分组914的当前传输状态。第一集合包括原始分组914,这些原始分组已经由分组编码器910形成为输出分组932并在各个发送机会通过网络发送到目的地计算机,并且明确已知已被目的地计算机成功接收。第二集合包括原始分组914,这些原始分组已经由分组编码器910形成为输出分组932并在各个发送机会通过网络发送到目的地计算机,并且明确已知由于在其通过网络的传输期间丢失或破坏而未被目的地计算机成功接收。
再次参考图9,第三集合包括原始分组914,这些原始分组已经由分组编码器910形成为输出分组932并在各个发送机会通过网络发送到目的地计算机,但是没有关于这些原始分组是否已被目的地计算机成功接收的明确信息已知。该第三集合中的原始分组914被假定为仍“在途中”。第四集合包括原始分组914,这些原始分组尚未被形成为输出分组且尚未通过网络发送到目的地计算机。
在每一次发送机会,源计算机的分组传输策略计算器908使用它所具有的关于网络的当前状态和本地应用914生成的每一原始分组的当前传输状态(即,如果有原始分组的话,哪些原始分组在上述的第一、第二、第三和第四集合中)的信息来动态地决定如何形成要通过网络发送的下一输出分组。该决定可如下作出。
当在当前发送机会在第二集合、第三集合或第四集合中没有原始分组时(即,本地应用生成的所有原始分组已经被远程应用成功接收),则策略计算器908只需指令分组编码器910不形成任何输出分组(即,在当前发送机会不发送任何内容)。在当前发送机会在第二集合中有一个或多个原始分组的不太可能的情况下,策略计算器908可指令分组编码器910从第二集合中的某一个原始分组形成下一输出分组(即,在当前发送机会发送的输出分组将包括在其通过网络的前一次传输期间丢失的某一原始分组的重传)。
当在当前发送机会在第三集合中没有原始分组,但在第四集合中有一个或多个原始分组时,源计算机的分组传输策略计算器908指示分组编码器910从第四集合中的下一原始分组形成下一输出分组。只要在当前发送机会在第四集合中没有原始分组,但在第三集合中有一个或多个原始分组时,源计算机的分组传输策略计算器908就指示分组编码器910将下一输出分组形成为FEC分组。只要在当前发送机会在第三和第四集合中均有一个或多个原始分组,策略计算器908就基于下一输出分组被形成为FEC分组的假设,计算在规定数量N个接连的发送机会上的、第三和第四集合中的原始分组的预期分组传输延迟的第一和。策略计算器908还基于下一输出分组是从第四集合中的下一原始分组形成的假设,计算在规定数量N个接连的发送机会上的、第三和第四集合中的原始分组的预期分组传输延迟的第二和。
在分组编码策略功能的一个实施例中,在计算了第一与第二和之后,策略计算器908比较第一与第二和。只要第一和小于第二和,策略计算器908就指示分组编码器910将下一输出分组形成为FEC分组。只要第一和等于或大于第二和,策略计算器908就指示分组编码器910从第四集合中的下一原始分组形成下一输出分组。
在另一实施例中,在计算了第一与第二和之后,策略计算器908可计算第一和小于规定阈值的第一概率。策略计算器908然后计算第二和小于该规定阈值的第二概率。策略计算器908然后比较第一与第二概率。只要第一概率大于第二概率,策略计算器908就指示分组编码器910将下一输出分组形成为FEC分组。只要第一概率等于或小于第二概率,策略计算器908就指示分组编码器910从第四集合中的下一原始分组形成下一输出分组。
尽管在当前发送机会发送包括FEC分组的输出分组可减少第三集合中的原始分组的传输延迟,但这会具有增加第四集合中的原始分组的传输延迟的效应。另一方面,如果在当前发送机会发送包括第四集合中的下一原始分组的输出分组,则这可具有增加第三集合中的原始分组的传输延迟的效应。策略计算器基于第三和第四集合的当前内容对这两个效应彼此加权,并确定在每一发送机会要通过网络发送的最优类型的输出分组,以便最小化由于分组损失和网络中的拥塞引起的预期传输延迟。尽管传输速率的激进提升会导致源计算机以超过网络的当前可用带宽的速率发送输出分组,且因此会导致由于网络中的拥塞而引起的网络分组损失的增加,但发送包括FEC分组的输出分组能补偿这一分组损失。随着由于网络中的拥塞减少而带来的网络分组损失率降低,策略计算器决定输出分组将是FEC分组的概率一般也会减小。
图10示出了交互式应用的典型网络设置的框图。发送者应用1000产生要发送到接收者的原始源分组1010。这些分组通常以突发进入,且由接收者将按序处理的数据构成。分组被发送到传输模块1020。传输模块通常具有临时保存分组的缓存1030。分组仅在它们已被接收者确认时才离开缓存。如果发送缓存满了,则发送应用从传输模块接收该事件的反馈并减小其发送速率。例如,对于正在发送音频/视频的应用,它能以较低的位率来重新压缩音频/视频。对于游戏应用,它能减小游戏状态更新间隔来减小发送速率。然而,一旦分组进入了传输模块的缓存,它们必须被无损地传递到接收者。
传输功能可由两个组件构成。一个组件是拥塞控制组件1040,该拥塞控制组件估计通信信道中的可用带宽,确定当前发送速率,并在检测到拥塞时后退(减小发送速率)。它试图找到用于发送应用的带宽的公平份额,同时试图最小化自拥塞引起的损失和排队延迟。此处公开的混合FEC-ARQ协议可与例如TFRC速率控制等许多现有拥塞控制模块一起操作。第二组件可以是确定在每一发送机会要发送哪一类型的分组的传输策略组件1050。
图11示出了一功能框图的示例,该示例示出了此处公开的某些方法。发送者应用1100产生要发送到接收者的原始源分组。可提供确定在每一发送机会要发送哪一类型的分组的分组编码策略1110。可提供拥塞控制组件1120,该拥塞控制组件估计通信信道中的可用带宽,确定当前发送速率,并在检测到拥塞时后退(减小发送速率)。已编码分组可被发送到网络栈1130以便发送到客户机,其中分组可使用分组解码功能1140来解码并提供给客户机处的对应的应用1100。
由于延迟是确定交互式应用的所感知到的用户性能时的重要因素,因此传输模块可减小每一分组导致的预期延迟同时确保可靠的按序传递。分组所导致的延迟具有若干分量—例如,发送者队列中的等待时间、传播延迟、网络排队延迟、重传延迟、以及使用编码方案的情况下的解码延迟。按序传递的要求也可导致附加延迟,因为分组可能需要等待先前的遗漏分组被传递或解码。
对于以下讨论,原始分组可被定义为应用希望从发送者发送到接收者的数据分组。对于具有按序可靠传递要求的流,原始分组i被定义为当且仅当该原始分组以及所有先前的分组j≤i被传递或解码时才可顺序解码(即,可使用)。令顺序可解码性延迟(SSD)指分组进入发送者队列(来自应用)的时间与它变为顺序可解码的时间之间的时间跨度。这是对交互式应用重要的延迟。令已编码分组指实际进入网络的分组。这些分组可以是原始的FEC分组或重发分组。令传输延迟为将这些已编码分组从发送者发送到接收者的延迟。该延迟由网络传播延迟和排队延迟构成。原始分组上的SDD是已编码分组导致的传输延迟以及已编码分组遭受的损失率和所使用的编码策略的函数。
传输策略可发送以下三种类型的分组中的一种:原始分组、FEC分组或重发分组。FEC分组由发送者队列中的现有的未确认(不可解码)分组的线性组合(在伽罗瓦域上)构成。令x[l]为被表示为字节向量的第l个原始源分组,每一字节是GF(28)中的一个元素。因而,如果y[k]是从发送者发送到接收者的第k个分组,则其可被写为
其中fk,l是来自GF(28)的系数。如果发送了原始分组,则对某些b[k]和e[k]=b[k],y[k]=x[b[k]]。由于按序要求,可以显示出对FEC分组,在不损失最优性的情况下,可假定b[k]为发送者队列中的第一未解码原始分组的索引。传输策略从以下三个传输政策中进行选择。
●在不编码的情况下发送新的源分组。
●发送仅前几个未解码分组的FEC分组。
●重发超时的或未被确认的已经发送的分组。
在任何给定的发送机会,使用用于在各种政策之间进行决定的成本来最小化预期SDD。定义以下各项。
●n是当前发送机会。
●B[n]是在发送n之前在发送者队列中的第一个未确认分组的索引。
●E[n]是发送者队列中的最后一个分组的索引。
●D[n]≤E[n]是尚未发送的第一个分组的索引。
●τ[k]是已编码分组k离开发送者的时间。
●Δ[k]是已编码分组k经历的传输延迟(传播延迟加上排队延迟)。
●γl是原始分组l进入发送者队列的时间。
原始分组l的预期SDD可被写为
Dl=∑δ∈DδProb(SDD=δ)其中D是对SDD的可能值的集合,由k上的τ[k]+Δ[k]-γl给出。实现此SDD的概率是pl[k]-pl[k-1],其中pl[k]是直到并包括l的所有原始分组使用直到并包括传输k的传输可解码(即,分组l顺序可解码)的概率。这给出了
SDD通过项Δ[k]受到传输延迟的影响,发送者队列中花费的时间受到τ[k]-γl的影响,且网络损失和编码策略受到pl[k]的影响。
可以假定拥塞控制模块达到平滑的传输速率和排队延迟。由此,τ[k+1]-τ[k]=T(连续发送机会之间的时间相对恒定)且Δ[k]=Δ(传输延迟稳定并且接近网络传播加上排队延迟)。然后,重排以上(1)中的项,得到
其中sl是在分组l进入队列之后到来的第一分组发送机会,即sl=min{j:τ[j]≥l}。该预期延迟可按照等待时间来看。在概率1的情况下,分组l等待直到在其进入队列之后到来的第一发送机会加上网络传输延迟。在概率1-pl[k]的情况下,它等待另外的时间T以获得下一发送机会。在对M个原始分组的给定发送机会n,l和τ[sl]对所有发送政策都是相同的。这些公共项可被移除来获得成本函数,该成本函数要被优化为
进一步进行简化,该方法可以只考虑从l=B[n]开始(所有其他分组都已被解码)并在E[n](进入发送者队列的最后一个分组)结束的源分组。该方法还可考虑超过E[n]的、将进入发送者队列的其他分组,但这是特定于应用的。对于每一分组n,该方法可以只考虑k上的求和中的某些项。对于当前具有非零的可决定性的概率(pl[n-1]≠0)的分组,该方法可以只考虑求和中的第一项,且对于具有pl[n-1]=0的原始分组,该方法可查看前Ll个项,这些项被定义为直到pl变为非零之前的预期时间。这给出了
Ll也可被估计为成功地传递原始分组l之前的所有分组所需的发送机会的预期数量。Ll可使用遗漏分组的当前预期数量Qn和当前损失估计ε来计算为Ll=(Qn+l-D[n])/(1-ε)。遗漏分组的预期数量可从概率pl计算。如果移除公共项并简化,则得到以下用于分别发送FEC和原始分组的成本函数
pl[n]是在该分组被发送的情况下的顺序可解码性的新概率,Qn是直到最后一个被发送的分组的遗漏分组的预期数量的新值——如果发送了FEC分组,则最后一个发送的分组停留在D[n],且如果发送了原始分组,则其增加到D[n]+1。使用(5),计算每一可能的FEC分组(直到D[n]-1的e[k]的每一值,其中b[k]=B[n])以及原始分组(b[k]=e[k]=D[n])的成本,并发送具有最小成本的分组。
(5)使用的ε的值使用进入过去的特定数量的分组的滑动窗口来估计。该窗口的损失被计算为εW,并且整体损失率使用ε←ηε+(1-η)εW利用某一权重η来更新。
当在源和FEC分组中分配传输速率时,一种方法是将其某一百分比分配到所需的源速率(解决了损失)并确保非新引进分组(浪费)的百分比不会比剩余的花费更多。浪费可以使用确定项(基于反馈)和用于途中的已编码分组(尚未确认或超时的分组)的概率项来计算。在给定发送机会n,令w是发送者(从反馈)已知接收者无用的分组的数量,且令t是(从反馈)所接收的分组的总数。可计算浪费的预期的一部分分组(多于被定义为FEC分组减去丢失分组的所需量)为
其中F是在途中的已编码分组的集合,|F|是这些分组的数量。概率pe[k][k-1]是给定直到k-1的发送,已经能够解码直到e[k]的概率,且因此是具有结束位置e[k]的第k个已编码分组无用的概率。
对于被考虑在n发送的任何给定分组,该方法可更新集合F,并计算u的更新的值。该方法可将浪费量u控制在特定阈值UMAX之下。如果发送FEC分组导致u在该阈值之上,则不发送该分组。
图13描绘了用于使用基于数据报的传输协议从计算设备向客户计算设备发送远程呈现数据的示例性操作过程,包括操作1300、1302、1304、1306、1308和1310。在一个实施例中,该基于数据报的传输协议可以是UDP。参考图13,操作1300开始该操作过程,且操作1302示出将数据分组排队并以排队的次序发送数据分组。操作1304示出从客户计算设备接收确认分组并基于确认分组重传数据分组。操作1306示出基于确认分组确定所发送的数据分组的损失统计量,并基于该损失统计量来确定数据损失的概率。操作1308示出用前向纠错(FEC)扩充数据分组并基于数据损失的概率来调整FEC注入率。操作1310示出基于拥塞水平来调整数据分组的传输速率,该拥塞水平被确定为分组排队延迟、分组损失率和单向延迟(OWD)趋势的函数。
在一个实施例中,分组排队延迟、分组损失率和OWD趋势可基于所述确认分组来估计。上述操作还可包括将应用生成的数据分组序列输入到发送队列中,并从发送队列中的数据分组形成输出分组序列,其中每一输出分组基于在每一发送机会动态确定的决定而或者包括FEC分组或者包括单个数据分组。FEC分组可包括发送队列中的数据分组的线性组合,该线性组合在伽罗瓦域上确定。
上述操作还可包括将输出分组序列发送到客户计算机并增加传输速率直到检测到拥塞。在一个实施例中,线性组合可包括发送队列中的未确认数据分组的预定序列。在另一实施例中,该决定可使用成本函数来最小化多个数据分组上的预期平均顺序可解码性延迟,该预期顺序可解码性延迟使用顺序可解码性的概率来计算。拥塞可基于分组排队延迟、分组损失率和OWD趋势来检测,其中分组排队延迟、分组损失率和OWD趋势基于从客户计算机接收到的确认分组来确定。该操作还可包括减小传输速率直到不再检测到拥塞的步骤。
在一个实施例中,分组排队延迟和OWD趋势可基于往返时间(RTT)和OWD来估计。分组损失率可以如下估计:通过计算在滑动窗口期间丢失的分组数量以计算当前损失率的估计,并使用当前损失率的指数加权移动平均来平滑估计的当前损失率以获得损失率的概率的估计,其中当在使用RTT和RTT变化(RTTVAR)计算的重传超时(RTO)内没有接收到确认时分组被声明为丢失。
拥塞水平可被进一步分类为三个区之一,这三个区由以下各项表征:(1)OWD不在增加且平均分组排队延迟小于预定阈值,(2)OWD不在增加,没有分组丢失,且平均排队延迟大于预定阈值但小于上限阈值,以及(3)OWD在增加,平均排队延迟大于上限阈值或分组损失伴随着平均排队延迟中的增加。当拥塞水平在区1中时,传输速率可以增加;当拥塞水平在区2或区3中时,传输速率可以减小;且传输速率在区3中时以比在区2中时更大的速率减小。
在一个实施例中,可以使用相对OWD来确定平均分组排队延迟,相对OWD是实际OWD和在预定数量的OWD值上测得的最小OWD之差,且OWD是使用接收者时钟的分组接收时间和使用发送者时钟的发送之间之差。
图14描绘了用于使用如上所述的基于数据报的传输协议从计算设备向客户计算设备传送远程呈现数据的示例性***。参考图14,***1400包括处理器1410和存储器1420。存储器1420还包括被配置成向客户计算机传送远程呈现数据的计算机指令。框1422示出测量计算设备和客户计算设备之间的通信会话的链路特性,该通信会话是使用基于数据报的传输协议来建立的。框1424示出向基于数据报的传输协议应用前向纠错(FEC)机制并基于链路特性和预定的最大冗余分组数来调整FEC注入率。
上述各方面的任一个可以用方法、***、计算机可读介质或任何类型的制造来实现。例如,按照图15,计算机可读介质可在其上存储用于使用基于数据报的传输协议从计算设备向客户计算设备传送远程呈现数据的计算机可执行指令。这一介质可包括用于测量计算设备和客户计算设备之间的通信会话的链路特性的第一指令子集1510,该通信会话是使用基于数据报的传输协议来建立的;以及用于向基于数据报的传输协议应用前向纠错(FEC)机制并基于链路特性来调整FEC注入率的第二指令子集1512。本领域的技术人员可以理解,可使用其他指令集来捕捉此处公开的各种其他方面,并且目前所公开的三个指令子集的细节可以按照本公开内容来变化。
上述详细描述通过示例和/或操作图阐明了***和/或过程的各种实施例。就这些框图和/或示例包含一个或多个功能和/或操作而言,本领域技术人员将理解,这些框图或示例中的每一功能和/或操作都可由各种各样的硬件、软件、固件、或实际上其任意组合来单独地和/或共同地实现。
应该理解,此处描述的各种技术可以结合硬件或软件,或在适当时结合两者的组合来实现。因此,本发明的方法和装置或其某些方面或部分,可以采用包含在诸如软盘、CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的程序代码(即,指令)的形式,其中,当程序代码被加载至诸如计算机等机器并由其运行时,该机器成为用于实现本发明的装置。在程序代码在可编程计算机上执行的情况下,计算设备通常包括处理器、该处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。一个或多个程序可以例如,通过使用API、可重用控件等来实现或利用结合本发明描述的过程。这样的程序优选地用高级过程语言或面向对象编程语言来实现,以与计算机***通信。然而,如果需要,该程序可以用汇编语言或机器语言来实现。在任何情形中,语言可以是编译语言或解释语言,且与硬件实现相结合。
尽管具体地参考其优选实施例来示出并描述了本发明,但本领域的技术人员可以理解,可以作出形式和细节上的各种改变而不脱离所附权利要求书中所述的本发明的范围。此外,尽管本发明的各元素可以用单数来描述或要求保护,但构想了复数,除非明确地规定了限于单数。
Claims (10)
1.一种使用基于数据报的传输协议来从计算设备(800)向客户计算设备(802)传送远程呈现数据的方法,所述方法包括:
将数据分组排队(1302)并以排队的次序发送所述数据分组;
从所述客户计算设备(802)接收确认分组(1304)并基于所述确认分组重传所述数据分组;
基于所述确认分组确定所发送的数据分组的损失统计量(1306),并基于所述损失统计量来确定数据损失的概率;
用前向纠错(FEC)扩充所述数据分组(1308)并基于所述数据损失的概率来调整FEC注入率;以及
基于拥塞水平来调整所述数据分组的传输速率(1310),所述拥塞水平是按照分组排队延迟、分组损失率和单向延迟(OWD)趋势来确定的。
2.如权利要求1所述的方法,其特征在于,所述分组排队延迟、分组损失率和OWD趋势是基于所述确认分组来估计的,并且排队的数据分组是由远程呈现应用生成的,所述方法还包括:
从所述排队的数据分组中形成输出分组序列,其中基于在每一发送机会动态地确定的决定,每一输出分组或者包括FEC分组或者包括单个数据分组;以及
将所述输出分组序列发送到所述客户计算机并增加所述传输速率,直到检测到拥塞。
3.如权利要求2所述的方法,其特征在于,所述FEC分组包括排队的数据分组的线性组合,所述线性组合是在伽罗瓦域上确定的,并且所述线性组合包括未确认的、排队的数据分组的预定序列。
4.如权利要求2所述的方法,其特征在于,所述决定使用成本函数来最小化多个数据分组上的预期平均顺序可解码性延迟,所述预期顺序可解码性延迟使用顺序可解码性的概率来计算。
5.如权利要求2所述的方法,其特征在于,所述拥塞基于所述分组排队延迟、所述分组损失率和所述OWD趋势来检测,并且所述分组排队延迟、分组损失率和OWD趋势是基于所述确认分组来确定的;所述方法还包括:
当检测到所述拥塞时,减小所述传输速率,直到不再检测到所述拥塞。
6.如权利要求1所述的方法,其特征在于,所述分组排队延迟和所述OWD趋势是基于往返时间(RTT)和OWD来估计的,且所述分组损失率通过以下步骤来估计:
计算在滑动窗口期间丢失的分组数量以计算当前损失率的估计;以及
使用所述当前损失率的指数加权移动平均来平滑所估计的当前损失率以获得所述损失率的概率的估计,其中当在使用RTT和RTT的变化(RTTVAR)计算的重传超时(RTO)内没有接收到确认时,分组被声明为丢失。
7.如权利要求1所述的方法,其特征在于,所述拥塞水平被分类到三个区之一,其中所述三个区由以下各项表征:(1)OWD不在增加且平均分组排队延迟小于预定阈值,(2)OWD不在增加,没有分组丢失,且平均排队延迟大于预定阈值但小于上限阈值,以及(3)OWD在增加,平均排队延迟大于上限阈值或分组损失伴随着平均排队延迟中的增加;以及
当所述拥塞水平在区1中时,所述传输速率增加;当所述拥塞水平在区2或区3中时,所述传输速率减小;且所述传输速率在区3中时以比在区2中时更大的速率减小。
8.如权利要求1所述的方法,其特征在于,所述平均分组排队延迟使用相对OWD来确定,所述相对OWD是实际OWD和在预定数量的OWD值上测得的最小OWD之差,且所述OWD是使用接收者时钟的分组接收时间和使用发送者时钟的发送之间之差。
9.一种被配置成向客户计算机(802)传送远程呈现数据的***(1400),包括:
至少一个处理器(1410);以及
在所述***可操作时通信耦合到所述至少一个处理器的至少一个存储器(1420),所述存储器中存储有计算机可执行指令,所述计算机可执行指令在被所述处理器执行时使得:
测量计算设备和客户计算设备之间的通信会话的链路特性(1422),所述通信会话是使用基于数据报的传输协议来建立的;以及
向所述基于数据报的传输协议应用前向纠错(FEC)机制(1422)并基于所述链路特性和预定的最大冗余分组数来调整FEC注入率。
10.一种其上存储有计算机可执行指令的计算机可读存储介质(1500),所述计算机可执行指令用于在客户计算机(802)上接收远程呈现数据,所述指令用于:
测量计算设备和客户计算设备之间的通信会话的链路特性(1510),所述通信会话是使用基于数据报的传输协议来建立的;以及
向所述基于数据报的传输协议应用前向纠错(FEC)机制(1512)并基于所述链路特性来调整FEC注入率。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/718,537 US8738986B2 (en) | 2010-03-05 | 2010-03-05 | Remote presentation over lossy transport with forward error correction |
US12/718,537 | 2010-03-05 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102195752A true CN102195752A (zh) | 2011-09-21 |
CN102195752B CN102195752B (zh) | 2016-06-22 |
Family
ID=44532336
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110060568.9A Active CN102195752B (zh) | 2010-03-05 | 2011-03-04 | 使用基于数据报的传输协议来传送远程呈现数据的方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8738986B2 (zh) |
CN (1) | CN102195752B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103716136A (zh) * | 2013-12-23 | 2014-04-09 | 上海网达软件股份有限公司 | 一种数据传送方法及*** |
CN104581422A (zh) * | 2015-02-05 | 2015-04-29 | 成都金本华科技股份有限公司 | 一种用于处理网络数据传输的方法和装置 |
CN104754401A (zh) * | 2013-12-25 | 2015-07-01 | 财团法人工业技术研究院 | 串流分享方法、串流分享装置与串流分享*** |
CN105141626A (zh) * | 2015-09-17 | 2015-12-09 | 上海赛为信息技术有限公司 | 优化的spice wan的***及方法 |
CN105164960A (zh) * | 2013-03-14 | 2015-12-16 | 谷歌公司 | 通过组合调步和前向纠错来降低重传时延 |
CN116527729A (zh) * | 2023-07-03 | 2023-08-01 | 厦门泛卓信息科技有限公司 | 一种基于Web3的分布式数据管理*** |
US11722427B1 (en) * | 2022-03-04 | 2023-08-08 | Cisco Technology, Inc. | Hybrid deadline-based transport for group applications using Hybrid Information-Centric Networking (hICN) |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8553540B2 (en) | 2010-03-05 | 2013-10-08 | Microsoft Corporation | Congestion control for delay sensitive applications |
US8661118B2 (en) * | 2010-03-08 | 2014-02-25 | Microsoft Corporation | Detection of end-to-end transport quality |
US8340039B2 (en) * | 2010-05-04 | 2012-12-25 | International Business Machines Corporation | Deduplicated data processing congestion control |
JP5533303B2 (ja) * | 2010-06-11 | 2014-06-25 | 富士通株式会社 | パケット送信装置、パケット送信方法、およびパケット送信プログラム |
US9037564B2 (en) | 2011-04-29 | 2015-05-19 | Stephen Lesavich | Method and system for electronic content storage and retrieval with galois fields on cloud computing networks |
US9137250B2 (en) | 2011-04-29 | 2015-09-15 | Stephen Lesavich | Method and system for electronic content storage and retrieval using galois fields and information entropy on cloud computing networks |
US9569771B2 (en) * | 2011-04-29 | 2017-02-14 | Stephen Lesavich | Method and system for storage and retrieval of blockchain blocks using galois fields |
US9361479B2 (en) * | 2011-04-29 | 2016-06-07 | Stephen Lesavich | Method and system for electronic content storage and retrieval using Galois fields and geometric shapes on cloud computing networks |
CN103597847A (zh) * | 2011-05-31 | 2014-02-19 | 汤姆逊许可公司 | 用于流处理多媒体内容的方法和装置 |
US9319330B2 (en) * | 2011-09-23 | 2016-04-19 | Oracle International Corporation | Apparatus and method for avoiding packet losses in a network connection |
US9451248B2 (en) * | 2011-09-28 | 2016-09-20 | Panasonic Intellectual Property Management Co., Ltd. | Data processing device and data processing method |
US20130104006A1 (en) * | 2011-10-17 | 2013-04-25 | Electronics And Telecommunications Research Institute | Apparatus and method for transmitting data in communication system |
US9571406B2 (en) * | 2011-10-25 | 2017-02-14 | Vmware, Inc. | Network congestion management based on communication delay |
KR101970684B1 (ko) * | 2012-02-28 | 2019-04-19 | 삼성전자주식회사 | 무선통신시스템에서 피드백 정보 전송 장치 및 방법 |
US10235278B2 (en) * | 2013-03-07 | 2019-03-19 | International Business Machines Corporation | Software testing using statistical error injection |
US11070484B2 (en) * | 2013-03-15 | 2021-07-20 | Code On Network Coding Llc | Method and apparatus for improving communication performance through network coding |
US9319329B2 (en) | 2013-10-14 | 2016-04-19 | Google Inc. | Pacing enhanced packet forwarding/switching and congestion avoidance |
US10158868B2 (en) * | 2013-10-15 | 2018-12-18 | Nvidia Corporation | Systems and methods to limit lag between a client and a server for remote computing |
KR101611663B1 (ko) * | 2013-10-28 | 2016-04-12 | 삼성에스디에스 주식회사 | 비연결 지향형 프로토콜을 이용한 데이터 통신 |
US9384205B1 (en) * | 2013-12-18 | 2016-07-05 | Veritas Technologies Llc | Auto adaptive deduplication to cloud based storage |
US9444755B2 (en) * | 2014-11-04 | 2016-09-13 | Anritsu Networks Co., Ltd. | Packet processing method and packet processing device |
AU2014413360C1 (en) * | 2014-12-12 | 2018-09-27 | Hitachi, Ltd. | Communication device, communication device system, and communication method |
US10153980B2 (en) | 2016-07-19 | 2018-12-11 | Coco Communications Corp | Systems and methods for managing network congestion |
CN110855402A (zh) * | 2016-09-30 | 2020-02-28 | 瞬已网络科技(上海)有限公司 | 一种网络实时视频传输方法及装置 |
US10218469B2 (en) * | 2016-12-08 | 2019-02-26 | Vmware, Inc. | Unified forward error correction and retransmission in a reliable network protocol |
US10505566B2 (en) * | 2017-06-15 | 2019-12-10 | Huawei Technologies Co., Ltd. | Methods and apparatus for encoding and decoding based on layered polar code |
AU2019262610B2 (en) * | 2018-05-04 | 2022-03-03 | Citrix Systems, Inc. | Computer system providing hierarchical display remoting optimized with user and system hints and related methods |
WO2020015840A1 (en) * | 2018-07-20 | 2020-01-23 | Nokia Technologies Oy | Learning in communication systems by updating of parameters in a receiving algorithm |
US10805044B2 (en) | 2019-02-25 | 2020-10-13 | At&T Intellectual Property I, L.P. | Optimizing delay-sensitive network-based communications with latency guidance |
CN110868616A (zh) * | 2019-11-26 | 2020-03-06 | 上海高骏精视信息技术有限公司 | 一种5g网络下低延时高可靠视频传输方法 |
US11728893B1 (en) * | 2020-01-28 | 2023-08-15 | Acacia Communications, Inc. | Method, system, and apparatus for packet transmission |
US11153192B2 (en) | 2020-02-29 | 2021-10-19 | Hewlett Packard Enterprise Development Lp | Techniques and architectures for available bandwidth estimation with packet pairs selected based on one-way delay threshold values |
EP4154478A1 (en) * | 2020-05-19 | 2023-03-29 | Ab Initio Technology LLC | Optimizing communication in distributed computing network |
CN114362892B (zh) * | 2022-01-17 | 2024-05-31 | 国网信息通信产业集团有限公司 | 基于CoAP的物联网重传超时更新方法、装置及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101026553A (zh) * | 2005-11-09 | 2007-08-29 | 索尼株式会社 | 分组传输装置、通信***和程序 |
CN101124728A (zh) * | 2005-01-06 | 2008-02-13 | 特瑞阳通讯***有限公司 | 使用fec反馈的自适应信息传递*** |
US20080215949A1 (en) * | 2007-03-02 | 2008-09-04 | Samsung Electronics Co., Ltd. | Server and client for determining error restoration according to image data transmission, and method of determining error restoration according to image data transmission |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5699369A (en) | 1995-03-29 | 1997-12-16 | Network Systems Corporation | Adaptive forward error correction system and method |
US6144639A (en) | 1996-09-03 | 2000-11-07 | Sbc Technology Resources, Inc. | Apparatus and method for congestion control in high speed networks |
US6421387B1 (en) | 1998-05-15 | 2002-07-16 | North Carolina State University | Methods and systems for forward error correction based loss recovery for interactive video transmission |
US7149664B1 (en) | 1999-06-02 | 2006-12-12 | Nortel Networks Limited | Method and apparatus for queue modeling |
US7336611B1 (en) | 2003-04-30 | 2008-02-26 | Nortel Networks Limited | Rate-based multi-level active queue management with drop precedence differentiation |
US6574668B1 (en) | 2000-01-25 | 2003-06-03 | Cirrus Logic, Inc. | Retransmission scheme in wireless computer networks |
WO2003088609A2 (en) | 2002-04-12 | 2003-10-23 | Nokia Corporation | System, device and method for improving throughput in a communication network, preferably a mobile ipv6-based network |
US7372814B1 (en) | 2003-02-27 | 2008-05-13 | Alcatel-Lucent | Network system with color-aware upstream switch transmission rate control in response to downstream switch traffic buffering |
US7502322B2 (en) | 2003-09-30 | 2009-03-10 | Nokia Corporation | System, method and computer program product for increasing throughput in bi-directional communications |
US7447148B2 (en) | 2003-10-28 | 2008-11-04 | Ntt Docomo, Inc. | Method for supporting scalable and reliable multicast in TDMA/TDD systems using feedback suppression techniques |
US7512066B2 (en) | 2004-03-30 | 2009-03-31 | Hewlett-Packard Development Company, L.P. | Congestion control system |
US20060015639A1 (en) | 2004-07-13 | 2006-01-19 | Taylor Benjamin F | Method for managing inter-zone bandwidth in a two-way messaging network |
US8214707B2 (en) | 2007-06-26 | 2012-07-03 | Aspera, Inc. | Method and system for reliable data transfer |
EP1845682A1 (en) | 2006-04-13 | 2007-10-17 | Flowing Content S.A. | Method and system for content distribution |
US8122330B2 (en) * | 2007-08-06 | 2012-02-21 | Alcatel Lucent | Rate-adaptive forward error correction for optical transport systems |
US8085767B2 (en) * | 2007-08-30 | 2011-12-27 | General Dynamics C4 Systems, Inc. | Systems and methods for reliable message delivery over digital networks |
US8265624B2 (en) * | 2007-09-24 | 2012-09-11 | Kapsch Trafficcom Ag | Method and system for broadcast message transmission in mobile systems |
US8091011B2 (en) * | 2007-10-09 | 2012-01-03 | Broadcom Corporation | Method and system for dynamically adjusting forward error correction (FEC) rate to adapt for time varying network impairments in video streaming applications over IP networks |
US8122140B2 (en) * | 2009-03-27 | 2012-02-21 | Wyse Technology Inc. | Apparatus and method for accelerating streams through use of transparent proxy architecture |
US8775658B2 (en) * | 2009-03-27 | 2014-07-08 | Wyse Technology L.L.C. | Apparatus and method for transparent communication architecture in remote communication |
US8553540B2 (en) | 2010-03-05 | 2013-10-08 | Microsoft Corporation | Congestion control for delay sensitive applications |
-
2010
- 2010-03-05 US US12/718,537 patent/US8738986B2/en active Active
-
2011
- 2011-03-04 CN CN201110060568.9A patent/CN102195752B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101124728A (zh) * | 2005-01-06 | 2008-02-13 | 特瑞阳通讯***有限公司 | 使用fec反馈的自适应信息传递*** |
CN101026553A (zh) * | 2005-11-09 | 2007-08-29 | 索尼株式会社 | 分组传输装置、通信***和程序 |
US20080215949A1 (en) * | 2007-03-02 | 2008-09-04 | Samsung Electronics Co., Ltd. | Server and client for determining error restoration according to image data transmission, and method of determining error restoration according to image data transmission |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105164960A (zh) * | 2013-03-14 | 2015-12-16 | 谷歌公司 | 通过组合调步和前向纠错来降低重传时延 |
CN103716136A (zh) * | 2013-12-23 | 2014-04-09 | 上海网达软件股份有限公司 | 一种数据传送方法及*** |
CN103716136B (zh) * | 2013-12-23 | 2017-08-29 | 上海网达软件股份有限公司 | 一种数据传送方法及*** |
CN104754401A (zh) * | 2013-12-25 | 2015-07-01 | 财团法人工业技术研究院 | 串流分享方法、串流分享装置与串流分享*** |
CN104754401B (zh) * | 2013-12-25 | 2018-03-09 | 财团法人工业技术研究院 | 串流分享方法、串流分享装置与串流分享*** |
CN104581422A (zh) * | 2015-02-05 | 2015-04-29 | 成都金本华科技股份有限公司 | 一种用于处理网络数据传输的方法和装置 |
CN104581422B (zh) * | 2015-02-05 | 2017-09-15 | 成都金本华科技股份有限公司 | 一种用于处理网络数据传输的方法和装置 |
CN105141626A (zh) * | 2015-09-17 | 2015-12-09 | 上海赛为信息技术有限公司 | 优化的spice wan的***及方法 |
US11722427B1 (en) * | 2022-03-04 | 2023-08-08 | Cisco Technology, Inc. | Hybrid deadline-based transport for group applications using Hybrid Information-Centric Networking (hICN) |
CN116527729A (zh) * | 2023-07-03 | 2023-08-01 | 厦门泛卓信息科技有限公司 | 一种基于Web3的分布式数据管理*** |
CN116527729B (zh) * | 2023-07-03 | 2023-09-05 | 厦门泛卓信息科技有限公司 | 一种基于Web3的分布式数据管理*** |
Also Published As
Publication number | Publication date |
---|---|
CN102195752B (zh) | 2016-06-22 |
US20110219287A1 (en) | 2011-09-08 |
US8738986B2 (en) | 2014-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102195752A (zh) | 通过带有前向纠错的有损传输的远程呈现 | |
US9485184B2 (en) | Congestion control for delay sensitive applications | |
CN102148824B (zh) | 用于传送和接收远程呈现图形数据的方法和*** | |
CN102137151A (zh) | 多链路远程协议 | |
US10341196B2 (en) | Reliably updating a messaging system | |
CN102196033A (zh) | 远程内容分类以及使用多个传输信道的传输 | |
CN104782133B (zh) | 用于媒体数据递送控制的方法和装置 | |
US20170063704A1 (en) | Dynamic jitter buffer size adjustment | |
CN106134147A (zh) | 实现请求管理器和连接管理器功能的传输加速器 | |
CN102195831A (zh) | 端对端传输质量检测 | |
US8249070B2 (en) | Methods and apparatuses for performing scene adaptive rate control | |
CN105340208A (zh) | 用于多径流式传输的基于fec的可靠传输控制协议 | |
US7725556B1 (en) | Computer system with concurrent direct memory access | |
CN113676605A (zh) | 数据传输方法、装置、设备及计算机可读存储介质 | |
JP2019106697A (ja) | 相互接続ネットワークでのメッセージ再送遅延を動的に管理するための方法及びデバイス | |
US20080114853A1 (en) | Network protocol for network communications | |
CN106411842A (zh) | 在内容中心网络堆栈中传输状态 | |
US11394620B1 (en) | Network pattern matching | |
JP2004229306A (ja) | 送信コンピューティングシステムが連続するアクションを歩調合せする方法 | |
Zheng et al. | A QoE-perceived screen updates transmission scheme in desktop virtualization environment | |
CN111158782B (zh) | 一种基于DPDK技术的Nginx配置热更新***和方法 | |
JP5998923B2 (ja) | プログラム、情報処理装置、及び通信方法 | |
CN104917594B (zh) | 虚拟机的tcp数据传输方法和虚拟机*** | |
CN112737971B (zh) | 数据处理方法、装置、存储介质及网络设备 | |
JP2011160023A (ja) | データ配信方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150729 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20150729 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |