# US 2018/0131613 A1 · Congestion control

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

- Number: US 2018/0131613 A1
- Document ID: US20180131613A1
- Status: Published application
- Kind: A1
- Application number: 15/684,930
- Filed: 2017-08-23
- Published: 2018-05-10
- Earliest claimed: 2016-08-23
- Assignees: Netduma Software, LTD.
- Inventors: Iain Kibet Fraser
- Web page: https://patentgrep.com/patent/US20180131613A1

## CPC

- H04L 47/12: Avoiding congestion; Recovering from congestion
- H04L 47/25: with rate being modified by the source upon detecting a change of network conditions
- H04L 47/27: Evaluation or update of window size, e.g. using information derived from acknowledged [ACK] packets
- 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 method comprising:
automatically altering, by a machine, header information of a message to a server from a client to specify a window within which information is sent by the server, the window being chosen so that the information will be sent at a rate that a client can receive messages without congestion without exceeding a bandwidth allocated to the client, the machine including a processor system having at least one processor and a memory system; and
sending the message, via the processor system, to a server sending messages to the user machine.

### Claim 2 (depends on 1)

The method of claim 1, further comprising automatically pacing when acknowledgements of messages are sent to control growth of a window within which acknowledgements of the messages are accepted.

### Claim 3 (depends on 1)

The method of claim 1, further comprising automatically pacing when acknowledgements of messages are sent to avoid bursts of message sent by the server to the client.

### Claim 4 (depends on 3)

The method of claim 3, wherein bursts are prevented throughout a flows lifetime.

### Claim 5 (depends on 1)

The method of claim 1, further comprising automatically pacing when acknowledgements of messages are sent to avoid latency in messages sent by the server.

### Claim 6 (depends on 1)

The method of claim 1, wherein the window is set to the largest number of whole maximum message sizes (mss) that is smaller than the round trip time of a message multiplied by a rate at which the client is capable of accepting messages without queuing, based on bandwidth allocated for the client.

### Claim 7 (depends on 1)

The method of claim 1, wherein a duration of time between sending acknowledgements of messages is set to the maximum message size divided by a rate at which the client is capable of accepting messages without queuing, based on bandwidth allocated for the client.

### Claim 8 (depends on 1)

The method of claim 1 further comprising:
allocating, by a machine, bandwidth to each of a plurality of flows that is adequate to satisfy the plurality flows, such that each flow that is allocated enough bandwidth to be satisfied, is allocated less bandwidth than an amount of bandwidth allocated to each unsatisfied flow;
automatically pacing when acknowledgements of messages are sent to control growth of a window within which acknowledgements of the messages are accepted;
wherein the window is set to the largest number of whole maximum message sizes (mss) that is smaller than the round trip time of a message multiplied by a rate, where the rate is determined by bandwidth allocated to the client;
wherein a duration of time between sending acknowledgements of messages is set to the maximum message size divided by the rate;
wherein bandwidth allocated to keep a flow satisfied is taken from unsatisfied flows;
detecting that a flow is new, categorizing the flow as unsatisfied, and based on detecting that the flow is new, reallocating bandwidth already allocated to unsatisfied flows to the new flow;
detecting that a flow ceased, and based on detecting that the flow ceased, reallocating bandwidth previously allocated to the ceased flow to unsatisfied flows;
detecting that an unsatisfied flow increased an amount of bandwidth required to be satisfied, in response, leaving the amount of bandwidth allocated to unsatisfied flow unchanged;
determining that a previously satisfied flow has increased an amount of bandwidth required to remain satisfied, in response
determining whether reallocating bandwidth from unsatisfied flows to the previously satisfied flow will result in the previously satisfied flow being allocated more bandwidth than the average bandwidth allocated to unsatisfied flows,
if reallocating bandwidth from the unsatisfied flows to the previously satisfied flow will result in the previously satisfied flow being allocated more bandwidth than the average bandwidth allocated to the unsatisfied flows, ceasing to allocate the satisfied flow an amount of bandwidth required to keep the flow satisfied, adding bandwidth allocated to the satisfied flow to the bandwidth allocated to the unsatisfied flows, and allocating to the previously satisfied flow an amount of bandwidth that is an average of the bandwidth allocated to unsatisfied flows, and
if reallocating bandwidth from the unsatisfied flows to the previously satisfied flow will not result in the previously satisfied flow being allocated more bandwidth than the average bandwidth allocated to the unsatisfied flows, reallocating enough bandwidth from the unsatisfied flows to the previously satisfied flow to keep the previously satisfied flow satisfied, therein decreasing the average bandwidth allocated to unsatisfied flows;
detecting that a satisfied flow decreased an amount of bandwidth that is required to remain satisfied, and in response reallocating from the satisfied flow to the unsatisfied flows bandwidth that is no longer required to satisfy the satisfied flow;
subsequent to an action that causes an increase in the average bandwidth allocated to unsatisfied flows, determining whether there is a flow categorized as unsatisfied that has been allocated more bandwidth than the flow requires to be satisfied, if there is a flow categorized as unsatisfied that has been allocated more bandwidth than the flow requires to be satisfied, then reallocating to other flows that are unsatisfied, bandwidth that is currently allocated to the flow categorized as unsatisfied that is not needed to satisfy the flow; and
after an action that causes a decrease in the average bandwidth allocated to unsatisfied flows, checking flows that are satisfied to determine whether there is a satisfied flow that requires more bandwidth to remain satisfied than the average bandwidth allocated to unsatisfied flows, and
if there is a flow that requires more bandwidth to remain satisfied than the average bandwidth allocated to unsatisfied flows, then reallocating to unsatisfied flows the bandwidth allocated to the flow that requires more bandwidth to remain satisfied than the average bandwidth allocated to unsatisfied flows, and the flow that requires more bandwidth to remain satisfied than the average bandwidth allocated to unsatisfied flows being recategorized as an unsatisfied flow.

### Claim 9

A method comprising:
allocating, by a machine, bandwidth to each of a plurality of flows that is adequate to satisfy the plurality flows, such that each flow that is allocated enough bandwidth to be satisfied, requires less bandwidth to be satisfied than an amount of bandwidth allocated to each unsatisfied flow, the machine including a processor system including at least one processor and a memory system.

### Claim 10 (depends on 9)

The method of claim 9, wherein bandwidth allocated to keep a flow satisfied is taken from unsatisfied flows.

### Claim 11 (depends on 9)

The method of claim 9, detecting that a flow is new, categorizing the flow as unsatisfied; and reallocating bandwidth already allocated to unsatisfied flows to the new flow.

### Claim 12 (depends on 9)

The method of claim 9, detecting that a flow ceased; and
reallocating bandwidth previously allocated to the ceased flow to unsatisfied flows.

### Claim 13 (depends on 9)

The method of claim 9, further comprising detecting that an unsatisfied flow increased an amount of bandwidth required to be satisfied, in response, leaving an amount of bandwidth allocated to the unsatisfied flow unchanged.

### Claim 14 (depends on 9)

The method of claim 9, further comprising:
determining that a previously satisfied flow has increased an amount of bandwidth required to remain satisfied,
determining whether reallocating bandwidth from unsatisfied flows to the previously satisfied flow will result in the previously satisfied flow being allocated more bandwidth than an average bandwidth allocated to unsatisfied flows,
if reallocating bandwidth from unsatisfied flows to the previously satisfied flow will result in the previously satisfied flow being allocated more bandwidth than the average bandwidth allocated to unsatisfied flows, ceasing to allocate the previously satisfied flow an amount of bandwidth required to keep the previously satisfied flow satisfied, adding the bandwidth allocated to the satisfied flow to the bandwidth allocated to unsatisfied flows, and allocating to the previously satisfied flow an amount of bandwidth that is an average of bandwidth allocated to unsatisfied flows; and
if reallocating bandwidth from unsatisfied flows to the previously satisfied flow will not result in the previously satisfied flow being allocated more bandwidth than the average bandwidth allocated to unsatisfied flows, reallocating enough bandwidth from the unsatisfied flows to keep the previously satisfied flow satisfied, therein decreasing the average bandwidth allocated to unsatisfied flows.

### Claim 15 (depends on 9)

The method of claim 9, detecting that a satisfied flow decreased an amount of bandwidth that is required to remain satisfied, and in response reallocating from the satisfied flow to unsatisfied flows bandwidth that is no longer required to satisfy the satisfied flow.

### Claim 16 (depends on 9)

The method of claim 9, further comprising:
after an action that causes an increase in the average bandwidth allocated to previously unsatisfied flows, determining whether there are previously unsatisfied flows that have been allocated more bandwidth than the previously unsatisfied flow requires to be satisfied, if there is a previously unsatisfied flow that has been allocated more bandwidth than the previously unsatisfied flow requires to be satisfied, then reallocating to unsatisfied flows bandwidth that is currently allocated to the previously unsatisfied flow that is not needed to satisfy the previously unsatisfied flow.

### Claim 17 (depends on 9)

The method of claim 9, further comprising:
after an action that causes a decrease in the average bandwidth allocated to unsatisfied flows, checking previously satisfied flows to determine whether there are previously satisfied flows that require more bandwidth to remain satisfied than the average bandwidth allocated to unsatisfied flows,
if there are previously satisfied flows that require more bandwidth to remain satisfied than the average bandwidth allocated to unsatisfied flows, reallocating to unsatisfied flows the bandwidth allocated to the previously satisfied flows that require more bandwidth to remain satisfied than the average bandwidth allocated to unsatisfied flows, and the previously satisfied flows that require more bandwidth to remain satisfied than the average bandwidth allocated to unsatisfied flows being allocated less bandwidth than required to remain satisfied, therein causing the previously satisfied flows that require more bandwidth to remain satisfied than the average bandwidth allocated to satisfied flows to be unsatisfied.

### Claim 18

A system comprising:
a machine including
a processor system having at least one processor and
a memory system storing one or more machine instructions, which when invoked cause the machine to implement the following method,
automatically altering, by the machine,
header information of a message to a server from a client to specify a window within which information is sent by the server, the window being chosen so that the information will be sent at a rate that a client can receive messages without congestion; and
sending the message, via the processor system, to a server sending messages to the client machine.

### Claim 19 (depends on 18)

The system of claim 18, the method further comprising:
allocating, by a machine, bandwidth to each of a plurality of flows that is adequate to satisfy the plurality flows, such that each flow that is allocated enough bandwidth to be satisfied, requires less bandwidth to be satisfied than an amount of bandwidth allocated to each unsatisfied flow.
