Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHODS OF ENCODING AND DECODING DATA PACKETS FOR PROTECTED TRANSMISSION, DATA TRANSMITTER, AND DATA RECEIVER
Document Type and Number:
WIPO Patent Application WO/2023/195874
Kind Code:
A1
Abstract:
A method of encoding a data packet for a protected transmission includes, at a transmitter side, dividing a packet of data to be protected into a number m of data shards Ym of an equal size, and creating a first transfer packet X1 of an output sequence of transfer packets to include a first data shard Y1 and its index. The method further includes creating a plurality of transfer packets next to the first transfer packet in the output sequence, the plurality of transfer packets includes all pairs of different data shards Ym. The method further includes creating final transfer packets next to the plurality of transfer packets in the output sequence and swapping the first transfer packet X1 of the output sequence with a second transfer packet X2 of the output sequence. The method enhances reliability to transfer data over a packet-switched network.

Inventors:
MOSKVITIN DMITRY VLADIMIROVICH
Application Number:
PCT/RU2022/000107
Publication Date:
October 12, 2023
Filing Date:
April 07, 2022
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
HUAWEI TECH CO LTD (CN)
International Classes:
H04L1/00; H03M13/37
Domestic Patent References:
WO2020221963A12020-11-05
WO2019090289A22019-05-09
Foreign References:
US20200412483A12020-12-31
US20090238375A12009-09-24
Other References:
SASAKI C ET AL: "On Unicast based Recovery for Multicast Content Distribution considering XOR-FEC", COMMUNICATIONS, 2005 ASIA-PACIFIC CONFERENCE ON PERTH, WESTERN AUSTRALIA 03-05 OCT. 2005, PISCATAWAY, NJ, USA,IEEE, 3 October 2005 (2005-10-03), pages 1043 - 1047, XP010860945, ISBN: 978-0-7803-9132-1, DOI: 10.1109/APCC.2005.1554223
ZHU ZHIFENG ET AL: "Research on improved coding and decoding algorithm for fountain codes", 2014 SIXTH INTERNATIONAL CONFERENCE ON WIRELESS COMMUNICATIONS AND SIGNAL PROCESSING (WCSP), IEEE, 23 October 2014 (2014-10-23), pages 1 - 6, XP032710824, DOI: 10.1109/WCSP.2014.6992155
MICHEL FRANCOIS ET AL: "QUIC-FEC: Bringing the benefits of Forward Erasure Correction to QUIC", 2019 IFIP NETWORKING CONFERENCE (IFIP NETWORKING), IFIP, 20 May 2019 (2019-05-20), pages 1 - 9, XP033609596, DOI: 10.23919/IFIPNETWORKING.2019.8816838
Attorney, Agent or Firm:
SOJUZPATENT (RU)
Download PDF:
Claims:
CLAIMS

1. A method (100) of encoding a data packet for a protected transmission, the method (100) comprising, at a transmitter side (410): dividing a packet of data to be protected into a number m of data shards Ym of an equal size, creating a first transfer packet Xi of an output sequence of transfer packets to comprise a first data shard Y i and its index, wherein the first transfer packet Xi is marked as having a degree one to be an entry point for decoding the output sequence, creating a plurality of transfer packets next to the first transfer packet Xi in the output sequence, wherein each of the plurality of transfer packets is marked as having a degree two and comprises a result of XOR operation between a pair of different data shards Ym and indexes of the data shards in said pair, the plurality of transfer packets comprising all pairs of different data shards Ym, creating final transfer packets next to the plurality of transfer packets in the output sequence from the rest data shards Y2, ..., Ym, wherein each of the final transfer packets is marked as having a degree one to be an entry point for the decoding and comprises one data shard and an index of said data shard, and swapping the first transfer packet Xi of the output sequence with the second transfer packet X2 of the output sequence.

2. The method (100) of claim 1, further comprising padding the packet of data to be protected with zeros before the dividing of the packet of data into the data shards.

3. The method (100) of claim 1 or 2, further comprising sending the output sequence of transfer packets as a protected transmission to a receiver side (312).

4. The method (100) of claim 3, wherein the sending of the output sequence of transfer packets as the protected transmission comprises sending the packet of data in an original format with the output sequence of transfer packets as a part of the protected transmission.

5. A method (200) of decoding a data packet from a protected transmission, the method (200) comprising, at a receiver side (312): receiving a protected transmission comprising k transfer packets Xi, with i being from 1 to k, of an output sequence of transfer packets encoded by the method (100) of any of claims 1 to 4 to protect a packet of data, wherein the number of the received transfer packets k is equal or greater than the number of data shards m, obtaining from each received transfer packet Xi indexes of data shards from which the transfer packet was created as parameters x and y, wherein if the received transfer packet Xi is an entry point its parameters x and y are equal to each other, building a graph G(Y,X), where vertices Y correspond to data shards Ym to be decoded and edges X comprise received transfer packets Xi as a payload so that each edge Xi is incident to vertex Yx or vertices Yx, Yy comprising data shards from which the transfer packet Xj was created in accordance with the obtained parameters x and y, and sequentially, in incremental index i manner, conducting for each edge Xi of the graph G(Y, X) a processing as follows: if a vertex Yx to which the edge Xi is incident in accordance with its x parameter is decoded and a vertex Yy to which the edge Xi is incident in accordance with its y parameter is decoded, terminating the current edge processing to continue to the next edge processing; if Xi is an entry point having x parameter equal to y parameter, decoding the vertex Yx; if the vertex Yx is decoded and the vertex Yy is not decoded, decoding the vertex Yy as equal to (Xi XOR Yx); if the vertex Yy is decoded and the vertex Yx is not decoded, decoding the vertex Yx as equal to (Xi XOR Yy); if the vertex Yx is not decoded and the vertex Yy is not decoded, adding to the graph a new edge with the payload Xi, index i being equal to the number k incremented by one, and the same parameters x and y as the current edge to make the new edge incident to the vertices Yx and Yy, and if all vertices of the graph are decoded, reconstructing the packet of data encoded in the protected transmission, wherein the decoding of a vertex Y consists of: marking the vertex Y as decoded, and checking for each edge X incident to the vertex Y: if a vertex Yx to which the edge X is incident is decoded, terminating the decoding, if the vertex Yx is not decoded, decoding the vertex Yx as equal to (X XOR Y).

6. The method (200) of claim 5, wherein if the packet of data in the original format is sent in the protected transmission and successfully received at the receiver side (312), the method (200) comprises terminating the processing of the received transfer packets.

7. A data transmitter (302), comprising: a communication interface (304) configured for communicating with a receiver side (312) through one or more communication channels (310), and a transmitter processor (306) configured for selecting a packet of data to be protected from a queue of data packets, and encoding the selected packet according to the method (100) of claim 1 or 2 to obtain an output sequence of transfer packets, sending the output sequence of transfer packets with the selected packet in an original format as a protected transmission to a receiver side (312), setting a re-transmission timer to a pre-defined period of time, releasing the re-transmission timer in response to receiving an acknowledge message from the receiver side (312) acknowledging a receipt of the selected packet in the protected transmission during the pre-defined period of time, excluding the selected packet from the queue, and returning to the selection for selecting a next packet if the queue is not empty, or returning to the encoding of the selected packet in response to triggering the re-transmission timer.

8. A data receiver (402), comprising: a communication interface (404) configured for communicating with a transmitter side (410) through one or more communication channels (310), and a receiver processor (406) configured for receiving a protected transmission from the transmitter side (410) using the communication interface, the protected transmission comprising a number of transfer packets encoded by the method of claim (100) 1 or 2 to protect a packet of data, if the protected transmission also comprises the packet of data in an original format, sending an acknowledge message to the transmitter side (410) acknowledging a receipt of the packet of data and terminating the processing of the protected transmission, and otherwise, decoding the packet of data from the received transfer packets by the method (200) of claim 5 to reconstruct the packet of data, injecting the reconstructed packet of data to a network stack and sending the acknowledge message to the transmitter side (410) acknowledging the receipt of the packet of data.

Description:
METHODS OF ENCODING AND DECODING DATA PACKETS FOR PROTECTED TRANSMISSION, DATA TRANSMITTER, AND DATA RECEIVER

TECHNICAL FIELD

The present disclosure relates generally to the field of mobile networks and more specifically, to a method of encoding a data packet for a protected transmission, a method of decoding a data packet from a protected transmission and corresponding data transmitter and data receiver.

BACKGROUND

Currently, mobile users are increasing day by day, which results in network traffic (or massive network activity) when all mobile users are using mobile services from all over the world. In general, a significant part of the network traffic is a client and a server exchanging relatively small packets during short sessions, such as a user verification session. Conventionally, network protocols are mainly used to optimize the network traffic for traditional scenarios, such as working in wired networks with stable round-trip time (RTT), small packet losses, and no packet reordering. However, such network protocols are not efficient and are ineffective in wireless networks with varying RTTs, high and spurious packet losses, connection migrations, and similar intrinsic characteristics.

Currently, the wireless networks are based on wireless communication standards that involve Forward Erasure Correction (FEC) codes to improve the probability of delivery data. However, the conventional FEC codes are not applicable to small data transactions on the one side, while an Automatic Repeat Request (ARQ) system cannot solve the issue due to the loss of data packets at any state can asymptotically affect the delivery time at a feedbackbased system. Moreover, due to a large number of mobile users, an energy consumption, as well as additional cost for redundancy data of the conventional wireless networks, is also increasing, which means that produced FEC codes shall be finite, but scalable. The Gilbert- Elliot model for packet loss shows that, in certain scenarios, if a network falls down to a bad state, and packet loss starts to happen, then with a high probability the network continues to be at that state and lost packet continuously. However, there exists a technical problem of how to enhance the reliability to transfer data over wireless networks, such as over-data transactions over the mobile network.

Therefore, in light of the foregoing discussion, there exists a need to overcome the aforementioned drawbacks associated with the conventional approaches of transferring data over wireless networks.

SUMMARY

The present disclosure provides a method of encoding a data packet for a protected transmission, a method of decoding a data packet from a protected transmission, and a corresponding data transmitter and a corresponding data receiver. The present disclosure provides a solution to the existing problem of how to enhance the reliability to transfer data over wireless networks, such as over-data transactions over the mobile network. An objective of the present disclosure is to provide a solution that overcomes at least partially the problems encountered in the prior art and provides an improved method of encoding a data packet for a protected transmission, an improved method of decoding a data packet from a protected transmission and corresponding data transmitter and data receiver. The present disclosure further provides ChaiNed and finite forward error correction codes (NF FEC) and application to data transactions over the mobile network.

One or more objectives of the present disclosure are achieved by the solutions provided in the enclosed independent claims. Advantageous implementations of the present disclosure are further defined in the dependent claims.

In one aspect, the present disclosure provides a method of encoding a data packet for a protected transmission. The method includes, at a transmitter side dividing a packet of data to be protected into a number m of data shards Y m of an equal size. The method further includes creating a first transfer packet Xi of an output sequence of transfer packets to comprise the first data shard Yi and its index, wherein the first transfer packet is marked as having a degree one to be an entry point for decoding the output sequence. The method further includes creating a plurality of transfer packets next to the first transfer packet in the output sequence, wherein each of the plurality of transfer packets is marked as having a degree two and comprises a result of XOR operation between a pair of different data shards Y m and indexes of the data shards in said pair, the plurality of transfer packets comprising all pairs of different data shards Y m . The method further includes creating final transfer packets next to the plurality of transfer packets in the output sequence from the rest data shards Y2, Y m , wherein each of the final transfer packets is marked as having a degree one to be an entry point for the decoding and comprises one data shard and an index of said data shard. The method further includes swapping the first transfer packet Xi of the output sequence with the second transfer packet X2 of the output sequence.

The method is used to develop lightweight systematic ChaiNed and Finite Forward error correction codes (NF FEC) codes, which enhance reliability to transfer data over the packet- switched network with a burst error rate, optimal for relatively small data transaction and suitable for the mobile environment, such as for web-search, payment transactions. The method is also beneficial to generate optimally distributed redundancy for relatively small data and to improve overall performance for small packet transfer as compared to conventional approaches.

In another aspect, the present disclosure provides a method of decoding a data packet from a protected transmission. The method includes, at a receiver side receiving a protected transmission comprising k transfer packets Xi, with i being from 1 to k, of an output sequence of transfer packets encoded by the method of any of claims 1 to 4 to protect a packet of data, wherein the number of the received transfer packets k is equal or greater than the number of data shards m. The method further includes obtaining from each received transfer packet Xi indexes of data shards from which the transfer packet was created as parameters x and y, wherein if the received transfer packet Xi is an entry point its parameters x and y are equal to each other. The method further includes building a graph G(Y, X), where vertices Y correspond to data shards Y m to be decoded and edges X comprise received transfer packets Xi as a payload so that each edge Xi is incident to vertex Y x or vertices Y x , Y y comprising data shards from which the transfer packet Xi was created in accordance with the obtained parameters x and y. The method further includes sequentially, in incremental index i manner, conducting for each edge Xi of the graph G(Y, X) a processing as follows if a vertex Y x to which the edge Xi is incident in accordance with its x parameter is decoded and a vertex Y y to which the edge Xi is incident in accordance with its y parameter is decoded, terminating the current edge processing to continue to the next edge processing. Moreover, if Xi is an entry point having x parameter equal to y parameter, decoding the vertex Y x , and if the vertex Y x is decoded and the vertex Y y is not decoded, decoding the vertex Y y as equal to (Xi XOR Y x ). Further, if the vertex Y y is decoded and the vertex Y x is not decoded, decoding the vertex Y x as equal to (Xi XOR Y y ), and if the vertex Y x is not decoded and the vertex Y y is not decoded, adding to the graph a new edge with the payload Xi, index i being equal to the number k incremented by one, and the same parameters x and y as the current edge to make the new edge incident to the vertices Y x and Y y . Moreover, if all vertices of the graph are decoded, reconstructing the packet of data encoded in the protected transmission, and the decoding of a vertex Y consists of marking the vertex Y as decoded, and checking for each edge X incident to the vertex Y. Furthermore, if a vertex Y x to which the edge X is incident is decoded, terminating the decoding, if the vertex Y x is not decoded, decoding the vertex Yx as equal to (X XOR Y).

The method is used to develop lightweight systematic ChaiNed and Finite Forward error correction codes (NF FEC) codes, which enhance reliability to transfer data over the packet- switched network with a burst error rate, optimal for relatively small data transaction and suitable for the mobile environment, such as for web-search, payment transactions.

In yet another aspect, the present disclosure provides a data transmitter, comprises a communication interface configured for communicating with a receiver side through one or more communication channels, and a transmitter processor configured for selecting a packet of data to be protected from a queue of data packets. The transmitter processor is further configured for encoding the selected packet to obtain an output sequence of transfer packets, sending the output sequence of transfer packets with the selected packet in an original format as a protected transmission to a receiver side, and setting a re-transmission timer to a predefined period of time. The transmitter processor is further configured for releasing the retransmission timer in response to receiving an acknowledge message from the receiver side acknowledging a receipt of the selected packet in the protected transmission during the predefined period of time, excluding the selected packet from the queue, and returning to the selection for selecting a next packet if the queue is not empty. The transmitter processor is further configured for returning to the encoding of the selected packet in response to triggering the re-transmission timer. The disclosed data transmitter achieves all the advantages and technical features of the method of the present disclosure.

In another aspect, the present disclosure provides a data receiver, comprises a communication interface configured for communicating with a transmitter side through one or more communication channels, and a receiver processor configured for receiving a protected transmission from the transmitter side using the communication interface, the protected transmission comprising a number of transfer packets encoded by the method to protect a packet of data. Moreover, if the protected transmission also comprises the packet of data in an original format, sending an acknowledge message to the transmitter side acknowledging a receipt of the packet of data and terminating the processing of the protected transmission, and otherwise, decoding the packet of data from the received transfer packets by the method to reconstruct the packet of data, injecting the reconstructed packet of data to a network stack and sending the acknowledge message to the transmitter side acknowledging the receipt of the packet of data.

The disclosed data receiver achieves all the advantages and technical features of the method of the present disclosure.

It is to be appreciated that all the aforementioned implementation forms can be combined.

It has to be noted that all devices, elements, circuitry, units, and means described in the present application could be implemented in the software or hardware elements or any kind of combination thereof. All steps which are performed by the various entities described in the present application as well as the functionalities described to be performed by the various entities are intended to mean that the respective entity is adapted to or configured to perform the respective steps and functionalities. Even if, in the following description of specific embodiments, a specific functionality or step to be performed by external entities is not reflected in the description of a specific detailed element of that entity that performs that specific step or functionality, it should be clear for a skilled person that these methods and functionalities can be implemented in respective software or hardware elements, or any kind of combination thereof. It will be appreciated that features of the present disclosure are susceptible to being combined in various combinations without departing from the scope of the present disclosure as defined by the appended claims. Additional aspects, advantages, features and objects of the present disclosure would be made apparent from the drawings and the detailed description of the illustrative implementations construed in conjunction with the appended claims that follow.

BRIEF DESCRIPTION OF THE DRAWINGS

The summary above, as well as the following detailed description of illustrative embodiments, is better understood when read in conjunction with the appended drawings. For the purpose of illustrating the present disclosure, exemplary constructions of the disclosure are shown in the drawings. However, the present disclosure is not limited to specific methods and instrumentalities disclosed herein. Moreover, those in the art will understand that the drawings are not to scale. Wherever possible, like elements have been indicated by identical numbers.

Embodiments of the present disclosure will now be described, by way of example only, with reference to the following diagrams wherein:

FIG. 1 is a flowchart of a method of encoding a data packet for a protected transmission, in accordance with an embodiment of the present disclosure;

FIG. 2 is a flowchart of a method of decoding a data packet from a protected transmission, in accordance with an embodiment of the present disclosure;

FIG. 3 is a block diagram that depicts a data transmitter, in accordance with an embodiment of the present disclosure;

FIG. 4 is a block diagram that depicts a data receiver, in accordance with an embodiment of the present disclosure;

FIG. 5A is a flowchart that depicts the ChaiNed and Finite (NF) encoding and decoding process to send protected data among erasure channels, in accordance with an embodiment of the present disclosure;

FIG. 5B is a graphical representation that depicts a decoding graph representation, in accordance with an embodiment of the present disclosure;

FIGs. 6A, 6B, and 6C collectively depict a flowchart of encoding NF codes by a data transmitter, in accordance with an embodiment of the present disclosure;

FIGs. 7A and 7B collectively depict a flowchart of decoding NF codes by a data receiver, in accordance with an embodiment of the present disclosure; and FIG. 8 is an illustration that depicts communication between a data transmitter and a data receiver, in accordance with an embodiment of the present disclosure; and

FIG. 9A is an illustration that depicts communication between a sender and a receiver to transfer redundancy data, in accordance with an embodiment of the present disclosure; and

FIG. 9B is an illustration that depicts a Quick UDP Internet Connections (QUIC) packet, in accordance with an embodiment of the present disclosure.

In the accompanying drawings, an underlined number is employed to represent an item over which the underlined number is positioned or an item to which the underlined number is adjacent. A non-underlined number relates to an item identified by a line linking the nonunderlined number to the item. When a number is non-underlined and accompanied by an associated arrow, the non-underlined number is used to identify a general item at which the arrow is pointing.

DETAILED DESCRIPTION OF EMBODIMENTS

The following detailed description illustrates embodiments of the present disclosure and ways in which they can be implemented. Although some modes of carrying out the present disclosure have been disclosed, those skilled in the art would recognize that other embodiments for carrying out or practicing the present disclosure are also possible.

FIG. 1 is a flowchart of a method of encoding a data packet for a protected transmission, in accordance with an embodiment of the present disclosure. With reference to FIG. 1 , there is shown a method 100 of encoding a data packet for a protected transmission. The method 100 includes steps 102 to 110.

There is provided the method 100 of encoding a data packet for a protected transmission. The method 100 is used to enhance reliability to transfer data over packet-switched network with a burst error rate, optimal for relatively small data transactions and suitable for the mobile environment.

At step 102, the method 100 includes, at a transmitter side, dividing a packet of data to be protected into a number m of data shards Y m of an equal size. Firstly, the packet of data, such as Sj is selected at the transmitter side. In an example, the packet of data is also referred to as a given original packet, which is to be protected. Thereafter, the packet of data is divided into m numbers of the data shards Y m of an equal size, such as the number m is a number of splits, as further shown in FIG. 5A. In accordance with an embodiment, the method 100 further includes, padding the packet of data to be protected with zeros before dividing the packet of data into the data shards. In an implementation, before the dividing of the packet of data into the data shards, if required padding with zeroes is performed for the packet of data to be protected with zeros. In an example, padding data is added to the packet of data to be protected.

At step 104, the method 100 includes, at the transmitter side, creating a first transfer packet Xi of an output sequence of transfer packets to include a first data shard Y i and its index, and the first transfer packet Xi is marked as having a degree one to be an entry point for decoding the output sequence. Firstly, a sequence Xk of packets is formed as an entry point. Thereafter, the first transfer packet Xi is created and marked as having degree one to be the entry point for decoding the output sequence of transfer packets. The first transfer packet Xi includes the first data shard Y i and its index. In an example, the method 100 includes, placing a data shard Yo, and a zeroth transfer packet Xo to the sequence Xk as an entry point and marking the packet as having a degree equal to one is can be for decoding algorithm. In an implementation, the packet Xo is equal to the Sj, as further shown in FIG. 5

At step 106, the method 100 includes, at the transmitter side, creating a plurality of transfer packets next to the first transfer packet Xi in the output sequence, and each of the plurality of transfer packets is marked as having a degree two and includes a result of XOR operation between a pair of different data shards Y m and indexes of the data shards in said pair, the plurality of transfer packets includes all pairs of different data shards Y m . In other words, the method 100 includes, creating the plurality of transfer packets for the different data shards Y m , such as the plurality of transfer packets includes all pairs of different data shards Y m . Moreover, the plurality of transfer packets is created next to the first transfer packet Xi in the output sequence. For example, the method 100 includes creating a transfer packet X2, a transfer packet X3, a transfer packet X4, and up to X10 that are created next to the first transfer packet Xi in the output sequence, as shown in FIG. 5A. Further, each of the plurality of transfer packets is marked as the degree two (i.e., a constant value of two), and each of the plurality of transfer packets includes the result of XOR operation between a pair of different data shards Y m and indexes of the data shards in said pair. In an example, the method 100 includes choosing z as a distance between recombined shards as zero and incrementing each cycle step until z is less than m-1, and executing final transfer packets Xk = Yi®Yj+z, i j. In another example, the transfer packet X2 includes the first data shard Y 1 , and the transfer packet X3 includes Y2 Ys.

At step 108, the method 100 includes, at the transmitter side, creating final transfer packets next to the plurality of transfer packets in the output sequence from the rest of data shards Y2, ..., Y m - Moreover, each of the final transfer packets is marked as having a degree one to be an entry point for the decoding and includes one data shard and an index of said data shard. For example, the method 100 includes, placing the rest of data shards Y2,...,Y m to the end of the formed sequence of the final transfer packets Xk. Moreover, the rest of data shards Y2,.. Y m are placed as the entry points, such as each of the final transfer packets is marked as having a degree one to be an entry point for the decoding, as further shown and described in FIG. 5 A.

At step 110, the method 100 includes, at the transmitter side, swapping the first transfer packet Xi of the output sequence with the second transfer packet X2 of the output sequence. In an example, the zeroth transfer packet Xo of the output sequence is also swapped with the first transfer packet Xi of the output sequence. Moreover, the first transfer packet Xi of the output sequence is swapped with the second transfer packet X2 of the output sequence.

In accordance with an embodiment, the method 100 further includes sending the output sequence of transfer packets as a protected transmission to a receiver side. In other words, the method 100 includes sending the output sequence of transfer packets as a protected transmission, such as Xo,....Xk to the receiver side from the transmitter side. In such embodiment, the method 100 further includes the sending of the output sequence of the transfer packets as the protected transmission includes sending the packet of data in an original format with the output sequence of transfer packets as a part of the protected transmission.

The method 100 is used to develop lightweight systematic ChaiNed and Finite Forward error correction codes (NF FEC) codes, which enhance reliability to transfer data over the packet- switched network with a burst error rate, optimal for relatively small data transactions and suitable for the mobile environment, such as for web-search, payment transactions. The method 100 is based on fountain codes and is also supported by their mathematical form of the fountain codes. Moreover, with the modification and optimization of these codes for our situation, the method 100 inherits most features of the fountain codes and also enhances the fountain codes with several improvements taken into consideration concrete problems and challenges of small packets optimization with the improved overall performance for the small packet transfer as compared to conventional approaches.

The steps 102 to 110 are only illustrative, and other alternatives can also be provided where one or more steps are added, one or more steps are removed, or one or more steps are provided in a different sequence without departing from the scope of the claims herein.

FIG. 2 is a flowchart of a method of decoding a data packet from a protected transmission, in accordance with an embodiment of the present disclosure. With reference to FIG. 2, there is shown a method 200 of decoding a data packet from a protected transmission. The method 200 includes steps 202 to 208.

There is provided the method 200 of decoding a data packet from a protected transmission. The method 200 enhances the reliability to transfer data over packet-switched network with a burst error rate, optimal for relatively small data transactions and suitable for the mobile environment.

At step 202, the method 200 includes, at a receiver side receiving a protected transmission including k transfer packets Xi, with i being from 1 to k, of an output sequence of transfer packets encoded by the method 100 to protect a packet of data. Moreover, the number of the received transfer packets k is equal to or greater than the number of data shards m. Firstly, the method 100 includes encoding the output sequence of transfer packets at the transmitter side to protect the packet of data. After that, the method 200 includes receiving the protected transmission at the receiver side, and the protected transmission includes k transfer packets Xi, with i being from 1 to k, of the output sequence of transfer packets.

At step 204, the method 200 includes, obtaining from each received transfer packet Xi indexes of data shards from which the transfer packet was created as parameters x and y. Moreover, if the received transfer packet Xi is an entry point its parameters x and y are equal to each other. At the receiver side, each Xi packet contains data shard indices from which the transfer packet was created, as parameters x and y. Further, if the received transfer packet Xi from the transmitter side is the entry point, then its parameters x and y are equal to each other, such as if x is equal to one, then y is also equal to one for the entry point, as further shown in FIG. 5A. In an implementation, for a given set of the k transport packets Xi, all belong to the packet of data, such as message Sj, in any order, contains any number of entry points, and the number of transport packets k equal or bigger to m for the number of the data shards.

At step 206, the method 200 includes, building a graph G(Y, X), where vertices Y correspond to data shards Y m to be decoded and edges X includes received transfer packets Xi as a payload so that each edge Xi is incident to vertex Y x or vertices Y x , and Y y including the data shards from which the transfer packet Xi was created in accordance with the obtained parameters x and y. Firstly, the graph G(Y, X) is built, and the vertices Y of the graph G(Y, X) corresponds to the data shards Y m to be decoded. Moreover, the transfer packets correspond to edges E= Xk. x ,k. y of the graph G(Y, X), as further shown and described in FIG. 5B.

At step 208, the method 200 includes, sequentially processing, the incremental index i manner, conducting for each edge Xi of the graph G(Y, X). In other words, for each edge Xi of the graph G(Y, X), the incremental index i is processed sequentially. The step 208 is further dived into steps 208A to 208F as follows, and the processing is performed sequentially. At step 208A, the method 200 includes, processing if a vertex Y x to which the edge Xi is incident in accordance with its x parameter is decoded and a vertex Y y to which the edge Xi is incident in accordance with its y parameter is decoded, terminating the current edge processing to continue to the next edge processing. In other words, if x is decoded and y is decoded then continue. Further, at step 208B, the method 200 includes, checking if Xi is an entry point having x parameter equal to y parameter, decoding the vertex Y x . In other words, if the x parameter of the entry point is equal to the y parameter, then the method 200 includes decoding the vertex Y x of the graph G(Y, X). Moreover, at step 208C, the method 200 includes, checking if the vertex Y x is decoded and the vertex Y y is not decoded, decoding the vertex Y y as equal to (Xi XOR Y x ). For example, if x is decoded and y is not decoded, then the method 200 includes decoding the vertex Y y of the graph G(Y, X), such as G(y) = Xk®G(x). After that, at step 208D, the method 200 includes, checking if the vertex Y y is decoded and the vertex Y x is not decoded, then decoding the vertex Y x as equal to (Xi XOR Y y ). For example, if y is decoded and x is not decoded, then the method 200 includes decoding the vertex Y x of the graph G(Y, X), such as G(x) = Xk® G(y). Furthermore, at step 208E, the method 200 includes, checking if the vertex Y x is not decoded and the vertex Y y is not decoded, then adding to the graph G(Y, X), a new edge with the payload Xi, index i being equal to the number k incremented by one, and the same parameters x and y as the current edge to make the new edge incident to the vertices Y x and Y y . For example, if x is not decoded and y is not decoded, then the method 200 includes adding the new edge with the payload Xi to the graph G(Y, X), such as adding edge x y. The method 200 further includes indexing i equal to the number k incremented by one, and the same parameters x and y as the current edge to make the new edge incident to the vertices Y x and Y y , such as putting undecoded packet G(X, Y)=Xk and G(Y, X)=Xk. Finally, at step 208F, the method 200 includes, checking if all vertices of the graph are decoded, and then reconstructing the packet of data encoded in the protected transmission. In other words, if all nodes in the graph G(Y, X) are decoded, then the method 200 includes, reconstructing the protected packet and injecting the protected packet to the network stack.

Furthermore, the decoding of a vertex Y consists of marking the vertex Y as decoded and checking for each edge X incident to the vertex Y. Moreover, if a vertex Y x to which the edge X is incident is decoded, terminating the decoding, and if the vertex Y x is not decoded, decoding the vertex Y x as equal to (X XOR Y). In other words, decoding of the vertex Y consists of marking the vertex Y of the graph G(Y, X) as decoded, such as G(y) is marked as decoded. Further for each edge X incident to the vertex Y(Y -> X). Moreover, if the vertex Y x of the graph G(Y, X) to which the edge X is incident is decoded, then the method 200 includes terminating the decoding. Furthermore, if the vertex Y x is not decoded, then decoding the vertex Y x as equal to G(x) = (G(Y, X)®G(Y)). In accordance with an embodiment, if the packet of data in the original format is sent in the protected transmission and successfully received at the receiver side, the method 200 includes terminating the processing of the received transfer packets.

The method 200 is used to develop lightweight systematic ChaiNed and Finite Forward error correction codes (NF FEC) codes, which enhance reliability to transfer data over the packet- switched network with a burst error rate, optimal for relatively small data transactions and suitable for the mobile environment, such as for web-search, payment transactions. The steps 202 to 208, and 208A to 208F are only illustrative, and other alternatives can also be provided where one or more steps are added, one or more steps are removed, or one or more steps are provided in a different sequence without departing from the scope of the claims herein.

FIG. 3 is a block diagram that depicts a data transmitter, in accordance with an embodiment of the present disclosure. With reference to FIG. 3 there is shown a block diagram 300 that depicts a data transmitter 302, a communication interface 304, a transmitter processor 306, a memory 308, one or more communication channels 310, and a receiver side 312.

The data transmitter 302 may include suitable logic, circuitry, interfaces, and/or code that is configured to transmit an output sequence of transfer packets through the one or more communication channels 310 to the receiver side 312. Examples of the data transmitter 302 may include but are not limited to, a transmitter, a sender, a transceiver, an encoder, and the like.

The communication interface 304 includes hardware or software that is configured for communicating with the receiver side 312 through the one or more communication channels 310. Examples of the communication interface 304 may include but are not limited to, a computer port, a network socket, a network interface controller (NIC), and any other network interface device.

The transmitter processor 306 may include suitable logic, circuitry, interfaces, and/or code that are configured to select a packet of data to be protected from a queue of data packets. Examples of implementation of the transmitter processor 306 may include but are not limited to a central data processing device, a microprocessor, a microcontroller, a complex instruction set computing (CISC) processor, an application-specific integrated circuit (ASIC) processor, a reduced instruction set (RISC) processor, a very long instruction word (VLIW) processor, a state machine, and other processors or control circuitry.

The memory 308 may include suitable logic, circuitry, and/or interfaces that are configured to hold the output sequence of transfer packets. Examples of implementation of the memory 308 may include, but are not limited to, Electrically Erasable Programmable Read-Only Memory (EEPROM), Dynamic Random-Access Memory (DRAM), Random Access Memory (RAM), Read-Only Memory (ROM), Hard Disk Drive (HDD), Flash memory, a Secure Digital (SD) card, Solid-State Drive (SSD), and/or CPU cache memory. Each channel from the one or more communication channels 310 corresponds to a channel that is used as an intermediator between the data transmitter 302 and the receiver side 312. The receiver side 312 may include suitable logic, circuitry, interfaces, and/or code that is configured to receive the output sequence of transfer packets through the one or more communication channels 310. Examples of the receiver side 312 may include but are not limited to, a receiver, a decoder, a transceiver, and the like.

There is provided the data transmitter 302 that includes the communication interface 304, which is configured for communicating with the receiver side 312 through the one or more communication channels 310. The data transmitter 302 further includes the transmitter processor 306 that is configured to select a packet of data to be protected from a queue of data packets, and encode the selected packet according to the method 100 to obtain an output sequence of transfer packets. Firstly, the transmitter processor 306 is configured to receive a queue of data packets. Thereafter, the transmitter processor 306 is configured to select the packet of data to be protected from the queue of data packets, and encode the selected packet to obtain an output sequence of transfer packets. For example, the transmitter processor 306 divides the packet of data to be protected into a number m of data shards Y m of an equal size and then creates a first transfer packet Xi of an output sequence of transfer packets to comprise the first data shard Y i and its index. Moreover, the first transfer packet is marked as having a degree one to be an entry point for decoding the output sequence. The transmitter processor 306 further creates a plurality of transfer packets next to the first transfer packet in the output sequence. Further, each of the plurality of transfer packets is marked as having a degree two and comprises a result of XOR operation between a pair of different data shards Y m and indexes of the data shards in said pair, the plurality of transfer packets comprising all pairs of different data shards Y m . After that, the transmitter processor 306 creates final transfer packets next to the plurality of transfer packets in the output sequence from the rest of data shards Ya, ..., Y m . Moreover, each of the final transfer packets is marked as having a degree one to be an entry point for the decoding and comprises one data shard and an index of said data shard, and swap the first transfer packet Xi of the output sequence with the second transfer packet X2 of the output sequence. In an example, the transmitter processor 306 is configured to store the output sequence in the memory 308. The transmiter processor 306 further sends the output sequence of transfer packets with the selected packet in an original format as a protected transmission to the receiver side 312 and set a re-transmission timer to a pre-defined period of time. For example, the transmitter processor 306 uses the communication interface 304 to send the output sequence of transfer packets with the selected packet in the original format as the protected transmission through the one or more communication channels 310 and to the receiver side 312. After that, the receiver side 312 is configured to receive the protected transmission through another communication interface.

The transmiter processor 306 is further configured to release the re-transmission timer in response to receiving the acknowledge message from the receiver side 312 acknowledging a receipt of the selected packet in the protected transmission during the pre-defined period of time, and excludes the selected packet from the queue, and returning to the selection for selecting the next packet if the queue is not empty, or return to the encoding of the selected packet in response to triggering the re-transmission timer. In other words, if the protected transmission also includes the packet of data in an original format, then the receiver side 312 is configured to send an acknowledge message to the data transmitter 302 through the one or more communication channels 310. The acknowledge message is used to acknowledge the receipt of the selected packet in the protected transmission during the pre-defined period of time. After that, the transmiter processor 306 of the data transmiter 302 is configured to exclude the selected packet from the queue, and return to the selection for selecting the next packet if the queue is not empty, or return to the encoding of the selected packet in response to triggering the re-transmission timer. The data transmitter 302 is beneficial to enhance reliability to transfer data over a packet-switched network with a burst error rate, optimal for relatively small data transactions, and suitable for the mobile environment.

FIG. 4 is a block diagram that depicts a data receiver, in accordance with an embodiment of the present disclosure. With reference to FIG. 4 there is shown a block diagram 400 that depicts a data receiver 402, a communication interface 404, a receiver processor 406, a memory 408, a transmitter side 410, and the one or more communication channels 310.

The data receiver 402 may include suitable logic, circuitry, interfaces, and/or code that is configured to receive the output sequence of transfer packets through the one or more communication channels 310. Examples of the data receiver 402 may include but are not limited to, a receiver, a decoder, a transceiver, and the like.

The communication interface 404 includes hardware or software that is configured for communicating with the transmitter side 410 through the one or more communication channels 310. Examples of the communication interface 404 may include but are not limited to, a computer port, a network socket, a network interface controller (NIC), and any other network interface device.

The receiver processor 406 may include suitable logic, circuitry, interfaces, and/or code that are configured to receive a packet of data to be protected from a queue of data packets. Examples of implementation of the receiver processor 406 may include but are not limited to a central data processing device, a microprocessor, a microcontroller, a complex instruction set computing (CISC) processor, an application-specific integrated circuit (ASIC) processor, a reduced instruction set (RISC) processor, a very long instruction word (VLIW) processor, a state machine, and other processors or control circuitry.

The memory 408 may include suitable logic, circuitry, and/or interfaces that are configured to hold the output sequence of transfer packets. Examples of implementation of the memory 408 may include, but are not limited to, Electrically Erasable Programmable Read-Only Memory (EEPROM), Dynamic Random-Access Memory (DRAM), Random Access Memory (RAM), Read-Only Memory (ROM), Hard Disk Drive (HDD), Flash memory, a Secure Digital (SD) card, Solid-State Drive (SSD), and/or CPU cache memory.

Each channel from the one or more communication channels 310 corresponds to a channel that is used as an intermediator between the data receiver 402 and the transmitter side 410. The transmitter side 410 may include suitable logic, circuitry, interfaces, and/or code that is configured to transmit an output sequence of transfer packets through the one or more communication channels 310 to the data receiver 402. Examples of the transmitter side 410 may include but are not limited to, a transmitter, a sender, a transceiver, an encoder, and the like.

There is provided the data receiver 402 that includes the communication interface 404, which is configured for communicating with the transmitter side 410 through the one or more communication channels 310. The data receiver 402 further includes the receiver processor 406 that is configured to receive a protected transmission from the transmitter side 410 using the communication interface 404, the protected transmission includes a number of transfer packets encoded by the method 100 of FIG. 1 to protect a packet of data. Moreover, if the protected transmission also includes the packet of data in an original format, then the receiver processor 406 is configured to send an acknowledge message to the transmitter side 410 acknowledging a receipt of the packet of data and terminating the processing of the protected transmission. In an implementation, the communication interface 404 is used by the receiver processor 406 to send the acknowledge message through the one or more communication channels 310. Furthermore, if the protected transmission does not include the packet of data in an original format, then the receiver processor 406 is configured to decode the packet of data from the received transfer packets by the method 200 to reconstruct the packet of data, injecting the reconstructed packet of data to a network stack and sending the acknowledge message to the transmitter side 410 acknowledging the receipt of the packet of data.

In an implementation, the receiver processor 406 is configured to receive the protected transmission comprising k transfer packets Xi, with i being from 1 to k, of an output sequence of transfer packets encoded by the method 100 of FIG. 1 to protect the packet of data. The number of the received transfer packets k is equal or greater than the number of data shards m. The receiver processor 406 is further configured to obtain from each received transfer packet Xi indexes of data shards from which the transfer packet was created as parameters x and y, and if the received transfer packet Xi is an entry point its parameters x and y are equal to each other. The receiver processor 406 is further configured to build a graph G(Y, X), where vertices Y correspond to data shards Y m to be decoded and edges X includes received transfer packets Xi as a payload so that each edge Xi is incident to vertex Y x or vertices Y x , Y y includes data shards from which the transfer packet Xi was created in accordance with the obtained parameters x and y. After that, the receiver processor 406 is further configured to sequentially, in incremental index i manner, conducting for each edge Xi of the graph G(Y, X) processing as follows if a vertex Y x to which the edge Xi is incident in accordance with its x parameter is decoded and a vertex Y y to which the edge Xi is incident in accordance with its y parameter is decoded, terminating the current edge processing to continue to the next edge processing. Moreover, if Xi is an entry point having x parameter equal to y parameter, decoding the vertex Y x , and if the vertex Y x is decoded and the vertex Y y is not decoded, decoding the vertex Y y as equal to (Xi XOR Y x ). Furthermore, if the vertex Y y is decoded and the vertex Y x is not decoded, decoding the vertex Y x as equal to (Xi XOR Y y ), and if the vertex Y x is not decoded and the vertex Y y is not decoded, adding to the graph a new edge with the payload Xi, index i is equal to the number k incremented by one, and the same parameters x and y as the current edge to make the new edge incident to the vertices Y x and Y y . In addition, if all vertices of the graph are decoded, reconstruct the packet of data encoded in the protected transmission. Moreover, the decoding of a vertex Y consists of marking the vertex Y as decoded and check for each edge X incident to the vertex Y, and if a vertex Y x to which the edge X is incident is decoded, then terminating the decoding, while if the vertex Y x is not decoded, then decoding the vertex Y x as equal to (X XOR Y). The data receiver 402 provides lightweight systematic ChaiNed and Finite Forward error correction codes (NF FEC), which is beneficial to enhance reliability to transfer data over the packet-switched network with a burst error rate, optimal for relatively small data transactions and suitable for the mobile environment.

FIG. 5A is a flowchart that depicts the ChaiNed and Finite (NF) encoding and decoding process to send protected data among erasure channels, in accordance with an embodiment of the present disclosure. FIG. 5A is described in conjunction with elements from FIG. 3, and 4. With reference to FIG. 5A there is shown a flowchart 500A for decoding depicts ChaiNed and Finite (NF) encoding and decoding process to send protected data among erasure channel, such as through the one or more communication channels 310.

With reference to FIG.5A, there is shown a practical implementation of the ChaiNed and Finite (NF) encoding and decoding process. There is further shown that a packet of data to be protected, such as Sj is divided into a number m of data shards Y m of an equal size, and when m equal four, original data is also sent, and the first seven transfer packets were lost during the transaction. In an implementation, a protected packet Sj is split into a number of equally sized data shards Y m , such as Yi, Y2, Y3, and Y4, as shown in FIG. 5 A. In an implementation, the data transmitter 302 is used to send the original packet of data Sj in advance as Xo. After that, the data transmitter 302 executes a recombination algorithm, which merges data shards Y m by XoR operation to produce finite series of Xi..k transport packets, and evenly distributed sequence targeting to overcome burst error events with minimally optimal additional packets. In an implementation, the data transmitter 302 is used to perform NF encoding, which includes, systematic, evenly distributed XoR products, and systematic, evenly distributed entry points. The data transmitter 302 further creates the first transfer packet Xi of the output sequence of transfer packets to include the first data shard Y i and its index, and the first transfer packet Xi is marked as having a degree one to be an entry point for decoding the output sequence. After that, the data transmitter 302 creates a plurality of transfer packets next to the first transfer packet in the output sequence. Moreover, each of the plurality of transfer packets is marked as having a degree two and includes a result of XOR operation between a pair of different data shards Y m and indexes of the data shards in said pair, the plurality of transfer packets includes all pairs of different data shards Y m . Thereafter, the data transmitter 302 creates final transfer packets next to the plurality of transfer packets in the output sequence from the rest of data shards Y2, ..., Y m , and then swapping the first transfer packet Xi of the output sequence with the second transfer packet X2 of the output sequence, as shown in FIG.5A.

Moreover, the properties of the NF encoding recovery (or decoding) that occurs at the data receiver 402 include different key points, as shown in FIG. 5A. There are further shown different combinations of digits for the plurality of transfer packets. Further, different decoding points are also marked in the FIG. 5 A, as well as few burst packet losses from the plurality of transfer packets. In an example, the data receiver 402 splits the size of the packet of data depending on the number m, such as the number m is used to determine in how many parts the original packet splits. In an example, the data transmitter 302 can lose any m single random transport packets and successfully restore the original message. Moreover, if the first transfer packet Xi (i.e., the original packet) has not been lost, then the time for processing the request on the data receiver 402 will be equal to the time of processing of the plain packet sent. In an example, the data receiver 402 send additional packets, such as k = m * (m - l) / 2 + m. Moreover, depending on number k, lose k - m + 1 of subsequent data packets and successfully restore the original data. In an example, if m = 2, then k = 3 for two subsequent packets. In another example, if m = 3, then k = 6 for four data packets. In yet another example, if m = 4, then k = 10 for seven data packets. In another example, if m = 5, then k = 12 for eight data packets. Furthermore, encoding complexity is determined by using an equation, such as O(d*(log2(m)+1)), where d is a data length and m is a split size. In addition, decoding complexity is determined by using an equation, O(m + k), where m is a split size and k is the number of packets received.

FIG. 5B is a graphical representation that depicts a decoding graph representation, in accordance with an embodiment of the present disclosure. FIG. 5B is described in conjunction with elements from FIG. 3, and 4. With reference to FIG. 5B there is shown a graphical representation 500B that depicts a decoding graph representation. The graphical representation 500B includes a first node 502, a second node 504, a third node 506, and a fourth node 508.

In an implementation, the graphical representation 500B is built that corresponds to a graph G(Y, X), where vertices Y correspond to data shards Y m to be decoded and edges X includes received transfer packets Xi as a payload so that each edge Xi is incident to vertex Y x or vertices Y x , and Y y includes data shards from which the transfer packet Xi was created in accordance with the obtained parameters x and y. In an example, the transfer packets correspond to edges E= Xk. x ,k. y of the graph G(Y, X), such as edges for each node, as shown in FIG. 5B. The graphical representation 500B corresponds to a condition when there exist four data shards. Moreover, as NF code generates a finite sequence of transport packets, therefore it is required to choose optimal numbers of shards Y m by estimating the reliability of the network channel. In an implementation, the receiver processor 406 of the data receiver 402 is used to decode all the nodes of the graphical representation 500B, such as to decode the first node 502, the second node 504, the third node 506, and the fourth node 508. Furthermore, if all nodes in the graphical representation 500B (e.g., graph G(Y, X)) are decoded, then the data receiver 402 is used to reconstruct the protected packet and inject it into the network stack.

FIGs. 6A, 6B, and 6C collectively depict a flowchart of encoding NF codes by a data transmitter, in accordance with an embodiment of the present disclosure. FIGs. 6A, 6B, and 6C are described in conjunction with elements from FIGs. 3 to 5B. With reference to FIG. 6A, 6B, and 6C there are shown a flowchart 600A, a flowchart 600B, and a flowchart 600C that include a series of operations from 602-to-642. In an implementation, the data transmitter 302 (of FIG. 3) is configured to execute the flowchart 600A, 600B, and 600C.

With reference to FIG. 6A, there is shown that at operation 602, the data transmitter 302 starts ChaiNed and Finite Forward error correction codes (NF FEC) based encoding algorithm. Further, at operation 604, the data transmitter 302 receives the packet such as “Sj” and further splits the received packet “Sj”, and the received packet “Sj” is split. Thereafter, at operation 606, the received packet “Sj” is divided into subsets of equally sized data shards such as “Y m ”. In an implementation, if required, then the data shards contain padding with zeros. Moreover, at operation 608, the value of the number of packets “k” received is set to zero, and at operation 610, the data transmitter 302 fills the transport packet “Xk” with the data “Sj”. Further, at operation 612, the data transmitter 302 sets the number of packets “k” by incrementing the value of k with 1 such as k=k+l. For example, if the value of k is 0, then increase the value of k to 1. Thereafter, at operation 614, the data transmitter 302 adds the data shard Yo as an entry point to the head of the sequence such as X k = Y o , Xk.x = 0, X k .y = 0, X k .id =j , k = k +l.

With reference to FIG. 6B, there is shown that at operation 616, the value of k which represents the number of packets is incremented, and the value of transfer packet “i” and the next transfer packet to the first transfer packet “z” is set to 0 and 1 respectively at operation 618. Further, at operation 620, the data transmitter 302 sets Xk = XoR (Yi, Y, + z ) and record XoR arguments and message index at Xk.x = i, Xk.y = i+z , Xk.id = j. Thereafter, the value of k is incremented, and the value of i+=l at operation 622, and at operation 624 the data transmitter 302 checks if the value of i+z (i.e., the value of transfer packet and value of the nest transfer packet to the first transfer packet) is less than m (i.e., number of splits) or not. If the value is less than the value of m then the data transmitter 302 executes the operation 620 otherwise, the data transmitter 302 executes operation 626. In addition, at operation 626, the data transmitter 302 checks the value of z, and if the value of z is less than m-1 then the data transmitter 302 executes operation 628 where the value of I is set to 0 and the value of z is incremented to 1 and further executes the operation 620. However, if the value of z is not less than m-1, then the data transmitter 302 executes operation 630.

With reference to FIG. 6C, there is shown that at operation 630, the data transmitter 302 adds the data shard “e” and sets the value of e as 1. Thereafter, at operation 632, the data transmitter 302 set Xk= Y e with record entry point index and message index at Xk , Xk.x = e, Xk.y = e, Xk.id = j, and further increments the value of k and e by 1, as shown at operation 634. Again, the data transmitter 302 checks if the value of e is less than the value of m then the data transmitter 302 executes the operation 632, otherwise, executes operation 638 in which the transfer packet at Xi is swapped with the transfer packet of X2 and decrements the value of k. Finally, at operation 640, the data transmitter 302 sends the transfer packets Xo. k. Furthermore, the data transmitter 302 finishes the NF encoding at operation 642.

FIGs. 7A and 7B collectively depict a flowchart of decoding NF codes by a data receiver, in accordance with an embodiment of the present disclosure. FIGs. 7A and 7B is described in conjunction with elements from FIGs. 3 to 6C. With reference to FIG. 7A and 7B there are shown a flowchart 700A and a flowchart 700B that include a series of operations from 702- to-746. The data receiver 402 (of FIG. 4) is configured to execute the flowchart 700A and 700B.

With reference to FIG. 7A, there is shown that at operation 702, the data receiver 402 starts decoding the NF code. Further, at operation 704, the data receiver 402 checks if the number of packets “k” is less than the number of splits “m” or not. If the number of packets is less than the number of splits (i.e., k<m) then the data receiver 402 returns an error as per operation 706. However, if the number of packets “k” is not less than the number of splits “m” then the data receiver 402 executes the operation 708. At operation 708, the data receiver 402 further checks if the number of transfer packets such as Xo exists or not and if the data receiver 402 exists then the data receiver 402 returns “ok” through operation 710, and if the number of transfer packets does not exist then the data receiver 402 performs the operation 712. At operation 712, the data receiver 402 creates a SS with the values from 0 m-1 and fills the set with data shard numbers that are decoded from the set Xs. Thereafter, at operation 714, the data receiver 402 checks the number from 0 to m-1, and if the set SS does not contain any number, then returns an error such as by operation 716, otherwise, the data receiver 402 performs operation 718 by checking the entry points. If no entry points are found then the data receiver 402 returns an error, otherwise, the data receiver 402, builds a graph such as G(Y, X) as per operation 720.

With reference to FIG. 7B, there is shown that the vertices of the graph such as the “Y” denote the data shards Y m and the edges of the graph such as “X” denote the transfer packets Xk. Further, all the data shards Y m are decoded by the implementation of operation 722. At operation 722, the data receiver 402 checks for each of the transfer packet Xk and performs the operations accordingly. After that, operation 724 is implemented to decode the next data shards. At, operation 724, the data receiver 402 checks if the set SS with Xk.x is decoded and the set SS with Xk.y is decoded or not. If both the set SS with Xk.x and the set SS with Xk.y are decoded then the data receiver 402 executes operation 726, and then again back to operation 722. Further, if both the set SS with Xk.x and the set SS with Xk.y are not decoded then the data receiver 402 implements operation 728.

At operation 728, the data receiver 402 checks if Xk is the entry point or not. If Xk is the entry point then the data receiver 402 decodes the data shards (Xk.x) such as by operation 730 and if Xk is not the entry point, then the data receiver 402 checks if SS(Xk,x) is decoded and if SS(Xk,y) is not decoded by the implementation of operation 732. Thereafter, at operation 734, the data receiver 402 decodes either the data shard that is included in the set SS (Xk.x) or the data shard included in Xk (i.e., (XoR (SS(Xk.x), Xk)). The data receiver 402 further check, if the set SS(Xk,x) is decoded and the set SS(Xk,y) is not decoded, or if SS(Xk,x) is not decoded and the set SS(Xk,y) is not decoded, or if SS(Xk,x) is decoded and the set SS(Xk,y) is decoded. Further, at operation 736 the data receiver 402 checks if the set SS(Xk,y) is decoded and the set (Xk.x) is not decoded. Then, in that case, the data receiver 402 implements operation 738. At operation 738, the data receiver 402 decodes either the data shard that is included in the set SS (Xk.y) or the data shard included in Xk (i.e., (XoR (SS(Xk.y), Xk)). Moreover, if the set SS(Xk,y) and the set (Xk.x) are not decoded and the set SS(Xk,y) is not decoded and the set (Xk.x) is decoded, then the data receiver 402 implements operation 740. At operation 740, the data receiver 402 further checks if the set SS(Xk.x) and the set SS (Xk,y) are not decoded. Thereafter, if the set SS(Xk.x) and the set SS (Xk,y) are not decoded then the data receiver 402 adds the edge “G” (Xk.x.Xk.y) with payload Xk by the implementation of the operation 742 and finally, the data receiver proceeds to the next packet (i.e., the operation 726) and again implements the operation 722 till all the data shards are decoded. Thereafter, at last, the data receiver 402 reconstructs original data and returns the packet by the implementation of operation 744 followed by execution of operation 746 to finish the decoding.

FIG. 8 is an illustration that depicts communication between a data transmitter and a data receiver, in accordance with an embodiment of the present disclosure. FIG. 8 is described in conjunction with elements from FIGs. 3 to 7. With reference to FIG. 8 there is shown an illustration that depicts communication between the data transmitter 302 and the data receiver 402.

In an implementation, the data transmitter 302 includes the transmitter processor 306, which is configured to transmit a protected packet Sj 802 to the data receiver 402. The data receiver 402 is first, received by an NF encoder 804, which is configured to encode the protected packet Sj 802. Moreover, the NF encoder 804 is further configured to encode the protected packet Sj 802 according to the method 100 of FIG. 1 to obtain an output sequence of transfer packets, such as a transport packet Xi 806, which is connected to a send packet queue 808 so as to transmit the protected packet Sj 802 to the data receiver 402. In an example, the NF encoder 804 uses ChaiNed and Finite Forward error correction codes (NF FEC) to encode the packet of data. As a result, the data transmitter 302 sends the output sequence of transfer packets with the protected packet Sj 802 in an original format as the protected transmission to the data receiver 402. In an example, the data transmitter 302 is configured to execute an algorithm that is also marked as algorithm sender in FIG. 8.

Moreover, on the output of the send packet queue 808 is further connected with a received packet queue 810, so as to receive the protected transmission from the data transmitter 302, the protected transmission includes the number of transfer packets encoded by the method 100 to protect the packet of data. After that, the data receiver 402 is configured to use an NF decoder 812 for decoding the packet of data from the received transfer packets by the method 200 to reconstruct the packet of data. In an example, the NF decoder 812 uses ChaiNed and Finite Forward error correction codes (NF FEC) for decoding the packet of data from the received transfer packets. Thereafter, the data receiver 402 is configured to inject the reconstructed packet of data to a network stack and send the acknowledge message through the acknowledge (ACK) generator 814 to the data transmitter 302 for acknowledging the receipt of the packet of data. In an implementation, if the protected transmission also includes the packet of data in the original format, then the acknowledge generator 814 is configured to send an acknowledge message to the data transmitter 302 acknowledging the receipt of the packet of data and terminating the processing of the protected transmission. In an example, the data receiver 402 is configured to execute an algorithm that is also marked as algorithm receiver in FIG. 8. FIG. 9A is an illustration that depicts communication between a sender and a receiver to transfer redundancy data, in accordance with an embodiment of the present disclosure. FIG. 9 is described in conjunction with elements from FIGs. 3 to 8. With reference to FIG. 9A there is shown an illustration 900A that depicts a Quick UDP Internet Connections (QUIC) sender 902, a QUIC receiver 904, an application 906, and a sever 908.

In an implementation, a core component hidra_nf, which intercepts data flow to/from a network, is able to access the data before and after encryption. The component consumes an encrypted QUIC packet, which is ready to send. Moreover, if this packet has STREAM_FRAME and any of FEC SCHEME XX policy enabled by the application 906, and hidra_nf build QUIC packet with FECJFRAME inside of the QUIC packet and post that packet to send to the QUIC receiver 904. In an example, application 906 is used to run a QUIC session 910. In addition, a QUICPacketCreator::SerializePacket 912 is configured to create a packet, and also serialize each packet. After that, each packet is received by a forward erasure encoder unit 914 that is configured to determine if the STREAM DATA frame is available, and also to activate FEC encoding policy. The forward erasure encoder unit 914 further builds the forward erasure code block and sends the erasure code block right after the original data block. Thereafter, an output of the forward erasure encoder unit 914 is received by a QUICConnection::OnSerializedPacket 916, which is configured to initialize a QUIC connection 918. In addition, a plurality of streams, such as a streaml, a stream 2, and up to a stream N is also received by the QUIC connection 918. After that, an output of the QUIC connection 918 is encrypted by an encryption block 920, and then the packet is sent via sendmsgs() block to the QUIC receiver 904. On the QUIC receiver 904 sides, QuicFramer process packet detects it has FEC_FRAME and process frame payload. Once the original packet is restored, the original packet will be processed as same as normal, as shown in FIG. 9. In other words, the QUIC receiver 904 is configured to use a decryption block 922, a QUICFramer::ProcessFecFrame 924, a forward erasure decoder unit 926, a QUICConnection::OnFecProtectedPayload 928, and a QUIC connection 930 to obtain the plurality of streams.

FIG. 9B is an illustration that depicts a Quick UDP Internet Connections (QUIC) packet, in accordance with an embodiment of the present disclosure. FIG. 9B is described in conjunction with elements from FIGs. 3 to 8. With reference to FIG. 9B there is shown an illustration 900B that depicts Quick UDP Internet Connections (QUIC) packet 932 with FEC_FRAME and payload. The QUIC packet 932 includes an internet protocol (IP) header 934, a user datagram protocol (UDP) header 936, a QUIC header 938, and a QUIC payload 940. In an implementation, the QUIC protocol is extended by defining a new type of frame data, such as FrameType = 0x88 (IB) identifies FEC frame by itself at QUIC IETF protocol implementation and 0x20 at Google QUIC implementation, and FEC Frame version (1B)- FEC frame version. Moreover, FEC Scheme (1 byte)- FEC scheme version (maximum 7), Xorl (1 byte)-number for the first XoR argument, and Xor2 (1 byte)-number for the second XoR argument. In addition, FEC payload ID-(an IETF/QUIC formatted variable-length integer, value can be in the range O..(2 A 62)-l), which field provides a data about FEC group identification, currently equal to protected packet number, FEC payload length of the QUIC payload 940 is the rest payload lengths.

Modifications to embodiments of the present disclosure described in the foregoing are possible without departing from the scope of the present disclosure as defined by the accompanying claims. Expressions such as "including", "comprising", "incorporating", "have", "is" used to describe and claim the present disclosure are intended to be construed in a non-exclusive manner, namely allowing for items, components or elements not explicitly described also to be present. Reference to the singular is also to be construed to relate to the plural. The word "exemplary" is used herein to mean "serving as an example, instance or illustration". Any embodiment described as “exemplary” is not necessarily to be construed as preferred or advantageous over other embodiments or to exclude the incorporation of features from other embodiments. The word "optionally" is used herein to mean "is provided in some embodiments and not provided in other embodiments". It is appreciated that certain features of the present disclosure, which are, for clarity, described in the context of separate embodiments, may also be provided in combination in a single embodiment. Conversely, various features of the invention, which are, for brevity, described in the context of a single embodiment, may also be provided separately or in any suitable combination or as suitable in any other described embodiment of the disclosure.