Computer Networking : Principles, Protocols and Practice

Transport layer

«  Routing protocols   ::   Contents   ::   Sharing resources  »

Transport layer

Warning

This is an unpolished draft of the second edition of this ebook. If you find any error or have suggestions to improve the text, please create an issue via https://github.com/obonaventure/cnp3/issues?milestone=2

The transport services

  1. The services play an important role in computer networks since they define what the user can really expect. Selection all the correct affirmations about the connectionless network service ?
The connectionless network service can transfer SDUs of limited size
The connectionless network service may deliver corrupted SDUs at their destination

The connectionless network service can only transfer SDUs of fixed size

The connectionless network will always deliver SDUs in order at their destination.
The connectionless network service will never deliver twice the same SDU to a given destination.
The connectionless network service may deliver the same SDU several times to a given destination.
The connectionless network service may never deliver some SDUs to their destination.
  1. The connection-oriented service is perhaps the most widely used transport service. The interactions between the user of the service and the underlying protocol can be represented as the exchange of various primitives. Considering the interactions between a user of the connection-oriented transport service and its provider, which of the following affirmations are correct ? Select all the correct ones.
A Connect.request primitive is issued by the user to request the establishment of a connection
To confirm the establishment of a connection, a user responds to a Connect.response primitive by issuing a Connect.response
The service provider issues a Connect.indication primitive to indicate that it has received a connection establishment attempt.
To refuse the establishment of a connection, a user responds to a Connect.indication primitive with a Disconnect.request primitive
To refuse the establishment of a connection, a user responds to a Connect.indication primitive with a Disconnect.indication primitive
A user that has initiated a connection cannot issue a Data.request before having received a Connect.confirm primitive
A user that has initiated a connection can issue a Data.request after having issued the Connect.request primitive.
A user that has received a Connect.indication primitive can immediately issue Data.request primitives to send data over the connection.
A user that has accepted a connection can issue a Data.request immediately after having issued the Connect.response primitive.
A user that has accepted a connection cannot issue a Data.request until the delivery of a Connect.confirm to the connection initiator.
A Connect.request primitive issued by a user can be followed by a Disconnect.indication issued by the service provider.
A Connect.request primitive issued by a user is always followed by a Connect.confirm issued by the service provider.
A service provider may issue a Disconnect.indication primitive on an established connection at any time.
  1. Consider the connection-oriented transport service. Among the following affirmations about this service, select the ones that are correct.
With a message-mode service, each Data.request issued by one user will lead to a Data.indication at the other end.
With a bytestream service, each Data.request issued by one user will lead to a Data.indication at the other end.
A transport service provider may issue a Disconnect.indication at any time to terminate a connection.
A transport service provider will only issue a Disconnection.indication after having received a Disconnect.request from the other user.
An abrupt connection release may cause some SDUs to be discarded.
An abrupt connection release may cause some SDUs to be corrupted.
When a user issues a graceful Disconnect.req, only one direction of transfer is closed.

A transport service provider may itself issue a Disconnect.indication to gracefully terminate a connection.

A user may issue a Data.request after having received a graceful Disconnect.indication
A user may issue a Data.request after having issued a graceful Disconnect.request
A transport service provider may issue a Data.indication primitive to a user after having received a graceful Disconnect.request from this user.
  1. Which of the following affirmations correspond to the behaviour of the network layer ? Select all the correct ones.
The network layer may loose packets
The network layer may modify the content of packets
The network layer always deliver packets in sequence
The network layer will never deliver a given packet twice
The network layer may deliver the same packet several times to a given destination
  1. Which of the following mechanisms are likely to be used inside a protocol that provides the unreliable connectionless transport service running on top of an unreliable connectionless network layer. ? Select all the applicable mechanisms.

A checksum to detect transmission errors.

A CRC to detect transmission errors.

Port numbers to identify the communicating applications.

Sequence numbers to detect out-of-order data.

A retransmission timer to retransmit lost data.

A connection establishment mechanism.

Go-back-n.

Selective repeat.

  1. The three-way handshake allows to negotiate successfully the establishment of a transport connection. Among the following time-sequence diagrams, which is the one that corresponds to a valid three-way handshake ?

msc {
a [label="", linecolour=white],
b [label="Host A", linecolour=black],
z [label="", linecolour=white],
c [label="Host B", linecolour=black],
d [label="", linecolour=white];
a=>b [ label = "CONNECT.req()" ] ,
b>>c [ label = "CR(seq=1341)", arcskip="1"];
c=>d [ label = "CONNECT.ind()" ];
d=>c [ label = "CONNECT.resp()" ],
c>>b [ label = "CA(ack=1341,seq=2141)", arcskip="1"];
b=>a [ label = "CONNECT.conf()" ];
b>>c [ label = "CA(seq=1341,ack=2141)", arcskip="1"];
|||;
}

msc {
a [label="", linecolour=white],
b [label="Host A", linecolour=black],
z [label="", linecolour=white],
c [label="Host B", linecolour=black],
d [label="", linecolour=white];
a=>b [ label = "CONNECT.req()" ] ,
b>>c [ label = "CR(seq=1341)", arcskip="1"];
c=>d [ label = "CONNECT.ind()" ];
d=>c [ label = "CONNECT.resp()" ],
c>>b [ label = "CA(ack=1,seq=2)", arcskip="1"];
b=>a [ label = "CONNECT.conf()" ];
b>>c [ label = "CA(seq=1,ack=2)", arcskip="1"];
|||;
}

msc {
a [label="", linecolour=white],
b [label="Host A", linecolour=black],
z [label="", linecolour=white],
c [label="Host B", linecolour=black],
d [label="", linecolour=white];
a=>b [ label = "CONNECT.req()" ] ,
b>>c [ label = "CR(seq=2141)", arcskip="1"];
c=>d [ label = "CONNECT.ind()" ];
d=>c [ label = "CONNECT.resp()" ],
c>>b [ label = "CA(ack=2141,seq=1341)", arcskip="1"];
b=>a [ label = "CONNECT.conf()" ];
b>>c [ label = "CA(seq=2141,ack=1341)", arcskip="1"];
|||;
}

msc {
a [label="", linecolour=white],
b [label="Host A", linecolour=black],
z [label="", linecolour=white],
c [label="Host B", linecolour=black],
d [label="", linecolour=white];
a=>b [ label = "CONNECT.req()" ] ,
b>>c [ label = "CR(seq=2141)", arcskip="1"];
c=>d [ label = "CONNECT.ind()" ];
d=>c [ label = "CONNECT.resp()" ],
c>>b [ label = "CA(ack=1341,seq=2141)", arcskip="1"];
b=>a [ label = "CONNECT.conf()" ];
b>>c [ label = "CA(seq=2141,ack=2141)", arcskip="1"];
|||;
}

msc {
a [label="", linecolour=white],
b [label="Host A", linecolour=black],
z [label="", linecolour=white],
c [label="Host B", linecolour=black],
d [label="", linecolour=white];
a=>b [ label = "CONNECT.req()" ] ,
b>>c [ label = "CR(seq=2141)", arcskip="1"];
c=>d [ label = "CONNECT.ind()" ];
d=>c [ label = "CONNECT.resp()" ],
c>>b [ label = "CA(ack=2141,seq=1341)", arcskip="1"];
b=>a [ label = "CONNECT.conf()" ];
b>>c [ label = "CA(seq=2141,ack=2141)", arcskip="1"];
|||;
}

  1. The three-way handshake allows to negotiate successfully the establishment of a transport connection. Consider a transport connection that begins which the exchange of two segments as shown in the figure below.

    msc {
a [label="", linecolour=white],
b [label="Host A", linecolour=black],
z [label="", linecolour=white],
c [label="Host B", linecolour=black],
d [label="", linecolour=white];
a=>b [ label = "CONNECT.req()" ] ,
b>>c [ label = "CR(seq=12345)", arcskip="1"];
c=>d [ label = "CONNECT.ind()" ];
d=>c [ label = "CONNECT.resp()" ],
c>>b [ label = "CA(seq=56789,ack=12345)", arcskip="1"];
b=>a [ label = "CONNECT.conf()" ];
|||;
}

Consider what happens after the exchange of these two segments. Only one of the affirmations below is correct. Which one ?

If Host B receives CR(seq=12345), it will respond with CA(seq=56789,ack=12345)
If Host B does not receive CA(seq=12345,ack=56789) after some time, it will retransmit CA(seq=56789,ack=12345).

If Host B receives again CR(seq=12345), it will discard the duplicate segment.

If Host B receives again CA(seq=56789,ack=12345), it will discard the duplicate segment. .. comment:: This is incorrect. If Host A receives twice the same CA segment, this likely indicates that the first CA reply that it sent was lost. The correction reaction is to retransmit the CA segment.

At this stage, the connection is established and all CA segments that arrive should be considered as duplicate and discarded.

Verify your answers

«  Routing protocols   ::   Contents   ::   Sharing resources  »