To save content items to your account,
please confirm that you agree to abide by our usage policies.
If this is the first time you use this feature, you will be asked to authorise Cambridge Core to connect with your account.
Find out more about saving content to .
To save content items to your Kindle, first ensure no-reply@cambridge.org
is added to your Approved Personal Document E-mail List under your Personal Document Settings
on the Manage Your Content and Devices page of your Amazon account. Then enter the ‘name’ part
of your Kindle email address below.
Find out more about saving to your Kindle.
Note you can select to save to either the @free.kindle.com or @kindle.com variations.
‘@free.kindle.com’ emails are free but can only be saved to your device when it is connected to wi-fi.
‘@kindle.com’ emails can be delivered even when you are not connected to wi-fi, but note that service fees apply.
Multicast refers to the case where the same information is transmitted to multiple sink nodes. The first application of network coding to be discovered was that network coding allows the maximum possible multicast rate to be achieved in a noise–free, or lossless, network. Clearly, this rate can be no more than the capacity between the source and each sink individually. As we will see, network coding allows joint use of network resources by multiple sink nodes, so that any rate possible for all sinks individually is simultaneously achievable for all sinks together.
NOTATIONAL CONVENTIONS
We denote matrices with bold uppercase letters and vectors with bold lowercase letters. All vectors are row vectors unless indicated otherwise with a subscript T. We denote by [x, y] the concatenation of two row vectors x and y. For any vector (or matrix) whose entries (rows/columns) are indexed by the arcs of a network, we assume a consistent ordering of the vector entries (matrix rows/columns) corresponding to a topological ordering of the arcs.
BASIC NETWORK MODEL AND MULTICAST NETWORK CODING PROBLEM FORMULATION
Leaving aside for a start the complexities of real packet networks, we consider a very simple network model and problem formulation, widely used in the network coding literature, to gain some fundamental insights and develop some basic results. We will later apply these insights and results to more complex network models.
Multicast in decentralized settings, such as wireless ad hoc and peer–to–peer networks, is seen as a potential application area that can benefit from distributed network coding and its robustness to arc failures and packet losses. In such settings, packets are coded and forwarded by end hosts to other end hosts. It is thus important to consider security against compromised nodes.
Network coding presents new capabilities as well as challenges for network security. One advantage of multicast network coding is that it facilitates the use of a subgraph containing multiple paths to each sink node. Coding across multiple paths offers useful possibilities for information theoretic security against adversaries that observe or control a limited subset of arcs/transmissions in the network. By adding appropriately designed redundancy, error detection or error correction capabilities can be added to a distributed multicast scheme based on random linear network coding, as described in the following. On the other hand, coding at intermediate nodes poses a problem for traditional security techniques. For instance, coded combinations involving an erroneous packet result in more erroneous packets, so traditional error correction codes that deal with a limited proportion of erroneous packets are less effective. Also, traditional signature schemes do not allow for coding at non–trusted intermediate nodes.
Network coding, as a field of study, is young. It was only in 2000 that the seminal paper by Ahlswede, Cai, Li, and Yeung, which is generally attributed with the “birth” of network coding, was published. As such, network coding, like many young fields, is characterized by some degree of confusion, of both excitement about its possibilities and skepticism about its potential. Clarifying this confusion is one of the principal aims of this book. Thus, we begin soberly, with a definition of network coding.
WHAT IS NETWORK CODING?
Defining network coding is not straightforward. There are several definitions that can be and have been used.
In their seminal paper, Ahlswede, Cai, Li, and Yeung say that they “refer to coding at a node in a network as network coding,” where, by coding, they mean an arbitrary, causal mapping from inputs to outputs. This is the most general definition of network coding. But it does not distinguish the study of network coding from network, or multiterminal, information theory — a much older field with a wealth of difficult open problems. Since we do not wish to devote this book to network information theory (good coverage of network information theory already exists, for example, in [27, Chapter 14]), we seek to go further with our definition.
In the previous two chapters, we assumed that a coding subgraph specifying the times and locations of packet injections was given. We dealt only with half the problem of establishing connections in coded packet networks — the coding half. This chapter deals with the other half: subgraph selection.
Subgraph selection, which is the problem of determining the coding subgraph to use, is the coded networks analog of the joint problems of routing and scheduling in conventional, routed networks. Subgraph selection and coding are very different problems, and the techniques used in the this chapter differ significantly from those in the previous two chapters. In particular, while the previous two chapters generally used techniques from information theory and coding theory, this chapter generally uses techniques from networking theory.
Subgraph selection is essentially a problem of network resource allocation: we have a limited resource (packet injections) that we wish to allocate to coded packets in such as way as to achieve certain communication objectives. We propose a number of solutions to the problem, and we divide these solutions into two categories: flow–based approaches (Section 5.1) and queue–length–based approaches (Section 5.2). In flow–based approaches, we assume that the communication objective is to establish a set of (unicast or multicast) connections at certain, given flow rates while, in queue–length–based approaches, we suppose that the flow rates, though existent, are not necessarily known, and we select coding subgraphs using the state of packet queues.
In this chapter, we discuss the use of network coding, particularly random linear network coding, in lossy networks with packet erasures. The main result that we establish is that random linear network coding achieves the capacity of a single connection (unicast or multicast) in a given coding subgraph, i.e., by efficiently providing robustness, random linear network coding allows a connection to be established at the maximum throughput that is possible in a given coding subgraph.
Throughout this chapter, we assume that a coding subgraph is given; we address the problem of subgraph selection in Chapter 5, where we also discuss whether separating coding and subgraph selection is optimal. The lossy coding subgraphs we consider here are applicable to various types of network, including multi–hop wireless networks and peer–to–peer networks. In the latter case, losses are not caused so much by unreliable links, but rather by unreliable nodes that intermittently join and leave the network.
We model coding subgraphs using the time–expanded subgraphs described in Section 1.3. Recall that a time–expanded subgraph describes the times and locations at which packet injections and receptions occur. Since a coding subgraph specifies only to the times at which packet injections occur, a time–expanded subgraph is in fact an element in the random ensemble of a coding subgraph. A time–expanded subgraph is shown in Figure 4.1.
The basic idea behind network coding is extraordinarily simple. As it is defined in this book, network coding amounts to no more than performing coding operations on the contents of packets — performing arbitrary mappings on the contents of packets rather than the restricted functions of replication and forwarding that are typically allowed in conventional, store–and–forward architectures. But, although simple, network coding has had little place in the history of networking. This is for good reason: in the traditional wireline technologies that have dominated networking history, network coding is not very practical or advantageous.
Today, we see the emergence, not only of new technologies, but also of new services, and, in designing new network protocols for these new technologies and services, we must be careful not to simply transplant old protocols because we are familiar with them. Instead, we must consider whether other, hitherto unused, ideas may lead to better solutions for the new situation.
Network coding shows much promise as such an idea. In particular, various theoretical and empirical studies suggest that significant gains can be obtained by using network coding in multi–hop wireless networks and for serving multi–cast sessions, which are certainly examples of fast–emerging technologies or services. These studies have, for example, encouraged Microsoft to adopt network coding as a core technology of its Avalanche project — a research project that aims to develop a peer–to–peer file distribution system — exploiting the advantages offered by network coding for multicast services.
So far, we have considered network coding for a single communication session, i.e., unicast communication to one sink node or multicast of common information to multiple sink nodes. This type of coding is called intra–session network coding, since we only code together information symbols that will be decoded by the same set of sink nodes. For intra–session network coding, it suffices for each node to form its outputs as random linear combinations of its inputs. Each sink node can decode once it has received enough independent linear combinations of the source processes.
When there are multiple sessions sharing the network, a simple practical approach is to allocate disjoint subsets of the network capacity to each session. If each session's allocated subgraph satisfies the max flow/min cut condition for each sink (Theorems 2.2 and 2.7), we can obtain a solution with intra–session network coding among information symbols of each session separately. Sections 5.1.1 and 5.2.1 discuss such an approach.
In general, however, achieving optimal rates may require inter–session network coding, i.e., coding among information symbols of different sessions. Inter–session network coding is more complicated than intra–session network coding. Coding must be done strategically in order to ensure that each sink can decode its desired source processes — nodes cannot simply combine all their inputs randomly, since the sink nodes may not have sufficient incoming capacity to decode all the randomly combined source processes. Unlike intra–session network coding, decoding may have to be done at non–sink nodes.
An alphabet is a set of symbols. Some alphabets are infinite, such as the set of real numbers or the set of complex numbers. Usually, we will be interested in finite alphabets. A sequence is a string of symbols from a given alphabet. A sequence may be of infinite length. An infinite sequence may be periodic or aperiodic; infinite aperiodic sequences may become periodic after some initial segment. Any infinite sequence that we will consider has a fixed beginning, but is unending. It is possible, however, that an infinite sequence has neither a beginning nor an end.
A finite sequence is a string of symbols of finite length from the given alphabet. The blocklength of the sequence, denoted n, is the number of symbols in the sequence. Sometimes the blocklength is not explicitly specified, but is known implicitly only by counting the number of symbols in the sequence after that specific sequence is given. In other situations, the blocklength n is explicitly specified, and only sequences of blocklength n are under consideration.
There are a great many aspects to the study of sequences. One may study the structure and repetition of various subpatterns within a given sequence of symbols. Such studies do not need to presuppose any algebraic or arithmetic structure on the alphabet of the sequence.
Decoding large linear codes, in general, is a formidable task. For this reason, the existence of a practical decoding algorithm for a code can be a significant factor in selecting a code. Reed–Solomon codes – and other cyclic codes – have a distance structure that is closely related to the properties of the Fourier transform. Accordingly, many good decoding algorithms for Reed–Solomon codes are based on the Fourier transform.
The algorithms described in this chapter form the class of decoding algorithms known as “locator decoding algorithms”. This is the richest, the most interesting, and the most important class of algebraic decoding algorithms. The algorithms for locator decoding are quite sophisticated and mathematically interesting. The appeal of locator decoding is that a certain seemingly formidable nonlinear problem is decomposed into a linear problem and a well structured and straightforward nonlinear problem. Within the general class of locator decoding algorithms, there are many options, and a variety of algorithms exist.
Locator decoding can be used whenever the defining set of a cyclic code is a set of consecutive zeros. It uses this set of consecutive zeros to decode, and so the behavior of locator decoding is closely related to the BCH bound rather than to the actual minimum distance. Locator decoding, by itself, reaches the BCH radius, which is the largest integer smaller than half of the BCH bound, but reaches the packing radius of the code only if the packing radius is equal to the BCH radius.
Codes based on the two-dimensional Fourier transform can be decoded by methods analogous to those methods discussed in Chapter 3 for decoding codes that are based on the one-dimensional Fourier transform, such as the Reed–Solomon codes and other BCH codes. Just as for decoding one-dimensional cyclic codes, the task of finding the errors may be divided into two subtasks: finding the locations of the errors, then finding the magnitudes of the errors. In particular, the family of locator decoding algorithms introduces the notion of a bivariate error-locator polynomial, Λ(x, y), into one step of the decoding. However, we no longer have the neat equality that we had in one dimension between the degree of the locator polynomial Λ(x) and the number of its zeros. It now takes several polynomials to specify a finite number of bivariate zeros, and so, in two dimensions, we use the locator ideal instead of a locator polynomial as was used in one dimension. Now we have a neat equality between the number of zeros of the locator ideal {Λℓ(x, y) | ℓ = 1, …, L} and the area of the locator footprint.
The methods for decoding two-dimensional bicyclic codes can also be applied to the decoding of codes on curves. However, restricting a code to a curve in general increases the minimum distance. This means that the decoding algorithm must then be strengthened to reach the minimum distance of the code.
The geometric structure of a code over a finite field consists of a finite set of points in a finite vector space with the separation between any two points described by the Hamming distance between them. A linear code has the important property that every codeword sees the same pattern of other codewords surrounding it. A tabulation of all codeword weights provides a great deal of information about the geometry of a linear code. The number of codewords of weight ω in a linear code is equal to the number of codewords at distance ω from an arbitrary codeword.
Given any element, which we regard geometrically as a point, of the vector space, not necessarily a codeword, the task of decoding is to find the codeword that is closest to the given point. The (componentwise) difference between the given point and the closest codeword is the (presumed) error pattern. A bounded-distance decoder corrects all error patterns of weight not larger than some fixed integer τ, called the decoding radius. A bounded-distance decoder usually uses a decoding radius equal to the packing radius t, though this need not always be true. In this chapter, we shall study both the case in which τ is smaller than t and the case in which τ is larger than t, though the latter case has some ambiguity. In many applications, a bounded-distance decoder is preferred to a complete decoder.
This book began as notes for a collection of lectures given as a graduate course in the summer semester (April to July) of 1993 at the Swiss Federal Institute of Technology (ETH), Zurich, building on a talk that I gave in Brazil in 1992. Subsequently, in the fall of 1995 and again in the spring of 1998, the course notes were extensively revised and expanded for an advanced topics course in the Department of Electrical and Computer Engineering at the University of Illinois, from which course has evolved the final form of the book that appears here. These lectures were also given in various forms at Eindhoven University, Michigan Technological University, Binghamton University, Washington University, and the Technical University of Vienna. The candid reactions of some who attended these lectures helped me greatly in developing the unique (perhaps idiosyncratic) point of view that has evolved, a view that insists on integrating recent developments in the subject of algebraic codes on curves into the classical engineering framework and terminology of the subject of error-control codes. Many classes of error-control codes and their decoding algorithms can be described in the language of the Fourier transform. This approach merges much of the theory of error-control codes with the subject of signal processing, and makes the central ideas more readily accessible to the engineer.
An ideal in the ring F[x, y] is defined as any set of bivariate polynomials that satisfies a certain pair of closure conditions. Examples of ideals can arise in several ways. The most direct way to specify concretely an ideal in the ring F[x, y] is by giving a set of generator polynomials. The ideal is then the set of all polynomial combinations of the generator polynomials. These generator polynomials need not necessarily form a minimal basis. We may wish to compute a minimal basis for an ideal by starting with a given set of generator polynomials. We shall describe an algorithm, known as the Buchberger algorithm, for this computation. Thus, given a set of generator polynomials for an ideal, the Buchberger algorithm computes another set of generator polynomials for that ideal that is a minimal basis.
A different way of specifying an ideal in the ring F[x, y] is as a locator ideal for the nonzeros of a given bivariate polynomial. We then may wish to express this ideal in terms of a set of generator polynomials for it, preferably a set of minimal polynomials. Again, we need a way to compute a minimal basis, but starting now from a different specification of the ideal. We shall describe an algorithm, known as the Sakata algorithm, that performs this computation.
Now that we have studied the ring of bivariate polynomials and its ideals in some detail, we are nearly ready to resume our study of codes. In Chapter 10, we shall construct linear codes as vector spaces on plane curves. This means that the components of the vector space are indexed by the points of the curve. Over a finite field, a curve can have only a finite number of points, so a vector space on a curve in a finite field always has a finite dimension.
Before we can study codes on curves, however, we must study the curves themselves. In this chapter, we shall study curves over a finite field, specifically curves lying in a plane. Such curves, called planar curves or plane curves, are defined by the zeros of a bivariate polynomial. We shall also study vectors defined on curves – that is, vectors whose components are indexed by the points of the curve – and the weights of such vectors. Bounds on the weight of a vector on a curve will be given in terms of the pattern of zeros of its two-dimensional Fourier transform. These bounds are companions to the bounds on the weight of a vector on a line, which were given in Chapter 1, and bounds on the weight of an array on a plane, which were given in Chapter 4.