23. Transport service
org.arl.unet.Services.TRANSPORT
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.
[org.arl.unet.DatagramParam]
MTU ⤇ 16777215
RTU ⤇ 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 enablingreliability
at the LINK service provider (if it offers such a parameter). -
reportProgress
-
Setting this parameter to
true
asks thetransport
agent to send out periodicDatagramProgressNtf
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.reportProgress = true;
> transport << new DatagramReq(to: 31, data: new byte[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] >>> |