Service primitivesA service is formally by a set of primitives or operations a user or other entities can invoke to access the service. That is what materializes an interface. We commonly classify service primitives into 4 classes:
|request||an entity is requesting a service (we are requesting a connection to a remote computer)|
|indication||an entity is informed of an event (the receiver has just received a connection request)|
|response||an entity is responding to an event (the receiver is sending the permission to connect)|
|confirm||an entity acknowledges the response to its request (the sender acknoledge the permission to connect to the remote host)|
A acknowledged service is a service that requires a request, an indication, a response and a confirm. A unacknowledged service is a service that requires only a request and an indication. Typically, the service that establishes a connection is an acknowledged service because the peer entity must agree to set the connection. On the other hand, data transmission may be an unacknowledged service, whether we want an acknowledgement or not.
On an implementation point of view, primitives correspond to functions we can use in a program to access a given service.
services/protocols relationsA service is a set of primitives a layer provides to the upper layer. The service defines the operations a layer may realize, but it does not tell how these operations are really realized. The most characteristic element of a service is the interface between two adjacent layers.
Conversely, a protocol is a set of rules that applies to the meaning and format of messages exchanged between two peer entities. Entities uses protocols to implement service specifications. A service may therefore remain the same with two different protocols.
Protocols and services are different, but they are close to each other. We must not confuse. A service is rather an abstract notion, although the protocol corresponds to what really happens. This distinction actually answers to modern programming and implementation requirements. It is equivalent to making the distinction between an algorithm and its implementation.
connection-oriented services and connectionless services
The connection-oriented service requires a connectio to be set between two points. The receiver then expects the sender to transmit data. At the end of the transmission, the connection is stopped. Such a service is for example the telephone: to use it, we must first take of the hook, and dial a number. The called person picks up the phone and the connection is then set. The two speakers converse until they hang up.
The connectionless service is characterized by the independance of transmitted messages. Someone can receive a message without being aware of it. Messages can then follow different routes. The consequence is that we can receive messages in an inverted order. The typical example for this kind of service is the mail system: someone writes a letter and sends it without warning the addressee. This letter may then arrive after a second letter the same guy may have sent to the same addressee. Routes followed by these two letters may be different.