# US 11,570,117 B2 · Congestion control

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 11,570,117 B2
- Document ID: US11570117B2
- Status: Granted
- Kind: B2
- Application number: 17/249,994
- Filed: 2021-03-21
- Published: 2021-07-08
- Granted: 2023-01-31
- Earliest claimed: 2016-08-23
- Assignees: Netduma Software, LTD.
- Applicants: Netduma Software, LTD.
- Inventors: Iain Kibet Fraser
- Web page: https://patentgrep.com/patent/US11570117B2

## CPC

- H04L 47/225: {Determination of shaping rate, e.g. using a moving window}
- H04L 47/27: Evaluation or update of window size, e.g. using information derived from acknowledged [ACK] packets
- H04L 47/122: by diverting traffic away from congested entities
- H04L 47/193: at the transport layer, e.g. TCP related
- H04L 47/2466: using signalling traffic
- H04L 47/52: by attributing bandwidth to queues
- H04L 47/76: using dynamic resource allocation, e.g. in-call renegotiation requested by the user or requested by the network in response to changing network conditions
- H04L 69/22: Parsing or analysis of headers
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)

## Abstract

In an embodiment, header information of messages is altered to specify a window within which to receive information, so that the messages sent by a remote device will be sent at a rate that a network can receive messages. The sending of acknowledgements of messages are paced to control window growth. Bandwidth is allocated to a plurality of flows such that the satisfied flows require less bandwidth than an amount of bandwidth allocated to each unsatisfied flow.

## Claims

### Claim 1

A network system comprising:
a machine having a module that controls congestion, the machine that has the module including at least
a processor system having at least one processor and
a memory system storing one or more machine instructions, which when implemented by the machine that has the module causes the machine that has the module to implement a method including at least,
determining, by the machine that has the module, a rate characterizing a fastest rate at which a first machine is capable of receiving messages from a second machine, without creating congestion and the determining being performed without relying on probing for congestion to determine the rate;
automatically altering, by the machine that has the module, header information of a message from the first machine to the second machine, to specify a window within which information is to be sent by the second machine, the window being chosen so that the information will be sent at the rate that was determined; and
sending the message, via the processor system, to the second machine at the rate determined, the sending occurring after the altering of the header information.

### Claim 2 (depends on 1)

The network system of claim 1, the method further comprising automatically pacing, by the machine that has the module, when acknowledgements of messages are sent, to control growth of a window within which messages are received, causing the window to steadily increase from an initial size until the window reaches the window that was chosen.

### Claim 3 (depends on 1)

The network system of claim 1, the method further comprising automatically pacing, by the machine that has the module, when acknowledgements of messages are sent, to avoid bursts of messages sent by the second machine to the first machine.

### Claim 4 (depends on 3)

The network system of claim 3, wherein as a result of multiple performances of the determining and of the sending of the message at the rate determined by the determining of messages of a flow, bursts are prevented throughout the flow's lifetime.

### Claim 5 (depends on 1)

The network system of claim 1, the message sent to the second machine being an acknowledgement of a message sent from the second machine, the method further comprising automatically pacing, by the machine having the module, when the acknowledgements of the messages that are sent, to avoid latency in messages that will be sent by the second machine, wherein the acknowledgements are compliant with Transmission Control Protocol (TCP).

### Claim 6 (depends on 1)

The network system of claim 1, wherein the window is set to a largest number of whole maximum message sizes (mss) that is smaller than a roundtrip time of a message times the rate determined by the machine that has the module, which is also a rate at which the first machine is capable of accepting messages without increasing queuing, based on bandwidth allocated to a flow between the first machine and the second machine.

### Claim 7 (depends on 1)

The network system of claim 1, wherein a duration of time between sending acknowledgements of messages is set to a maximum message size divided by the rate determined by the machine that has the module, which is a rate at which the first machine is capable of accepting messages without increasing queuing, based on bandwidth allocated for the first machine.

### Claim 8 (depends on 1)

The network system of claim 1, the machine that has the module being different than the first machine and the second machine.

### Claim 9 (depends on 1)

The network system of claim 1, the machine that has the module being a router.

### Claim 10 (depends on 1)

The network system of claim 1, the altering including overwriting, by the machine having the module, a part of the header information that is related to the specifying of the window.

### Claim 11 (depends on 10)

The network system of claim 10, the altering including overwriting, by the machine having the module, a value of the part of the header information that is related to the specifying of the window, the value that was overwritten being in compliance with Transmission Control Protocol (TCP).

### Claim 12 (depends on 1)

The network system of claim 1, the method further comprising:
receiving the message from the first machine, at the machine having the module;
the altering including overwriting, by the machine having the module, a part of the header information that is related to setting the window.

### Claim 13 (depends on 1)

The network system of claim 1, the first machine being a server and the second machine being a client of the server.

### Claim 14 (depends on 1)

The network system of claim 1, the second machine being a server and the first machine being a client of the server.

### Claim 15 (depends on 1)

The network system of claim 1,
wherein the window is set to a smallest number of whole maximum message sizes (mss) that is larger than a roundtrip time of a message multiplied by a rate at which the first machine is capable of accepting messages without queuing, based on a bandwidth allocated for the first machine.

### Claim 16 (depends on 1)

The network system of claim 1,
the determining
measures roundtrip times of messages being sent between the first and second machines, to determine a minimum of the roundtrip times measured, and
determines a download rate at which data can be received at the first machine based on the minimum of the roundtrip times measured, and
the sending of the message to the second machine at the rate determined, causes messages from the second machine to be sent to the first machine at a download rate of the first machine.

### Claim 17

A network system comprising:
a machine having a module that controls congestion, the machine that has the module including at least
a processor system having at least one processor and
a memory system storing one or more machine instructions, which when implemented by the machine that has the module cause the machine that has the module to implement a method including at least,
determining, by the machine that has the module, a rate at which a first machine is capable of receiving messages from a second machine, without creating congestion;
automatically altering, by the machine that has the module, header information of a message from the first machine to the second machine, to specify a window within which information is to be sent by the second machine, the window being chosen so that the information will be sent at the rate that was determined; and
sending the message, via the processor system, to the second machine at the rate determined, the sending occurring after the altering of the header information;
the first machine being associated with a first window size, which is an indication of a maximum number of messages the second machine will accept from the first machine prior to the second machine receiving an acknowledgement message from the first machine;
the second machine being associated with a second window size, which is a maximum of messages the first machine will accept from the second machine prior to the first machine receiving an acknowledgement message from the second machine; and
the automatically altering including at least setting a window size that is based on a minimum of the first window size and the second window size.

### Claim 18

A network system comprising:
a machine having a module that controls congestion, the machine that has the module including at least
a processor system having at least one processor and
a memory system storing one or more machine instructions, which when implemented by the machine that has the module cause the machine that has the module to implement a method including at least,
determining, by the machine that has the module, a rate at which a first machine is capable of receiving messages from a second machine, without creating congestion;
automatically altering, by the machine that has the module, header information of a message from the first machine to the second machine, to specify a window within which information is to be sent by the second machine, the window being chosen so that the information will be sent at the rate that was determined; and
sending the message, via the processor system, to the second machine at the rate determined, the sending occurring after the altering of the header information,
the first machine running Transmission Control Protocol (TCP) and the second machine running the TCP, the window set by the machine having the module, being different than a window that would have been set according to the TCP had the window not been set by the machine having the module altering the header information.

### Claim 19

A network system comprising:
a machine having a module that controls congestion, the machine that has the module including at least
a processor system having at least one processor and
a memory system storing one or more machine instructions, which when implemented by the machine that has the module cause the machine that has the module to implement a method including at least,
determining, by the machine that has the module, a rate at which a first machine is capable of receiving messages from a second machine, without creating congestion;
automatically altering, by the machine that has the module, header information of a message from the first machine to the second machine, to specify a window within which information is to be sent by the second machine, the window being chosen so that the information will be sent at the rate that was determined; and
sending the message, via the processor system, to the second machine at the rate determined, the sending occurring after the altering of the header information;
the window being associated with how many messages the first machine will accept prior to receiving an acknowledgment of a prior message, the method further comprising:
the first machine receiving from the second machine an acknowledgement of a message that was sent to the second machine; and
in response to receiving the acknowledgement, shifting the window forward to thereby allow more messages to be received by the first machine from the second machine prior to first machine receiving a next acknowledgement of another message sent from the first machine to the second machine.

### Claim 20

A network method comprising:
automatically determining, by a machine having a module for controlling congestion, a rate characterizing a fastest rate at which a first machine is capable of receiving messages from a second machine, without relying on probing for congestion for determining the rate, the machine having the module including at least a processor system having at least one processor and a memory system storing one or more machine instructions;
automatically altering, by the machine that has the module, header information of a message from the first machine to the second machine, to specify a window within which information is to be sent by the second machine, the window being chosen so that the information will be sent at the rate that was determined; and
sending the message, via the processor system, to the second machine at the rate determined, the sending occurring after the altering of the header information.

### Claim 21 (depends on 20)

The method of claim 20,
wherein the window is set to a smallest number of whole maximum message sizes (mss) that is larger than a minimum roundtrip time multiplied by a rate at which the first machine is capable of accepting messages without queuing, based on a bandwidth allocated for the first machine.
