System and method for managing data packet communications - Patents.com

JP7638537B2Active Publication Date: 2025-03-04DEJERO LABS
View PDF 2 Cites 0 Cited by

Patent Information

Application Number
JP2022506839
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2019-08-08
Filing Date
2020-08-07
Publication Date
2025-03-04
Estimated Expiration
2040-08-07

Smart Images

  • Figure 0007638537000002
    Figure 0007638537000002
  • Figure 0007638537000003
    Figure 0007638537000003
  • Figure 0007638537000004
    Figure 0007638537000004
Patent Text Reader

Abstract

In various embodiments, a system is described for managing a data packet delivery flow in which one or more data packets are being communicated across a set of multipath network links, the system being adapted to monitor an aggregate throughput provided through the set of multipath network links operating together, and, if one or more data packets are being communicated at a rate faster than the monitored aggregate throughput, perform a packet spacing operation by delaying the one or more data packets and modifying characteristics corresponding to at least one of the one or more data packets based at least on the monitored aggregate throughput, such that the one or more data packets appear to be being communicated at a required pace.
Need to check novelty before this filing date? Find Prior Art

Description

[Technical field]

[0001] CROSS-REFERENCE TO RELATED APPLICATIONS This application is a nonprovisional benefit of and claims all benefits, including priority, of U.S. patent application Ser. No. 62 / 884,514, filed Aug. 8, 2019, entitled “SYSTEMS AND METHODS FOR MANAGING DATA PACKET COMMUNICATIONS,” which is incorporated herein by reference in its entirety.

[0002] This application is related to PCT Application No. PCT / CA2017 / 051584, which is also related to U.S. Patent Application No. 16 / 482,972, entitled "PACKET TRANSMISSION SYSTEM AND METHOD," filed December 21, 2017, and which is also incorporated by reference in its entirety.

[0003] TECHNICAL FIELD Embodiments of the present disclosure relate generally to the field of electronic data communications, and more specifically, embodiments relate to devices, systems, and methods for managing data packet communications. [Background technology]

[0004] Introduction Data packet transmissions across communication links are affected by congestion problems, for example, due to various communication bottlenecks. Therefore, networked communications utilize buffering and pacing approaches to reduce congestion problems and help improve data packet communication (e.g., reducing lost packets, improving overall throughput).

[0005] For example, TCP data packet pacing can be utilized as a mechanism to control the burstiness of packets sent by a TCP sender that is ACK clocked (i.e., sends packets in-flight based on a congestion window rather than a specific transmission rate).

[0006] Congestion problems are a major cause of degradation of quality of service through communication networks. In particular, pacing problems result in network congestion that creates specific technical problems, as discussed above, with respect to "handshake" or other error correction protocols that have specific reception requirements that can be affected by lost or out-of-order packets.

[0007] Certain protocol-based requirements, when interrupted, can cause further downstream problems, such as inadvertent retransmission of packets that are thought to be lost, further degrading performance, and therefore some scenarios may experience persistently degraded performance. Summary of the Invention

[0008] As described herein, data communication modification approaches are proposed to solve specific technical problems related to data packet pacing and / or timing. These approaches provide specific technical solutions adapted to modify data packet pacing to restore original pacing / establish new pacing, thereby improving overall data transmission characteristics, such as reducing congestion or reducing the effects of "bursty" communication. Improved pacing is useful, for example, in situations where bursts are so large that they exceed buffer limits and result in packets being erroneously dropped (early drop).

[0009] Alternative proposed embodiments are also described with specific approaches for determining / establishing pacing based, for example, on the use of packet monitoring or flagging approaches to distinguish between actual data payload and redundant payload (e.g., forward error correction payload). The various approaches have been experimentally verified through testing of various scenarios where pacing was disabled, enabled, and altered, and the timing of bursts was monitored and verified to see how it impacted communication quality across the network.

[0010] The approaches described herein may be established as software or embedded firmware in the form of a physical network device (e.g., router, sequencer, hub, multipath gateway, switch, data packet forwarder), a computer-implemented method performed by the physical device, and / or a machine-interpretable instruction set encoded on a non-transitory computer-readable medium for execution on an associated processor(s).

[0011] In particular, the physical network device may be adapted to modify or otherwise establish routing tables or routing policies stored in a data repository / storage medium that control the direction and / or routing of data packets encountered by the physical network device.

[0012] In some embodiments, the physical network device is adapted for in-flight changes. In other embodiments, the physical network device may be adapted or coupled to a receiver node and perform sequence correction / pacing changes (e.g., as a resequencer) prior to provisioning to the receiver node. This is particularly useful where an existing network infrastructure is adapted for retrofitting. In further embodiments, both in-flight change devices and end-point resequencer devices may be used in concert.

[0013] An exemplary description is provided herein. In a single communication link scenario, the data packet communication protocol may be conducted as a direct negotiation between the transmitting device and the receiving device. However, when there are multiple communication links utilized together, for example, as a bonded connection set, technical challenges regarding data packet buffering and data packet pacing increase. Multiple communication links utilized together are particularly useful in scenarios where a single communication path is unreliable or does not provide adequate transmission by itself.

[0014] Example scenarios include scenarios where large-scale video or bulk data transmission is required (e.g., live casting at a large sporting event where there is also a large amount of network traffic), rural communications (e.g., due to geographic distance and spectral interference from geographic features), or emergency response situations (e.g., where a primary communications link is not operational and a secondary communications link is required).

[0015] Data packet management is beneficial because throughput can be modeled as a function that is inversely related to data packet loss rate (e.g., TCP throughput is commonly modeled as inversely proportional to the square root of the loss probability). However, packet management approaches utilized during communication over a single link are not optimal when multiple communication links are used together.

[0016] As described herein, technical solutions are proposed for technical data packet and data buffer / queue management mechanisms, including physical network devices (e.g., improved routers), network traffic controllers, and corresponding methods and computer program products (e.g., non-transitory computer-readable media storing machine-interpretable instructions for execution on a processor) adapted for use with multiple communication links utilized together. For example, the packet spacing manipulation of some embodiments is adapted to restore data packets at a packet communication pace substantially similar to the pacing if the data packets were communicated over a single network link. In connection with various embodiments adapted to improve connection flows by using packet monitors / packet monitoring devices, certain technical approaches are described herein.

[0017] These packet monitoring / modification solutions are adapted to improve overall throughput by modifying the characteristics of data communications. Devices may be configured to operate on the sender (e.g., transmit side), the receiver (e.g., receiver side), on a communication link controller (e.g., in-flight), or combinations thereof, according to various embodiments. For example, packet pacing (e.g., packet spacing) may be modified on the sender (or in-flight), or packets may be spaced apart by buffering or mediation mechanisms on the receiver side.

[0018] To an upstream or downstream device requesting or receiving a communication, the data packet management activity may be transparent (e.g., a transmission is requested and sent, and the upstream or downstream device merely observes that aspects of the communication were successful and required a certain period of time).

[0019] For example, a packet spacing operation may be performed when data packets are received at a connection debonding device configured to receive data packets from a set of multipath network links and regenerate an original data flow sequence, and / or a packet spacing operation may be performed when data packets are transmitted at a connection bonding device configured to assign data packets for transmission across a set of multipath network links based on an original data flow sequence or spacing arrangement.

[0020] In a first embodiment, a system for managing data packet delivery flow (e.g., data packet pacing) is described that is adapted when data packets are being communicated across a set of multipath network links. The set of multipath network links can be bonded together to operate together to cooperatively communicate data packets associated with a particular data communication. The data packets are spaced apart from one another during communication (e.g., transmission), and in some embodiments, this spacing is provided by attaching information to the data packets, such as a timestamp, that changes how the data packets are treated by a transmitter, an intervening router, a receiver, or a combination thereof.

[0021] A technical challenge in utilizing multipath network links in this approach is that pacing is difficult to establish and poor pacing results in lost data packets. Lost data packets can increase the latency seen by upper layer protocols. For example, the application layer will experience higher latency as poorly paced packets are dropped and the TCP layer must retransmit.

[0022] In some data transmission protocols, poorly paced packets can result in undesirable behavior, for example requiring the transmitter to retransmit packets that are dropped by intermediate routers or other network hops due to large bursts of packets caused by poor pacing.

[0023] The system includes a processor configured to monitor an aggregate throughput provided over a set of multipath network links operating together. For example, there may be three network links, each providing different communication characteristics. A first network link may have a bandwidth of 5 Mbps, a second may have a bandwidth of 15 Mbps, and a third may have a bandwidth of 30 Mbps, totaling 50 Mbps. The aggregate throughput does not necessarily have to span all of the set of multipath network links. For example, the aggregate throughput may be tracked over a subset, or multiple aggregate throughputs may be monitored over one or more subsets of the network links.

[0024] Packet pacing is performed by modifying a characteristic of the data packets based at least on the monitored total throughput such that if one or more data packets are being communicated at a rate faster than the monitored total throughput, the data packets are delayed to appear to be being communicated / communicated at a required pace. For example, the modified characteristic may be an inter-packet spacing (e.g., relative or absolute) between receipt timestamps of each of the data packets that is based at least on the monitored total throughput (e.g., a required pace established through an inter-packet spacing of ideas). In some embodiments, modifying the timestamps may include at least one timestamp being modified to reflect a timestamp in the future.

[0025] In response to a change in the monitored total throughput, the processor may be further configured to determine what the ideal sequence of timestamps should have been (e.g., what should have been known a priori about the change in the monitored total throughput) and to modify inter-packet spacing of timestamps on data packets that have not yet been communicated such that the changed ideal timestamps align over the duration.

[0026] In some embodiments, a buffer is used to store the time-stamped data packets and is adapted to dynamically increase and decrease in size such that there is no fixed size that defines a queue indicating the order in which the data packets are communicated, and a subset of the data packets is periodically removed from the buffer based on the corresponding age of the data packets in the queue (calculated based on the timestamps). Such a buffer may not have an intended size limit, but the expected behavior is that buffering a burst of packets and metering them to the destination at a pacing rate indirectly results in ACK-clocked bursty applications transmitting their subsequent packets at the pacing rate, resulting in much smaller buffer consumption for the subsequent packets. However, in practical embodiments, actual buffer limits must be imposed to handle non-ACK-clocked applications. These applications have a transmission rate independent of the pacing rate, so eventually the buffer will reach its limit and packets will need to be dropped according to any number of active queue management (AQM) approaches (e.g., RED, FIFO, CoDel, etc.). [Brief description of the drawings]

[0027] In the figures, embodiments are shown by way of example, and it is to be expressly understood that the description and drawings are for illustrative purposes only and as an aid to understanding only.

[0028] Embodiments will now be described, by way of example only, with reference to the accompanying drawings, in which:

[0029] [Figure 1] 1 is a block schematic diagram of an example system for managing data packet delivery flows, according to some embodiments. [Diagram 2] FIG. 13 is a packet pacing diagram illustrating packets with respect to a data buffer in accordance with some embodiments. [Diagram 3]FIG. 13 is a packet pacing diagram illustrating an example of a single connection, according to some embodiments. [Figure 4A] FIG. 13 illustrates an example of multiple connections without pacing, according to some embodiments. [Figure 4B] FIG. 13 illustrates an example of multiple connections when a loss occurs without pacing, according to some embodiments. [Figure 5A] FIG. 1 illustrates an example of multiple connections with pacing, according to some embodiments. [Figure 5B] FIG. 1 illustrates an example of multiple connections without pacing and loss in accordance with some embodiments. [Figure 6] FIG. 13 is a packet pacing diagram illustrating the adjustment of ideal and modified timestamps as the total bandwidth decreases, according to some embodiments. [Figure 7A] FIG. 13 is a packet pacing diagram illustrating the adjustment of ideal and modified timestamps as aggregate bandwidth increases in accordance with some embodiments. [Figure 7B] FIG. 13 is a packet pacing diagram illustrating the effect of adjusting modified timestamps earlier or later as aggregate bandwidth increases, according to some embodiments. [Figure 8] 1 is a block diagram illustrating example components of an in-flight change system, according to some embodiments. [Figure 9] FIG. 2 is a block diagram illustrating components of an exemplary source system, according to some embodiments. [Figure 10] FIG. 2 is a block diagram illustrating components of an exemplary receiving system, according to some embodiments. [Figure 11] 1 is a block diagram illustrating components of an example multi-path transmitter and receiver operating in conjunction with intervening network elements to modify in-flight packets, in accordance with some embodiments. [Figure 12] FIG. 1 is a block diagram illustrating components of an exemplary transmitting and receiving system operating in conjunction in accordance with some embodiments. [Figure 13]1 is a process diagram illustrating a method for managing data packet delivery flow according to some embodiments. [Figure 14] 1 is an exemplary computing device according to some embodiments. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0030] TECHNICAL FIELD Embodiments of the present disclosure relate generally to the field of electronic communications, and more specifically, embodiments relate to devices, systems, and methods for managing data packet communications.

[0031] In a single communication link scenario, the data packet communication protocol may be conducted as a direct negotiation between the transmitting device and the receiving device. However, when there are multiple communication links utilized together, for example, as a bonded connection set, challenges with data packet buffering and data packet pacing increase. Multiple communication links utilized together are particularly useful in scenarios where a single communication path is unreliable or does not provide adequate transmission by itself.

[0032] Example scenarios include scenarios where large-scale video or bulk data transmission is required (e.g., live casting at a large sporting event where there is also a large amount of network traffic), rural communications (e.g., due to geographic distance and spectral interference from geographic features), or emergency response situations (e.g., where a primary communications link is not operational and a secondary communications link is required).

[0033] Data packet management is beneficial because throughput can be modeled as a function that is inversely related to data packet loss rate (e.g., TCP throughput is commonly modeled as inversely proportional to the square root of the loss probability). However, packet management approaches utilized during communication over a single link are not optimal when multiple communication links are used together.

[0034] A technical challenge in utilizing multipath network links in this approach is that pacing is difficult to establish and poor pacing results in lost data packets. In some data transmission protocols, poorly paced packets can result in undesirable behavior. For example, a large burst of packets caused by poor pacing requires the transmitter to retransmit packets that are dropped by intermediate routers or other network hops.

[0035] Multipath networking systems that require packet buffering and reordering to normalize for differences in latency, bandwidth, and reliability between available connections are described, for example, in Applicant's U.S. Patent Application No. 16 / 482972 / PCT Application No. PCT / CA2017 / 051584, entitled "PACKET TRANSMISSION SYSTEM AND METHOD," which is incorporated by reference in its entirety.

[0036] This buffering, when combined with ACK-clocked protocols such as TCP, can cause bursty transmission of packets. For example, a multipath system may buffer / delay TCP packets until they are in order, then release them to the destination in bursts. The destination receives TCP segments in bursts and also generates TCP ACKs in bursts. These arrive at the TCP sender in bursts. An ACK-clocked TCP sender, especially one in the slow start phase, responds to the burst of ACKs by transmitting a burst of new packets of similar size to the acknowledged burst, and an additional burst of similar size new packets that helps detect if the network can deliver more data. The overall result is to transmit an even larger burst of packets in-flight (twice the size of the acknowledged burst) in response to the burst of ACKs. This is repeated over several cycles, and eventually the bursts may become so large that they exceed the buffering limits of the multipath network system, causing some of the TCP segments to be dropped. The TCP sender may misinterpret these drops as congestion and reduce its transmission rate.

[0037] Unexpected drops may be due to a size-based buffering limit in the multipath system. This limit may be increased to prevent or delay premature drops, but buffering large data bursts is only permissible if the available connections in the multipath system have sufficient transmission capacity to clear the buffers in a reasonable amount of time. If that capacity is unavailable or varies significantly, accepting large bursts but not clearing them quickly can result in excessive buffer bloat, where in-flight packets are buffered for long periods of time, which is seen by communications applications as high latency or delivery timeouts.

[0038] To address this trade-off, limiting buffers based on the residence time of packets in the queue, rather than limiting them by size, is one technique that helps delay the effects of poor packet pacing: if a multipath system has a large amount of total transmission capacity, large bursts due to poor pacing can be cleared quickly and do not result in early drops.

[0039] However, this unlimited size, residence time limited queue will only cause unavoidable delays. Continuing with the previous example, the sender will eventually transmit TCP segments in bursts so large that the residence time of the packets in the multipath system's buffer exceeds the limit and they are dropped just as they would be in a size limited queue. For example, assume that the network has a buffer with a drain rate of 8Mb / s and a residence time limit of 500ms. A 1MB burst of packets buffered by such a network will require 1 second of draining. Thus, some packets at the end of that burst will exceed the 500ms residence time limit and will be dropped by the buffer before they have a chance to exit the network. The purpose of packet pacing is to induce the application to space out 1MB packet bursts more evenly over the course of a second, so that the multipath system is not forced to drop packets from the buffer. The overall system throughput will increase (because the application does not experience loss) and the buffer utilization of the multipath system will also decrease.

[0040] As described herein, technical solutions are proposed for technical data packet and data buffer / queue management mechanisms, including physical network devices (e.g., improved routers), network traffic controllers, and corresponding methods and computer program products (e.g., non-transitory computer-readable media storing machine-interpretable instructions for execution on a processor). For example, the packet interval manipulation of some embodiments is adapted to restore data packets at a packet communication pace substantially similar to the pacing if the data packets are communicated over a single network link. In variant embodiments, different or new pacings can be established as well (e.g., not all embodiments are limited to substantially similar pacings). Pacing can be established by modifying routing tables or routing policies, injecting delays, modifying timestamps, etc.

[0041] The system is adapted in some embodiments to artificially replicate the pacing activity that occurs naturally in a single connection case. In a multi-connection scenario, some degree of coordination is required, and in some circumstances the communication system exercises some control over the pacing of data packets. However, asserting control over the pacing of data packets also incurs computational, component, and device complexity costs incurred by imposing a control mechanism.

[0042] 1 is a block schematic diagram of an exemplary system for managing data packet delivery flows according to some embodiments. Variations are possible and the system may be a suitably configured physical hardware device having various hardware components.

[0043] As shown in FIG. 1, the system 100 is configured to utilize an improved scheduling approach on the transmitting portion of the system and a buffering system on the receiving end by improving packet spacing between data packets and establishing a modified packet communication pace.

[0044] In one embodiment, the illustrated components are hardware components configured to interact with one another. In another embodiment, the components are not separate components, but rather two or more components may be implemented on a particular hardware component (e.g., a computer chip that performs the functions of two or more of the components). The processor is configured to execute a set of machine-readable instructions. In some cases, the system is a special purpose computer that is specially adapted to modify packet pacing. In some cases, the system is a computer server. In some cases, the system is a configured network device.

[0045] In some embodiments, the components reside on the same platform (e.g., the same printed circuit board) and system 100 is a singular device that is transportable, connectable to a data center / field portable device (e.g., a rugged mobile transmitter), etc. In another embodiment, the components are distributed and not all located in close proximity, but rather communicate electronically through telecommunications (e.g., processing and control, rather than being performed locally, is performed by components that reside in a distributed resource environment (e.g., the cloud)). The components may be provided in the form of integrated circuits or systems on chips or chipsets for coupling onto a printed circuit board, for example.

[0046] Providing bonded connectivity is particularly desirable in mobile scenarios where signal quality, network availability, quality networks, etc. are not optimal (e.g., professional news gathering / video production may take place in locations without a strong network infrastructure).

[0047] A number of different data connections 106 (e.g., "paths") representing one or more networks (or network channels) are shown and are labeled as Connection 1, Connection 2...Connection N. There may be multiple data connections / paths across a single network, and there may be multiple data connections that may use one or more networks.

[0048] The system 100 may be configured to communicate to various endpoints 102, 110 or applications, which do not need to have any information regarding the multiple paths / connections 106 used to request and receive data (e.g., the endpoints 102, 110 can function independently of the paths or connections 106). For example, received data may be reconstructed such that the original transmission may be reproduced from the contributions of the different paths / connections 106 (an exemplary usage scenario is the playback of video by receivers configured to be slotted into server racks in a data center facility, integrating with existing broadcast infrastructure to provide improved network capabilities).

[0049] The system 100 receives input (data flow) from a source endpoint 102, schedules delivery of improved data packets over various connections 106, and then sequences the data packets at the other end of the system 108 before transmitting to a destination endpoint application 110. By doing so, the system 100 is configured to increase bandwidth to approach the sum of the maximum bandwidth of the various paths available. Compared to using a single connection, the system 100 also provides improved reliability. This can be an important consideration in time-sensitive, highly sensitive scenarios, such as gathering news at a live event as the event is occurring. In these events, there may be high signal congestion (such as a sporting event) or low reliability over one or more paths (such as reporting news after a natural disaster).

[0050] In various embodiments, both the scheduler and sequencer may be provided from a cloud computing implementation, or at the endpoint (before the data is consumed by an application at the endpoint), or various combinations thereof.

[0051] System 100 may be tuned to optimize and / or prioritize, among other things, performance, best latency, best throughput, least jitter (variation in latency of packet flows between two systems), cost of connections, combination of connections for a particular flow (e.g., if system 100 has information that a transmission (data flow) is of content type X, system 100 may be configured to use only data connections with similar latency, while content type Y may allow a broader mix of data connections (or may require a larger net capacity that can only be realized with a combination of data connections)). This tuning may be provided to the system in general or specific to each flow (or set of flows based on location, ownership of either the starting point or the endpoint, or a combination thereof, transmission time, set of available communication links, security required for transmission, etc.).

[0052] The system 100 may be generally bidirectional in that each gateway 104, 108 generally has a scheduler and sequencer for handling TCP traffic (or UDP traffic, or a combination of TCP and UDP traffic, or any kind of general IP traffic), although in some embodiments only one gateway may be required.

[0053] A feature of the scheduling portion of the system is a new approach to estimating the bandwidth of a given connection. The estimation may be based, for example, on an improved monitoring approach in which redundant (e.g., FEC packets) and non-redundant payloads are distinguished from one another for the purposes of estimation.

[0054] System 100 may be utilized in a variety of scenarios, for example, as a failover or supplement for an existing Internet connection (e.g., a VoIP telephone system or a corporate connection to the Web), whereby an additional network (or path) is added to seamlessly replace a dropped primary Internet connection, or bonding is used to include a higher cost network only when the primary Internet connection is saturated. Another application is to provide a means of maximizing the use of high cost (often sunk cost), highly reliable data connections such as satellites, by allowing the offloading of traffic to other data connections with different attributes.

[0055] In some embodiments, the system is a network gateway configured to route data flows across multiple network connections.

[0056] 1 provides an overview of a system with two gateways 104 and 108, each including a buffer manager 150, an action engine 152, a connection controller 154, a flow classification engine 156 (responsible for flow identification and classification), a scheduler 158, a sequencer 160, and a network characteristic monitoring unit 161, linked by N data connections 106, with each gateway connected to a particular endpoint 102, 110. The reference letters A and B are used to distinguish between the components of each of the two gateways 104 and 108.

[0057] Each gateway 104 and 108 is configured to include multiple network interfaces for transmitting data over multiple network connections, and is a device (e.g., including configured hardware, software, or embedded firmware) that includes a processor configured to: monitor time-varying network transmission characteristics of the multiple network connections; analyze at least one packet of a data flow of packets to identify a data flow class for the data flow, where the data flow class defines or is otherwise associated with at least one network interface requirement for the data flow; and route packets in the data flow across the multiple network connections based on the data flow class and the time-varying network transmission characteristics.

[0058] The buffer manager 150 is configured to configure buffers within the gateway adapted to more efficiently manage traffic (both individual flows and combinations of multiple simultaneous flows passing through the system). In some embodiments, the buffer manager is a separate processor. In other embodiments, the buffer manager is a computing unit provided by a processor configured to perform buffer management 150 among other activities.

[0059] The action engine 152 is configured to apply one or more deterministic methods and / or logical operations based on the received input data sets (e.g., feedback information, network congestion information, transmission characteristics) and inform the system about constraints that apply to bonded connections per user / client, destination / server, connection (e.g., latency, throughput, cost, jitter, reliability), flow type / requirements (e.g., FTP vs. HTTP vs. streaming video). For example, the action engine 152 may be configured to restrict a particular type of flow to a particular connection or set of data connections based on cost in one instance, while reliability and low latency may be more important for a different user or flow type. Different conditions, triggers, methods may be utilized, for example, depending on one or more elements of the known information. The action engine 152 may be provided on the same or a different processor as the buffer manager 150, for example.

[0060] The action engine 152 may be configured to generate, apply, or otherwise manipulate or use one or more rule sets that determine the logical actions by which routing on the N data connections 106 is controlled.

[0061] The flow classification engine 156 is configured to evaluate each data flow received by the multi-path gateway 104 for transmission and, if not known, to apply a flow classification approach to determine the type of traffic being transmitted and its requirements. In some embodiments, deep packet inspection techniques are adapted to perform the determination. In another embodiment, the evaluation is based on heuristic methods or data flows that were marked or labeled when they were generated. In another embodiment, the evaluation is based on rules provided by a user / administrator of the system. In another embodiment, a combination of methods is used. The flow classification engine 156 is configured to interact with one or more network interfaces and may be implemented using electronic circuits or a processor.

[0062] For example, flow identification may be performed through analysis of information provided in packets of a data flow, examining packet header information (e.g., source / destination IP, transport protocol, transport protocol port number, DSCP flags). In some situations, the transmitting device may simply indicate what type of information is in the payload, e.g., in a header flag or other metadata. This may be useful, for example, when the payload carries encrypted information and it is difficult to ascertain the type of payload being transmitted. In some embodiments, a deep packet inspection approach may also be used (e.g., when it is uncertain what type of information is in the payload).

[0063] As provided in some embodiments, differentiated levels of identification may occur: for example, the contents of the packet body may be further inspected, for example, using deep packet inspection techniques.

[0064] Once the flows are identified, classification may involve classifying the flows based on their requirements. Examples of classification include:

[0065] 1. Low latency, low to medium jitter, packets can be out of order, high bandwidth (live HD video broadcast). 2. Low latency, low to medium jitter, packets that can be out of order, medium bandwidth (e.g. Skype™, FaceTime™) (jitter is problematic for real-time communications as it can cause artifacts or degradation of communication). 3. Low latency, low to medium jitter, packets may be out of order, low bandwidth (DNS, VoIP). 4. Low latency, no jitter requirement, packets preferably in order, low bandwidth (interactive SSH). 5. No latency requirements, no jitter requirements, packets preferably in order, medium to high bandwidth (e.g. SCP, SFTP, FTP, HTTP). 6. No latency requirements, no jitter requirements, packets should be in order, no bandwidth requirements, sustained bulk data transfers (e.g. file / system backups), etc.

[0066] The one or more dimensions along which classification may be performed include, but are not limited to, the following: Latency b. Bandwidth / Throughput c. Jitter d. Packet Order e. Data transfer volume

[0067] As described further below, these classification dimensions are useful for improving efficient communication flows. Latency and bandwidth / throughput considerations are particularly important when there are flows with competing requirements. Exemplary embodiments in which jitter is addressed are described further below, and systems can be configured to accommodate jitter, for example, through buffering at the scheduler or by pinning flows to specific connections. Packet ordering is described further below with an example specifically for TCP, and pertains to where data volume can be used as an indicator that can reclassify flows from one type (low latency, low bandwidth) to another type (latency insensitive, high bandwidth).

[0068] Other classification dimensions and classifications are possible, and the above are provided as exemplary classifications. Different dimensions or classifications, and / or combinations thereof, can be created from the above. For example, in a media broadcast, the system may be configured to classify metadata associated with video data and clips (e.g., GPS information, timing information, labels), or FEC data associated with a video stream.

[0069] Flow classification may be utilized to remove and / or filter transmissions that the system is configured to prevent from occurring (e.g., in some examples, peer-to-peer file sharing, or material known to be under copyright protection) or traffic that the system may be configured to prefer in the context of providing a tiered service (e.g., a particular user or software program above another user or software program).

[0070] For example, in an Internet backup usage scenario, even with bonded backup, availability may be limited, so the system may be configured so that VoIP calls to and from a support organization receive a higher level of service than calls within the organization (in this case the system may generate instructions to the endpoint when under constraint to degrade the voice quality of some calls more than others, or to drop certain calls entirely given the bandwidth constraints).

[0071] Scheduler 160 is configured to perform decisions regarding which packets should be sent to which connections 106. Scheduler 160 may be considered an improved QoS engine. In some embodiments, scheduler 160 is implemented using one or more processors, or standalone chips or configuration circuits such as comparator circuits or FPGAs. Scheduler 160 may include a series of logic gates configured to perform the decisions.

[0072] A typical QoS engine manages a single connection, but can be configured to perform flow identification and classification, the end result being that the QoS engine reorders packets before they are sent out on a single connection.

[0073] In contrast, scheduler 160 is configured to perform flow identification, classification, and packet reordering, but scheduler 160 in some embodiments is further configured to perform decisions on which connection to send packets on to improve transmission characteristics of the data flow and / or to satisfy policies set for the flow by a user / administrator (or as set by various rules). Scheduler 160 may modify network interface operating characteristics, for example, by transmitting a set of control signals to the network interfaces to switch them on or off or indicate that they should be used to route data. The control signals may be instruction sets that indicate certain characteristics of the desired routing, such as packet timing, reservation of network interfaces for certain types of traffic, etc.

[0074] For example, consider two connections with the following properties:

[0075] 1) Connection 1: Round Trip Time (RTT) of 1 ms, estimated bandwidth of 0.5 Mbps. 2) Connection 2: RTT of 30ms, estimated bandwidth of 10Mbps.

[0076] Scheduler 160 may attempt to reserve connection 1 exclusively for DNS traffic (small packets, low latency). In this example, there may be so much DNS traffic that it reaches the capacity of connection 1, and scheduler 160 may be configured to overflow traffic onto connection 2, although scheduler 160 may selectively do so based on other determinations or factors. For example, if scheduler 160 is configured to provide a fair determination, scheduler 160 may configure initial overflow traffic from IP addresses that have already sent a significant amount of DNS traffic in the past X seconds.

[0077] Scheduler 160 may be configured to process the decisions based on, for example, a process or methodology operating in conjunction with one or more processors or similar implementations in hardware (e.g., FPGAs). These devices may be configured to operate under the control of an operational engine 152, which breaks down the data stream into data packets and then routes the data packets to buffers (managed by a buffer manager) that feed the data packets to the data connection according to rules that seek to optimize packet delivery while taking into account the characteristics of the data connection.

[0078] The primary criteria, in some embodiments, is based on latency and bandwidth, although in some embodiments, the path maximum transmission unit (PMTU) may also be utilized. For example, if one connection has a PMTU that is significantly smaller than the other (e.g., 500 bytes versus 1500 bytes), it is designated as a bad candidate for overflow because packets sent on that connection will need to be fragmented (e.g., can be avoided or deprioritized).

[0079] Scheduler 160, in some embodiments, need not be configured to communicate packets in the correct order, but rather is configured to communicate packets across the various connections to meet or exceed desired QoS / QoE metrics (some of which may be defined by the network controller and others by the user / customer). In cases where packets may be communicated out of order, sequencer 162 and buffer managers may be utilized to reorder received packets.

[0080] The successive bursts of packets are transmitted through the network interface, and an estimate of the bandwidth of the first network interface is generated based on timestamps recorded when the packets in the successive bursts of packets are received at the receiving node, and the size of the packets. The estimate is then utilized to route packets in the data flow of sequential packets across the set of network connections based on the generated bandwidth of the first network interface. As described below, in some embodiments, the bandwidth estimate is generated based on timestamps of packets in the burst that are not coalesced with the initial or final packets in the burst, a lower bandwidth value can be estimated, and a higher bandwidth value can be estimated (e.g., through packet substitution). The transmitted packets can be test packets, test packets "piggybacked" on data packets, or hybrid packets. When data packets are used for "piggybacking", some embodiments include flagging such data packets to increase redundancy (e.g., to enhance tolerance to lost packets, especially for packets used for bandwidth testing purposes).

[0081] The sequential packets may be received in order or within an acceptable deviation from the order such that sequencer 162 can rearrange the packets for consumption. In some embodiments, sequencer 162 is a physical hardware device that may be incorporated into a broadcast infrastructure that receives the signals and generates an output signal that is the reassembled signal. For example, the physical hardware device may be a rack-mounted appliance that serves as the first stage of signal reception and reassembly.

[0082] Sequencer 162 is configured to order received packets and transmit them to applications at the endpoints in an acceptable order to reduce unnecessary packet re-requests or other error corrections for the flow, which in some embodiments is according to the original order. In other embodiments, the order is within an acceptable margin of error such that the receiving endpoint can still utilize the data flow. Sequencer 162 may include buffers or other mechanisms to smooth out latency and jitter in the received flow, for example, and may be configured in some embodiments to control transmission of packet acknowledgments and storage based on monitoring the transmission characteristics of multiple network connections and uneven distribution in the reception of the data flow of sequential packets.

[0083] The sequencer 162 may, for example, be provided on a processor or may be implemented in hardware (e.g., a field programmable gate array) provided under the control of the operational engine 152, configured to reassemble the data flow from received data packets extracted from a buffer.

[0084] The sequencer 162 is configured, for each flow, to hide latency differences between multiple connections that are not tolerated for each flow.

[0085] The action engine 152 can act as an aggregator of information provided by other components (including 154) and instructs the sequencer 162 through one or more control signals that indicate how the sequencer 162 should operate in a given flow.

[0086] When a system configured for a protocol such as TCP receives packets, the system is generally configured to expect (but not require) the packets to arrive in order. However, the system is configured to establish a time limit when out-of-order packets are expected to arrive (usually a few multiples of the round trip time or RTT). The system may also be configured to retransmit missing packets sooner than the time limit based on a heuristic (e.g., fast retransmission triggered by three DUP ACKs).

[0087] If packets arrive at sequencer 162 on connections with significantly different latencies, sequencer 162 may be configured to buffer the packets (for each flow) until they are roughly the same age (delay) before sending them to their destination. For example, you might do this if the flows have consistent latency and low jitter requirements.

[0088] The sequencer 162 does not necessarily need to provide reliable, strictly ordered delivery of data packets, but in some embodiments is configured to provide what is necessary to prevent systems that use protocols (e.g., applications on top of TCP or UDP) from prematurely determining that packets have been lost by the network.

[0089] In some embodiments, sequencer 162 is configured to monitor the latency variation (jitter) of each data connection (based on data maintained by operation engine 152) along with packet loss, and predict, based on the reliability of the connection, which data connections are likely to delay packets beyond those expected by the flow (meaning that endpoints 102 and 110 will see them as lost and invoke error correction routines).

[0090] For out-of-order situations, sequencer 162 may, for example, utilize larger jitter buffers on connections that exhibit greater latency variation. For packet retransmissions, sequencer 162 may be configured to immediately request lost packets over the "best" (most reliable, lowest latency) connection.

[0091] In an exemplary scenario, the bandwidth-delay product estimate may not be perfectly accurate, causing latency spikes in the connection, resulting in packets being received out of order at the intermediate gateway.

[0092] In these embodiments, sequencer 162 may be configured to perform predictive determinations regarding how a protocol (and / or associated application) will behave with respect to mis-reordered packets, and to generate instructions to reorder packets such that downstream systems are less likely to erroneously assume that the network has reached capacity (and thus back off its transmission rate) and / or unnecessarily request retransmission of packets that were not lost.

[0093] For example, many TCP implementations use multiple (e.g., three) consecutive duplicate acknowledgments (DUP ACKs) as a hint that the packet after the DUP ACK is likely to be lost. These acknowledgments may be tracked, for example, by a packet monitoring mechanism. In this example, if the receiver receives packets 1, 2, 4, 5, and 6, it will send an ACK(2) three times (once each for packets 4 / 5 / 6). The sender is then configured to recognize that this event may be a hint that packet 3 is likely to be lost in the network, and will preemptively retransmit it before any normal retransmission timeout (RTO) timer expires.

[0094] In some embodiments, sequencer 162 may be configured to account for such predictive decisions. Following the example above, if sequencer 162 has packets 1, 2, 4, 5, 6, 3 buffered, sequencer 162 may then reorder the packets to ensure that they are transmitted in the proper order. However, if packets are already buffered in the order 1, 2, 4, 3, 5, 6, sequencer 162 may be configured to not bother reordering them prior to transmission, since a predictive decision would not be triggered in this example (given the positioning of packet 3).

[0095] The connection controller 154 is configured to perform the actual routing between the different connection paths 106 and is provided, for example, to indicate that the connections 106 to the bonded links do not have to reside on the physical gateways 104, 108 (e.g., a physical gateway may have some links (Ethernet or otherwise) to physical transmission / reception devices or satellite equipment that may be elsewhere (and may be in a different location, such as an antenna)). Thus, the endpoints may be logically connected and physically separated in various ways.

[0096] In one embodiment, system 100 is configured to provide what is known as TCP acceleration, where the gateway creates a pre-buffer upon receiving a packet and provides an acknowledgment signal (e.g., an ACK flag) to the transmitting endpoint as if the receiving endpoint had already received the packet, allowing the transmitting endpoint 102 to send more packets to system 100 before the actual packet is delivered to the endpoint. In some embodiments, pre-buffering is used for TCP acceleration (opportunistic acknowledgment (ACKing) combined with the resulting buffering of data).

[0097] This pre-buffer may reside before the first link to the transmitting endpoint 102, or anywhere else in the chain to the endpoint 110. The size of this pre-buffer may vary in response to feedback from the multipath network, which in some embodiments is an estimate or measurement of the bandwidth-delay product, or may vary based on a set of predetermined logical operations (where a particular application or user will receive a pre-buffer with particular characteristics such as speed, latency, throughput, etc.).

[0098] Pre-buffers may exist at various points within an implementation, e.g., a pre-buffer may exist at the entry point to gateway 104 or anywhere down the line (but before the final destination) to 110. In an embodiment, there is a series of pre-buffers as data flows from endpoint 1 to endpoint 2, e.g., pre-buffers in both gateway A and gateway B.

[0099] Data that is accepted into the pre-buffer and opportunistically ACK'd by endpoint 102 becomes the responsibility of system 100 to reliably transmit to endpoint 110. The ACK tells the original endpoint 102 that endpoint 110 received the data so it doesn't have to handle retransmission via its normal TCP mechanisms.

[0100] Pre-buffering and opportunistic ACKs are advantageous because they remove the time limit available to system 100 to handle loss and other non-ideal behavior of connections 106. The time limit without TCP acceleration is based on the TCP RTO calculated by endpoint 102, which is a value outside the control of system 100. If this time limit is exceeded, endpoint 102 a) retransmits data that system 100 may already have buffered, and b) reduces its cwnd, thereby reducing throughput.

[0101] The size of the pre-buffer may need to be limited to place a bound on memory usage, necessitating the communication of flow control information between the multi-path gateways 104 and 108. For example, if the communication link between the gateway 108 and the endpoint 110 has a lower throughput than the aggregate throughput of all connections 106, the amount of data buffered at 108 will continually increase.

[0102] If the buffered amount exceeds the limit, a flow control message is sent to 104 to tell it to temporarily stop sending ACK data from the endpoint 102 .

[0103] When the buffered amount eventually falls below the limit, a flow control message is sent to 104 to inform it to opportunistically resume ACKs. The limit may be a static threshold or may be dynamically determined / calculated taking into account factors such as, for example, the total BDP of all connections 106 and the total number of data flows currently being handled by the system. The thresholds at which flow control start / stop messages are sent do not have to be the same (e.g., there may be hysteresis).

[0104] Similarly, there may be flow control signaling information within the multipath gateway itself. For example, if the total throughput of the connection 106 is less than the throughput between the endpoint 102 and the gateway 104, the pre-buffer in 104 will continually increase. After the limit is exceeded (which may be calculated as described above), opportunistic ACKs of data coming from the endpoint 102 may need to be temporarily stopped and then resumed when the amount of data falls below an appropriate threshold.

[0105] The above example describes TCP acceleration for data sent from endpoint 102 to 110. A similar discussion applies when data is sent in the opposite direction.

[0106] In another embodiment, the buffer manager is configured to provide over-buffering on outgoing transmissions for each communication link, taking into account variability in the behavior of the connecting network, the potentially "bursty" nature of other activity on the network, and the nature of the source's transmissions.

[0107] Over-buffering may, for example, involve intentionally accepting more packets at the ingress side than the BDP of the outgoing connection can handle. The difference between "over-buffering" and "buffering" is that the buffer manager may buffer different amounts based on how the connection BDP changes in real time, based on flow requirements.

[0108] This over-buffering causes the gateway 104 to accept and buffer more data from the transmitting endpoints 102 than it would otherwise be prepared to accommodate (e.g., more than it is "comfortable") The over-buffering may be performed globally (e.g., the system is configured to take on more than the system estimates is available in total throughput), or it may be moved to the connection controller and managed on a per-connection basis, or it may be provided as a combination of both (e.g., multiple over-buffers per transmission).

[0109] For example, even though the system 100 may only estimate that it can transmit 20 Mbps over a given set of links, it may at one time accept more than 20 Mbps (e.g., 30 Mbps) from the transmitting endpoint 102 and buffer what cannot be immediately transmitted based on a determination that network conditions may change based on statistical, historical knowledge of the network characteristics provided by the network characteristic monitoring unit 161, or based on a determination that there will be times when the transmitting endpoint 102 (or other input / output transmission) may slow its data transmission rate.

[0110] The flow classification engine 156, in some embodiments, is configured to flag certain types of traffic, and the operation engine 152, in some embodiments, may be configured to instruct the buffer manager to size and manage pre-buffering and / or over-buffering on a per-flow basis, selecting the size of the buffer based on any number of criteria (data type, user, historical behavioral data, requirements of the flow).

[0111] In some embodiments, the size of these buffers is determined on a per-transmission and per-gateway basis (as there may be many transmissions being routed through a gateway at one time). In one embodiment, pre-buffering and over-buffering techniques are utilized in conjunction.

[0112] In some embodiments, the size of the overbuffering is determined to be substantially proportional to the bandwidth-delay product (BDP). For example, the system may be configured such that if the network has a high BDP (e.g., 10Mbps@400ms=>500KB), the buffers need to be large so that there is always enough data available to keep the network / pipeline full of packets. Conversely, in a low BDP network, the system may be configured to buffer less so as not to introduce excessive buffer bloat.

[0113] Buffer bloat may refer, for example, to excessive buffering in a network, resulting in high latency and reduced throughput. Given the advent of cheaper and more readily available memory, many devices now utilize excessive buffers without considering the impact of such buffers. Buffer bloat is described in detail in papers published by the International Association for Computer Science, including, for example, a December 7, 2011 paper entitled "BufferBloat: What's Wrong with the Internet?" and a November 29, 2011 paper entitled "Bufferbloat: Dark Buffers in the Internet," both of which are incorporated herein by reference.

[0114] As an example of determining the overbuffering size in relation to bitrate and latency, a rule may be implemented in relation to a requirement that the system should not add more than 50% to the base latency of the network due to overbuffering. In this example, the rule indicates that the size of the overbuffering is Bitrate*BaseLatency*1.5. Other rules are possible.

[0115] In one embodiment, the action engine 152 may be included in the multi-path gateway 104, 108. In another embodiment, the action engine 152 may reside in the cloud and apply to one or more gateways 104, 108. In one embodiment, there may be multiple endpoints 102, 110 connecting to a single multi-path gateway 104, 108. In one embodiment, the endpoints 102, 110 and the multi-path gateway 104, 108 may reside on the same device.

[0116] In one embodiment, the connection controller 154 may be distinct from the multi-path gateways 104, 108 (and may be physically associated with one or more connection devices (e.g., wireless interfaces, or wired connections)). In another embodiment, the connection controller may reside on the gateway, but the physical connections (e.g., interfaces or wired connections) may reside on separate units, devices, or devices.

[0117] Although the endpoints need to be logically connected, they may be connected independent of the connections 106 (e.g., communications handled by multipath gateways 104, 108). In some embodiments, the set of connections 106 available to a given gateway may be dynamic (e.g., certain networks, or certain users only available at certain times).

[0118] In one embodiment, traffic coming from endpoint 102 may be controllable by system 100 based on dynamic feedback from the system 100 (e.g., the system may be configured to change the bit rate of video transmissions occurring at the endpoints). In another embodiment, traffic coming from endpoint 102 may not be controllable by system 100 (e.g., web requests originating from the endpoints).

[0119] In another embodiment, there may be a set of two or more multipath gateways 104, 108 in a transmission chain (e.g., FIG. 13). For example, in some implementations, there may be a TCP transmission with a remote multipath gateway connecting to a gateway in the cloud, which in turn provides a non-multipath connection to another multipath gateway on the edge of the cloud, which in turn provides a non-multipath connection to another multipath remote gateway.

[0120] A variety of use cases may be possible, including military use cases where a remote field operator may need to transmit large amounts of data to another remote location. The operator's system 100 may provide a transmission mechanism that utilizes multiple paths to provide the data to the broader Internet. The system 100 then uses a high-capacity backhaul to transmit to another location on the edge of the Internet, where the system 100 requires another multipath transmission to reach a second remote endpoint.

[0121] In one embodiment, gateways A 104 and B 108 may be configured to transmit control information between each other via one of the available connection paths.

[0122] These solutions are adapted to improve overall throughput by modifying the characteristics of data communications and are not limited to the examples shown in Figure 1. For example, devices may be configured to operate on the sending side (e.g., transmission side), on the receiving side (e.g., receiver side), on a communication link controller (e.g., in-flight), or combinations thereof, according to various embodiments.

[0123] For example, the spacing between packets may be changed at the transmit side (or in-flight) by communicating metadata to the receiver in the form of a timestamp for each packet that reflects the desired pacing rate. The receiver can then make a transmission decision for each packet based on the timestamp.

[0124] To an upstream or downstream device requesting or receiving a communication, the data packet management activity may be transparent (e.g., a transmission is requested and sent, and the upstream or downstream device merely observes that aspects of the communication were successful and required a certain period of time).

[0125] For example, the packet spacing operation may be performed when the data packets are received at a connection debonding device configured to receive the data packets from a set of multipath network links and regenerate an original data flow sequence, and / or the packet spacing operation may be performed when the data packets are transmitted at a connection bonding device configured to assign the data packets for transmission across the set of multipath network links based on the original data flow sequence.

[0126] In a first embodiment, a system for managing data packet delivery flows is described and adapted for when data packets are being communicated across a set of multi-path network links that can be bonded together to operate together to cooperatively communicate data packets associated with a particular data communication.

[0127] The system includes a processor configured to monitor an aggregate throughput provided over a set of multipath network links operating together. For example, there may be three network links, each providing different communication characteristics. A first network link may have a bandwidth of 5 Mbps, a second a 15 Mbps, and a third a 30 Mbps, totaling 50 Mbps.

[0128] Packet pacing is performed by modifying a characteristic of the data packets based on at least the monitored aggregate throughput such that if one or more data packets are being communicated at a rate faster than the monitored aggregate throughput, the characteristic is modified to make one or more data packets appear to be communicated at a required pace. For example, the characteristic that is modified may be a timestamp in metadata corresponding to each of the data packets received by the multipath transmitter. In some embodiments, modifying the timestamp may include modifying at least one timestamp to reflect a timestamp in the future.

[0129] The processor may be further configured to monitor different types of packets transmitted on each of the multipath network links. For example, data payload packets that the transmitter is communicating to the receiver are one type of packets that should contribute to the monitored total throughput. Test packets that the transmitter can use to evaluate the network properties of the network links are a type of overhead packet that does not contribute. Retransmission packets that are copies of previously transmitted data packets sent in response to a loss report or preemptively sent to prevent possible or predicted loss are a type of redundant packet that should not contribute. There may be multiple other types of packets. At a given time, a mixture of all these types of packets may be in-flight simultaneously across one or more of the multipath network links. The monitored total throughput may thus be adjusted to reflect the portion (non-overhead and non-redundant packets) that is specifically used by the data packets.

[0130] In one embodiment, the processor may perform accounting / packet characterization functions, such as packet or byte counting, and average the results over a sliding window period to determine the portion of the monitored total throughput that the data packets are consuming. Continuing with the previous example, if a third network link with a total throughput of 30 Mbps was transmitting 20 Mbps data packets (e.g., 20 Mb in the previous second), 6 Mbps test packets (e.g., 6 Mb in the same second), and 4 Mbps transmission packets (e.g., 4 Mb in the same second), only the 20 Mbps portion is considered when pacing the data packets. In this example, the monitored total throughput for pacing purposes is adjusted to 40 Mbps. These may be tracked, for example, by a packet monitor.

[0131] In another embodiment, the conversion of the in-flight byte count to a bit rate is based on the total estimated bit rate and the total congestion window (CWND) of the connection. For example, a connection with a total estimated bit rate of 30 Mbps, a total CWND of 500 KB, and 100 KB of in-flight data packets may have

number

[0132] In response to a change in the monitored total throughput, the processor may be further configured to determine what the ideal sequence of timestamps should have been (e.g., what should have been known a priori about the change in the monitored total throughput) and modify the inter-packet spacing of timestamps on data packets not yet communicated such that the changed ideal timestamps align over the duration. Changes in the monitored total throughput occur when changes in the network link are detected or measured, e.g., when feedback is received from a debonder, or when the mix of in-flight packets is changed, e.g., when previously transmitted packets are acknowledged and other packets, possibly of a different type, are transmitted in response.

[0133] In some embodiments, a buffer for data packets is adapted to dynamically increase and decrease in size such that there is no fixed size that defines a queue that indicates the order in which the data packets are communicated, and a subset of the data packets is periodically removed from the buffer based on the corresponding age (e.g., residence time) of the data packets in the queue, which may be determined by comparing timestamps.

[0134] FIG. 2 is a packet pacing diagram 200 showing packets with respect to a data buffer.

[0135] Diagram 200 illustrates how a paced sender can achieve higher throughput than a bursty sender over the same network. The diagram shows two senders, one paced and the other bursty. Both senders transmit 1MB packets at a rate of 10MB / s, passing through a bottleneck link with a maximum buffer size of 5MB and a drain rate of 10MB / s.

[0136] A well-paced sender transmits 1MB packets every 100ms. When these packets arrive at the bottleneck link, they spend a short time in the 5MB network buffer and are quickly drained at the bottleneck rate. The average throughput achieved by this sender is a full 10MB / s.

[0137] A bursty sender transmits ten 1MB packets per second. The first 5 packets of every burst are queued in the bottleneck link's 5MB buffer, and the second 5 packets are dropped when the buffer becomes full. The bottleneck link then drains the buffer at a rate of 10MB / s, which means 1MB packets every 100ms. Every second, the bottleneck link is active for the first 500ms, but idle for the second 500ms because it has no packets to transmit (they were dropped). The average throughput achieved by this bursty sender is 5MB / s.

[0138] TCP congestion control algorithms (e.g., Reno, CUBIC) are ACK-clocked, which means that they do not transmit packets at a specific bitrate, but instead maintain the concept of a congestion window (cwnd).

[0139] As long as the number of bytes in-flight (unacknowledged by the receiver) is less than cwnd, they are transmitted as fast as possible (assuming new bytes are available to be transmitted). Once in-flight is at cwnd, the sender stops transmitting. It only resumes when an acknowledgment (ACK) for the in-flight bytes is received. The bit rate and burstiness of the transmission is therefore governed entirely by the speed at which the ACKs arrive.

[0140] In the following discussion, we assume that the TCP sender is not application limited, meaning that every time the TCP sender wants to transmit bytes, bytes are available because the inflight is less than cwnd. We also assume that the TCP sender is not receiver window (rwin) limited, meaning that the TCP receiver always advertises that it can accept at least cwnd minus inflight bytes.

[0141] FIG. 3 is a diagram 300 illustrating how a bottleneck link of a single-path connection can naturally pace packets of ACK-clocked protocols such as TCP Reno and CUBIC.

[0142] The cwnd of a new TCP flow starts out with a low, reasonable value (called the initial cwnd). In the diagram, this is shown at time t=0 ms. The initial cwnd of this sender is 5 packets. Since inflight is initially equal to 0, the sender sends a burst of packets equal to the initial cwnd. As these packets traverse the network (which in this diagram has a total one-way latency of 100 ms), each hop can only transmit bytes at its bottleneck rate (the bit rate that it is physically sustainable).

[0143] Eventually the packets arrive at a hop that is a bottleneck. In this example, the bottleneck has a buffer size of 9 packets, and a drain rate of 5 packets every 10 ms (i.e., an interval between packets of 2 ms). This bottleneck "naturally" spaces the packets out in time so that when the packets arrive at the receiver, the five packets have intervals between packets that reflect the bottleneck rate (arriving at t=102, 104, 106, 108, and 110 ms). The packets are using the bottleneck link's natural pacing, 5 packets / 10 ms.

[0144] The TCP receiver generates ACKs as packets arrive, so the ACKs are transmitted at the same pace (transmitted at t = 102, 104, 106, 108, and 110 ms). The ACKs return to the TCP sender at the same pace (arriving at t = 202, 204, 206, 208, and 210 ms), and the inflight decreases at the same pace.

[0145] As a result, subsequent transmissions by the TCP sender to bring inflight back down to cwnd will naturally occur at the bottleneck rate, rather than in bursts, as was the case during the first transmission at t=0 when inflight was initially 0.

[0146] In addition to reducing in-flight, it may also result in an increase to cwnd for each ACK received by the TCP sender. The speed and magnitude of the increase depends on the congestion control algorithm and its internal state. In this example, the sender is using TCP Reno and is in the "slow start" phase. Thus, cwnd increases by a number equal to the number of packets that are ACKed.

[0147] This results in "pacing bursts" where for each packet that is ACKed, inflight is decremented by 1 and cwnd is incremented by 1, allowing the TCP sender to transmit 2 packets in the next burst. These small bursts are again "spaced" (paced) by the bottleneck link according to the mechanism described above. For example, packets 6 and 7 are the first of a "pacing burst" of two packets transmitted at t=202ms, but arrive at the receiver spaced apart by the bottleneck rate of 1 packet / 2ms, thus arriving at t=304ms and t=306ms.

[0148] This cycle causes the TCP sender to increase its transmission rate. When the TCP sender reaches a bit rate higher than the throughput of the bottleneck link, the rate at which it transmits packets to the bottleneck buffer exceeds the rate at which the bottleneck drains the buffer, causing the buffer to fill. Eventually the buffer becomes full and packets are dropped signaling that the TCP flow should back off (reduce cwnd).

[0149] The TCP flow then repeatedly tries to increase its throughput in a similar manner, so the throughput of the TCP flow fluctuates around the throughput of the bottleneck link.

[0150] 4A is a diagram 400A that illustrates what happens when a TCP Reno or CUBIC flow passes through a naive multipath bonding system 100 that does not explicitly consider pacing. There are three paths through the system:

[0151] 500ms latency, 1 packet / 10ms drain rate, 2 packet buffers

[0152] 120ms latency, 2 packets / 10ms drain rate, 3 packet buffers

[0153] 50ms latency, 2 packets / 10ms drain rate, 4 packet buffers

[0154] As before, the initial inflight is 0 packets and the initial cwnd is 5 packets, so the TCP sender transmits a burst of 5 packets at time t=0 ms. An example multipath bonding system splits the packets proportionally to the drain rates of the paths, meaning 1 packet across the first connection and 2 packets each on the other connections.

[0155] Because each connection has a different throughput and latency, sequencer 162 must buffer and reorder packets before releasing them to the destination TCP receiver. In this example, packet number 1 arrives last at sequencer 162 at time t=510 ms, at which point all five packets are flushed to the destination TCP receiver. This behavior eliminates the "natural" pacing mentioned earlier in the non-multipath scenario.

[0156] The burst of packets seen by the TCP receiver with naive sequencer 162 generates a burst of ACKs. In this example, the multipath system sends the ACKs on the fastest link, so they all arrive at the TCP sender as a burst at time t=560. As in the previous example, the TCP sender is in the "slow start" phase, so cwnd opens up to 10 packets at this time.

[0157] Figure 4B is a diagram 400B that shows what happens next. Since inflight is 0 and cwnd is 10, the TCP sender transmits 10 packets in a burst through the multipath system. It also divides the 10 packets among paths proportional to their bandwidth. However, recall that the second connection only has three buffer slots, insufficient to transmit four packets. Thus, packet number 11 is dropped.

[0158] The TCP sender interprets these drops as congestion and immediately takes action to resolve this perceived congestion by limiting cwnd, e.g., by halving its value. Note, however, that this perceived congestion is a false positive caused by the lack of pacing. The premature shrinking of cwnd will thereby reduce the transmission rate, and applications running on this TCP connection will experience reduced throughput. While this example shows a multipath connection that shows packet dropping due to fixed size buffers, the multipath system itself can also be a source of drops. For a different mix of connection speeds, if the TCP sender burst size becomes large enough, the input buffers of the multipath system (even those that drop based on packet residence time and not buffer size) can drop packets.

[0159] To avoid the negative side effects of packet bursts on TCP throughput, it is essential that the bonding system 100 restores pacing to the packets. In the following paragraphs, various approaches are proposed.

[0160] A bonded connection appears to a TCP flow as a single connection, so for a bonded connection, packets should exhibit pacing similar to that observed if the packets were transmitted over a single connection with a throughput equal to the aggregate throughput of the bonded connections.

[0161] 5A is a diagram 500A illustrating a multipath system that restores pacing to the original packets. As before, packet number 1 arrives last at sequencer 162, but this time, instead of flushing all five packets at once, pacing is restored by delaying each packet so that they are all delayed by the latency of the worst connection (510 ms) and appear to be transmitted at the aggregate rate of all connections (5 packets / 10 ms). This means an inter-packet interval of 2 ms.

[0162] In one embodiment, the implementation of these delays is accomplished through the transmitter and receiver using metadata in the form of timestamps on the packets. The timestamps can be used but are not necessarily synchronized from the clocks between the transmitter and receiver. For purposes of the example of FIG. 5A, the clocks are synchronized.

[0163] The multipath transmitter marks five TCP data segments with timestamps of 0, 2, 4, 6, and 8 ms. At the multipath receiver, as these packets are received and placed in the buffer, their current age can be calculated by always subtracting their timestamps from the current time. In this example, the multipath receiver holds (delays) each TCP segment in its buffer until it has consumed 510 ms in the system. This means that the multipath receiver transmits them to the TCP receiver endpoint only when their ages reach 510, 512, 514, 516, and 518 ms (respectively).

[0164] As a result, TCP ACKs are generated and sent by the TCP receiver at the same pacing rate, and as a result, return to the TCP sender (through a multipath system) with the same 2 ms inter-packet interval. It then decreases inflight at a rate of 1 packet every 2 ms, and increases cwnd at a rate of 1 packet every 2 ms.

[0165] Figure 5B is a diagram 500B illustrating how properly paced ACKs result in properly paced bursts, similar to the single path example of Figure 3. The timeline of events is as follows:

[0166] The ACK arrives at t=560ms, reducing the in-flight time by 1 hour, increasing cwnd by 1 hour, and allowing two packets to be transmitted.

[0167] Packets number 6 and 7 are transmitted and split among the available paths in proportion to their transmission rates: packet 6 on the first path, packet 7 on the second path.

[0168] The ACK arrives at t=562ms, allowing two more packets to be transmitted.

[0169] Packets number 8 and 9 are transmitted split proportionally across the available paths: packet 8 on the third path, packet 9 on the second path. The first path is skipped since it is proportional to half the capacity of the other two paths.

[0170] The process is repeated, and this time, unlike in Figure 4B, the buffer size limit on the second path is never reached, so no packets are dropped. As a result, the TCP sender does not see congestion at this point, so it does not decrease cwnd prematurely, and therefore does not pull back on the transmission rate prematurely. The TCP sender continues to increment cwnd, eventually settling on the correct large value that truly reflects the full aggregation capabilities of the bonded network, thereby improving overall throughput.

[0171] In other embodiments, this is accomplished at the receiver side within sequencer 162 based on the aggregate throughput of bonded connections that are communicated directly or indirectly from the transmitter to the receiver.

[0172] In one embodiment, the monitored aggregate throughput is communicated directly from the transmitter to the receiver over a separate control channel.

[0173] In another embodiment, the sender communicates some of the missing information to the receiver, which then executes the same algorithm as the sender to indirectly determine the total throughput. The missing information may be smaller in size than the total throughput value. This alternative approach can save network usage and delay, but requires complex computer processing capabilities at the receiver. One example of such an approach is described in IETF draft draft-cheng-iccrg-delivery-rate-estimation-00, which is incorporated herein by reference in its entirety. It determines the throughput of a network link by calculating the delivery rate, i.e., the number of bytes delivered from the sender to the receiver in a certain period of time. To accurately calculate the delivery rate, 1) the number of bytes delivered to the receiver, 2) the period during which these bytes were delivered, and 3) Whether bytes are available at the sender for each transmission event. Otherwise the link is not fully utilized (called "application limited") and the calculated delivery rate is lower than the actual throughput of the link.

[0174] The first two pieces of information are determined by the receiver as it receives the packets. Given any two packet reception events, the number of bytes delivered to the receiver is the total size (in bytes) of all packets received between these two events, excluding the packet of the first event and including the packet of the last event. The period over which these bytes were delivered is the difference in time between when these two events occurred.

[0175] However, the third piece of information cannot be determined separately at the receiver, since it is purely related to the transmitter's events. This missing information can be represented by a single bit. For example, a bit value of 0 indicates that the transmitter did not have bytes available for all transmission events (i.e., the throughput estimate may be inaccurate), and a bit value of 1 indicates that the transmitter had bytes available for all transmission events (i.e., the throughput estimate is accurate). Given that 1 bit is the minimum amount of information that can be communicated over a network link, any alternative approach to directly communicate the throughput estimate would consume at least an equivalent amount of bits.

[0176] Once the receiver has the total bandwidth value, it can use an external mechanism to drain the sequencer 162 buffer. For example, some network interfaces can be configured at the hardware or driver level to release packets at a particular bit rate. The debonder can configure the network interface that writes the packets to release them at the total throughput. In another embodiment, the receiver can use the size of the packets and the total throughput to release the packets at the appropriate time to achieve the required pacing.

[0177] In another embodiment, the multipath transmitter can exploit the characteristics of the available connections to obtain natural pacing. For example, packets belonging to a particular TCP flow may be transmitted only on a subset of the available connections. If the properties of these connections are the same (or if the subset contains only one connection), pacing will occur naturally in the absence of explicit communication or other intentional action by the transmitter or receiver.

[0178] In another embodiment, packet pacing may also be restored by modifying the packets in the sender's scheduler 160. This approach has the advantage of not requiring communication of the total bonding throughput to the debonder at the receiver. The flow classification engine 156 stamps packets from the sender with metadata that includes the time they are received from the endpoint 102. Thus, packets received in a single burst are all stamped with the same timestamp.

[0179] As mentioned above, the sequencer 162 in the debonder buffer reorders and holds packets before release to reduce jitter and reordering. This is done by comparing the age of the packets against the metadata timestamp. Thus, in one embodiment without pacing, packets received in a single burst at the flow classification engine 156 are eventually released all at the same time by the sequencer 162. Packet pacing can be implemented such that the bonder scheduler 160 modifies the timestamps of the packets so that the debonder sequencer 162 releases them at different times that reflect the required pacing.

[0180] In one embodiment, the mechanism used by scheduler 160 is to compare the timestamps of incoming packets to the total throughput of the bonded connection. If the spacing between packets indicates that packets are being received at a rate faster than the total throughput, their timestamps are modified so that they appear to be received at the required pace. Note that these modifications may push the timestamps into the future.

[0181] This is exactly as depicted in FIG. 5A. Packets 1-5 are all received at t=0 with an inter-packet spacing of 0 ms. In this example, the actual total throughput is 5 packets / 10 ms with an inter-packet spacing of 2 ms. Scheduler 160 adjusts the timestamps on the packets such that packet 1=0 ms, packet 2=2 ms, packet 3=4 ms, packet 4=6 ms, and packet 5=8 ms. Packets 2-5 are all time-stamped in the future. This adjustment can be done, for example, by modifying metadata associated with each packet at the transmitter, including the timestamps being adjusted. Adjustments can also be made in overhead fields encapsulating the packets. These fields are used by sequencer 162 to deliver the packets to the receiving endpoint at the correct time.

[0182] Subsequent changes in the total throughput may mean that some of the previously modified timestamps used from the future should be different. If packets are in-flight (already sent), these timestamps cannot be modified. In such a case, the algorithm determines what the ideal sequence of timestamps should have been. The result is taken into account when modifying the inter-packet spacing of the timestamps of packets that are not yet in-flight, so that the modified timestamps and the ideal timestamps eventually align.

[0183] 6 is a diagram 600 showing an example of how the approach can operate when the total throughput decreases, for example, when one of the contributing network interfaces is powered off or when a contributing cellular interface provides less throughput due to an increase in the number of users of a cellular service provider. At time t1, eight packets arrive at the flow classification engine 156. The scheduler 160 adjusts the inter-packet spacing of their timestamps to reflect the total bandwidth at t1, and the packets are transmitted (they are in-flight). The ideal timestamp and the modified timestamp are now equal.

[0184] At a point after t2 (which coincides with the timestamp of in-flight packet 5), the total bandwidth is reduced by 50%. Packets 5-8 are in-flight and their timestamps cannot be changed to reflect the new and slower total bandwidth. However, an ideal set of timestamps can be determined / calculated by simulating as if packets 5-8 were spaced according to the new, slower total bandwidth (the slower bandwidth means that the spacing between packets is increased, pushing the packets further into the future).

[0185] Packets not yet in flight have their timestamps modified by scheduler 160 to begin after the ideal future timestamp that packet 8 would have received if it were modifiable. In this way, the average pacing rate matches the newly detected value at time t2.

[0186] 7A is a diagram 700A showing an example of the operation of the approach when the aggregate throughput is increased. Packets 1-8 are received by flow classification engine 156 at time t1, the spacing between packets at their timestamps is corrected by scheduler 160 to match the aggregate bandwidth at t1, and the packets are transmitted (they are in-flight). The ideal and modified timestamps are now equal.

[0187] At time t2 (which coincides with the timestamp of in-flight packet 5), the total bandwidth increases by 50%. Packets 5-8 are in-flight and their timestamps cannot be changed to reflect the new increase in bandwidth. However, we can calculate an ideal set of timestamps, simulating packets 5-8 as if they were spaced apart according to the new, higher total bandwidth (wider bandwidth means that packets are spaced closer together, and the ideal timestamps are closer to the present than to the future).

[0188] At time t2, packets 9-12 are also received by flow classification engine 156. Scheduler 160 determines the inter-packet spacing of these packets relative to the new ideal timestamps of in-flight packets 5-8 to determine the target ideal timestamp for packet 12. However, because the actual timestamps of in-flight packets 5-8 cannot be changed, packets 9-12 need to be assigned modified timestamps somewhere between the actual timestamp of packet 8 and the ideal timestamp of packet 12. One embodiment places the timestamps evenly between those two points in time. The ideal timestamp and the modified timestamp are equal after this operation, allowing subsequent packets (13+) to be paced relative to the ideal timestamps.

[0189] Some embodiments do not necessarily modify the modified timestamp to cover the ideal case of future packets, as can be seen in diagram 700B of Figure 7B, the modified case may force packets' timestamps to have very small inter-packet intervals (or no inter-packet intervals), which may result in excessive burstiness (which is the original problem this approach is trying to avoid).

[0190] Because the objective is to reduce burstiness, a lower bound on the minimum allowable inter-packet spacing is applied, and it is possible that the timestamp of the current burst of packets may move beyond the ideal point (and again into the future).

[0191] As long as the floor is smaller than the ideal inter-packet spacing for the current aggregate throughput, the packets' modified timestamps will eventually coincide with the ideal point (e.g., "catch up") as more packets are paced and sent.

[0192] In some embodiments, the floor of the minimum allowed inter-packet spacing is a parameter that can be configured or determined based on inputs such as administrator preferences or application requirements. The trade-off made with this parameter is that as aggregate bandwidth increases, a smaller floor allows for faster use of the increased aggregate bandwidth at the expense of short-term bursts of packets (which, as discussed above, can cause packet loss for ACK-clocked protocols).

[0193] In some embodiments, sequencer 162 may be configured for how to handle delayed or lost packets. For example, in FIG. 5A, the point at which it decides to flush packets 2-5 to the destination if packet 1 does not arrive at the debonder may take into account administrative preferences, application / protocol requirements, statistical analysis of connection behavior, etc. For example, if the receiving application does not use these packets for packets that are delivered 1 second after they are generated by the sending application, sequencer 162 should flush (i.e., deliver) packets 2-5 to the debonder before the 1 second deadline is reached, even if packet 1 is still missing or a retransmission of packet 1 has not yet arrived. In other words, an application is better off receiving 4 out of 5 packets in a reasonable time frame than receiving all 5 packets when it is too late to be of any use. Importantly, the inter-packet spacing of packets 2-5 does not change as a result of this process. The modified pacing is maintained, all packets are offset in time by the same amount.

[0194] If packet 1 does eventually arrive, the decision to forward it late to its destination or to drop it may also take into account administrator preferences, application / protocol requirements, statistical analysis of connection behavior, etc. If a decision is made to forward a delayed packet to its destination, its pacing is not preserved since sequentially transmitted packets before and after it were already transmitted to the destination. In some embodiments, the pacing of delayed packets may be taken into account by sequencer 162, e.g., further delaying transmission of delayed packets to prevent excessive bursts. In yet another embodiment, the multipath transmitter and receiver can work together to achieve the desired pacing. For example, scheduler 160 can modify the interval between packets by modifying the timestamp in the packet metadata to reflect the current desired pacing rate, as previously described with respect to Figures 6, 7A, and 7B. If the pacing rate subsequently changes, scheduler 160 can continue to modify the interval between packets, with the timestamps on the in-flight packets being modified in some way. If the aggregate bandwidth increases, this results in successive packets with non-monotonic timestamps (i.e., timestamps that appear to go back in time). The modification of the non-monotonic timestamps can be done in sequencer 162 before flushing the packets to the destination.

[0195] 8 is a block diagram illustrating components of an example system 800, according to some embodiments. In this example, an upstream device 802 is in communication with a downstream device 810. The communication may be unidirectional (e.g., one of the upstream device 802 and the downstream device 810 acts as a transmitter device and the other side acts as a receiver device) or bidirectional, where both the upstream device 802 and the downstream device 810 act as transmitters and receivers to communicate data packets.

[0196] In the simplified example of diagram 800 of Figure 8, multi-path gateway mechanisms 804 and 808 are shown as transmitting side 804 and receiving side 808 with a potential in-flight change at 806 (shown in dashed lines). As described in various embodiments herein, one or more of the transmitting side 804 and receiving side 808 with a potential in-flight change at 806 (shown in dashed lines) may be used to effect (e.g., or enforce) a data packet delivery flow change mechanism (e.g., protocol).

[0197] The set of bonded connections (whose membership may be dynamic as new connections become available / feasible and / or existing connections become unavailable / unavailable) is evaluated and an overall throughput or other aggregate communication characteristic is established, which is then communicated to at least one of the transmitting side 804 and receiving side 808, or in-flight change device 806, so that data packet pacing / spacing may be changed.

[0198] In particular, if data packets are being communicated at a rate greater than a monitored aggregate throughput or other aggregate communication characteristic, the characteristics corresponding to the data packets being transmitted (or in-flight or buffered at the receiver) may be altered based at least on the monitored aggregate throughput.

[0199] As shown in diagram 900 of Figure 9, there may be a smart scheduler 158 operating in combination with a regular sequencer 160. In this example, a multi-path transmitter 904 is adapted to modify characteristics of data packets from an input device 902 during / before transmission across a connection 906, which may include connections 1, 2, and 3. The sequencer 160 of the multi-path receiver 908 in this example may not be aware of the modified characteristics and receives the data packets for delivery to an output device 910.

[0200] An alternative variation is possible as shown in diagram 1000 of FIG. 10, where a scheduler in the multi-path transmitter 1004 transmits data packets from the client 1002 without packet spacing / pacing across the connection 1006, and a buffer in the multi-path receiver 1008 recognizes the sequence order and reorders the data packets based on timestamps and total communicated bandwidth (or other network characteristics) before flushing them to the server 1010.

[0201] Another alternative variation is possible as shown in diagram 1100 of FIG. 11, where an input device 1102 provides data packets to a transmitter 1104 for eventual transmission via a receiver 1108 to an output device 1110. In this example, the in-flight change adjustment engine 1112 is adapted to control which intermediate router the data packets travel through based on the aggregate bandwidth or other network characteristics. The intermediate routers then modify the data packet pacing / spacing according to various embodiments. The slowest intermediate router establishes the required spacing for all bonded connections in some embodiments.

[0202] As shown in diagram 1200 of FIG. 12, smart scheduler 158 can work in conjunction with smart sequencer 160. In this example, greater complexity is utilized by the system where smart scheduler 158 cooperates with smart sequencer 160 to establish and enforce packet spacing mechanisms. For example, across multiple connections 1206, different roles may be assigned to space out bidirectional traffic flows for communication between input device 1202 and output device 1210. Different roles may include one of smart scheduler 158 or smart sequencer 160 modifying timestamps while the other establishes a buffering protocol.

[0203] 13 is a process diagram 1300 illustrating a method of managing data packet delivery flow according to some embodiments, showing steps 1302, 1304, 1306, and 1308. Other steps are possible, and diagram 1300 is an example for illustrative purposes.

[0204] 14 is a schematic diagram of an example computing device 1400 of one embodiment. As depicted, the computing device 1400 includes at least one processor 1402, memory 1404, at least one I / O interface 1406, and at least one network interface 1408.

[0205] Each processor 1402 may be, for example, a microprocessor or microcontroller, a digital signal processing (DSP) processor, an integrated circuit, a field programmable gate array (FPGA), a reconfigurable processor, a programmable read-only memory (PROM), or a combination thereof.

[0206] The memory 1404 may include a combination of computer memory located either internally or externally, such as, for example, random access memory (RAM), read only memory (ROM), compact disc read only memory (CDROM), electro-optical memory, magneto-optical memory, erasable programmable read only memory (EPROM), and electrically erasable programmable read only memory (EEPROM), ferroelectric RAM (FRAM), and the like.

[0207] Each I / O interface 1406 allows the computing device 1400 to interconnect with one or more input devices, such as a keyboard, mouse, camera, touch screen, and microphone, or one or more output devices, such as a display screen and speakers.

[0208] Each network interface 1408 enables computing device 1400 to communicate with, exchange data with, access and connect to network resources, host applications, and run other computing applications by connecting to a network (or multiple networks) capable of carrying data, including the Internet, Ethernet, Plain Old Telephone Service (POTS) lines, Public Switched Telephone Network (PSTN), Integrated Services Digital Network (ISDN), Digital Subscriber Line (DSL), coaxial cable, optical fiber, satellite, mobile, wireless (e.g., Wi-Fi, WiMAX), SS7 signaling networks, fixed lines, local area networks, wide area networks, and others including combinations thereof.

[0209] In another embodiment, a special purpose machine is configured and provided for use. Such a special purpose machine is configured with a limited range of functions and is specially configured to provide features for efficient devices programmed to perform specific functions according to instructions from embedded firmware or software. In this embodiment, the special purpose machine does not provide general computing functions. For example, certain devices including controller boards and schedulers may be provided in the form of integrated circuits, such as application specific integrated circuits.

[0210] The application specific integrated circuits may include programmed gates that combine together to perform complex functions such as those described above through specific configurations of the gates. These gates may form lower level structures, for example, with cells and electrical connections between each other. Potential advantages of application specific integrated circuits are increased efficiency, reduced propagation delays, and reduced power consumption. Application specific integrated circuits may also help meet miniaturization requirements where space and volume of the circuit are relevant factors.

[0211] The term "connected" or "coupled" can include both direct coupling (wherein the two elements coupled to each other are in contact with each other) and indirect coupling (wherein at least one additional element is located between the two elements).

[0212] Although the embodiments have been described in detail, it is to be understood that various changes, substitutions, and alterations can be made herein without departing from the scope. Moreover, the scope of the present application is not intended to be limited to the particular embodiments of the process, machine, manufacture, composition of matter, means, methods and steps described in the specification.

[0213] As one skilled in the art will readily appreciate from this disclosure, now existing or later developed processes, machines, manufacture, compositions of matter, means, methods, or steps may be utilized that perform substantially the same function or achieve substantially the same result as the corresponding embodiments described herein, and thus the appended embodiments are intended to include within their scope such processes, machines, manufacture, compositions of matter, means, methods, or steps.

[0214] As can be understood, the embodiments described and illustrated above are intended to be exemplary only.

Claims

1. 1. A system for managing a data packet delivery flow in which one or more data packets are communicated across a set of multipath network links, the system comprising:

1. A processor comprising: monitoring an aggregate throughput provided over a set of said multipath network links operating together; and performing a packet spacing operation based at least on the monitored total throughput, if the one or more data packets are being communicated at a rate faster than the monitored total throughput, thereby making it appear as if the one or more data packets are being communicated at a required pace.

2. The system of claim 1 , wherein the packet spacing manipulation is performed by modifying one or more timestamps corresponding to at least one of the one or more data packets.

3. 2. The system of claim 1, wherein the required pace is established based on a pace determined from receipt of non-redundant data packets of the one or more data packets, the non-redundant data packets being distinguished from redundant packets of the one or more data packets through inspection of the one or more data packets.

4. 2. The system of claim 1, wherein the packet spacing manipulation is adapted to restore a packet communication pace to the one or more data packets substantially similar to pacing when the one or more data packets are communicated over a single network link.

5. 2. The system of claim 1, wherein the packet spacing operation is performed when the one or more data packets are received at a connection debonding device configured to receive the one or more data packets from the set of multipath network links and regenerate an original data flow sequence.

6. 2. The system of claim 1, wherein the packet spacing operation is performed when the one or more data packets are transmitted on a connection bonding device configured to assign the one or more data packets for transmission across the set of multipath network links based on an original data flow sequence.

7. 3. The system of claim 2, wherein in response to a change in the monitored aggregate throughput, the processor is further configured to determine what an ideal sequence of timestamps would be and modify inter-packet spacing of the one or more timestamps on one or more data packets not yet communicated such that the changed ideal timestamps align over a duration.

8. The system of claim 2 , wherein modifying the one or more timestamps includes modifying at least one timestamp to reflect a timestamp that is in the future.

9. 2. The system of claim 1, wherein a data packet storing the total throughput or missingness information as a data field value is transmitted over a separate control channel and transmitted to at least one of a receiver device or a transmitter device.

10. 2. The system of claim 1, wherein the processor is coupled to at least one of a receiver device or a transmitter device to operate a substantially aligned packet spacing mechanism to determine the total throughput.

11. the one or more data packets are received in a buffer of the one or more data packets, the buffer adapted to dynamically increase or decrease in size such that there is no fixed size for defining a queue indicating an order in which the data packets are communicated; 2. The system of claim 1, wherein a subset of the one or more data packets is periodically removed from the buffer based at least on a corresponding age of the one or more data packets in the queue.

12. 1. A method for managing a data packet delivery flow in which one or more data packets are being communicated across a set of multipath network links, the method comprising: monitoring, by a network router, an aggregate throughput provided over a set of said multipath network links operating together; and performing a packet spacing operation by the network router if the one or more data packets are being communicated at a rate faster than the monitored total throughput, by delaying the one or more data packets, thereby modifying a characteristic corresponding to at least one of the one or more data packets based at least on the monitored total throughput, so that the one or more data packets appear to be communicated at a required pace.

13. The method of claim 12 , wherein the characteristics include one or more timestamps that are modified to make the one or more data packets appear to be communicated at a required pace.

14. 13. The method of claim 12, wherein the packet spacing manipulation is adapted to restore to the one or more data packets a packet communication pace substantially similar to pacing if the one or more data packets are communicated over a single network link.

15. 13. The method of claim 12, wherein the packet spacing operation is performed when the one or more data packets are received at a connection debonding device configured to receive the one or more data packets from the set of multipath network links and regenerate an original data flow sequence.

16. 13. The method of claim 12, wherein the packet spacing operation is performed when the one or more data packets are transmitted on a connection bonding device configured to assign the one or more data packets for transmission across the set of multipath network links based on an original data flow sequence.

17. 14. The method of claim 13, wherein in response to a change in the monitored aggregate throughput, the network router is further configured to determine what an ideal sequence of timestamps would be and modify inter-packet spacing of the one or more timestamps on one or more data packets not yet communicated such that the changed ideal timestamps align over a duration.

18. The method of claim 13 , wherein modifying the one or more timestamps includes modifying at least one timestamp to reflect a timestamp that is in the future.

19. 13. The method of claim 12, wherein a data packet storing the total throughput or missingness information as a data field value is transmitted over an independent control channel and transmitted to at least one of a receiver device or a transmitter device.

20. 13. The method of claim 12, wherein the network router is coupled to at least one of a receiver device or a transmitter device to operate a substantially aligned packet spacing mechanism to determine the total throughput.

21. the one or more data packets are received in a buffer of the one or more data packets, the buffer adapted to dynamically increase or decrease in size such that there is no fixed size for defining a queue indicating an order in which the data packets are communicated; 13. The method of claim 12, wherein a subset of the one or more data packets is periodically removed from the buffer based at least on a corresponding age of the one or more data packets in the queue.

22. A non-transitory computer readable medium storing machine readable instructions that, when executed by a processor, cause the processor to perform a method of managing a data packet delivery flow in which one or more data packets are communicated across a set of multi-path network links as recited in any one of claims 12 to 20.

23. 3. The system of claim 2, wherein a clock of a transmitter device coupled to one end of the set of multipath network links and a clock of a receiver device coupled to another end of the set of multipath network links are synchronized.

24. 24. The system of claim 23, wherein modifying the one or more timestamps comprises: adding a delay to at least one of the one or more data packets such that, from the perspective of the receiver device, the one or more packets arrive as if all of the one or more packets were delayed by a latency of a worst connection of the set of multipath network links and transmitted at an aggregate rate of all of the set of multipath network links; and establishing an interval between packets.

25. 25. The system of claim 24, wherein the delaying of the at least one data packet of the one or more data packets comprises storing the one or more data packets in a buffer for retransmission according to the added delay.

26. 26. The system of claim 25, wherein the one or more data packets are packets configured according to an ACK Clock protocol.

27. 27. The system of claim 26, wherein the modifying the one or more timestamps further comprises modifying the one or more timestamps to have a timestamp that is non-monotonic.

Citation Information

Patent Citations

  • Bottleneck bandwidth and round-trip propagation time (BBR) congestion control with random early detection (RED)

    US20190140952A1

  • Packet transmission system and method

    WO2018112657A1