22. Transport service
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
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:
Datagram service provider. This is the agent that is used to deliver datagrams. Using
routerfor 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
reliabilityparameter for a route, or by enabling
reliabilityat the LINK service provider (if it offers such a parameter).
Setting this parameter to
transportagent to send out periodic
DatagramProgressNtfmessages 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 << new DatagramReq(to: 31, data: new float, 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
reports showing how much of the data transfer was completed.
|<<< [Routing and route maintenance]||[Remote access] >>>|