IP Library Granted Patent US 8,411,560
Granted Patent B2
US 8,411,560 · App. 12/607,365 · Granted Apr 2, 2013

TCP selection acknowledgements for communicating delivered and missing data packets

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,411,560
App. No.
12/607,365
Granted
Apr 2, 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 (47)

1. A method for determining a data packet to retransmit, the method comprising:

maintaining, by a receiver, a sorted list comprising an index of consecutive sets of continuous ranges of sequence numbers identifying data packets received by the receiver; and

generating, by the receiver responsive to receiving a landing data packet, a selective acknowledgment (SACK) packet identifying:

(i) a first continuous range of sequence numbers and a second continuous range of sequence numbers, the second continuous range subsequent to the first continuous range in the sorted list and one or more sequence numbers between the first continuous range and the second continuous range identifying one or more data packets that have not been received, and

(ii) a third continuous range of sequence numbers, the third continuous range including a sequence number of the landing data packet, and not subsequent to the first continuous range or second continuous range in the sorted list;

wherein the sorted list includes at least one additional continuous range of sequence numbers of data packets that have been received between the third continuous range and both of the first continuous range and the second continuous range, the at least one additional continuous range not identified in the SACK packet.

2. The method of claim 1 , further comprising:

maintaining a reference in the sorted list, such that the first continuous range is chosen according to the reference; and

responsive to the generation of a SACK packet, advancing the reference to a subsequent continuous range in the list.

3. The method of claim 2 , wherein advancing the reference comprises wrapping to a beginning of the list upon reaching an end of the list.

4. The method of claim 2 , wherein advancing the reference to a subsequent continuous range in the list further comprises advancing the reference at least two ranges.

5. The method of claim 1 , wherein the method is performed in a proxy device coupled to a receiver.

6. A method for retransmitting packets based on acknowledgements, the method comprising:

receiving, by a sender, a selective acknowledgement (SACK) packet from a receiver, the SACK packet identifying:

(i) a first continuous range of sequence numbers and a second continuous range of sequence numbers, with one or more sequence numbers between the first continuous range and the second continuous range identifying one or more data packets that have not been received, and

(ii) a third continuous range of sequence numbers, the third continuous range including a sequence number of a landing data packet; and

identifying as not received by the receiver, from the SACK packet, the one or more data packets with sequence numbers between the first and second continuous ranges;

wherein the receiver maintains a sorted list comprising an index of consecutive sets of continuous ranges of sequence numbers identifying data packets received by the receiver, and the sorted list includes at least one additional continuous range of sequence numbers of data packets that have been received between the third continuous range and both of the first continuous range and the second continuous range, the at least one additional continuous range not identified in the SACK packet.

7. The method of claim 6 , further comprising retransmitting the identified data packets.

8. The method of claim 6 , further comprising:

designating the identified data packets as presumed lost data packets;

maintaining a counter of received SACK packets since the identified data packets were designated as presumed lost data packets; and

retransmitting the presumed lost data packets, responsive to the counter exceeding a threshold set responsive to an observed or expected packet reordering in the network.

9. A network communication system comprising:

a first device maintaining a receiver-side sorted list comprising an index of continuous ranges of sequence numbers identifying data packets received by a receiver;

a receiver-side flow module configured to generate a SACK packet responsive to receiving a landing data packet at the receiver, the SACK packet identifying:

(i) a first continuous range of sequence numbers and a second continuous range of sequence numbers, the second continuous range subsequent to the first continuous range in the sorted list and one or more sequence numbers between the first continuous range and the second continuous range identifying one or more data packets that have not been received, and

(ii) a third continuous range of sequence numbers, the third continuous range including a sequence number of the landing data packet, and not subsequent to the first continuous range or second continuous range in the sorted list;

wherein the sorted list includes at least one additional continuous range of sequence numbers of data packets that have been received between the third continuous range and both of the first continuous range and the second continuous range, the at least one additional continuous range not identified in the SACK packet; and

a second device comprising a sender-side flow module configured to receive the SACK packet from the receiver-side flow module and, responsive to receiving a the SACK packet, identify that the one or more data packets with sequence numbers between the first and second continuous ranges had not been received by the receiver when the SACK packet was generated.

10. The system of claim 9 , wherein the receiver-side flow module is further configured to:

maintain a reference in the sorted list, such that the first continuous range is chosen according to the reference; and

responsive to the generation of a SACK packet, advance the reference to a subsequent continuous range in the list.

11. The system of claim 10 , wherein advancing the reference comprises wrapping to a beginning of the list upon reaching an end of the list.

12. The system of claim 10 , wherein advancing the reference to a subsequent continuous range in the list further comprises advancing the reference at least two ranges.

13. The system of claim 9 , further comprising a proxy device coupled to the receiver, and wherein the receiver-side flow module is installed on the proxy device.

14. A system for retransmitting packets based on acknowledgements, the system comprising

a receiver, configured to maintain a sorted list comprising an index of continuous ranges of sequence numbers identifying data packets received by the receiver, and generate and transmit a selective acknowledgement (SACK) packet, the SACK packet identifying:

(i) a first continuous range of sequence numbers and a second continuous range of sequence numbers, with one or more sequence numbers between the first continuous range and the second continuous range identifying one or more data packets that have not been received, and

(ii) a third continuous range of sequence numbers, the third continuous range including a sequence number of a landing data packet, and not consecutive with the first continuous range or second continuous range;

wherein the sorted list includes at least one additional continuous range of sequence numbers of data packets that have been received between the third continuous range and both of the first continuous range and the second continuous range, the at least one additional continuous range not identified in the SACK packet; and

a sender, configured to receive the SACK packet and identify as not received by the receiver the one or more data packets with sequence numbers between the first and second continuous ranges.

15. The system of claim 14 , wherein the sender is further configured to retransmit the identified data packets.

16. The system of claim 14 , wherein the sender is further configured to:

designate the identified data packets as presumed lost data packets;

maintain a counter of received SACK packets since the identified data packets were designated as presumed lost data packets; and

retransmit the presumed lost data packets, responsive to the counter exceeding a threshold set responsive to an observed or expected packet reordering in the network.

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 13, 2013
From: SAMUELS, ALLEN R.; SUTTER, PAUL G.
To: ORBITAL DATA CORPORATION
Reel/Frame 029981/0204 →
NUNC PRO TUNC ASSIGNMENT Recorded Dec 15, 2011
From: ORBITAL DATA CORPORATION
To: CITRIX SYSTEMS, INC.
Reel/Frame 027392/0357 →
Continuity (4)
Continuation 10902491 · Jul 28, 2004
Continuation In Part 10696507 · Oct 29, 2003
Provisional Application 60490694 · Jul 29, 2003
Related Publication 20100050040A1 · Feb 25, 2010