Better to know some
... than all
The Presentation Layer
Applications use a variety of forms of data, ranging in complexity from very simple (e.g., textual) to elaborate and complex (e.g., nested data structures). Communication between applications involves the exchange of such data. However, all forms of data have inherent programming language and machine dependencies, which means that unless application data is accurately converted to a format acceptable by the peer application, the meaning of the data will be lost during transmission.
The role of the presentation layer is to facilitate semantic-preserving data exchange between two peer applications. The presentation layer achieves this in two stages:
(i) by having the two peer applications adopt a common high-level syntax for data definition
(ii) by negotiating a transfer syntax for the sole purpose of transmission, which both applications can convert to and from.
We will first look at the notion of abstract data syntax, and then describe presentation service primitives and functional units. ASN.1 will be presented as a standard abstract syntax definition notation for the use of applications, together with BER for defining data at the binary level. Use of ASN.1 and BER will be illustrated using some simple examples.
The notion of syntax is central to understanding the presentation services. This is discussed below first, followed by a description of presentation service primitives and service functional units.
Data is structured according to a set of rules, called syntax. Depending on their level of abstraction, syntax rules may be classified into two categories: abstract and concrete. Abstract syntax is a high-level specification of data which makes no assumptions about its machine representation. Abstract syntax describes the essential characteristics of data in general terms. Concrete syntax, on the other hand, is a low-level (bit-level) specification of data according to some specific machine representation. In general, a concrete syntax is derived from an abstract syntax by applying a set of encoding rules to the latter. It follows that there is a one-to-many mapping between the abstract syntax of some data and its concrete syntaxes, that is, the same data can be represented in many different formats.
Concrete syntax is essential wherever data is to be digitally stored or communicated. In general, each system has its own concrete syntax which may be different to the concrete syntax of other systems. Two communicating applications running on two such systems would have to convert their data into a common concrete syntax to facilitate transmission. We will use the terms application concrete syntax and transfer concrete syntax to distinguish between these two syntaxes. To preserve the characteristics of the data which is subject to transformation, the two applications should standardize on the same abstract syntax notation.
As mentioned in the previous chapter, the presentation layer is transparent to the exchanges taking place between the application and session layers for structuring application communication. Consequently, each session layer service primitive is represented by a corresponding presentation layer primitive. The presentation layer adds functionality to four of the session service primitives and provides a new primitive. The remaining service primitives are identical in functionality to their session layer counterparts.
A choice of syntaxes is made through negotiation between peer applications at connection time. Applications negotiate and agree on the abstract syntaxes for all data which is subject to transfer. For each abstract syntax S, they should also agree on a corresponding transfer syntax T. The combination of S and T is called a presentation context. In most cases, more than one presentation context is used for the same presentation connection. The set of all such contexts is called the defined context set. Applications also negotiate a default context, which is used when the defined context set is empty.
A presentation connection is directly mapped onto a session connection. Most of the presentation service primitives are mapped directly and unchanged onto corresponding session primitives. Conversion between application concrete syntaxes and the transfer concrete syntax is managed by the presentation layer. All transferred data is tagged by the transmitting end to enable the receiving end to determine its presentation context. This enables the latter to correctly map the bit strings into meaningful data for use by the receiving application.
The available presentation functional units, which includes all of the session functional units. Kernel represents a mandatory subset of services which all presentation layer implementations must provide.