IP Library › Granted Patent US 7,796,510
Granted Patent B2
US 7,796,510 · App. 11/685,164 · Granted Sep 14, 2010

Systems and methods for providing virtual fair queueing of network traffic

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 7,796,510
App. No.
11/685,164
Granted
Sep 14, 2010
Kind
B2
Abstract

Systems and methods for dynamically controlling bandwidth of connections are described. In some embodiments, a proxy for one or more connections may allocate, distribute, or generate indications of network congestion via one or more connections in order to induce the senders of the connections to reduce their rates of transmission. The proxy may allocate, distribute, or generate these indications in such a way as to provide quality of service to one or more connections, or to ensure that a number of connections transmit within an accepted bandwidth limit. In other embodiments, a sender of a transport layer connection may have a method for determining a response to congestion indications which accounts for a priority of the connection. In these embodiments, a sender may reduce or increase parameters related to transmission rate at different rates according to a priority of the connection.

Claims (68)

1. A method of distributing congestion events by a device among a plurality of transport layer connections to dynamically alter effective bandwidth available to one or more of the transport layer connections, the method comprising:

(a) establishing, by a device, a plurality of transport layer connections, one or more of the transport layer connections having an assigned priority;

(b) receiving, by the device, via a first transport layer connection of the plurality of transport layer connections, a first indication of network congestion;

(c) selecting, by the device according to the assigned priorities, a second transport layer connection of the plurality of connections; and

(d) transmitting, by the device in response to receiving the first indication, a second indication of a congestion event via the second transport layer connection.

2. The method of claim 1 , wherein the device comprises a transparent proxy.

3. The method of claim 1 , further comprising the step of performing, by the device, acceleration function for the plurality of transport layer connections.

4. The method of claim 1 , wherein step (a) comprises establishing, by a device, a plurality of Transport Control Protocol (TCP) connections.

5. The method of claim 1 , wherein step (b) comprises receiving, by the device via a first transport layer connection of the plurality of transport layer connections, a packet comprising marked Explicit Congestion Notification (ECN) bits.

6. The method of claim 1 , wherein step (c) comprises selecting, by the device, a second transport layer connection of the plurality of transport layer connections according to a determined priority relative to an amount of bandwidth usage of each of the plurality of transport layer connections.

7. The method of claim 1 , wherein step (c) comprises selecting, by the device, according to a determined priority, a second transport layer connection from a subset of the plurality of transport layer connections, wherein the subset consists of the transport layer connections via which indications of congestion have not been transmitted for at least one round trip time.

8. The method of claim 1 , wherein step (c) comprises selecting, by the device, the transport layer connection of the plurality of transport layer connections with the highest bandwidth usage.

9. The method of claim 1 , wherein step (c) comprises selecting, by the device, the transport layer connection of the plurality of transport layer connections transmitting the greatest amount in excess of an allocated bandwidth.

10. The method of claim 1 , wherein step (c) comprises selecting, by the device, the transport layer connection of the plurality of transport layer connections transmitting data in excess of an allocated bandwidth by the greatest percentage.

11. The method of claim 1 , wherein step (c) comprises selecting, by the device, the transport layer connection of the plurality of transport layer connections with a lowest priority.

12. The method of claim 1 , wherein step (c) comprises selecting, by the device, according to a determined priority, a transport layer connection from a subset of the plurality of incoming connections, wherein the subset consists of the transport layer connections having a priority below a given threshold.

13. The method of claim 1 , wherein step (d) comprises transmitting, by the device, an indication of a congestion event via the second transport layer connection, wherein the device has not received an indication of a congestion event via the second transport layer connection.

14. The method of claim 1 , wherein step (d) comprises transmitting, by the device, an indication of a packet loss via the second transport layer connection.

15. The method of claim 1 , wherein step (d) comprises transmitting, by the device, a packet comprising marked Explicit Congestion Notification bits in the second transport layer connection.

16. The method of claim 1 , further comprising the steps of:

selecting, by the device according to the assigned priorities, a third transport layer connection of the plurality of connections; and

transmitting, by the device in response to receiving the first indication, a third indication of a congestion event via the third transport layer connection.

17. A system for distributing congestion events by an intermediate appliance among a plurality of transport layer connections to dynamically alter effective bandwidth available to one or more of the transport layer connections, the system comprising:

a network appliance which serves as an intermediary appliance to a plurality of transport layer connections, one or more of the transport layer connections having an assigned priority, the network appliance comprising:

a packet processor which receives, via a first transport layer connection of the plurality of transport layer connections, a first indication of network congestion; and

a flow controller which

selects, according to the assigned priorities, a second transport layer connection of the plurality of connections; and

transmits, in response to receiving the first indication, a second indication of a congestion event via the second transport layer connection.

18. The system of claim 17 , wherein the network appliance comprises a transparent proxy.

19. The system of claim 17 , wherein the network appliance performs acceleration functions for the plurality of transport layer connections.

20. The system of claim 17 , wherein the packet processor establishes a plurality of Transport Control Protocol (TCP) connections.

21. The system of claim 17 , wherein the packet processor receives, via a first one of the plurality of transport layer connections, a packet comprising marked Explicit Congestion Notification (ECN) bits.

22. The system of claim 17 , wherein the flow controller selects a second transport layer connection of the plurality of transport layer connections according to a determined priority relative to an amount of bandwidth usage of each of the plurality of transport layer connections.

23. The system of claim 17 , wherein the flow controller selects, according to a determined priority, a second transport layer connection from a subset of the plurality of transport layer connections, wherein the subset consists of the transport layer connections via which indications of congestion have not been transmitted for at least one round trip time.

24. The system of claim 17 , wherein the flow controller selects, the one of the plurality of transport layer connections with the highest bandwidth usage.

25. The system of claim 17 , wherein the flow controller selects, the one of the plurality of transport layer connections transmitting the greatest amount in excess of an allocated bandwidth.

26. The system of claim 17 , wherein the flow controller selects, the one of the plurality of transport layer connections transmitting data in excess of an allocated bandwidth by the greatest percentage.

27. The system of claim 17 , wherein the flow controller selects, the one of the plurality of transport layer connections with a lowest priority.

28. The system of claim 17 , wherein the flow controller selects, according to a determined priority, one of a subset of the plurality of incoming connections, wherein the subset consists of the transport layer connections having a priority below a given threshold.

29. The system of claim 17 , wherein the flow controller transmits, an indication of a congestion event in the selected transport layer connection, wherein the device has not received a congestion event via the second transport layer connection.

30. The system of claim 17 , wherein the flow controller transmits, by the device, an indication of a packet loss via the second transport layer connection.

31. The system of claim 17 , wherein the flow controller transmits, by the device, a packet containing marked Explicit Congestion Notification bits via the second transport layer connection.

32. A method of distributing congestion events by a device among a plurality of transport layer connections to dynamically alter effective bandwidth available to one or more of the transport layer connections, the method comprising:

(a) establishing, by a device, a plurality of transport layer connections;

(b) receiving, by the device, via a first transport layer connection of the plurality of transport layer connections, a first indication of network congestion;

(c) selecting, by the device according to the bandwidth usage of each of the plurality of transport layer connections, a second transport layer connection of the plurality of connections; and

(d) transmitting, by the device in response to receiving the first indication, a second indication of a congestion event via the second transport layer connection.

33. The method of claim 32 , wherein step (c) comprises selecting, by the device, according to a determined priority, a second transport layer connection from a subset of the plurality of transport layer connections, wherein the subset consists of the transport layer connections via which indications of congestion have not been transmitted for at least one round trip time.

34. The method of claim 32 , wherein step (c) comprises selecting, by the device, the transport layer connection of the plurality of transport layer connections with the highest bandwidth usage.

35. The method of claim 32 , wherein step (c) comprises selecting, by the device, the transport layer connection of the plurality of transport layer connections transmitting the greatest amount in excess of an allocated bandwidth.

36. The method of claim 32 , wherein step (c) comprises selecting, by the device, the transport layer connection of the plurality of transport layer connections transmitting data in excess of an allocated bandwidth by the greatest percentage.

37. A system for distributing congestion events by an intermediate appliance among a plurality of transport layer connections to dynamically alter effective bandwidth available to one or more of the transport layer connections, the system comprising:

a network appliance which serves as an intermediary appliance to a plurality of transport layer connections, the network appliance comprising:

a packet processor which receives, via a first transport layer connection of the plurality of transport layer connections, a first indication of network congestion; and

a flow controller which

selects, according to the bandwidth usage of each of the plurality of transport layer connections, a second transport layer connection of the plurality of connections; and

transmits, in response to receiving the first indication, a second indication of a congestion event via the second transport layer connection.

38. The system of claim 37 , wherein the flow controller selects, according to a determined priority, a second transport layer connection from a subset of the plurality of transport layer connections, wherein the subset consists of the transport layer connections via which indications of congestion have not been transmitted for at least one round trip time.

39. The system of claim 37 , wherein the flow controller selects, the one of the plurality of transport layer connections with the highest bandwidth usage.

40. The system of claim 37 , wherein the flow controller selects, the one of the plurality of transport layer connections transmitting the greatest amount in excess of an allocated bandwidth.

41. The system of claim 37 , wherein the flow controller selects, the one of the plurality of transport layer connections transmitting data in excess of an allocated bandwidth by the greatest percentage.

42. A method of distributing congestion events by a device among a plurality of transport layer connections to dynamically alter effective bandwidth available to one or more of the transport layer connections, the method comprising:

(a) establishing, by a device, a plurality of transport layer connections, one or more of the transport layer connections having an assigned priority;

(b) receiving, by the device, via a first transport layer connection of the plurality of transport layer connections, a first indication of network congestion;

(c) selecting, by the device according to the assigned priorities, a second transport layer connection of the plurality of connections; and

(d) transmitting, by the device in response to receiving the first indication, a second indication of a congestion event via the second transport layer connection;

(e) selecting, by the device according to the assigned priorities, a third transport layer connection of the plurality of connections; and

(f) transmitting, by the device in response to receiving the first indication, a third indication of a congestion event via the third transport layer connection.

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 Jun 5, 2007
From: PLAMONDON, ROBERT
To: CITRIX SYSTEMS, INC.
Reel/Frame 019379/0930 →
Continuity (1)
Related Publication 20080225728A1 · Sep 18, 2008