• The transport layer is responsible for
process-to-process delivery of the entire
• A process is an application program
running on the host machine.
• Network layer oversees the source to
destination delivery of individual packets
• It does not recognize any relationship
between those packets
• The transport layer ensures the whole message arrives
intact and in order, and oversees both error correction
and flow control.
• Computers often run several programs at the same time.
For this reason, source- to-destination delivery means
delivery not only from one computer to the next but also
from a specific process on one computer to a specific
process on the other.
• The transport layer header must therefore include a type
of address called a service-point address in the OSI
model and port number or port addresses in the Internet
and TCP/IP protocol
• A transport layer protocol can be either connectionless or
connection-oriented. A connectionless transport layer
treats each segment as an independent
• The data link layer is responsible for delivery of
frames between two neighboring nodes over a
link. This is called node-to-node delivery.
• The network layer is responsible for delivery of
datagrams between two hosts. This is called
• Communication on the Internet is not defined as
the exchange of data between two nodes or
between two hosts.
• Real communication takes place between two
processes (application programs).
• We need process-to-process delivery. However,
at any moment, several processes may be
running on the source host and several on the
• To complete the delivery, we need a
mechanism to deliver data from one of
these processes running on the source
host to the corresponding process running
on the destination host.
• The transport layer is responsible for
• Two processes communicate in a
Services Provided to the Upper
• The ultimate goal of the transport layer is to provide
efficient, reliable, and cost-effective service to its users,
normally processes in the application layer.
• To achieve this goal, the transport layer makes use of
the services provided by the network layer. The
hardware and/or software within the transport layer that
does the work is called the transport entity.
• The transport entity can be located in the operating
system kernel, in a separate user process, in a library
package bound into network applications, or conceivably
on the network interface card.
Services Provided to the Upper
• Just as there are two types of network service,
connection-oriented and connectionless, there are also
two types of transport service.
• The connection-oriented transport service is similar to
the connection-oriented network service in many ways.
• In both cases, connections have three phases:
establishment, data transfer, and release.
• Addressing and flow control are also similar in both
• Furthermore, the connectionless transport service is also
very similar to the connectionless network service.
• In the transport layer, application
programmers can write code according to
a standard set of primitives and have
these programs work on a wide variety of
networks, without having to worry about
dealing with different subnet interfaces
and unreliable transmission.
Transport Service Primitives
• To allow users to access the transport
service, the transport layer must provide
some operations to application programs,
that is, a transport service interface. Each
transport service has its own interface.
• There are some applications, such as
client server computing and streaming
multimedia, which benefit from
• For other applications it allows application
programs to establish, use, and then
release connections, which is sufficient for
The primitives for a simple
• Consider an application with a server and a number of
• To start with, the server executes a LISTEN primitive,
typically by calling a library procedure that makes a
system call to block the server until a client turns up.
• When a client wants to talk to the server, it executes a
• The transport entity carries out this primitive by blocking
the caller and sending a packet to the server.
• Encapsulated in the payload of this packet is a transport
layer message for the server's transport entity.
• TPDU (Transport Protocol Data Unit) for
messages sent from transport entity to
transport entity. Thus, TPDUs (exchanged
by the transport layer) are contained in
packets (exchanged by the network layer).
In turn, packets are contained in frames
(exchanged by the data link layer).
• The client's CONNECT call causes a CONNECTION
• REQUEST TPDU to be sent to the server. When it
arrives, the transport entity checks to see that the server
is blocked on a LISTEN (i.e., is interested in handling
• It then unblocks the server and sends a CONNECTION
ACCEPTED TPDU back to the client. When this TPDU
arrives, the client is unblocked and the connection is
• Data can now be exchanged using the SEND and
• In the simplest form, either party can do a (blocking)
RECEIVE to wait for the other party to do a SEND.
• When the TPDU arrives, the receiver is unblocked. It can
then process the TPDU and send a reply.
• As long as both sides can keep track of whose turn it is
to send, this scheme works fine.
• Note that at the transport layer, even a simple
unidirectional data exchange is more
complicated than at the network layer.
• Every data packet sent will also be
acknowledged (eventually). The packets bearing
control TPDUs are also acknowledged, implicitly
• These acknowledgements are managed by the
transport entities, using the network layer
protocol, and are not visible to the transport
• When a connection is no longer needed, it must be
released to free up table space within the two transport
• Disconnection has two variants: asymmetric and
• In the asymmetric variant, either transport user can issue
a DISCONNECT primitive, which results in a
DISCONNECT TPDU being sent to the remote transport
• Upon arrival, the connection is released.
• In the symmetric variant, each direction is closed
separately, independently of the other one.
• When one side does a DISCONNECT, that means it has
no more data to send but it is still willing to accept data
from its partner.
• In this model, a connection is released when both sides
have done a DISCONNECT.
• Each transition is triggered by some event,
either a primitive executed by the local
transport user or an incoming packet.
• For simplicity, we assume here that each
TPDU is separately acknowledged.
• We also assume that a symmetric
disconnection model is used, with the
client going first.
Elements of Transport Protocols
• The transport service is implemented by a
transport protocol used between the two
transport entities. In some ways, transport
protocols resemble the data link protocols
• Both have to deal with error control,
sequencing, and flow control, among other
• However, significant differences between
the two also exist.
• At the data link layer, two routers
communicate directly via a physical
channel, whereas at the transport layer,
this physical channel is replaced by the
• This difference has many important
implications for the protocols
(a)Environment of the data link layer. (b)
Environment of the transport layer.
• In the data link layer, it is not necessary for a router to
specify which router it wants to talk to—each outgoing
line uniquely specifies a particular router.
• In the transport layer, explicit addressing of destinations
• For another thing, the process of establishing a
connection over the wire is simple: the other end is
always there (unless it has crashed, in which case it is
not there). Either way, there is not much to do.
• In the transport layer, initial connection establishment is
more complicated, as we will see.
• Another, exceedingly annoying, difference between the
data link layer and the transport layer is the potential
existence of storage capacity in the subnet.
• When a router sends a frame, it may arrive or be lost,
but it cannot bounce around for a while, go into hiding in
a far corner of the world, and then suddenly emerge at
an inopportune moment 30 sec later.
• If the subnet uses datagrams and adaptive routing
inside, there is a nonnegligible probability that a packet
may be stored for a number of seconds and then
• The consequences of the subnet's ability to store
packets can sometimes be disastrous and can require
the use of special protocols.
• A final difference between the data link and transport
layers is one of amount rather than of kind. Buffering and
flow control are needed in both layers, but the presence
of a large and dynamically varying number of
connections in the transport layer may require a different
approach than we used in the data link layer.
• When an application (e.g., a user) process wishes to set up a
connection to a remote application process, it must specify which
one to connect to.
• (Connectionless transport has the same problem: To whom should
each message be sent?)
• The method normally used is to define transport addresses to which
processes can listen for connection requests. In the Internet, these
end points are called ports.
• In ATM networks, they are called AAL-SAPs. We will use the
generic term TSAP, (Transport Service Access Point).
• The analogous end points in the network layer (i.e., network layer
addresses) are then called NSAPs. IP addresses are examples of
TSAPs, NSAPs, and transport
How a user process in host 1 establishes a
a time-of-day server in host 2.
• While stable TSAP addresses work for a
small number of key services that never
change (e.g. the Web server), user
processes, in general, often want to talk to
other user processes that only exist for a
short time and do not have a TSAP
address that is known in advance.
• Furthermore, if there are potentially many
server processes, most of which are rarely
used, it is wasteful to have each of them
active and listening to a stable TSAP
address all day long.
• In short, a better scheme is needed.
• Instead of every conceivable server
listening at a well-known TSAP, each
machine that wishes to offer services to
remote users has a special process
• It listens to a set of ports at the same time,
waiting for a connection request. Potential
users of a service begin by doing a
CONNECT request, specifying the TSAP
address of the service they want.
• If no server is waiting for them, they get a
connection to the process server
• After it gets the incoming request, the
process server spawns the requested
server, allowing it to inherit the existing
connection with the user.
• The new server then does the requested
work, while the process server goes back
to listening for new requests
• While the initial connection protocol works fine
for those servers that can be created as they are
• There are many situations in which services do
exist independently of the process server.
• A file server, for example, needs to run on
special hardware (a machine with a disk) and
cannot just be created on-the-fly when someone
wants to talk to it.
• To handle this situation, an alternative scheme is often
used. In this model, there exists a special process called
a name server or sometimes a directory server.
• To find the TSAP address corresponding to a given
service name, such as ''time of day,'' a user sets up a
• connection to the name server (which listens to a wellknown TSAP).
• The user then sends a message specifying the service
name, and the name server sends back the TSAP
• Then the user releases the connection with the name
server and establishes a new one with the desired
• Establishing a connection sounds easy, but it is
actually surprisingly tricky. At first glance, it
• would seem sufficient for one transport entity to
just send a CONNECTION REQUEST TPDU to
• the destination and wait for a CONNECTION
ACCEPTED reply. The problem occurs when the
• network can lose, store, and duplicate packets.
• A user establishes a connection with a bank, sends
messages telling the bank to transfer a large amount of
money to the account of a not entirely-trustworthy
person, and then releases the connection.
• Unfortunately, each packet in the scenario is duplicated
and stored in the subnet.
• After the connection has been released, all the packets
pop out of the subnet and arrive at the destination in
order, asking the bank to establish a new connection,
transfer money (again), and release the connection.
• The bank has no way of telling that these are duplicates.
It must assume that this is a second, independent
transaction, and transfers the money again.
• A possibility is to give each connection a connection
identifier (i.e., a sequence number incremented for each
connection established) chosen by the initiating party
and put in each TPDU, including the one requesting the
• After each connection is released, each transport entity
could update a table listing obsolete connections as
(peer transport entity, connection identifier) pairs.
• whenever a connection request comes in, it could be
checked against the table, to see if it belonged to a
• Unfortunately, this scheme has a basic flaw: it requires
each transport entity to maintain a certain amount of
history information indefinitely.
• If a machine crashes and loses its memory, it will no longer know
which connection identifiers have already been used.
• Instead, we need to take a different tack. Rather than allowing
packets to live forever within the subnet, we must devise a
mechanism to kill off aged packets that are still hobbling about.
• If we can ensure that no packet lives longer than some known time,
the problem becomes somewhat more manageable.
• Packet lifetime can be restricted to a known maximum using one (or
more) of the following techniques:
1. Restricted subnet design.
2. Putting a hop counter in each packet.
3. Timestamping each packet.
• The first method includes any method that
prevents packets from looping, combined with
some way of bounding congestion delay over
the (now known) longest possible path.
• The second method consists of having the hop
count initialized to some appropriate value and
decremented each time the packet is forwarded.
• The network protocol simply discards any packet
whose hop counter becomes zero.
• The third method requires each packet to bear
the time it was created, with the routers agreeing
to discard any packet older than some agreed
• we will need to guarantee not only that a packet
is dead, but also that all acknowledgements to it
are also dead, so we will now introduce T, which
is some small multiple of the true maximum
• The multiple is protocol dependent and simply
has the effect of making T longer.
• If we wait a time T after a packet has been sent,
we can be sure that all traces of it are now gone
and that neither it nor its acknowledgements will
1. To get around the problem of a machine losing all
memory of where it was after a crash, Tomlinson
proposed equipping each host with a time-of-day clock.
2. The clocks at different hosts need not be synchronized.
3. Each clock is assumed to take the form of a binary
counter that increments itself at uniform intervals.
4. Furthermore, the number of bits in the counter must
equal or exceed the number of bits in the sequence
5. The clock is assumed to continue running even if the
host goes down.
• When a connection is set up, the low-order
k bits of the clock are used as the initial
sequence number (also k bits).
• Each connection starts numbering its
TPDUs with a different initial sequence
• The sequence space should be so large
that by the time sequence numbers wrap
around, old TPDUs with the same
sequence number are long gone.
• Once both transport entities have agreed on the
initial sequence number, any sliding window
protocol can be used for data flow control.
• A problem occurs when a host crashes. When it
comes up again, its transport entity does not
know where it was in the sequence space.
• One solution is to require transport entities to be
idle for T sec after a recovery to let all old
TPDUs die off.
• However, in a complex internetwork, T may be
large, so this strategy is unattractive.
• To avoid requiring T sec of dead time after a
crash, it is necessary to introduce a new
restriction on the use of sequence numbers.
• Let T, the maximum packet lifetime, be 60 sec
and let the clock tick once per second.
• the initial sequence number for a connection
opened at time x will be x.
• Imagine that at t = 30 sec, an ordinary data
TPDU being sent on (a previously opened)
connection 5 is given sequence number 80.
• Call this TPDU X.
• Immediately after sending TPDU X, the
host crashes and then quickly restarts.
• At t = 60, it begins reopening connections
0 through 4.
• At t = 70, it reopens connection 5, using
initial sequence number 70 as required.
• Within the next 15 sec it sends data TPDUs 70
• Thus, at t = 85 a new TPDU with sequence
number 80 and connection 5 has been injected
into the subnet.
• Unfortunately, TPDU X still exists. If it should
arrive at the receiver before the new TPDU 80,
TPDU X will be accepted and the correct TPDU
80 will be rejected as a duplicate.
• To prevent such problems, we must
prevent sequence numbers from being
used (i.e., assigned to new TPDUs) for a
time T before their potential use as initial
• The illegal combinations of time and
sequence number are shown as the
• Before sending any TPDU on any connection, the
transport entity must read the clock and check to see
that it is not in the forbidden region.
• The protocol can get itself into trouble in two distinct
ways. If a host sends too much data too fast on a newlyopened connection, the actual sequence number versus
time curve may rise more steeply than the initial
sequence number versus time curve.
• This means that the maximum data rate on any
connection is one TPDU per clock tick. It also means
that the transport entity must wait until the clock ticks
before opening a new connection after a crash restart
• Both of these points argue in favor of a short
clock tick (a few μsec or less).
• The clock-based method solves the delayed
duplicate problem for data TPDUs, but for this
method to be useful, a connection must first be
• Since control TPDUs may also be delayed, there
is a potential problem in getting both sides to
agree on the initial sequence number.
To solve this problem three-way
handshake is used.
• Now let us see how the three-way handshake works in
the presence of delayed duplicate control TPDUs.
• In the figure on last slide the first TPDU is a delayed
duplicate CONNECTION REQUEST from an old
• This TPDU arrives at host 2 without host 1's knowledge.
• Host 2 reacts to this TPDU by sending host 1 an ACK
TPDU, in effect asking for verification that host 1 was
indeed trying to set up a new connection.
• When host 1 rejects host 2's attempt to establish a
connection, host 2 realizes that it was tricked by a
delayed duplicate and abandons the connection. In this
way, a delayed duplicate does no damage.
• The worst case is when both a delayed CONNECTION
REQUEST and an ACK are floating around in the
• host 2 gets a delayed CONNECTION REQUEST and
replies to it. At this point it is crucial to realize that host 2
has proposed using y as the initial sequence number for
host 2 to host 1 traffic, knowing full well that no TPDUs
containing sequence number y or acknowledgements to
y are still in existence.
• When the second delayed TPDU arrives at host 2, the
fact that z has been acknowledged rather than y tells
host 2 that this, too, is an old duplicate.
• There are two styles of terminating a
connection: asymmetric release and
• Asymmetric release is abrupt and may
result in data loss.
• Clearly, a more sophisticated release
protocol is needed to avoid data loss. One
way is to use symmetric release, in which
each direction is released independently of
the other one.
• Here, a host can continue to receive data
even after it has sent a DISCONNECT
• There is a famous problem that illustrates
this issue. It is called the two-army
• If either blue army attacks by itself, it will
be defeated, but if the two blue armies
attack simultaneously, they will be
• The blue armies want to synchronize their
• we see the normal case in which one of the
users sends a DR (DISCONNECTION
REQUEST) TPDU to initiate the connection
• When it arrives, the recipient sends back a DR
TPDU, too, and starts a timer, just in case its DR
is lost. When this DR arrives, the original sender
sends back an ACK TPDU and releases the
• Finally, when the ACK TPDU arrives, the
receiver also releases the connection.
• If the final ACK TPDU is lost, as shown in Fig. 6-14(b), the situation
is saved by the timer.
• When the timer expires, the connection is released anyway.
• Now consider the case of the second DR being lost. The user
initiating the disconnection will
• not receive the expected response, will time out, and will start all
over again. In Fig. 6-14(c)
• we see how this works, assuming that the second time no TPDUs
are lost and all TPDUs are
• delivered correctly and on time.
• Our last scenario, Fig. 6-14(d), is the same as Fig. 6-14(c) except
that now we assume all the
• repeated attempts to retransmit the DR also fail due to lost TPDUs.
After N retries, the sender
• just gives up and releases the connection.
Flow Control and Buffering
• The main difference is that a router usually
has relatively few lines, whereas a host
may have numerous connections.
• This difference makes it impractical to
implement the data link buffering strategy
in the transport layer.
• if the network service is unreliable, the sender
must buffer all TPDUs sent, just as in the data
• However, with reliable network service, other
trade-offs become possible.
• In particular, if the sender knows that the
receiver always has buffer space, it need not
retain copies of the TPDUs it sends.
• However, if the receiver cannot guarantee that
every incoming TPDU will be accepted, the
sender will have to buffer anyway.
• Even if the receiver has agreed to do the buffering, there
still remains the question of the buffer size.
• If most TPDUs are nearly the same size, it is natural to
organize the buffers as a pool of identically-sized buffers,
with one TPDU per buffer. However, if there is wide
variation in TPDU size, from a few characters typed at a
terminal to thousands of characters from file transfers, a
pool of fixed-sized buffers presents problems.
• If the buffer size is chosen equal to the largest possible
TPDU, space will be wasted whenever a short TPDU
arrives. If the buffer size is chosen less than the
maximum TPDU size, multiple buffers will be needed for
long TPDUs, with the attendant complexity.
• If only one network address is available on
a host, all transport connections on that
machine have to use it.
• When a TPDU comes in, some way is
needed to tell which process to give it to.
This situation, called upward
• Multiplexing can also be useful in the transport
layer for another reason.
• Suppose, for example, that a subnet uses virtual
circuits internally and imposes a maximum data
rate on 390 each one.
• If a user needs more bandwidth than one virtual
circuit can provide, a way out is to open multiple
network connections and distribute the traffic
among them on a round-robin basis. This modus
operandi is called downward multiplexing.
• If hosts and routers are subject to crashes, recovery
from these crashes becomes an issue.
• If the transport entity is entirely within the hosts, recovery
from network and router crashes is straightforward.
• If the network layer provides datagram service, the
transport entities expect lost TPDUs all the time and
know how to cope with them.
• If the network layer provides connection-oriented
service, then loss of a virtual circuit is handled by
establishing a new one and then probing the remote
transport entity to ask it which TPDUs it has received
and which ones it has not received. The latter ones can