23. Transport service


23.1. Overview

Agents offering the TRANSPORT service provide end-to-end reliability and fragmentation/reassembly for large datagrams. They may also support connection-oriented services for data streaming. Agents providing this service typically use the ROUTING service for multi-hop delivery of data.

All agents supporting the TRANSPORT service must also support the DATAGRAM service ( Chapter 14 ), along with the RELIABILITY and FRAGMENTATION capabilities. It is also recommended that they support the CANCELLATION and PROGRESS capabilities, since datagrams at this level are likely to be large.

There are no special messages or parameters defined by the TRANSPORT service, but agents providing this service may expose additional parameters to configure the transport protocol in use.

23.2. Stop-and-wait transport

The default implementation of the TRANSPORT service is the SWTransport class. If you start the 2-node network simulation and connect to node A, you can explore the configurable parameters that it advertises:

> transport
« Stop-and-wait transport »

Multi-hop transport service based on the stop-and-wait protocol.

  MTU ⤇ 16777215
  RTU ⤇ 16777215

  dsp = router
  maxHops = 3
  maxRetries = 2
  reportProgress = false
  timeoutPerHop = 90.0

We briefly explain each parameter below:


Datagram service provider. This is the agent that is used to deliver datagrams. Using router for this parameter enables multi-hop networks.


Maximum number of hops expected to destination nodes.


Maximum number of end-to-end retries, if end-to-end acknowledgements are not received. We recommend that link level reliability be enabled to reduce end-to-end retries. This is easily done by setting the reliability parameter for a route, or by enabling reliability at the LINK service provider (if it offers such a parameter).


Setting this parameter to true asks the transport agent to send out periodic DatagramProgressNtf messages to the requester (on the transmitting node) or on the agent’s topic (on the receiving node), when transferring large datagrams.


Timeout (in seconds) per hop, for datagram transfer.

Next, let’s try a 2048-byte datagram transfer from node A to node B with progress reports:

> transport.reportProgress = true;
> transport << new DatagramReq(to: 31, data: new byte[2048], reliability: true)
transport >> DatagramProgressNtf:INFORM[id:2 to:31 to:(838/2048 bytes, 40%)]
transport >> DatagramProgressNtf:INFORM[id:2 to:31 to:(1676/2048 bytes, 81%)]
transport >> DatagramProgressNtf:INFORM[id:2 to:31 to:(2048/2048 bytes, 100%)]
transport >> DatagramDeliveryNtf:INFORM[id:d76a56bf-58f6-4a9c-8a19-7a0a6ce8bcd4 to:31]

The entire transfer will take a few minutes. During that time, we get periodic DatagramProgressNtf reports showing how much of the data transfer was completed.

<<< [Routing and route maintenance] [Remote access] >>>