Subject: [rohc] More DAP application ramblings...

From: "West, Mark (ITN)" <[email-masked]>
Date: Thu, 6 Feb 2003 17:32:40 -0000

Hi all,

I thought that it might be worth (at the risk of running this into the ground) listing a couple of example message flows so that we can hopefully agree on how things might work at the application layer...

I'll base this on the sender-centric view, and to start with I'll assume an 'active' sender (controlling the test) and a 'passive' receiver (doing what the sender tells it to).

(note:
  NR = need-response
  AU = message-auth
  MS = message-seq)

Thus, we have the trivial case of A as the active sender and B as the passive receiver doing a simple exchange with a message and a response:

A                                    B
|---- Comp=A:3, NR=T, AU=A, MS=1 --->|
|                                    |
|<--- Comp=B:3, NR=F, AU=A, MS=1 ----|
|                                    |

I assume, although I don't think that it is explicit in DAP, that the message sequence is echoed in the returned header?  This allows scenarios (still sender-driven) like the following to work properly:

A                                    B
|                                    |
|---- Comp=A:3, NR=T, AU=A, MS=1 --->|
|                                    |
|---- Comp=A:3, NR=T, AU=A, MS=2 --->|
|                                    |
| X<- Comp=B:3, NR=F, AU=A, MS=1 ----|
|                                    |
|<--- Comp=B:3, NR=F, AU=A, MS=2 ----|
|                                    |
|---- Comp=A:3, NR=T, AU=A, MS=1 --->|
|                                    |

and the application at endpoint A knows which message to retransmit (if that's what it wants to do...)

It's clear that this can cover a wide variety of test cases.  There's one issue that I'll return to at the end of the mail, though.

Now consider the case where we have two active senders - both A and B are controlling things.  This can actually work fine, but we need to be careful about compartment ID spaces, otherwise we get a situation such as:

A                                    B
|                                    |
|---- Comp=A:1, NR=T, AU=A, MS=1 --->| } simultaneous
|<--- Comp=B:1, NR=T, AU=A, MS=1 ----| } (i.e. messages cross)
|                                    |

Now, A will think B's message is a response to its message (although it isn't) and vice versa!  However, if the compartment ID spaces are disjoint, both sides can control their own flow(s) and it all works just fine:

A                                    B
|                                    |
|---- Comp=A:1, NR=T, AU=A, MS=1 --->| } simultaneous
|<--- Comp=B:7, NR=T, AU=A, MS=1 ----| } (i.e. messages cross)
|                                    |
|<--- Comp=B:1, NR=F, AU=A, MS=1 ----|
|---- Comp=A:7, NR=F, AU=A, MS=1 --->|
|                                    |

How about the case with 2 active senders that share a compartment?  Is this desirable?  Well, I think it raises some issues...

A                                    B
|                                    |
|---- Comp=A:3, NR=T, AU=A, MS=1 --->|
|                                    |
|<--- Comp=B:3, NR=?, AU=?, MS=? ----|
|                                    |
|---- Comp=A:3, NR=?, AU=?, MS=? --->|
|                                    |

A sends a message to B.  Fine!  B responds to A, but is also acting as an active sender.  
So B can ask for a response (but A might be planning to send one anyway!).  B can also indicate whether the message should be accepted or not, but A has its own plan for whether to accept the message.  Should B echo A's message sequence (so A knows what it's a response to), or should it put its own number in?  The same applies to A's next message.  

I think that the responses have to be kept distinct, so we get:

A                                    B
|                                    |
|---- Comp=A:3, NR=T, AU=A, MS=1 --->|
|                                    |
|<--- Comp=B:3, NR=F, AU=A, MS=1 ----| [response to A]
|<--- Comp=B:3, NR=T, AU=A, MS=7 ----| [B initiated message]
|                                    |
|---- Comp=A:3, NR=T, AU=A, MS=2 --->| [A initiated message]
|---- Comp=A:3, NR=F, AU=A, MS=7 --->| [response to B]
|                                    |

And finally (phew!), I'd just like to consider if this case is interesting and, if so, how can it be tested:

A                                    B
|                                    |
|---- Comp=A:3, NR=T, AU=A, MS=1 --->|
|                                    |
|<--- Comp=B:3, NR=?, AU=A, MS=1 ----|
|                                    |
|---- Comp=A:3, NR=F, AU=A, MS=2 ->X |
|                                    |
|<--- Comp=B:3, NR=?, AU=A, MS=1 ----|
|                                    |

So, the test is A sends a message to B and gets a response.  A responds, but this message is lost and B should retransmit its message.  It sounds like B should be an active sender, but this has problems, as outlined above.

I don't know if this is a distinct test case - since if you cut out the first message (from A to B), you can write this as a test with B as the single active sender.  But, to do it as written requires B to be at least 'semi-active'!

(There are other examples where it would be nice for B to be able to send multiple messages in response to A, for example, but I'll save describing these for the sake of brevity!)

I hope that this helps more than it hinders, but..!

;-)

Mark.

-- 
Mark A. West, Consultant Engineer
Roke Manor Research Ltd., Romsey, Hants.  SO51 0ZN
Phone +44 (0)1794 833311   Fax  +44 (0)1794 833433
_______________________________________________
Rohc mailing list
[email-masked]
https://www1.ietf.org/mailman/listinfo/rohc