IP Library › Granted Patent US 8,549,149
Granted Patent B2
US 8,549,149 · App. 11/323,354 · Granted Oct 1, 2013

Systems and methods for providing client-side accelerated access to remote applications via TCP multiplexing

Inventors: Prabakar Sundarrajan (Saratoga, CA); Junxiao He (Saratoga, CA); Shashi Nanjundaswamy (Santa Clara, CA); Sergey Verzunov (Moscow, RU); Charu Venkatraman (Bangalore, IN); Anil Shetty (Union City, CA)
Assignee: Citrix Systems, Inc.
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,549,149
App. No.
11/323,354
Granted
Oct 1, 2013
Kind
B2
Abstract

The present invention is directed towards systems and methods for dynamically deploying and executing acceleration functionality on a client to improve the performance and delivery of remotely accessed applications. In one embodiment, the client-side acceleration functionality is provided by an acceleration program that performs a transport layer connection multiplexing technique for improving performance of communications and delivery of a remotely-accessed application. The acceleration program establishes a transport layer connection from the client to the server that can be used by multiple applications on the client, or that is otherwise shared among applications of the client. The acceleration program multiplexes requests from one or more applications via the same transport layer connection maintained by the acceleration program. As such, the acceleration program can utilize the idle time of one application in using the transport layer connection to service a request of a second application through the same transport layer connection.

Claims (64)

1. A method for accelerating on a client access by the client to one or more applications on a server by multiplexing a plurality of application requests via a shared transport layer connection, the method comprising the steps of:

(a) intercepting at a layer below an application layer of a network stack of a client, by an acceleration program on the client, a first request by a first application of the client to access a server;

(b) transmitting, by the acceleration program, the first request via a transport layer connection established between the acceleration program and the server;

(c) intercepting at the layer below the application layer, by the acceleration program, a second request by a second application of the client to access the server;

(d) determining, by the acceleration program, that the established transport layer connection is not currently in use by the first application based on expiration of a predetermined period of time without communication by the first application; and

(e) transmitting, by the acceleration program, the second request via the established transport layer connection used by the first application, responsive to the determination that the established transport layer connection is not currently in use by the first application.

2. The method of claim 1 , further comprising transmitting, by the acceleration program, the second request upon receiving a response to the request of the first application from the server.

3. The method of claim 1 , wherein step (d) further comprises:

determining, by the acceleration program, that the established transport layer connection is currently in use by the first application;

waiting, by the acceleration program and responsive to determining that the established transport layer connection is currently in use by the first application, the predetermined period of time; and

determining, by the acceleration program, responsive to the expiration of the predetermined period of time, that the established transport layer connection is not currently in use by the first application.

4. The method of claim 1 , further comprising

determining, by the acceleration program, the first application is not currently using the transport layer connection by comparing a number of bytes transmitted by the first application to the server with a number of bytes acknowledged by the server, and

wherein a protocol of the transport layer connection provides for acknowledging receipt of bytes.

5. The method of claim 1 , further comprising determining, by the acceleration program, the first application is not currently using the transport layer connection by checking a length of message identifier in a message between the client and the server.

6. The method of claim 1 , further comprising multiplexing, by the acceleration program, requests from a plurality of applications on the client via the transport layer connection.

7. The method of claim 1 , further comprising pooling, by the acceleration program, a plurality of transport layer connections to the server for use by a plurality of applications of the client.

8. The method of claim 1 , further comprising transmitting, by an appliance, the acceleration program to the client upon a request from the client to establish a connection to the server.

9. The method of claim 1 , further comprising upon receipt of the acceleration program, automatically installing and executing, by the client, the acceleration program.

10. The method of claim 1 , wherein the acceleration program further comprises a filter device driver interfaced to a transport layer of a network stack of the client.

11. The method of claim 1 , further comprising performing, by the acceleration program, one of the following acceleration techniques:

compression;

decompression;

Transport Control Protocol buffering; and

caching.

12. The method of claim 1 , further comprising performing, by the acceleration program, one of encryption or decryption of communications between the client and the server.

13. The method of claim 1 , further comprising closing, by the acceleration program, the transport layer connection upon receipt of one of a reset or finish command for the first application and the second application.

14. The method of claim 1 , wherein step (b) further comprises establishing the transport layer connection between the acceleration program and an appliance, the appliance in communications with the server.

15. The method of claim 14 , further comprising establishing, by the appliance, a pool of one or more transport layer connections for use by the acceleration program.

16. The method of claim 14 , further comprising multiplexing, by the appliance, via the pool of one or more transport layer connections a plurality of communications between the acceleration program and the server.

17. The method of claim 1 , further comprising executing, by the client, the acceleration program, transparently to one of a network layer, a session layer, or an application layer of a network stack of the client.

18. The method of claim 1 , further comprising executing, by the client, the acceleration program, transparently to one of the first application, the second application, or the server.

19. A system for accelerating on a client access by the client to one or more applications on a server by multiplexing a plurality of application requests via a shared transport layer connection, the system comprising:

means for intercepting at a layer below an application layer of a network stack of a client, by an acceleration program on the client, a first request by a first application of the client to access a server;

means for transmitting, by the acceleration program, the first request via a transport layer connection established between the acceleration program and the server;

means for intercepting at the layer below the application layer, by the acceleration program, a second request by a second application of the client to access the server;

means for determining, by the acceleration program, that the established transport layer connection is not currently in use by the first application based on comparing a number of bytes transmitted by the first application to the server with a number of bytes acknowledged by the server; and

means for transmitting, by the acceleration program, the second request via the established transport layer connection used by the first application, responsive to the determination that the established transport layer connection is not currently in use by the first application.

20. The system of claim 19 , further comprising means for transmitting, by the acceleration program, the second request upon receiving a response to the request of the first application from the server.

21. The system of claim 19 , further comprising

means for determining, by the acceleration program, that the established transport layer connection is currently in use by the first application;

means for waiting, by the acceleration program and responsive to determining that the established transport layer connection is currently in use by the first application, a predetermined period of time; and

means for determining, by the acceleration program, responsive to the expiration of the predetermined period of time, that the established transport layer connection is not currently in use by the first application.

22. The system of claim 19 , further comprising

means for determining, by the acceleration program, the first application is not currently using the transport layer connection by comparing the number of bytes transmitted by the first application to the server with the number of bytes acknowledged by the server, and

wherein a protocol of the transport layer connection provides for acknowledging receipt of bytes.

23. The system of claim 22 , further comprising means for determining, by the acceleration program, the first application is not currently using the transport layer connection by checking a length of message identifier in a message between the client and the server.

24. The system of claim 19 , further comprising means for multiplexing, by the acceleration program, requests from a plurality of applications on the client via the transport layer connection.

25. The system of claim 19 , further comprising means for pooling, by the acceleration program, a plurality of transport layer connections to the server for use by a plurality of applications.

26. The system of claim 19 , further comprising an appliance transmitting the acceleration program to the client upon a request from the client to establish one of a connection or a session to the server.

27. The system of claim 19 , further comprising the client automatically installing and executing the acceleration program upon receipt of the acceleration program.

28. The system of claim 19 , wherein the acceleration program further comprises a filter device driver interfaced to a transport layer of a network stack of the client.

29. The system of claim 19 , wherein the acceleration program performs on the client one of the following acceleration techniques:

compression;

decompression;

Transport Control Protocol buffering; and

caching.

30. The system of claim 19 , wherein the acceleration program performs one of encryption or decryption of communications between the client and the server.

31. The system of claim 19 , further comprising means for closing, by the acceleration program, the transport layer connection upon receipt of one of a reset or finish command for one of the first application and the second application.

32. The system of claim 19 , further comprising means for establishing the transport layer connection between the acceleration program and an appliance, the appliance in communications with the server.

33. The system of claim 32 , wherein the appliance comprises a pool of one or more transport layer connections for use by the acceleration program.

34. The system of claim 33 , wherein the appliance multiplexes via the pool of one or more transport layer connections a plurality of communications between the acceleration program and the server.

35. The system of claim 19 , wherein the client executes the acceleration program transparently to one of a network layer, a session layer, or an application layer of a network stack of the client.

36. The system of claim 19 , wherein the client executes the acceleration program transparently to one of the first application, the second application, or the server.

Assignments (9)
PATENT SECURITY AGREEMENT Recorded Aug 15, 2025
From: CLOUD SOFTWARE GROUP, INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 072488/0172 →
SECURITY INTEREST Recorded May 24, 2024
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 067662/0568 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
SECURITY INTEREST Recorded Sep 30, 2022
From: CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 062079/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 19, 2006
From: SUNDARRAJAN, PRABAKAR; HE, JUNXIAO; NANJUNDASWAMY, SHASHI; VERZUNOV, SERGEY; VENKATRAMAN, CHARU; SHETTY, ANIL
To: CITRIX SYSTEMS, INC.
Reel/Frame 017642/0806 →
Continuity (2)
Provisional Application 60640464 · Dec 30, 2004
Related Publication 20060195547A1 · Aug 31, 2006