Re: Question related to ROHC-TCP Profile

Raffles <[email protected]>
Newsgroups gmane.ietf.rohc
Message-ID <[email protected]>
Hi,

Thanks for this. Although involved peripherally with RFC 4996 (due to
its connection with RFC 4997) I must repeat that I am not an expert on
RFC 4996. The below quote from 4996 is something which I had missed =(
Before reading your message I had thought that the only way to use ack
number scaling was if the compressor and decompressor at the same end
of the link talked to each other.

In the absence of a connection between the compressor and decompressor
at the same end of the link (and I must repeat I am not an expert), it
seems to me that there are two obvious approaches. One approach would
be to fix the scaling factor to a constant value based on the expected
usage of the link. For example if large file transfers are the norm it
could be fixed based on the MTU, or if VOIP was the norm it could be
based on the typical size of a VOIP packet. This is pretty limited in
effectiveness, depending on how uniform traffic tends to be, but it
should allow some benefit to be gained from ack-number scaling.

A more effective approach would be to observe the delta between the ack
numbers being used for subsequent packets, and set the scaling factor
based on this, retransmitting the ack_stride when it changes. However,
re-transmitting the ack_stride to the other end of the link is
expensive. The packet formats which communicate it are large (e.g.
tcp_dynamic, tcp_replicate, co_common). There is no point in using the
scaled ack number unless the flow has bursts of uniform sized packets
which result in an overall saving. If there are no such bursts then it
is cheaper to stick to formats such as rnd_3, which encode the
ack_number using lsb. Comparing rnd_4 to rnd_3 we see that rnd_4 saves
1 byte per packet by using ack number scaling (rnd_4 is 2 bytes long,
rnd_3 is 3 bytes long, 50% longer). Looking at co_common, we see it is
40 bits minimum plus 16 bits for the ack_stride is 56 bits, 7 bytes
(this ignores the other fields which may also be transmitted). This 7
bytes is 4 bytes longer than rnd_3, so we need a burst of at least 5
packets of the same size for the rnd_4 scaled ack number format to give
us a saving. Bearing this in mind I would suggest that the ack_stride
is only retransmitted after several packets have been seen where the
ack_stride has not changed. This is just a suggestion as to how I might
tackle this if I had to do it myself - I am sure you will come up with
ideas of your own.

I don't think I am likely to be able to help any further with this. I
will contact Mark, Ghyslain and Kris directly to see if I can get them
to respond on the list to this as I suspect that they are probably busy
with other things and not reading the list particularly closely at
present. In the meantime, L-E as a co-author of 4996, could you check
whether what I've said makes any sense?

Regards

Raffles

Gurushant wrote:

Hi Raffles,

Thanks for your detailed explanation. I
understand that, the Compressor needs to send the scaling factor to
Decompressor.But my doubt is what value the compressor will send as
scaling factor is the point of discussion.

As RFC 4996 says,

"The compressor MAY use the scaled acknowledgment number
encoding;what
value it will use as the scaling factor is up to the compressor implementation. In the case
where there is a co-located decompressor processing packets of the same TCP flow in the
opposite direction,the
scaling factor for the sequence number used for that flow can be used by the compressor to
determine a suitable scaling factor for the TCP Acknowledgment number for this flow"

In this case if Compressor tried to
determine scaling factor, then there is has to be interface between the
co located compressor and Decompressor. This kind of implementation
make mandatory to have interface between the Compressor and
De-compressor( colocated). There is design possibility, that interface
between the collocated compressor and Decompressor may not exist. Hence
for the compressor it is difficult determine the scaling factor from
the colocated Decompressor TCP sequence number for that flow in
opposite direction.

So I am thinking is there any other value
to determine the scaling factor in the compressor, so that we avoid the
interface between the colocated compressor and decompressor.

Thanks & Best Regards

Gurushant.Kotagi

-----Original Message-----

From: [email protected] [ mailto:[email protected] ]On
Behalf Of Raffles

Sent: Saturday, April 04, 2009 3:25 AM

To: pradeep shambhu

Cc: [email protected]

Subject: Re: [rohc] Question related to ROHC-TCP Profile

Hi,

Apologies, I did not take enough time answering previously and gave you
an answer which didn't quite make sense, being a combination of scaled
sequence number and scaled ack number! The answer was close but not
quite right. Thank you for bearing with me - I hope that at some point
one of the 4997 authors will chip in (ahem Mr. West, Ghyslain, Kris,
L-E). In the meantime here is another attempt at an answer from me. I
have just left Roke today having initially walked through the door 20
years ago and am currently celebrating, so there is a danger the below
may not be entirely accurate, but I'll do my best.

The scaling factor for the ack number is set by the other end of the
link sending it directly (ack_stride). Prior to receiving the
ack_stride from the other end, the ack_stride is initialised to zero to
prevent it being used (see the INITIAL section of the tcp encoding
method). In order to be able to use ack_stride it MUST have been
received from the other end of the link, with the other end sending a
packet to indicate its value.

I hope this helps, please do ask more questions if this does not help.

Regards

Raffles

PS Why am I checking the RoHC list in the middle of leaving drinks?!

pradeep shambhu wrote:

Hi,

Thanks for the response, I agree with your understanding that
scaled sequence number cannot be calculated without scaling factor. But
for scaled acknowledgement number, the compressor / decompresser pair
might not be available the information of scaling factor , because
packets are flowing in the opposite direction.

And initially for IR packets its difficult to get the scaling factor
for acknowledgement number. because scaling factor will not available.
Since TCP-SYN Packets will not have payload and until connection
established its unable to compress the packet.

So how to set scaling factor ? Do we need to calculate it by
subtracting from Packet size of packet received by the decompresser
side with value 1.Clarify the details.

Thanks and regards,

Pradeep Shambhu

On Thu, Apr 2, 2009 at 11:28 PM, Raffles
<[email protected] >
wrote:

Hi,

Thanks for the question. I must confess I was only involved in RFC 4996
peripherally, RFC 4997 was my main focus. However, my understanding is
that you are half right. The scaled sequence number cannot be used
until the scaling factor is known. This means that any formats which
use the scaled sequence number cannot be used until the transmitted
scaling factor has been received from the other end of the link.
Instead a format which encodes the sequence number directly must be
used. For example compressed format rnd_1 may be suitable if all the
other encodings succeed:

// Send LSBs of sequence number
COMPRESSED rnd_1 {
discriminator =:= '101110' [ 6 ];
seq_number =:= lsb(18, 65535) [ 18 ];
msn =:= lsb(4, 4) [ 4 ];
psh_flag =:= irregular(1) [ 1 ];
header_crc =:= crc3(THIS.UVALUE, THIS.ULENGTH) [ 3 ];
ENFORCE((ip_id_behavior.UVALUE == IP_ID_BEHAVIOR_RANDOM) ||
(ip_id_behavior.UVALUE == IP_ID_BEHAVIOR_ZERO));
}

However, at the very start, even the above encoding won't work. The
"lsb" encoding won't work because the sequence number is not given an
initial value (see the INITIAL section), so the context will be
undefined. "lsb" encoding needs valid context in order to work. So,
there are three phases

1. Prior to context, a random encoding of sequence number must be used,
such as co_common, which encodes the sequence number without needing
any context

2. After context has been established but prior to receiving the
transmitted scaling factor from the other end of the link, any encoding
can be used that encodes the sequence number directly

3. After the scaling factor has been received from the other end of the
link, any encoding method can be used (of course a good implementation
would aim to use the most efficient encoding)

This is my best understanding after a quick look at 4996, but it is not
a definitive answer. Others on the list who know 4997 and/or TCP better
than I do may be able to confirm or deny whether the above is correct.

I hope this helps.

Regards

Raffles

pradeep shambhu wrote:

Hi,

In ROHC-TCP [4996] page no-33, Scaling factor will not be
available for scaled acknowledgement number , because packets are
flowing in the opposite direction. but how to use the explicit scaling
factor ? Do we need to take the random scaling factor value initially ?

----------

_______________________________________________
Rohc mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/rohc

--
Raffles (Robert Finking)
m: 0789 463 9887
e: [email protected]
w: gluft.com

O O
OOOOOO O O O OOOOOO OOOOO
O O O O O OOOOO O
OOOOOO O OOOOOO O O
OOOOOO
we care about software

-----------------------------------------------------------------
Gluft Ltd. Registered No.: 6795336
The information contained in this e-mail and any attachments is
proprietary to Gluft Ltd and must not be passed to any third
party without permission. This communication is for information
only and shall not create or change any contractual relationship.
Please consider the environment before printing this email.
-----------------------------------------------------------------

_______________________________________________
Rohc mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/rohc
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.