IP Library Granted Patent US 8,462,630
Granted Patent B2
US 8,462,630 · App. 12/784,863 · Granted Jun 11, 2013

Early generation of acknowledgements for flow control

Inventors: Allen Samuels (San Jose, CA); Paul Sutter (San Francisco, 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,462,630
App. No.
12/784,863
Granted
Jun 11, 2013
Kind
B2
Abstract

One or more flow control modules, implemented on various types of network topologies, provide a number of functionalities for controlling the flow of IP packets (such as TCP/IP packets) over a network connection. The flow control modules may be implemented within a sender and/or receiver or may be deployed into a network as a separate device without requiring significant additional resources.

Claims (55)

1. A method for controlling packet flow from a sender to a receiver over a network, the method comprising:

forwarding to a receiver, by a first intermediary device deployed between a sender and the receiver, a first data packet from the sender;

generating, by the first intermediary device, a first transport layer acknowledgement to pre-acknowledge the first data packet on behalf of the receiver;

transmitting, by the first intermediary device upon forwarding the first data packet to the receiver, the first transport layer acknowledgement to the sender while the first intermediary device has yet to receive a second transport layer acknowledgement from the receiver acknowledging receipt of the first data packet;

receiving, by the first intermediary device, a second data packet from the sender;

determining, by the first intermediary device, that storing the second data packet to a buffer of the first intermediary device exceeds a first predetermined threshold of a number of packets in the buffer;

generating, by the first intermediary device, a third transport layer acknowledgement to pre-acknowledge the second data packet on behalf of the receiver; and

setting, by the first intermediary device, responsive to the determination, a transport layer window size of the third transport layer acknowledgement to a size smaller than a maximum segment size.

2. The method of claim 1 , further comprising

determining, by the first intermediary device, that the number of packets in the buffer of the first intermediary device has decreased below a second predetermined threshold;

generating, by the first intermediary device, a fourth transport layer acknowledgement; and

setting, by the first intermediary device, responsive to the determination, a transport layer window size of the fourth transport layer acknowledgement to a size of at least one maximum segment size to allow the sender to send further data packets.

3. The method of claim 2 , wherein the second predetermined threshold is at least four packets lower than the first predetermined threshold.

4. The method of claim 1 , further comprising transmitting the third transport layer acknowledgement after a delay, wherein the delay is for a period less than a timeout of the sender.

5. The method of claim 4 , further comprising delaying transmission of the third transport layer acknowledgement until a plurality of data packets from the sender have not been pre-acknowledged.

6. The method of claim 1 , further comprising retaining, by the first intermediary device, a copy of the data packets forwarded downstream to the receiver until acknowledged as received from a downstream entity.

7. The method of claim 6 , further comprising not transmitting to the sender a transport layer acknowledgement generated to pre-acknowledge the last packet of a group of packets.

8. The method of claim 6 , further comprising:

determining, by the first intermediary device, whether a data packet transmitted downstream to the receiver has been lost;

retransmitting, by the first intermediary device, the data packet if the transmitted data packet has been determined lost; and

discarding, by the first intermediary device, the data packet if the transmitted data packet has been determined delivered.

9. The method of claim 1 , further comprising:

receiving, by the first intermediary device, a selective acknowledgement acknowledging the first data packet from a second intermediary device deployed downstream between the first intermediary device and the receiver; and

determining, by the first intermediary device and responsive to receiving the selective acknowledgement, that the receiver has not acknowledged receipt of the first data packet.

10. The method of claim 9 , further comprising:

receiving, by the first intermediary device, a non-selective acknowledgement acknowledging the first data packet from the second intermediary device; and

determining, by the first intermediary device and responsive to receiving the non-selective acknowledgement, that the receiver has acknowledged receipt of the first data packet.

11. A system for controlling packet flow from a sender to a receiver over a network, the system comprising:

a first intermediary device, deployed between a sender and a receiver, comprising a flow control module and a buffer, the flow control module configured to:

forward to the receiver a first data packet from the sender;

generate a first transport layer acknowledgement to pre-acknowledge the first data packet on behalf of the receiver;

transmit, upon forwarding the fist data packet to the receiver, the first transport layer acknowledgement to the sender without having received a second transport layer acknowledgement from the receiver acknowledging receipt of the first data packet;

receive a second data packet from the sender,

determine that storing the second data packet to the buffer exceeds a first predetermined threshold of a number of packets in the buffer;

generate a third transport layer acknowledgement to pre-acknowledge the second data packet on behalf of the receiver; and

set, responsive to the determination, a transport layer window size of the third transport layer acknowledgement to a size smaller than a maximum segment size.

12. The system of claim 11 , wherein the flow control module is further configured to:

determine that the number of packets in the buffer of the first intermediary device has decreased below a second predetermined threshold,

generate a fourth transport layer acknowledgement, and

set, responsive to the determination, a transport layer window size of the fourth transport layer acknowledgement to a size of at least one maximum segment size to allow the sender to send further data packets.

13. The system of claim 12 , wherein the second predetermined threshold is at least four packets lower than the first predetermined threshold.

14. The system of claim 11 , wherein the flow control module is further configured to transmit the third transport layer acknowledgement after a delay, wherein the delay is for a period less than a timeout of the sender.

15. The system of claim 14 , wherein the flow control module is further configured to delay transmission of the third transport layer acknowledgement until a plurality of data packets from the sender have not been pre-acknowledged.

16. The system of claim 11 , wherein the flow control module is further configured to retain a copy of the data packets forwarded downstream to the receiver until acknowledged as received from a downstream entity.

17. The system of claim 16 , wherein the flow control module is further configured to not transmit to the sender a transport layer acknowledgement generated to pre-acknowledge the last packet of a group of packets.

18. The system of claim 16 , wherein the flow control module is further configured to:

determine whether a data packet transmitted downstream to the receiver has been lost,

retransmit the data packet if the transmitted data packet has been determined lost, and

discard the data packet if the transmitted data packet has been determined delivered.

19. The system of claim 11 , further comprising:

a second intermediary device deployed downstream between the first intermediary device and the receiver, the second intermediary device configured to send a selective acknowledgement to the first intermediary device acknowledging the first data packet, responsive to (i) forwarding the first data packet to the receiver and (ii) not receiving an acknowledgement for the first data packet from the receiver; and

wherein the flow control module of the first intermediary device is further configured to determine, responsive to receiving the selective acknowledgement, that the receiver has not acknowledged receipt of the first data packet.

20. The system of claim 19 , wherein:

the second intermediary device is further configured to send a non-selective acknowledgement acknowledging the first data packet to the first intermediary device, responsive to receiving an acknowledgement for the first data packet from the receiver; and

the flow control module of the first intermediary device is further configured to determine, responsive to receiving the non-selective acknowledgement, that the receiver has acknowledged receipt of the first data packet.

Assignments (9)
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 →
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 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 →
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 →
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 →
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 Mar 26, 2012
From: SAMUELS, ALLEN R.; SUTTER, PAUL G.
To: ORBITAL DATA CORPORATION
Reel/Frame 027927/0808 →
NUNC PRO TUNC ASSIGNMENT Recorded Dec 15, 2011
From: ORBITAL DATA CORPORATION
To: CITRIX SYSTEMS, INC.
Reel/Frame 027392/0357 →
Continuity (4)
Continuation 10901691 · Jul 28, 2004
Continuation In Part 10696507 · Oct 29, 2003
Provisional Application 60490694 · Jul 29, 2003
Related Publication 20100232294A1 · Sep 16, 2010