Replaces UDP. For both connectionless datagrams and connections where timely delivery is more important than delivering all packets in order.
Packet format:
Mandatory options:
Important options (should be present in any non-lightweight stack):
Optional options:
Application passes a name to swap packets with. Uses SNRP to find locators.
All packets have a packet ID and get an ack indicating ID received An ack-now bit in the header controls whether an ack packet is sent immediately or after a timeout. Acks are options in the packet. The packet may also contiain payload. The packet can contain multiple acks; each packet must be acked seperately. A packet containing only acks need not be acked. Also have an option to set the milliseconds delay before acking packets without the acknow bit.
Application gives the API a callback for when an ack is received. App must decide what to do about retransmission if the acks don't come back.
CLP pays attention to the acks. If it doesn't see expected acks, it tries later packets from the app via a different source/dest LOC. CLP also repolls SNRP as TTLs expire and shortly after LOCs appear to malfunction to keep a LOC set under the TTL.
If a LOC changes for the host and an app on the host is holding a CLP session open, the target of the CLP session should be sent a CLP packet with an option that says, "refresh my name to LOC map." On receiving such a packet, the CLP host should re-request the service name with the ignore cache bit set. It should continue using its existing knowledge until the request returns.
Initiator starts in anonymous mode and selects a random session ID. The server may reject the session ID and suggest an alternative. Or it may fail to respond at all on that LOC. If it does, the client should try again and retransmit any packets until the server and client agree on the session ID and find mutually acceptable LOCs. This is the only time that CLP's layer-4 should retransmit on its own.
In anonymous mode, the server will respond on any LOCs from which the client has sent packets. There is no authentication of the client LOCs.
If the connection proves long-lived, the client may provide a service name for itself. At that point, the server will look up the name to find the client's authoritative list of LOCs. Once received, it will no longer use any LOC not listed for the name nor accept packets with that SID from a LOC not listed in the service name.
The server may send an option asking the client to upgrade to a named connection. If received, the client should initiate the named link immediately rather than waiting to see if the link persists.
Can't have a receive window option because layer-4 doesn't know what the app will do about retransmission and doesn't know which packets are retransmissions of earlier ones.