22. Transport service

org.arl.unet.Services.TRANSPORT

22.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 13 ), 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.

22.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
<<< SWTransport >>>

[org.arl.unet.DatagramParam]
  MTU = 16777215

[org.arl.unet.transport.SWTransportParam]
  dsp = router
  maxHops = 3
  maxRetries = 2
  reportProgress = false
  timeoutPerHop = 90.0

We briefly explain each parameter below:

dsp

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

maxHops

Maximum number of hops expected to destination nodes.

maxRetries

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).

reportProgress

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.

timeoutPerHop

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 << new DatagramReq(to: 31, data: new float[2048], reliability: true)
AGREE
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] >>>