TAPS Flashcards
What is the main problem with the current transport layer that motivates TAPS?
Applications, routers, the internet expect precisely the behaviour of TCP and UDP which makes it unchangeable. (ossified)
What approach does TAPS use to decouple applications from protocols?
They have done research to find the minimum set of transport services needed among the services that IETF transport protocols offer. Once this is known, how to implement TAPS can be specified.
What does it mean that the TAPS api is “protocol independent”?
A connections can be all kinds of things, e.g. UDP, TCP, SCTP or a QUIC stream for instance.
What are the basic characteristics of the TAPS API?
- Protocol- independent: Anything could be running underneath a “connection”.
- Call- back based: You register callback functions for certain events.
- Message oriented: You call connection.Send(msg, …)
What is a Preconnection?
It lets you configure a bunch of stuff before connecting.
What are examples of things that can be configured in the preconnection phase?
- Whether connection should support reliable data transfer.
- Configure per message reliability.
- Whether ordering is neccessary.
- Whether connection should be congestion controlled.
Generic Connection Properties: - Timeout
- Priority
- Capacity Profile
How can you let the TAPS API handle framing and deframing between stream of bytes and app- identified messages?
You can register Framer and Deframer callbacks via the Preconnection.
How does receiving data work?
It is event- based, when data is received an event is fired and then you can handle it.
What features are there for sending data?
Along with the message itself, you can send a messageContext which can inform about e.g:
- Lifetime
- Priority
- Ordered
- Idempotent
- Final (last message of connection)
- Corruption protection length
- Reliable data transfer
- Transmission profile
- Singular transmission (avoid fragmentation)
You can also get events when the transport layer actually sends the message, or batch sends and also partial sends for large messages.
How does closing and aborting connections work?
close() will finish sending message that need reliability, but may not always invoke a “Closed” event on the other side.
abort() doesn’t finish sending any messages.
The receiver can also be informed about ECN, Early Data or Final message through a messageContext object.